diff --git a/src/engine/ai/MobileFSM.java b/src/engine/ai/MobileFSM.java index 4b6e99ce..65c1b08c 100644 --- a/src/engine/ai/MobileFSM.java +++ b/src/engine/ai/MobileFSM.java @@ -305,6 +305,13 @@ public class MobileFSM { public static void DetermineAction(Mob mob) { if (mob == null) return; + if (mob.playerAgroMap.isEmpty() && !mob.isPlayerGuard) + //no players loaded, no need to proceed + return; + else{ + if(mob.isPlayerGuard && mob.guardedCity._playerMemory.size() < 1 && mob.playerAgroMap.isEmpty()) + return; + } if (mob.despawned && mob.isPlayerGuard) { //override for guards if(mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardMinion.ordinal()){ @@ -326,9 +333,6 @@ public class MobileFSM { CheckForRespawn(mob); return; } - if (mob.playerAgroMap.isEmpty()) - //no players loaded, no need to proceed - return; if (mob.isCombat() && mob.getCombatTarget() == null) { mob.setCombat(false); UpdateStateMsg rwss = new UpdateStateMsg(); diff --git a/src/engine/objects/City.java b/src/engine/objects/City.java index dbb31856..084ab55d 100644 --- a/src/engine/objects/City.java +++ b/src/engine/objects/City.java @@ -87,7 +87,7 @@ public class City extends AbstractWorldObject { // Players who have entered the city (used for adding and removing affects) - private final HashSet _playerMemory = new HashSet<>(); + public final HashSet _playerMemory = new HashSet<>(); public volatile boolean protectionEnforced = true; private String hash; diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index 2106344b..5a62cecd 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -99,6 +99,7 @@ public class Mob extends AbstractIntelligenceAgent { private DeferredPowerJob weaponPower; private DateTime upgradeDateTime = null; private boolean lootSync = false; + public City guardedCity; /** * No Id Constructor @@ -806,6 +807,7 @@ public class Mob extends AbstractIntelligenceAgent { mob.npcOwner = guardCaptain; mob.spawnTime = (int)(-2.500 * guardCaptain.building.getRank() + 22.5) * 60; mob.BehaviourType = Enum.MobBehaviourType.GuardMinion; + mob.guardedCity = guardCaptain.guardedCity; mob.parentZone = parent; parent.zoneMobSet.add(mob); return mob;