diff --git a/src/engine/mobileAI/MobHandlers/MobHandler.java b/src/engine/mobileAI/MobHandlers/MobHandler.java index ea58ddf3..9032a30c 100644 --- a/src/engine/mobileAI/MobHandlers/MobHandler.java +++ b/src/engine/mobileAI/MobHandlers/MobHandler.java @@ -2,6 +2,7 @@ package engine.mobileAI.MobHandlers; import engine.Enum; import engine.InterestManagement.InterestManager; +import engine.InterestManagement.WorldGrid; import engine.gameManager.ChatManager; import engine.gameManager.PowersManager; import engine.gameManager.ZoneManager; @@ -15,6 +16,7 @@ import engine.objects.*; import engine.powers.PowersBase; import engine.server.MBServerStatics; +import java.util.HashSet; import java.util.Map; import java.util.concurrent.ThreadLocalRandom; @@ -109,6 +111,10 @@ public class MobHandler { PlayerCharacter tar = null; for(int id : mob.playerAgroMap.keySet()){ PlayerCharacter target = PlayerCharacter.getFromCache(id); + + if(target.loc.distanceSquared(mob.loc) > mob.getAggroRange() * mob.getAggroRange()) + continue; + if(tar == null || mob.loc.distanceSquared(tar.loc) < mob.loc.distanceSquared(target.loc)) if(MobCanAggro(mob,target)) tar = target; @@ -210,16 +216,19 @@ public class MobHandler { public static void MobCallForHelp(Mob mob) { try { - Zone mobCamp = mob.getParentZone(); + HashSet helpers = WorldGrid.getObjectsInRangePartial(mob.loc,mob.getAggroRange() * 2, MBServerStatics.MASK_MOB); + for (AbstractWorldObject awo : helpers) { + if(awo.equals(mob)) + continue; + Mob helper = (Mob) awo; - for (Mob helper : mobCamp.zoneMobSet) { if(helper.equals(mob)) continue; if(helper.combatTarget != null) continue; - helper.setCombatTarget(mob.getCombatTarget()); + helper.setCombatTarget(mob.getCombatTarget()); } } catch (Exception e) {