diff options
author | Meji <alvaro.megias@outlook.com> | 2023-11-25 14:04:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-25 14:04:33 +0100 |
commit | c1b36eec5678090654dfd65a3fef29ea8ada6ef2 (patch) | |
tree | 591eba3a01a109334c05144a68f738bd61f3cc1e | |
parent | 1c6ee8a6bd4330625f6b1b90706ebbcb9536246d (diff) |
Core/Units: Update PlayHoverAnim state when flying or hovering (#29434)
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); } |