aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-05-27 02:21:06 -0300
committerariel- <ariel-@users.noreply.github.com>2017-05-27 02:21:06 -0300
commit47d387d6b0d123334e4721c55426c1d236297112 (patch)
treed532456a9c46723f4d633367b252f63a83cba3d6 /src
parent2f19d97d210c70eade4fb87c1d86642d77bbcd69 (diff)
Core/Creature: fix _DespawnAtEvade saving wrong respawn time
Closes #19557
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp17
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*/)