Add migration to remove GInterface in debug mode

This commit is contained in:
Archangel
2025-08-21 17:51:19 +02:00
parent 4c7fdf1471
commit 3c4aa79265
@@ -0,0 +1,101 @@
using System.Text.Json.Nodes;
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Utils;
namespace SPTarkov.Server.Core.Migration.Migrations;
[Injectable]
public class RemoveGInterfaceFromVictims : AbstractProfileMigration
{
public override string FromVersion
{
get { return "~4.0"; }
}
public override string ToVersion
{
get { return "~4.0"; }
}
public override string MigrationName
{
get { return "RemoveGInterfaceFromVictims400"; }
}
public override IEnumerable<Type> PrerequisiteMigrations
{
get { return []; }
}
public override bool CanMigrate(JsonObject profile, IEnumerable<IProfileMigration> previouslyRanMigrations)
{
if (!ProgramStatics.DEBUG())
{
return false;
}
if (profile?["characters"]?["pmc"]?["Stats"]?["Eft"]?["Victims"] is JsonArray victims)
{
foreach (var victim in victims)
{
if (victim is JsonObject victimObj)
{
if (victimObj.Any(kvp => kvp.Key.StartsWith("GInterface")))
{
return true;
}
}
}
}
else if (profile?["characters"]?["pmc"]?["Stats"]?["Eft"]?["Aggressor"] is JsonObject aggressorObj)
{
if (aggressorObj.Any(kvp => kvp.Key.StartsWith("GInterface")))
{
return true;
}
}
return false;
}
public override JsonObject? Migrate(JsonObject profile)
{
if (profile?["characters"]?["pmc"]?["Stats"]?["Eft"] is not JsonNode eftStats)
{
return null;
}
CleanJsonNode(eftStats["Victims"]);
CleanJsonNode(eftStats["Aggressor"]);
return profile;
}
private void CleanJsonNode(JsonNode? node)
{
if (node is JsonArray array)
{
foreach (var item in array)
{
if (item is JsonObject obj)
{
var keysToRemove = obj.Where(kvp => kvp.Key.StartsWith("GInterface")).Select(kvp => kvp.Key).ToList();
foreach (var key in keysToRemove)
{
obj.Remove(key);
}
}
}
}
else if (node is JsonObject obj)
{
var keysToRemove = obj.Where(kvp => kvp.Key.StartsWith("GInterface")).Select(kvp => kvp.Key).ToList();
foreach (var key in keysToRemove)
{
obj.Remove(key);
}
}
}
}