diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-05-27 02:21:06 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-05-27 02:21:06 -0300 |
commit | 47d387d6b0d123334e4721c55426c1d236297112 (patch) | |
tree | d532456a9c46723f4d633367b252f63a83cba3d6 /src | |
parent | 2f19d97d210c70eade4fb87c1d86642d77bbcd69 (diff) |
Core/Creature: fix _DespawnAtEvade saving wrong respawn time
Closes #19557
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedCreature.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 17 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 16ccf98591f..34706b6e882 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -513,7 +513,7 @@ void BossAI::UpdateAI(uint32 diff) DoMeleeAttackIfReady(); } -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 77cebcd370f..6e22bc0d0b8 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1885,29 +1885,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 = true; if (IsAlive()) { - setDeathState(JUST_DIED); - if (forceRespawnTimer > Seconds::zero()) { - SetRespawnTime(forceRespawnTimer.count()); + 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*/) |