From 12c4be7c10d3b78a3ebbd69cc8d04825956aadbe Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Thu, 22 Aug 2024 19:21:48 +0200 Subject: [PATCH] Make employee perk transpile more robust --- .../SupermarketTogether/Class1.cs | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Projects/SupermarketTogether/SupermarketTogether/Class1.cs b/Projects/SupermarketTogether/SupermarketTogether/Class1.cs index a5c5ed1..3a43244 100644 --- a/Projects/SupermarketTogether/SupermarketTogether/Class1.cs +++ b/Projects/SupermarketTogether/SupermarketTogether/Class1.cs @@ -16,10 +16,12 @@ namespace CykaMod { public static ConfigEntry playersAdded; public static ConfigEntry employeePerPerk; + public static ConfigEntry employeeSpeedPerk; public void Awake() { playersAdded = Config.Bind("General", "PlayersAdded", 0); employeePerPerk = Config.Bind("General", "EmployeePerPerk", 1); + employeeSpeedPerk = Config.Bind("General", "EmployeeSpeedPerk", 0.2f); Logger.LogInfo("Cyka mod loaded"); HarmonyFileLog.Enabled = true; @@ -46,15 +48,31 @@ namespace CykaMod { var codes = new List(instructions); for (int i = 0; i < codes.Count; i++) { - if (codes[i].opcode == OpCodes.Ldc_I4_1) { - Console.WriteLine("Found Ldc_I4_1"); - codes[i].opcode = OpCodes.Nop; - codes.Insert(i + 1, - new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "employeePerPerk"))); + var codeInstruction = codes[i]; + // if (codeInstruction.operand != null) { + // Console.WriteLine($"'{codeInstruction.operand.ToString()}'"); + // Console.WriteLine(codeInstruction.operand.ToString() == "NPC_Manager::extraEmployeeSpeedFactor"); + // } + + if (codeInstruction.opcode == OpCodes.Ldfld && codeInstruction.operand?.ToString() == "System.Int32 maxEmployees") { + Console.WriteLine($"Found {codeInstruction.operand}"); + codes[i + 1].opcode = OpCodes.Nop; codes.Insert(i + 2, + new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "employeePerPerk"))); + codes.Insert(i + 3, new CodeInstruction(OpCodes.Call, AccessTools.PropertyGetter(typeof(Main).GetField("employeePerPerk").FieldType, "Value"))); } + + // if (codeInstruction.opcode == OpCodes.Ldc_R4) { + // Console.WriteLine("Found Ldc_R4"); + // codeInstruction.opcode = OpCodes.Nop; + // codes.Insert(i + 1, + // new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "employeeSpeedPerk"))); + // codes.Insert(i + 2, + // new CodeInstruction(OpCodes.Call, + // AccessTools.PropertyGetter(typeof(Main).GetField("employeeSpeedPerk").FieldType, "Value"))); + // } } return codes.AsEnumerable(); @@ -95,7 +113,7 @@ namespace CykaMod { return codes.AsEnumerable(); } } - + [HarmonyPatch(typeof(NPC_Manager), "SpawnCustomerNCP")] public static class PlayersAddedTranspilePatch2 { static IEnumerable Transpiler(IEnumerable instructions) {