From 86367129385eadaeffd41f7e4fed35ba0972cddc Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 24 Aug 2021 12:27:36 -0400 Subject: [PATCH] Core/Creatures: Remove hover on death Port From (https://github.com/TrinityCore/TrinityCore/commit/a91edcb9524b53f027a8ef8c247a443a9bb42f1e) --- Source/Game/Entities/Creature/Creature.cs | 7 +++++-- Source/Game/Entities/Creature/CreatureData.cs | 10 ++++------ Source/Game/Entities/Unit/Unit.Movement.cs | 4 +++- Source/Game/Globals/ObjectManager.cs | 9 ++++++--- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index d74ec70f3..55eaad79a 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -1824,7 +1824,10 @@ namespace Game.Entities if (m_formation != null && m_formation.GetLeader() == this) m_formation.FormationReset(true); - if ((CanFly() || IsFlying())) + bool needsFalling = IsFlying() || IsHovering(); + SetHover(false); + + if (needsFalling) GetMotionMaster().MoveFall(); base.SetDeathState(DeathState.Corpse); @@ -2848,7 +2851,7 @@ namespace Game.Entities { SetCanFly(false); SetDisableGravity(false); - if (CanHover() || HasAuraType(AuraType.Hover)) + if (IsAlive() && (CanHover() || HasAuraType(AuraType.Hover))) SetHover(true); } diff --git a/Source/Game/Entities/Creature/CreatureData.cs b/Source/Game/Entities/Creature/CreatureData.cs index fa3ae06cb..a1f69ad14 100644 --- a/Source/Game/Entities/Creature/CreatureData.cs +++ b/Source/Game/Entities/Creature/CreatureData.cs @@ -362,12 +362,10 @@ namespace Game.Entities Rooted = false; } - - - bool IsGroundAllowed() { return Ground != CreatureGroundMovementType.None; } - bool IsSwimAllowed() { return Swim; } - bool IsFlightAllowed() { return Flight != CreatureFlightMovementType.None; } - bool IsRooted() { return Rooted; } + public bool IsGroundAllowed() { return Ground != CreatureGroundMovementType.None; } + public bool IsSwimAllowed() { return Swim; } + public bool IsFlightAllowed() { return Flight != CreatureFlightMovementType.None; } + public bool IsRooted() { return Rooted; } public override string ToString() { diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index 73d26daa8..485f3e3c6 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -989,7 +989,9 @@ namespace Game.Entities else { RemoveUnitMovementFlag(MovementFlag.Hover); - if (hoverHeight != 0) + + //! Dying creatures will MoveFall from setDeathState + if (hoverHeight != 0 && (!IsDying() || !IsUnit())) { float newZ = GetPositionZ() - hoverHeight; UpdateAllowedPositionZ(GetPositionX(), GetPositionY(), ref newZ); diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 2d92e6327..89cdecc38 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -1813,12 +1813,15 @@ namespace Game if (!fields.IsNull(60)) creature.Movement.Ground = (CreatureGroundMovementType)fields.Read(60); - creature.Movement.Swim = fields.Read(61); + if (!fields.IsNull(61)) + creature.Movement.Swim = fields.Read(61); + if (!fields.IsNull(62)) creature.Movement.Flight = (CreatureFlightMovementType)fields.Read(62); + if (!fields.IsNull(63)) + creature.Movement.Rooted = fields.Read(63); - creature.Movement.Rooted = fields.Read(63); creature.HoverHeight = fields.Read(64); creature.ModHealth = fields.Read(65); creature.ModHealthExtra = fields.Read(66); @@ -4966,7 +4969,7 @@ namespace Game } public CreatureMovementData GetCreatureMovementOverride(ulong spawnId) { - return creatureMovementOverrides.lookupbykey(spawnId); + return creatureMovementOverrides.LookupByKey(spawnId); } public EquipmentInfo GetEquipmentInfo(uint entry, int id) {