aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-11-26 16:52:42 +0100
committerShauren <shauren.trinity@gmail.com>2018-03-08 23:13:51 +0100
commit241109327bf573460d488d707d7eb19f82f1350c (patch)
tree32e59a9e43ce9e673094f86edee461f69a61d6c3 /src
parent592516ae69d89da3bcb0ede144644a3d2e0186e0 (diff)
Core/Creatures: Remove hover on death
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp7
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp3
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp8
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp1
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 c536e24312b..d2ffa162436 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1992,7 +1992,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);
@@ -3007,7 +3010,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 c55e6f49459..d27d6b89917 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -14065,7 +14065,8 @@ bool Unit::SetHover(bool enable, bool /*packetOnly = false*/)
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 0cda1e31113..c6fc79a51d0 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -464,11 +464,15 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
if (!fields[62].IsNull())
creatureTemplate.Movement.Ground = static_cast<CreatureGroundMovementType>(fields[62].GetUInt8());
- creatureTemplate.Movement.Swim = fields[63].GetBool();
+ if (!fields[63].IsNull())
+ creatureTemplate.Movement.Swim = fields[63].GetBool();
+
if (!fields[64].IsNull())
creatureTemplate.Movement.Flight = static_cast<CreatureFlightMovementType>(fields[64].GetUInt8());
- creatureTemplate.Movement.Rooted = fields[65].GetBool();
+ if (!fields[65].IsNull())
+ creatureTemplate.Movement.Rooted = fields[65].GetBool();
+
creatureTemplate.HoverHeight = fields[66].GetFloat();
creatureTemplate.ModHealth = fields[67].GetFloat();
creatureTemplate.ModMana = fields[68].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 b8516fd4eac..8f07b4db442 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -237,7 +237,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())