From 3c4aa792653faad6534154fd83bb9d39e5fe741b Mon Sep 17 00:00:00 2001 From: Archangel Date: Thu, 21 Aug 2025 17:51:19 +0200 Subject: [PATCH] Add migration to remove GInterface in debug mode --- .../4.0/RemoveGInterfaceFromVictims.cs | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/RemoveGInterfaceFromVictims.cs diff --git a/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/RemoveGInterfaceFromVictims.cs b/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/RemoveGInterfaceFromVictims.cs new file mode 100644 index 00000000..72beb56d --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/RemoveGInterfaceFromVictims.cs @@ -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 PrerequisiteMigrations + { + get { return []; } + } + + public override bool CanMigrate(JsonObject profile, IEnumerable 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); + } + } + } +}