Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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)
            });
        }
Ejemplo n.º 3
0
        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));
        }