aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2019-07-31 13:17:32 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-17 22:45:55 +0100
commit6b1ca0ca128425677043d36a147a019f6d2ac6e6 (patch)
tree89a7b8a518a635de8980911257c8f2a2c8cce90a
parent0c4a2a33fd7d3069afe0294998b4e18a4469ead9 (diff)
Core/Combat: Properly unset engagement flag on death.
(cherry picked from commit 9c603ea87f09c47d52f093ccc73ee75c15eff6f5)
-rw-r--r--src/server/game/AI/CoreAI/GuardAI.cpp2
-rw-r--r--src/server/game/AI/CreatureAI.cpp6
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp7
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
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);