From 2c2fe26f0b2b0bc0d3a15295d2cb3d7c5bd2213b Mon Sep 17 00:00:00 2001 From: CWX Date: Tue, 20 Aug 2024 21:24:51 +0100 Subject: [PATCH] fix scavProfileLoadPatch --- .../Patches/ScavMode/ScavProfileLoadPatch.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/project/SPT.SinglePlayer/Patches/ScavMode/ScavProfileLoadPatch.cs b/project/SPT.SinglePlayer/Patches/ScavMode/ScavProfileLoadPatch.cs index 3efd42b..3de0e45 100644 --- a/project/SPT.SinglePlayer/Patches/ScavMode/ScavProfileLoadPatch.cs +++ b/project/SPT.SinglePlayer/Patches/ScavMode/ScavProfileLoadPatch.cs @@ -1,3 +1,4 @@ +using System; using SPT.Reflection.CodeWrapper; using SPT.Reflection.Patching; using SPT.Reflection.Utils; @@ -15,15 +16,14 @@ namespace SPT.SinglePlayer.Patches.ScavMode { protected override MethodBase GetTargetMethod() { - // Struct331 - 20575 + // Struct348 - 32128 var desiredType = typeof(TarkovApplication) .GetNestedTypes(PatchConstants.PublicDeclaredFlags) .SingleCustom(x => x.GetField("timeAndWeather") != null && x.GetField("timeHasComeScreenController") != null && x.Name.Contains("Struct")); - var desiredMethod = desiredType.GetMethods(PatchConstants.PublicDeclaredFlags) - .FirstOrDefault(x => x.Name == "MoveNext"); + var desiredMethod = AccessTools.Method(desiredType, "MoveNext"); Logger.LogDebug($"{this.GetType().Name} Type: {desiredType?.Name}"); Logger.LogDebug($"{this.GetType().Name} Method: {desiredMethod?.Name}"); @@ -61,6 +61,7 @@ namespace SPT.SinglePlayer.Patches.ScavMode var brFalseLabel = generator.DefineLabel(); var brLabel = generator.DefineLabel(); + var newCodes = CodeGenerator.GenerateInstructions(new List() { new Code(OpCodes.Ldloc_1), @@ -75,16 +76,23 @@ namespace SPT.SinglePlayer.Patches.ScavMode new CodeWithLabel(OpCodes.Stfld, brLabel, typeof(TarkovApplication).GetNestedTypes(BindingFlags.Public).SingleCustom(IsTargetNestedType), "profile") }); + foreach (var code in newCodes) + { + Logger.LogInfo($"opcode: {code?.opcode} - operand: {code?.operand}"); + } + codes.RemoveRange(searchIndex, 4); codes.InsertRange(searchIndex, newCodes); return codes.AsEnumerable(); } - private static bool IsTargetNestedType(System.Type nestedType) + private static bool IsTargetNestedType(Type nestedType) { - return nestedType.GetMethods(PatchConstants.PublicDeclaredFlags) - .Count(x => x.GetParameters().Length == 1 && x.GetParameters()[0].ParameterType == typeof(IResult)) > 0 && nestedType.GetField("savageProfile") != null; + return nestedType.GetMethods(PatchConstants.PublicDeclaredFlags).Count() > 0 && + nestedType.GetFields().Length == 6 && + nestedType.GetField("savageProfile") != null && + nestedType.GetField("profile") != null; } } }