Files
SPT-Server-Build/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/HideoutSeed.cs
T
2025-07-31 15:23:32 +02:00

55 lines
1.6 KiB
C#

using System.Security.Cryptography;
using System.Text.Json.Nodes;
using SPTarkov.DI.Annotations;
using Range = SemanticVersioning.Range;
namespace SPTarkov.Server.Core.Migration.Migrations;
/// <summary>
/// In 0.16.1.3.35312 BSG changed this to from an int to a hex64 encoded value.
/// </summary>
[Injectable]
public class HideoutSeed : AbstractProfileMigration
{
public override string FromVersion
{
get { return "~3.10"; }
}
public override string ToVersion
{
get { return "3.11"; }
}
public override string MigrationName
{
get { return "HideoutSeed311-SPTSharp"; }
}
public override IEnumerable<Type> PrerequisiteMigrations
{
get { return []; }
}
public override bool CanMigrate(JsonObject profile, IEnumerable<IProfileMigration> previouslyRanMigrations)
{
var profileVersion = GetProfileVersion(profile);
var fromRange = Range.Parse(FromVersion);
var profileVersionMatches = fromRange.IsSatisfied(profileVersion);
var seedNode = profile["characters"]?["pmc"]?["Hideout"]?["Seed"];
// Check if the seed still has it's numeric value, this is not valid anymore
var seedIsNumeric = seedNode is JsonValue seedValue && seedValue.TryGetValue<long>(out _);
return profileVersionMatches && seedIsNumeric;
}
public override JsonObject? Migrate(JsonObject profile)
{
profile["characters"]!["pmc"]!["Hideout"]!["Seed"] = Convert.ToHexStringLower(RandomNumberGenerator.GetBytes(16));
return base.Migrate(profile);
}
}