diff --git a/src/engine/objects/AbstractIntelligenceAgent.java b/src/engine/objects/AbstractIntelligenceAgent.java index b2253b4f..053fd833 100644 --- a/src/engine/objects/AbstractIntelligenceAgent.java +++ b/src/engine/objects/AbstractIntelligenceAgent.java @@ -148,9 +148,20 @@ public abstract class AbstractIntelligenceAgent extends AbstractCharacter { public void dismiss() { + boolean isSiegeEngine; + + isSiegeEngine = this.getObjectType() == GameObjectType.Mob && ((Mob) this).isSiege(); + if (this.isPet()) { - if ((this.agentType.equals(mbEnums.AIAgentType.PET))) { //delete summoned pet + if (isSiegeEngine) { + + // Released siege engines stay in place, alive, and keep firing at + // their current target until a Rod of Command takes them again. + + this.agentType = mbEnums.AIAgentType.MOBILE; + + } else if ((this.agentType.equals(mbEnums.AIAgentType.PET))) { //delete summoned pet WorldGrid.RemoveWorldObject(this); @@ -167,7 +178,8 @@ public abstract class AbstractIntelligenceAgent extends AbstractCharacter { // clear owner and set not alive - this.isAlive.set(false); + if (!isSiegeEngine) + this.isAlive.set(false); PlayerCharacter owner = (PlayerCharacter) this.guardCaptain; @@ -188,6 +200,8 @@ public abstract class AbstractIntelligenceAgent extends AbstractCharacter { this.guardCaptain = null; } + if (isSiegeEngine && this.isAlive()) + WorldGrid.updateObject(this); } } diff --git a/src/engine/objects/PlayerCharacter.java b/src/engine/objects/PlayerCharacter.java index 19c45026..18da2e2c 100644 --- a/src/engine/objects/PlayerCharacter.java +++ b/src/engine/objects/PlayerCharacter.java @@ -4184,8 +4184,9 @@ public class PlayerCharacter extends AbstractCharacter { } else if (currentPet.isSiege()) { currentPet.agentType = AIAgentType.MOBILE; + // released siege engine keeps its current target + currentPet.guardCaptain = null; - currentPet.setCombatTarget(null); if (currentPet.isAlive()) WorldGrid.updateObject(currentPet); } @@ -4193,7 +4194,6 @@ public class PlayerCharacter extends AbstractCharacter { toCommand.setPet(this, false); this.setPet(toCommand); - toCommand.setCombatTarget(null); PetMsg petMsg = new PetMsg(6, toCommand); Dispatch dispatch = Dispatch.borrow(this, petMsg); DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);