@@ -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