Core/Creature: fix _DespawnAtEvade saving wrong respawn time

Closes #19557

(cherry picked from commit 47d387d6b0)
This commit is contained in:
ariel-
2017-05-27 02:21:06 -03:00
committed by funjoker
parent 25f47e4680
commit 6fa8b8e1d5
2 changed files with 17 additions and 10 deletions

View File

@@ -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)
{

View File

@@ -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*/)