From 47d387d6b0d123334e4721c55426c1d236297112 Mon Sep 17 00:00:00 2001 From: ariel- Date: Sat, 27 May 2017 02:21:06 -0300 Subject: Core/Creature: fix _DespawnAtEvade saving wrong respawn time Closes #19557 --- src/server/game/AI/ScriptedAI/ScriptedCreature.cpp | 2 +- src/server/game/Entities/Creature/Creature.cpp | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) (limited to 'src') 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*/) -- cgit v1.2.3