diff options
author | Treeston <treeston.mmoc@gmail.com> | 2019-07-31 13:17:32 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2019-07-31 13:17:32 +0200 |
commit | 9c603ea87f09c47d52f093ccc73ee75c15eff6f5 (patch) | |
tree | a35422aef113e2aeccc4026d9bcec027f23faa0d | |
parent | 5378fc450061a8fe125429925c43b3de22aeaf2b (diff) |
Core/Combat: Properly unset engagement flag on death.
-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 222ccf2cda0..daa25297be8 100644 --- a/src/server/game/AI/CoreAI/GuardAI.cpp +++ b/src/server/game/AI/CoreAI/GuardAI.cpp @@ -61,7 +61,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 141b0a82082..5c87fc8806d 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -240,6 +240,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 c617066b375..8c9e6538ce0 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -702,6 +702,9 @@ void Creature::Update(uint32 diff) if (m_deathState != CORPSE) break; + if (IsEngaged()) + Unit::AIUpdateTick(diff); + if (m_groupLootTimer && lootingGroupLowGUID) { if (m_groupLootTimer <= diff) @@ -788,8 +791,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 @@ -3272,7 +3273,7 @@ void Creature::AtDisengage() Unit::AtDisengage(); ClearUnitState(UNIT_STATE_ATTACK_PLAYER); - if (HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED)) + if (IsAlive() && HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED)) SetUInt32Value(UNIT_DYNAMIC_FLAGS, 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 b69b16b9f41..de289fa04f5 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10950,8 +10950,6 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id) if (!creature->IsPet()) { - creature->GetThreatManager().ClearAllThreat(); - // must be after setDeathState which resets dynamic flags if (!creature->loot.isLooted()) creature->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); |