Core/Unit: Fix units on vehicles not dismounting on death (#25404)

* Core/Unit: Fix units on vehicles not dismounting on death

Closes #23095
Issue added in 982643cd96790ffc54e7a3e507469649f3b074d2

* Remove leftovers from previous tries

(cherry picked from commit ff26027453179448bb972d88a51e565d71e95f3f)
This commit is contained in:
Giacomo Pozzoni
2022-02-05 13:08:34 +01:00
committed by Shauren
parent 341ef2c0dd
commit b45277f1cf
+19 -10
View File
@@ -8216,6 +8216,8 @@ void Unit::setDeathState(DeathState s)
// Death state needs to be updated before RemoveAllAurasOnDeath() is called, to prevent entering combat
m_deathState = s;
bool isOnVehicle = GetVehicle() != nullptr;
if (s != ALIVE && s != JUST_RESPAWNED)
{
CombatStop();
@@ -8236,18 +8238,25 @@ void Unit::setDeathState(DeathState s)
// remove aurastates allowing special moves
ClearAllReactives();
ClearDiminishings();
if (IsInWorld())
// Don't clear the movement if the Unit was on a vehicle as we are exiting now
if (!isOnVehicle)
{
// Only clear MotionMaster for entities that exists in world
// Avoids crashes in the following conditions :
// * Using 'call pet' on dead pets
// * Using 'call stabled pet'
// * Logging in with dead pets
GetMotionMaster()->Clear();
GetMotionMaster()->MoveIdle();
if (IsInWorld())
{
// Only clear MotionMaster for entities that exists in world
// Avoids crashes in the following conditions :
// * Using 'call pet' on dead pets
// * Using 'call stabled pet'
// * Logging in with dead pets
GetMotionMaster()->Clear();
GetMotionMaster()->MoveIdle();
}
StopMoving();
DisableSpline();
}
StopMoving();
DisableSpline();
// without this when removing IncreaseMaxHealth aura player may stuck with 1 hp
// do not why since in IncreaseMaxHealth currenthealth is checked
SetHealth(0);