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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user