aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-05-27 02:21:06 -0300
committerfunjoker <funjoker109@gmail.com>2020-06-14 23:49:04 +0200
commit6fa8b8e1d57f992e14eec3b511bf827ebdd1c9ea (patch)
treedb3d4b9e0d98cfa945bb93c7bb65d35020417e97
parent25f47e468060407610c14b46e857ba1b9cc94203 (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.cpp2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp25
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*/)