Hack to make packet mapping stop at the end of the packet handler
This commit is contained in:
@@ -12,6 +12,7 @@ import net.runelite.deob.attributes.code.instruction.types.DupInstruction;
|
|||||||
import net.runelite.deob.attributes.code.instruction.types.InvokeInstruction;
|
import net.runelite.deob.attributes.code.instruction.types.InvokeInstruction;
|
||||||
import net.runelite.deob.attributes.code.instruction.types.LVTInstruction;
|
import net.runelite.deob.attributes.code.instruction.types.LVTInstruction;
|
||||||
import net.runelite.deob.attributes.code.instruction.types.MappableInstruction;
|
import net.runelite.deob.attributes.code.instruction.types.MappableInstruction;
|
||||||
|
import net.runelite.deob.attributes.code.instruction.types.PushConstantInstruction;
|
||||||
import net.runelite.deob.attributes.code.instruction.types.ReturnInstruction;
|
import net.runelite.deob.attributes.code.instruction.types.ReturnInstruction;
|
||||||
import net.runelite.deob.attributes.code.instruction.types.SetFieldInstruction;
|
import net.runelite.deob.attributes.code.instruction.types.SetFieldInstruction;
|
||||||
import net.runelite.deob.attributes.code.instructions.AALoad;
|
import net.runelite.deob.attributes.code.instructions.AALoad;
|
||||||
@@ -98,7 +99,8 @@ public class MappingExecutorUtil
|
|||||||
mappings.m2 = m2;
|
mappings.m2 = m2;
|
||||||
|
|
||||||
parallel.mappings = mappings;
|
parallel.mappings = mappings;
|
||||||
|
|
||||||
|
outer:
|
||||||
while (parallel.step())
|
while (parallel.step())
|
||||||
{
|
{
|
||||||
// get what each frame is paused/exited on
|
// get what each frame is paused/exited on
|
||||||
@@ -129,6 +131,26 @@ public class MappingExecutorUtil
|
|||||||
|
|
||||||
mi1.map(mappings, p1, p2);
|
mi1.map(mappings, p1, p2);
|
||||||
e.paused = e2.paused = false;
|
e.paused = e2.paused = false;
|
||||||
|
|
||||||
|
// detect end of handler. this method is only used to map handlers.
|
||||||
|
if (mi1 instanceof SetFieldInstruction && mi2 instanceof SetFieldInstruction)
|
||||||
|
{
|
||||||
|
SetFieldInstruction sfi1 = (SetFieldInstruction) mi1,
|
||||||
|
sfi2 = (SetFieldInstruction) mi2;
|
||||||
|
|
||||||
|
if (sfi1.getMyField().packetHandler && sfi2.getMyField().packetHandler)
|
||||||
|
{
|
||||||
|
Instruction sfii = p1.getPops().get(0).getPushed().getInstruction();
|
||||||
|
if (sfii instanceof PushConstantInstruction)
|
||||||
|
{
|
||||||
|
Object o = ((PushConstantInstruction) sfii).getConstant().getObject();
|
||||||
|
if (o.equals(-1))
|
||||||
|
{
|
||||||
|
break outer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mappings;
|
return mappings;
|
||||||
|
|||||||
Reference in New Issue
Block a user