diff options
author | Treeston <treeston.mmoc@gmail.com> | 2019-07-31 13:17:32 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-17 22:45:55 +0100 |
commit | 6b1ca0ca128425677043d36a147a019f6d2ac6e6 (patch) | |
tree | 89a7b8a518a635de8980911257c8f2a2c8cce90a | |
parent | 0c4a2a33fd7d3069afe0294998b4e18a4469ead9 (diff) |
Core/Combat: Properly unset engagement flag on death.
(cherry picked from commit 9c603ea87f09c47d52f093ccc73ee75c15eff6f5)
-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); |