diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-05-27 02:21:06 -0300 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2020-06-14 23:49:04 +0200 |
commit | 6fa8b8e1d57f992e14eec3b511bf827ebdd1c9ea (patch) | |
tree | db3d4b9e0d98cfa945bb93c7bb65d35020417e97 | |
parent | 25f47e468060407610c14b46e857ba1b9cc94203 (diff) |
Core/Creature: fix _DespawnAtEvade saving wrong respawn time
Closes #19557
(cherry picked from commit 47d387d6b0d123334e4721c55426c1d236297112)
-rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedCreature.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 25 |
2 files changed, 17 insertions, 10 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 71125e716a6..bde3a192642 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -537,7 +537,7 @@ bool BossAI::CanAIAttack(Unit const* target) const return CheckBoundary(target); } -void BossAI::_DespawnAtEvade(uint32 delayToRespawn, Creature* who) +void BossAI::_DespawnAtEvade(uint32 delayToRespawn /*= 30*/, Creature* who /*= nullptr*/) { if (delayToRespawn < 2) { diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 1d17e161b47..663976fca6a 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2048,27 +2048,34 @@ void Creature::ForcedDespawn(uint32 timeMSToDespawn, Seconds const& forceRespawn { if (timeMSToDespawn) { - ForcedDespawnDelayEvent* pEvent = new ForcedDespawnDelayEvent(*this, forceRespawnTimer); - - m_Events.AddEvent(pEvent, m_Events.CalculateTime(timeMSToDespawn)); + m_Events.AddEvent(new ForcedDespawnDelayEvent(*this, forceRespawnTimer), m_Events.CalculateTime(timeMSToDespawn)); return; } + uint32 corpseDelay = GetCorpseDelay(); + uint32 respawnDelay = GetRespawnDelay(); + // do it before killing creature DestroyForNearbyPlayers(); + bool overrideRespawnTime = false; if (IsAlive()) - setDeathState(JUST_DIED); - - bool overrideRespawnTime = true; - if (forceRespawnTimer > Seconds::zero()) { - SetRespawnTime(forceRespawnTimer.count()); - overrideRespawnTime = false; + if (forceRespawnTimer > Seconds::zero()) + { + SetCorpseDelay(0); + SetRespawnDelay(forceRespawnTimer.count()); + overrideRespawnTime = false; + } + + setDeathState(JUST_DIED); } // Skip corpse decay time RemoveCorpse(overrideRespawnTime, false); + + SetCorpseDelay(corpseDelay); + SetRespawnDelay(respawnDelay); } void Creature::DespawnOrUnsummon(uint32 msTimeToDespawn /*= 0*/, Seconds const& forceRespawnTimer /*= 0*/) |