Drop siege engine targets only on death or attack range
Siege engines dropped player targets at 100 units, at the 200 unit drop-aggro range, or when the player was missing from playerAgroMap, all well inside their 350 attack range. They now hold a character target until it dies, can't be seen, or leaves getRange(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ca33c5a14c
commit
531a2d028b
1 file changed
+15
-4
@@ -110,7 +110,9 @@ public class MobAI {
|
||||
if (mob.behaviourType.callsForHelp)
|
||||
mobCallForHelp(mob);
|
||||
|
||||
if (!MovementUtilities.inRangeDropAggro(mob, target)) {
|
||||
// siege engines drop targets on their own attack range in determineAction
|
||||
|
||||
if (!mob.isSiege() && !MovementUtilities.inRangeDropAggro(mob, target)) {
|
||||
mob.setCombatTarget(null);
|
||||
return;
|
||||
}
|
||||
@@ -506,7 +508,16 @@ public class MobAI {
|
||||
boolean bypassLoadedPlayerCheck = false;
|
||||
if (mob.isPlayerGuard() || mob.isSiege()) {
|
||||
bypassLoadedPlayerCheck = true;
|
||||
if (mob.combatTarget != null && mob.combatTarget.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter))
|
||||
|
||||
if (mob.isSiege()) {
|
||||
|
||||
// siege engines hold a character target until it dies or leaves their attack range
|
||||
|
||||
if (mob.combatTarget != null && AbstractCharacter.IsAbstractCharacter(mob.combatTarget))
|
||||
if (mob.combatTarget.loc.distanceSquared(mob.loc) > mob.getRange() * mob.getRange())
|
||||
mob.setCombatTarget(null);
|
||||
|
||||
} else if (mob.combatTarget != null && mob.combatTarget.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter))
|
||||
if (mob.combatTarget.loc.distanceSquared(mob.loc) > 10000)
|
||||
mob.setCombatTarget(null);
|
||||
}
|
||||
@@ -532,7 +543,7 @@ public class MobAI {
|
||||
|
||||
PlayerCharacter target = (PlayerCharacter) mob.getCombatTarget();
|
||||
|
||||
if (!mob.playerAgroMap.containsKey(target.getObjectUUID())) {
|
||||
if (!mob.isSiege() && !mob.playerAgroMap.containsKey(target.getObjectUUID())) {
|
||||
mob.setCombatTarget(null);
|
||||
return;
|
||||
}
|
||||
@@ -749,7 +760,7 @@ public class MobAI {
|
||||
if (mob.getCombatTarget() == null)
|
||||
return;
|
||||
|
||||
if (mob.getCombatTarget().getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter) && !MovementUtilities.inRangeDropAggro(mob, (PlayerCharacter) mob.getCombatTarget()) && !mob.agentType.equals(mbEnums.AIAgentType.PET)) {
|
||||
if (mob.getCombatTarget().getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter) && !MovementUtilities.inRangeDropAggro(mob, (PlayerCharacter) mob.getCombatTarget()) && !mob.agentType.equals(mbEnums.AIAgentType.PET) && !mob.isSiege()) {
|
||||
|
||||
mob.setCombatTarget(null);
|
||||
return;
|
||||
|
||||
Reference in new issue
Block a user