public static void Patch(ModuleDefinition module, List <string> log) { var npc = IL.GetTypeDefinition(module, "NPC"); var strikeNPC = IL.GetMethodDefinition(npc, "StrikeNPC"); int spot = IL.ScanForOpcodePattern(strikeNPC, OpCodes.Ldarg_1, OpCodes.Conv_R8, OpCodes.Stloc_1); var life = IL.GetFieldDefinition(npc, "life"); strikeNPC.Body.Instructions[spot].OpCode = OpCodes.Ldarg_0; strikeNPC.Body.Instructions.Insert(spot + 1, Instruction.Create(OpCodes.Ldfld, life)); int spot2 = IL.ScanForOpcodePattern(strikeNPC, (i, instruction) => { var i0 = strikeNPC.Body.Instructions[i].Operand as ParameterReference; return(i0 != null && i0.Name == "crit"); }, spot, OpCodes.Ldarg_S, OpCodes.Brfalse_S); for (int i = spot + 4; i < spot2; i++) { strikeNPC.Body.Instructions[i].OpCode = OpCodes.Nop; } }
public static void Patch(ModuleDefinition module, List <string> log) { var player = IL.GetTypeDefinition(module, "Player"); var updatePlayerEquips = IL.GetMethodDefinition(player, "UpdateEquips"); var wings = IL.GetFieldDefinition(player, "wings"); var wingsLogic = IL.GetFieldDefinition(player, "wingsLogic"); var wingTimeMax = IL.GetFieldDefinition(player, "wingTimeMax"); IL.MethodAppend(updatePlayerEquips, updatePlayerEquips.Body.Instructions.Count - 1, 1, new[] { Instruction.Create(OpCodes.Ldarg_0), Instruction.Create(OpCodes.Ldc_I4, 32), Instruction.Create(OpCodes.Stfld, wings), Instruction.Create(OpCodes.Ldarg_0), Instruction.Create(OpCodes.Ldc_I4, 32), Instruction.Create(OpCodes.Stfld, wingsLogic), Instruction.Create(OpCodes.Ldarg_0), Instruction.Create(OpCodes.Ldc_I4, int.MaxValue), Instruction.Create(OpCodes.Stfld, wingTimeMax), Instruction.Create(OpCodes.Ret) }); }
public static void Patch(ModuleDefinition module, List <string> log) { var player = IL.GetTypeDefinition(module, "Player"); var update = IL.GetMethodDefinition(player, "Update"); var jumpAgain1 = IL.GetFieldDefinition(player, "jumpAgainBlizzard"); var jumpAgain2 = IL.GetFieldDefinition(player, "jumpAgainCloud"); var jumpAgain3 = IL.GetFieldDefinition(player, "jumpAgainFart"); var jumpAgain4 = IL.GetFieldDefinition(player, "jumpAgainSail"); var jumpAgain5 = IL.GetFieldDefinition(player, "jumpAgainSandstorm"); var jumpAgain6 = IL.GetFieldDefinition(player, "jumpAgainUnicorn"); int spot = IL.ScanForOpcodePattern(update, (i, instruction) => { var i0 = update.Body.Instructions[i + 1].Operand as FieldReference; return(i0 != null && i0.Name == "doubleJumpCloud"); }, OpCodes.Ldc_I4_0, OpCodes.Stfld); update.Body.Instructions.Insert(spot + 2, Instruction.Create(OpCodes.Ldarg_0)); update.Body.Instructions.Insert(spot + 3, Instruction.Create(OpCodes.Ldc_I4_1)); update.Body.Instructions.Insert(spot + 4, Instruction.Create(OpCodes.Stfld, jumpAgain1)); update.Body.Instructions.Insert(spot + 2, Instruction.Create(OpCodes.Ldarg_0)); update.Body.Instructions.Insert(spot + 3, Instruction.Create(OpCodes.Ldc_I4_1)); update.Body.Instructions.Insert(spot + 4, Instruction.Create(OpCodes.Stfld, jumpAgain2)); update.Body.Instructions.Insert(spot + 2, Instruction.Create(OpCodes.Ldarg_0)); update.Body.Instructions.Insert(spot + 3, Instruction.Create(OpCodes.Ldc_I4_1)); update.Body.Instructions.Insert(spot + 4, Instruction.Create(OpCodes.Stfld, jumpAgain3)); update.Body.Instructions.Insert(spot + 2, Instruction.Create(OpCodes.Ldarg_0)); update.Body.Instructions.Insert(spot + 3, Instruction.Create(OpCodes.Ldc_I4_1)); update.Body.Instructions.Insert(spot + 4, Instruction.Create(OpCodes.Stfld, jumpAgain4)); update.Body.Instructions.Insert(spot + 2, Instruction.Create(OpCodes.Ldarg_0)); update.Body.Instructions.Insert(spot + 3, Instruction.Create(OpCodes.Ldc_I4_1)); update.Body.Instructions.Insert(spot + 4, Instruction.Create(OpCodes.Stfld, jumpAgain5)); update.Body.Instructions.Insert(spot + 2, Instruction.Create(OpCodes.Ldarg_0)); update.Body.Instructions.Insert(spot + 3, Instruction.Create(OpCodes.Ldc_I4_1)); update.Body.Instructions.Insert(spot + 4, Instruction.Create(OpCodes.Stfld, jumpAgain6)); }