diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index 7f82672e..9491b71a 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -184,7 +184,7 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed { } else if (mob.contract != null || mob.isPlayerGuard()) { writer.putInt(3); serializeRune(mob, writer, 3, GameObjectType.NPCClassRuneTwo.ordinal(), 2518); //warrior class - serializeRune(mob, writer, 5, GameObjectType.NPCClassRuneThree.ordinal(), 252623); //standing guard rune; the client fires its CloseToGuard hint only for 252623 (0x67AB1B) + serializeRune(mob, writer, 5, GameObjectType.NPCClassRuneThree.ordinal(), mob.getGuardRuneID()); } else writer.putInt(1); @@ -736,13 +736,22 @@ public class Mob extends AbstractIntelligenceAgent implements Delayed { runeIDs.add(2522); else if (this.contract != null || this.isPlayerGuard()) { runeIDs.add(2518); - runeIDs.add(252623); + runeIDs.add(this.getGuardRuneID()); } runeIDs.add((this.mobBase != null) ? this.mobBase.getObjectUUID() : this.loadID); return runeIDs; } + // Wall archers get 252622 Wall Guard; the rest get 252623 Standing Guard, the only rune that fires the client's CloseToGuard hint (0x67AB1B) + public int getGuardRuneID() { + + if (this.agentType == AIAgentType.GUARDWALLARCHER) + return 252622; + + return 252623; + } + // Client ArcCharacter_RecalcMaxAttributes 0x470440 + RecalcAttributes 0x470610 with no spent points public int getRuneAttribute(AttributeType attributeType) {