diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-11-26 16:52:42 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-08-24 13:45:34 +0200 |
commit | a91edcb9524b53f027a8ef8c247a443a9bb42f1e (patch) | |
tree | 6f31957a7949f1ab8edaaddf31a23e093e4fb045 | |
parent | f8c03a90661610e289029c78d2055d7b73a5ad98 (diff) |
Core/Creatures: Remove hover on death
(cherry picked from commit 241109327bf573460d488d707d7eb19f82f1350c)
4 files changed, 13 insertions, 6 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index c4e7628bc82..1e5a42060cb 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2140,7 +2140,10 @@ void Creature::setDeathState(DeathState s) if (m_formation && m_formation->GetLeader() == this) m_formation->FormationReset(true); - if ((CanFly() || IsFlying())) + bool needsFalling = IsFlying() || IsHovering(); + SetHover(false); + + if (needsFalling) GetMotionMaster()->MoveFall(); Unit::setDeathState(CORPSE); @@ -3150,7 +3153,7 @@ void Creature::UpdateMovementFlags() { SetCanFly(false); SetDisableGravity(false); - if (CanHover() || HasAuraType(SPELL_AURA_HOVER)) + if (IsAlive() && (CanHover() || HasAuraType(SPELL_AURA_HOVER))) SetHover(true); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 20a398649bd..d837eb58571 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13532,7 +13532,8 @@ bool Unit::SetHover(bool enable) else { RemoveUnitMovementFlag(MOVEMENTFLAG_HOVER); - if (hoverHeight) + //! Dying creatures will MoveFall from setDeathState + if (hoverHeight && (!isDying() || GetTypeId() != TYPEID_UNIT)) { float newZ = GetPositionZ() - hoverHeight; UpdateAllowedPositionZ(GetPositionX(), GetPositionY(), newZ); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index aa2bfbaf780..e341794b7a3 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -456,11 +456,15 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) if (!fields[60].IsNull()) creatureTemplate.Movement.Ground = static_cast<CreatureGroundMovementType>(fields[60].GetUInt8()); - creatureTemplate.Movement.Swim = fields[61].GetBool(); + if (!fields[61].IsNull()) + creatureTemplate.Movement.Swim = fields[61].GetBool(); + if (!fields[62].IsNull()) creatureTemplate.Movement.Flight = static_cast<CreatureFlightMovementType>(fields[62].GetUInt8()); - creatureTemplate.Movement.Rooted = fields[63].GetBool(); + if (!fields[63].IsNull()) + creatureTemplate.Movement.Rooted = fields[63].GetBool(); + creatureTemplate.HoverHeight = fields[64].GetFloat(); creatureTemplate.ModHealth = fields[65].GetFloat(); creatureTemplate.ModHealthExtra = fields[66].GetFloat(); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index a4344de59c9..e70810e6182 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -228,7 +228,6 @@ struct boss_twin_baseAI : public BossAI void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); - me->SetHover(false); if (Creature* pSister = GetSister()) { if (!pSister->IsAlive()) |