From 923447e983ae167931ab3724c0de86bc8e6a5543 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Tue, 8 Aug 2023 13:36:46 -0500 Subject: [PATCH] infinite loop fix --- src/engine/gameManager/NPCManager.java | 2 +- src/engine/mobileAI/MobAI.java | 24 +++++++++++++---------- src/engine/objects/AbstractCharacter.java | 16 +++++++-------- src/engine/objects/Mob.java | 10 +++++----- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/engine/gameManager/NPCManager.java b/src/engine/gameManager/NPCManager.java index 176e4278..114da8ad 100644 --- a/src/engine/gameManager/NPCManager.java +++ b/src/engine/gameManager/NPCManager.java @@ -108,7 +108,7 @@ public enum NPCManager { public static void dismissNecroPet(Mob necroPet, boolean updateOwner) { - necroPet.combatTarget = null; + necroPet.setCombatTarget(null); necroPet.hasLoot = false; if (necroPet.parentZone != null) diff --git a/src/engine/mobileAI/MobAI.java b/src/engine/mobileAI/MobAI.java index cfa0b840..514ad546 100644 --- a/src/engine/mobileAI/MobAI.java +++ b/src/engine/mobileAI/MobAI.java @@ -234,7 +234,7 @@ public class MobAI { attackDelay = 11000; CombatUtilities.combatCycle(mob, target, false, mob.getWeaponItemBase(false)); mob.setLastAttackTime(System.currentTimeMillis() + attackDelay); - if (target.combatTarget == null) { + if (target.getCombatTarget() == null) { target.setCombatTarget(mob); } } @@ -638,14 +638,15 @@ public class MobAI { //no players loaded, no need to proceed - if (mob.playerAgroMap.isEmpty() && mob.isPlayerGuard == false && mob.BehaviourType.ordinal() != Enum.MobBehaviourType.Pet1.ordinal()) { - mob.setCombatTarget(null); + if (mob.playerAgroMap.isEmpty()) { + if(mob.getCombatTarget() != null) + mob.setCombatTarget(null); return; } if (mob.BehaviourType.ordinal() != Enum.MobBehaviourType.Pet1.ordinal()) CheckToSendMobHome(mob); - if (mob.combatTarget != null) { + if (mob.getCombatTarget() != null) { if (mob.getCombatTarget().isAlive() == false) { mob.setCombatTarget(null); return; @@ -653,7 +654,7 @@ public class MobAI { if (mob.getCombatTarget().getObjectTypeMask() == MBServerStatics.MASK_PLAYER) { - PlayerCharacter target = (PlayerCharacter) mob.combatTarget; + PlayerCharacter target = (PlayerCharacter) mob.getCombatTarget(); if (mob.playerAgroMap.containsKey(target.getObjectUUID()) == false) { mob.setCombatTarget(null); @@ -745,7 +746,7 @@ public class MobAI { } - if (aiAgent.combatTarget == null) { + if (aiAgent.getCombatTarget() == null) { //look for pets to aggro if no players found to aggro @@ -1046,9 +1047,12 @@ public class MobAI { } }else { if (mob.npcOwner.getCombatTarget() != null) + if(mob.getCombatTarget() != null && mob.getCombatTarget().equals(mob.npcOwner.getCombatTarget()) == false) mob.setCombatTarget(mob.npcOwner.getCombatTarget()); else - mob.setCombatTarget(null); + if(mob.getCombatTarget() != null) { + mob.setCombatTarget(null); + } } CheckMobMovement(mob); CheckForAttack(mob); @@ -1110,7 +1114,7 @@ public class MobAI { if (mob.getCombatTarget() == null) SafeGuardAggro(mob); - else if (mob.combatTarget.isAlive() == false) + else if (mob.getCombatTarget().isAlive() == false) SafeGuardAggro(mob); CheckForAttack(mob); @@ -1151,7 +1155,7 @@ public class MobAI { //check if mob can attack if it isn't wimpy - if (!mob.BehaviourType.isWimpy && mob.combatTarget != null) + if (!mob.BehaviourType.isWimpy && mob.getCombatTarget() != null) CheckForAttack(mob); } catch (Exception e) { @@ -1199,7 +1203,7 @@ public class MobAI { if (GuardCanAggro(mob, loadedPlayer) == false) continue; - if (MovementUtilities.inRangeToAggro(mob, loadedPlayer)) { + if (MovementUtilities.inRangeToAggro(mob, loadedPlayer) && mob.getCombatTarget() == null) { mob.setCombatTarget(loadedPlayer); return; } diff --git a/src/engine/objects/AbstractCharacter.java b/src/engine/objects/AbstractCharacter.java index 3b8615d2..6f4bee73 100644 --- a/src/engine/objects/AbstractCharacter.java +++ b/src/engine/objects/AbstractCharacter.java @@ -1162,20 +1162,20 @@ public abstract class AbstractCharacter extends AbstractWorldObject { } public final void setCombatTarget(final AbstractWorldObject value) { - if(value.getObjectTypeMask() == MBServerStatics.MASK_MOB) { + if(this.getObjectTypeMask() == 2050) {//MOB? if (value == null) { if (this.isCombat()) { this.setCombat(false); UpdateStateMsg rwss = new UpdateStateMsg(); rwss.setPlayer(this); DispatchMessage.sendToAllInRange(this, rwss); - } else { - if (!this.isCombat()) { - this.setCombat(true); - UpdateStateMsg rwss = new UpdateStateMsg(); - rwss.setPlayer(this); - DispatchMessage.sendToAllInRange(this, rwss); - } + } + }else { + if (!this.isCombat()) { + this.setCombat(true); + UpdateStateMsg rwss = new UpdateStateMsg(); + rwss.setPlayer(this); + DispatchMessage.sendToAllInRange(this, rwss); } } } diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index e2f8d728..b5183c00 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -1305,7 +1305,7 @@ public class Mob extends AbstractIntelligenceAgent { } catch (Exception e) { Logger.error(e.getMessage()); } - this.combatTarget = null; + this.setCombatTarget(null); this.hasLoot = false; this.playerAgroMap.clear(); @@ -1329,7 +1329,7 @@ public class Mob extends AbstractIntelligenceAgent { } else if (this.isPet() || this.isNecroPet()) { //this.state = STATE.Disabled; - this.combatTarget = null; + this.setCombatTarget(null); this.hasLoot = false; //if (this.parentZone != null) @@ -1372,7 +1372,7 @@ public class Mob extends AbstractIntelligenceAgent { this.combat = false; this.walkMode = true; - this.combatTarget = null; + this.setCombatTarget(null); this.hasLoot = this.charItemManager.getInventoryCount() > 0; } catch (Exception e) { @@ -1391,7 +1391,7 @@ public class Mob extends AbstractIntelligenceAgent { this.mana.set(this.manaMax); this.combat = false; this.walkMode = true; - this.combatTarget = null; + this.setCombatTarget(null); this.isAlive.set(true); this.deathTime = 0; this.lastBindLoc = this.bindLoc; @@ -2079,7 +2079,7 @@ public class Mob extends AbstractIntelligenceAgent { PlayerCharacter player = (PlayerCharacter) ac; if (this.getCombatTarget() == null) { - this.combatTarget = ac; + this.setCombatTarget(ac); return; }