From e5f47a7d7347278283074359687f2a9a035dea18 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Sun, 16 Feb 2025 17:03:38 -0600 Subject: [PATCH] mob AI aggro --- src/engine/mobileAI/MobAI.java | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/engine/mobileAI/MobAI.java b/src/engine/mobileAI/MobAI.java index bf3b9771..080e1c45 100644 --- a/src/engine/mobileAI/MobAI.java +++ b/src/engine/mobileAI/MobAI.java @@ -735,6 +735,62 @@ public class MobAI { try { + HashSet players = WorldGrid.getObjectsInRangePartial(aiAgent.loc,MobAIThread.AI_BASE_AGGRO_RANGE, MBServerStatics.MASK_PLAYER); + HashSet 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())