diff --git a/src/engine/mobileAI/MobAI.java b/src/engine/mobileAI/MobAI.java index fbc26b45..6ce174c8 100644 --- a/src/engine/mobileAI/MobAI.java +++ b/src/engine/mobileAI/MobAI.java @@ -998,30 +998,22 @@ public class MobAI { public static void GuardMinionLogic(Mob mob) { try { - if (!mob.guardCaptain.isAlive()) { - if (mob.getCombatTarget() == null) { - CheckForPlayerGuardAggro(mob); - } else { + if (mob.getCombatTarget() == null) + CheckForPlayerGuardAggro(mob); - AbstractWorldObject newTarget = ChangeTargetFromHateValue(mob); + AbstractWorldObject newTarget = ChangeTargetFromHateValue(mob); - if (newTarget != null) { + if (newTarget != null) { - if (newTarget.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) { - if (GuardCanAggro(mob, (PlayerCharacter) newTarget)) - mob.setCombatTarget(newTarget); - } else - mob.setCombatTarget(newTarget); + if (newTarget.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) { + if (GuardCanAggro(mob, (PlayerCharacter) newTarget)) + mob.setCombatTarget(newTarget); + } else + mob.setCombatTarget(newTarget); - } - } - }else { - if (mob.guardCaptain.getCombatTarget() != null) - mob.setCombatTarget(mob.guardCaptain.getCombatTarget()); - else if (mob.getCombatTarget() != null) - mob.setCombatTarget(null); } + CheckMobMovement(mob); CheckForAttack(mob); } catch (Exception e) { @@ -1140,6 +1132,15 @@ public class MobAI { if (!mob.isAlive()) return; + // Defer to captain if possible for current target + + if (mob.agentType.equals(Enum.AIAgentType.GUARDMINION) && + mob.combatTarget == null && mob.guardCaptain.isAlive() + && mob.guardCaptain.combatTarget != null) { + mob.setCombatTarget(mob.guardCaptain.combatTarget); + return; + } + ConcurrentHashMap loadedPlayers = mob.playerAgroMap; for (Entry playerEntry : loadedPlayers.entrySet()) {