aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2023-11-25 14:04:33 +0100
committerGitHub <noreply@github.com>2023-11-25 14:04:33 +0100
commitc1b36eec5678090654dfd65a3fef29ea8ada6ef2 (patch)
tree591eba3a01a109334c05144a68f738bd61f3cc1e
parent1c6ee8a6bd4330625f6b1b90706ebbcb9536246d (diff)
Core/Units: Update PlayHoverAnim state when flying or hovering (#29434)
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp28
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/scripts/BrokenIsles/zone_mardum.cpp1
-rw-r--r--src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp1
4 files changed, 28 insertions, 4 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 21f90eb1f83..5b6c1001385 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12839,6 +12839,16 @@ bool Unit::SetDisableGravity(bool disable, bool updateAnimTier /*= true*/)
SetAnimTier(AnimTier::Ground);
}
+ if (IsAlive())
+ {
+ if (IsGravityDisabled() || IsHovering())
+ SetPlayHoverAnim(true);
+ else
+ SetPlayHoverAnim(false);
+ }
+ else if (IsPlayer()) // To update player who dies while flying/hovering
+ SetPlayHoverAnim(false, false);
+
return true;
}
@@ -13055,6 +13065,16 @@ bool Unit::SetHover(bool enable, bool updateAnimTier /*= true*/)
SetAnimTier(AnimTier::Ground);
}
+ if (IsAlive())
+ {
+ if (IsGravityDisabled() || IsHovering())
+ SetPlayHoverAnim(true);
+ else
+ SetPlayHoverAnim(false);
+ }
+ else if (IsPlayer()) // To update player who dies while flying/hovering
+ SetPlayHoverAnim(false, false);
+
return true;
}
@@ -13366,10 +13386,16 @@ void Unit::UpdateMovementForcesModMagnitude()
}
}
-void Unit::SetPlayHoverAnim(bool enable)
+void Unit::SetPlayHoverAnim(bool enable, bool sendUpdate /*= true*/)
{
+ if (IsPlayingHoverAnim() == enable)
+ return;
+
_playHoverAnim = enable;
+ if (!sendUpdate)
+ return;
+
WorldPackets::Misc::SetPlayHoverAnim data;
data.UnitGUID = GetGUID();
data.PlayHoverAnim = enable;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 2d550ffa26f..a07883dc296 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1237,7 +1237,7 @@ class TC_GAME_API Unit : public WorldObject
void MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath = false, bool forceDestination = false);
bool IsPlayingHoverAnim() const { return _playHoverAnim; }
- void SetPlayHoverAnim(bool enable);
+ void SetPlayHoverAnim(bool enable, bool sendUpdate = true);
void CalculateHoverHeight();
void SetHoverHeight(float hoverHeight) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::HoverHeight), hoverHeight); }
diff --git a/src/server/scripts/BrokenIsles/zone_mardum.cpp b/src/server/scripts/BrokenIsles/zone_mardum.cpp
index e01c5f9d638..d35adf8a09a 100644
--- a/src/server/scripts/BrokenIsles/zone_mardum.cpp
+++ b/src/server/scripts/BrokenIsles/zone_mardum.cpp
@@ -1128,7 +1128,6 @@ struct npc_baleful_beaming_eye : public ScriptedAI
void JustAppeared() override
{
me->SetDisplayId(DISPLAYID_BALEFUL_EYE, true);
- me->SetPlayHoverAnim(true);
DoCastSelf(SPELL_BALEFUL_BEAMING_EYE_CREATE_AT);
// ToDo: rotation isn't changing orientation, turnspeed should be random
me->GetMotionMaster()->MoveRotate(0, 10000, RAND(ROTATE_DIRECTION_LEFT, ROTATE_DIRECTION_RIGHT));
diff --git a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
index 258561f3235..02ce46f3d00 100644
--- a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
+++ b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
@@ -1372,7 +1372,6 @@ struct npc_anduin_wrynn_anduin_soul : public ScriptedAI
{
me->SetDisableGravity(true, true);
me->SetHoverHeight(1.0);
- me->SetPlayHoverAnim(true);
DoCastSelf(SPELL_LOST_SOUL_PERIODIC);
}