diff --git a/Projects/SupermarketTogether/SupermarketTogether/Class1.cs b/Projects/SupermarketTogether/SupermarketTogether/Class1.cs index a801034..4611e3e 100644 --- a/Projects/SupermarketTogether/SupermarketTogether/Class1.cs +++ b/Projects/SupermarketTogether/SupermarketTogether/Class1.cs @@ -143,72 +143,5 @@ namespace DavesPhatStore { } // region player faking - [HarmonyPatch(typeof(GameData), "UserCode_CmdOpenSupermarket")] - public static class PlayersAddedTranspilePatch { - static IEnumerable Transpiler(IEnumerable instructions) { - var codes = new List(instructions); - - // foreach (var codeInstruction in codes) { - // Console.WriteLine(codeInstruction); - // } - - CodeInstruction previous = codes[0]; - for (int i = 1; i < codes.Count; i++) { - if (previous.opcode == OpCodes.Ldsfld && codes[i].opcode == OpCodes.Callvirt) { - Console.WriteLine("Found Ldsfld and Callvirt"); - Console.WriteLine(previous); - Console.WriteLine(codes[i]); - codes.Insert(i + 1, - new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "playersAdded"))); - codes.Insert(i + 2, - new CodeInstruction(OpCodes.Call, - AccessTools.PropertyGetter(typeof(Main).GetField("playersAdded").FieldType, "Value"))); - codes.Insert(i + 3, new CodeInstruction(OpCodes.Add)); - } - - previous = codes[i]; - } - - // foreach (var codeInstruction in codes) { - // Console.WriteLine(codeInstruction); - // } - - return codes.AsEnumerable(); - } - } - - [HarmonyPatch(typeof(NPC_Manager), "SpawnCustomerNCP")] - public static class PlayersAddedTranspilePatch2 { - static IEnumerable Transpiler(IEnumerable instructions) { - var codes = new List(instructions); - - // foreach (var codeInstruction in codes) { - // Console.WriteLine(codeInstruction); - // } - - CodeInstruction previous = codes[0]; - for (int i = 1; i < codes.Count; i++) { - if (previous.opcode == OpCodes.Ldsfld && codes[i].opcode == OpCodes.Callvirt) { - Console.WriteLine("Found Ldsfld and Callvirt:"); - Console.WriteLine(previous); - Console.WriteLine(codes[i]); - codes.Insert(i + 1, - new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "playersAdded"))); - codes.Insert(i + 2, - new CodeInstruction(OpCodes.Call, - AccessTools.PropertyGetter(typeof(Main).GetField("playersAdded").FieldType, "Value"))); - codes.Insert(i + 3, new CodeInstruction(OpCodes.Add)); - } - - previous = codes[i]; - } - - // foreach (var codeInstruction in codes) { - // Console.WriteLine(codeInstruction); - // } - - return codes.AsEnumerable(); - } - } // endregion } \ No newline at end of file diff --git a/Projects/SupermarketTogether/SupermarketTogether/PlayerFaking.cs b/Projects/SupermarketTogether/SupermarketTogether/PlayerFaking.cs new file mode 100644 index 0000000..083768f --- /dev/null +++ b/Projects/SupermarketTogether/SupermarketTogether/PlayerFaking.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using HarmonyLib; + +namespace DavesPhatStore { + [HarmonyPatch] + public class PlayerFaking { + [HarmonyTranspiler] + [HarmonyPatch(typeof(GameData), "UserCode_CmdOpenSupermarket")] + static IEnumerable TranspilerOpenMarket(IEnumerable instructions) { + var codes = new List(instructions); + + // foreach (var codeInstruction in codes) { + // Console.WriteLine(codeInstruction); + // } + + CodeInstruction previous = codes[0]; + for (int i = 1; i < codes.Count; i++) { + if (previous.opcode == OpCodes.Ldsfld && codes[i].opcode == OpCodes.Callvirt) { + Console.WriteLine("Found Ldsfld and Callvirt"); + Console.WriteLine(previous); + Console.WriteLine(codes[i]); + codes.Insert(i + 1, + new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "playersAdded"))); + codes.Insert(i + 2, + new CodeInstruction(OpCodes.Call, + AccessTools.PropertyGetter(typeof(Main).GetField("playersAdded").FieldType, "Value"))); + codes.Insert(i + 3, new CodeInstruction(OpCodes.Add)); + } + + previous = codes[i]; + } + + // foreach (var codeInstruction in codes) { + // Console.WriteLine(codeInstruction); + // } + + return codes.AsEnumerable(); + } + + [HarmonyTranspiler] + [HarmonyPatch(typeof(NPC_Manager), "SpawnCustomerNCP")] + static IEnumerable TranspilerSpawnNPC(IEnumerable instructions) { + var codes = new List(instructions); + + // foreach (var codeInstruction in codes) { + // Console.WriteLine(codeInstruction); + // } + + CodeInstruction previous = codes[0]; + for (int i = 1; i < codes.Count; i++) { + if (previous.opcode == OpCodes.Ldsfld && codes[i].opcode == OpCodes.Callvirt) { + Console.WriteLine("Found Ldsfld and Callvirt:"); + Console.WriteLine(previous); + Console.WriteLine(codes[i]); + codes.Insert(i + 1, + new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(Main), "playersAdded"))); + codes.Insert(i + 2, + new CodeInstruction(OpCodes.Call, + AccessTools.PropertyGetter(typeof(Main).GetField("playersAdded").FieldType, "Value"))); + codes.Insert(i + 3, new CodeInstruction(OpCodes.Add)); + } + + previous = codes[i]; + } + + // foreach (var codeInstruction in codes) { + // Console.WriteLine(codeInstruction); + // } + + return codes.AsEnumerable(); + } + } +} \ No newline at end of file diff --git a/Projects/SupermarketTogether/SupermarketTogether/SupermarketTogether.csproj b/Projects/SupermarketTogether/SupermarketTogether/SupermarketTogether.csproj index b0286bc..89fce65 100644 --- a/Projects/SupermarketTogether/SupermarketTogether/SupermarketTogether.csproj +++ b/Projects/SupermarketTogether/SupermarketTogether/SupermarketTogether.csproj @@ -36,6 +36,7 @@ +