Keep siege engines alive and targeting when released
Owner death, logout or invisibility dismissed a commanded siege engine by clearing its target and marking it dead. Released engines now revert to MOBILE in place, stay alive and keep their current target so any nation member can re-command them with a Rod of Command. Commanding an engine no longer clears the target of the old or new engine. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5868530414
commit
ca33c5a14c
2 files changed
+18
-4
No files matched your search
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user