0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-13 01:50:45 -05:00

fix scavProfileLoadPatch

This commit is contained in:
CWX 2024-08-20 21:24:51 +01:00
parent 2dfc019b21
commit 2c2fe26f0b

View File

@ -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<Code>()
{
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;
}
}
}