diff options
-rw-r--r-- | src/server/game/AI/CoreAI/GuardAI.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AI/CreatureAI.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 |
4 files changed, 11 insertions, 6 deletions
diff --git a/src/server/game/AI/CoreAI/GuardAI.cpp b/src/server/game/AI/CoreAI/GuardAI.cpp index aa6ea0e93c4..0ee4c652e98 100644 --- a/src/server/game/AI/CoreAI/GuardAI.cpp +++ b/src/server/game/AI/CoreAI/GuardAI.cpp @@ -56,7 +56,7 @@ void GuardAI::EnterEvadeMode(EvadeReason /*why*/) return; } - TC_LOG_TRACE("scritps.ai", "GuardAI::EnterEvadeMode: %s enters evade mode.", me->GetGUID().ToString().c_str()); + TC_LOG_TRACE("scripts.ai", "GuardAI::EnterEvadeMode: %s enters evade mode.", me->GetGUID().ToString().c_str()); me->RemoveAllAuras(); me->CombatStop(true); diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 247fbd1bad7..bb16389c932 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -247,6 +247,12 @@ bool CreatureAI::UpdateVictim() if (!IsEngaged()) return false; + if (!me->IsAlive()) + { + EngagementOver(); + return false; + } + if (!me->HasReactState(REACT_PASSIVE)) { if (Unit* victim = me->SelectVictim()) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 007664ec134..dd5cb8ec621 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -767,6 +767,9 @@ void Creature::Update(uint32 diff) if (m_deathState != CORPSE) break; + if (IsEngaged()) + Unit::AIUpdateTick(diff); + if (m_groupLootTimer && !lootingGroupLowGUID.IsEmpty()) { if (m_groupLootTimer <= diff) @@ -854,8 +857,6 @@ void Creature::Update(uint32 diff) } } - - // do not allow the AI to be changed during update Unit::AIUpdateTick(diff); // creature can be dead after UpdateAI call @@ -3433,7 +3434,7 @@ void Creature::AtDisengage() Unit::AtDisengage(); ClearUnitState(UNIT_STATE_ATTACK_PLAYER); - if (HasDynamicFlag(UNIT_DYNFLAG_TAPPED)) + if (IsAlive() && HasDynamicFlag(UNIT_DYNFLAG_TAPPED)) SetDynamicFlags(GetCreatureTemplate()->dynamicflags); if (IsPet() || IsGuardian()) // update pets' speed for catchup OOC speed diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7aab5386818..6970018dd72 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10489,8 +10489,6 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId) if (!creature->IsPet()) { - creature->GetThreatManager().ClearAllThreat(); - // must be after setDeathState which resets dynamic flags if (!creature->loot.isLooted()) creature->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); |