Skip to content

Commit fb24f53

Browse files
committed
Update PatchNpcStrikeArgs.Server.cs
1 parent 103b58f commit fb24f53

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

OTAPI.Scripts/Patches/PatchNpcStrikeArgs.Server.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,22 @@ static void PatchNpcStrikeArgs(ModFwModder modder)
7373
switch (methodName.Replace(HookEmitter.HookMethodNamePrefix, ""))
7474
{
7575
case "MessageBuffer.GetData":
76+
var playerRef = Instruction.Create(OpCodes.Ldsfld, modder.Module.ImportReference(modder.GetFieldDefinition(() => Terraria.Main.player)));
77+
body.GetILProcessor().InsertBefore(instr, playerRef);
7678
body.GetILProcessor().InsertBefore(instr,
77-
new { OpCodes.Ldsfld, Operand = modder.Module.ImportReference(modder.GetFieldDefinition(() => Terraria.Main.player)) },
78-
new { OpCodes.Ldarg_0 },
79-
new { OpCodes.Ldfld, Operand = modder.Module.ImportReference(modder.GetFieldDefinition(() => (new Terraria.MessageBuffer()).whoAmI)) },
80-
new { OpCodes.Ldelem_Ref }
81-
);
79+
new { OpCodes.Ldarg_0 },
80+
new { OpCodes.Ldfld, Operand = modder.Module.ImportReference(modder.GetFieldDefinition(() => (new Terraria.MessageBuffer()).whoAmI)) },
81+
new { OpCodes.Ldelem_Ref }
82+
);
83+
84+
var hasWhoAmI = instr.Previous.OpCode == OpCodes.Ldfld &&
85+
instr.Previous.Operand is FieldReference fieldReference &&
86+
fieldReference.Name == "whoAmI";
87+
if (hasWhoAmI) { // 145+
88+
// rewire the branching
89+
var brs = instr.Previous(x => x.OpCode == OpCodes.Br_S);
90+
brs.Operand = playerRef;
91+
}
8292
break;
8393

8494
case "NPC.StrikeNPCNoInteraction":

0 commit comments

Comments
 (0)