|
|
|
@ -735,6 +735,62 @@ public class MobAI {
@@ -735,6 +735,62 @@ public class MobAI {
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
|
|
HashSet<AbstractWorldObject> players = WorldGrid.getObjectsInRangePartial(aiAgent.loc,MobAIThread.AI_BASE_AGGRO_RANGE, MBServerStatics.MASK_PLAYER); |
|
|
|
|
HashSet<AbstractWorldObject> pets = WorldGrid.getObjectsInRangePartial(aiAgent.loc,MobAIThread.AI_BASE_AGGRO_RANGE, MBServerStatics.MASK_PET); |
|
|
|
|
|
|
|
|
|
AbstractWorldObject closestTarget = null; |
|
|
|
|
for(AbstractWorldObject pet : pets){ |
|
|
|
|
if(closestTarget == null) { |
|
|
|
|
closestTarget = pet; |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if(aiAgent.loc.distanceSquared(pet.loc) < aiAgent.loc.distanceSquared(closestTarget.loc)){ |
|
|
|
|
closestTarget = pet; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for(AbstractWorldObject player : players){ |
|
|
|
|
|
|
|
|
|
PlayerCharacter loadedPlayer = (PlayerCharacter) player; |
|
|
|
|
|
|
|
|
|
if (loadedPlayer == null) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Player is Dead, Mob no longer needs to attempt to aggro. Remove them from aggro map.
|
|
|
|
|
if (!loadedPlayer.isAlive()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Can't see target, skip aggro.
|
|
|
|
|
if (!aiAgent.canSee(loadedPlayer)) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
// No aggro for this race type
|
|
|
|
|
if (aiAgent.notEnemy.size() > 0 && aiAgent.notEnemy.contains(loadedPlayer.getRace().getRaceType().getMonsterType()) == true) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
//mob has enemies and this player race is not it
|
|
|
|
|
if (aiAgent.enemy.size() > 0 && aiAgent.enemy.contains(loadedPlayer.getRace().getRaceType().getMonsterType()) == false) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
if(closestTarget == null) { |
|
|
|
|
closestTarget = loadedPlayer; |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if(aiAgent.loc.distanceSquared(loadedPlayer.loc) < aiAgent.loc.distanceSquared(closestTarget.loc)){ |
|
|
|
|
closestTarget = loadedPlayer; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(closestTarget != null){ |
|
|
|
|
aiAgent.setCombatTarget(closestTarget); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(true) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
//looks for and sets mobs combatTarget
|
|
|
|
|
|
|
|
|
|
if (!aiAgent.isAlive()) |
|
|
|
|