mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-05 22:37:57 +00:00
fix(Core/Creature): don't charge corpse decay time on forced despawn of a living creature (#26827)
This commit is contained in:
@@ -2172,14 +2172,17 @@ void Creature::ForcedDespawn(Milliseconds timeMSToDespawn, Seconds forceRespawnT
|
||||
if (forceRespawnTimer > 0s)
|
||||
m_respawnDelay = forceRespawnTimer.count();
|
||||
|
||||
if (IsAlive())
|
||||
bool const wasAlive = IsAlive();
|
||||
|
||||
if (wasAlive)
|
||||
setDeathState(DeathState::JustDied, true);
|
||||
|
||||
// Xinef: Set new respawn time, ignore corpse decay time...
|
||||
// After setDeathState, m_respawnTime includes m_corpseDelay which we don't
|
||||
// want for a forced respawn. Override it so RemoveCorpse's max() picks ours.
|
||||
if (forceRespawnTimer > 0s)
|
||||
m_respawnTime = GameTime::GetGameTime().count() + forceRespawnTimer.count();
|
||||
// setDeathState(JustDied) folds m_corpseDelay into m_respawnTime, but a creature
|
||||
// despawned while alive never leaves a corpse, so the decay must not be charged.
|
||||
// Recompute so RemoveCorpse's max() has nothing stale to pick up.
|
||||
if (forceRespawnTimer > 0s || wasAlive)
|
||||
m_respawnTime = GameTime::GetGameTime().count() + m_respawnDelay;
|
||||
|
||||
RemoveCorpse(true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user