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)
|
if (forceRespawnTimer > 0s)
|
||||||
m_respawnDelay = forceRespawnTimer.count();
|
m_respawnDelay = forceRespawnTimer.count();
|
||||||
|
|
||||||
if (IsAlive())
|
bool const wasAlive = IsAlive();
|
||||||
|
|
||||||
|
if (wasAlive)
|
||||||
setDeathState(DeathState::JustDied, true);
|
setDeathState(DeathState::JustDied, true);
|
||||||
|
|
||||||
// Xinef: Set new respawn time, ignore corpse decay time...
|
// Xinef: Set new respawn time, ignore corpse decay time...
|
||||||
// After setDeathState, m_respawnTime includes m_corpseDelay which we don't
|
// setDeathState(JustDied) folds m_corpseDelay into m_respawnTime, but a creature
|
||||||
// want for a forced respawn. Override it so RemoveCorpse's max() picks ours.
|
// despawned while alive never leaves a corpse, so the decay must not be charged.
|
||||||
if (forceRespawnTimer > 0s)
|
// Recompute so RemoveCorpse's max() has nothing stale to pick up.
|
||||||
m_respawnTime = GameTime::GetGameTime().count() + forceRespawnTimer.count();
|
if (forceRespawnTimer > 0s || wasAlive)
|
||||||
|
m_respawnTime = GameTime::GetGameTime().count() + m_respawnDelay;
|
||||||
|
|
||||||
RemoveCorpse(true);
|
RemoveCorpse(true);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user