mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Movement: Ensure land and takeoff animations even if gravity enabled/disabled state is not what spline generator expects
This commit is contained in:
@@ -12777,16 +12777,6 @@ bool Unit::SetDisableGravity(bool disable, bool updateAnimTier /*= true*/)
|
||||
SendMessageToSet(packet.Write(), true);
|
||||
}
|
||||
|
||||
if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT))
|
||||
{
|
||||
if (IsGravityDisabled())
|
||||
SetAnimTier(AnimTier::Fly);
|
||||
else if (IsHovering())
|
||||
SetAnimTier(AnimTier::Hover);
|
||||
else
|
||||
SetAnimTier(AnimTier::Ground);
|
||||
}
|
||||
|
||||
if (IsAlive())
|
||||
{
|
||||
if (IsGravityDisabled() || IsHovering())
|
||||
@@ -12797,6 +12787,16 @@ bool Unit::SetDisableGravity(bool disable, bool updateAnimTier /*= true*/)
|
||||
else if (IsPlayer()) // To update player who dies while flying/hovering
|
||||
SetPlayHoverAnim(false, false);
|
||||
|
||||
if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT))
|
||||
{
|
||||
if (IsGravityDisabled())
|
||||
SetAnimTier(AnimTier::Fly);
|
||||
else if (IsHovering())
|
||||
SetAnimTier(AnimTier::Hover);
|
||||
else
|
||||
SetAnimTier(AnimTier::Ground);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -13003,16 +13003,6 @@ bool Unit::SetHover(bool enable, bool updateAnimTier /*= true*/)
|
||||
SendMessageToSet(packet.Write(), true);
|
||||
}
|
||||
|
||||
if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT))
|
||||
{
|
||||
if (IsGravityDisabled())
|
||||
SetAnimTier(AnimTier::Fly);
|
||||
else if (IsHovering())
|
||||
SetAnimTier(AnimTier::Hover);
|
||||
else
|
||||
SetAnimTier(AnimTier::Ground);
|
||||
}
|
||||
|
||||
if (IsAlive())
|
||||
{
|
||||
if (IsGravityDisabled() || IsHovering())
|
||||
@@ -13023,6 +13013,16 @@ bool Unit::SetHover(bool enable, bool updateAnimTier /*= true*/)
|
||||
else if (IsPlayer()) // To update player who dies while flying/hovering
|
||||
SetPlayHoverAnim(false, false);
|
||||
|
||||
if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT))
|
||||
{
|
||||
if (IsGravityDisabled())
|
||||
SetAnimTier(AnimTier::Fly);
|
||||
else if (IsHovering())
|
||||
SetAnimTier(AnimTier::Hover);
|
||||
else
|
||||
SetAnimTier(AnimTier::Ground);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -713,6 +713,8 @@ void MotionMaster::MoveLand(uint32 id, Position const& pos, Optional<int32> tier
|
||||
{
|
||||
init.MoveTo(PositionToVector3(pos), false);
|
||||
init.SetAnimation(AnimTier::Ground, tierTransitionId.value_or(1));
|
||||
init.SetFly(); // ensure smooth animation even if gravity is enabled before calling this function
|
||||
init.SetSmooth();
|
||||
switch (speedSelectionMode)
|
||||
{
|
||||
case MovementWalkRunSpeedSelectionMode::ForceRun:
|
||||
@@ -740,7 +742,8 @@ void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, Optional<int32> t
|
||||
std::function<void(Movement::MoveSplineInit&)> initializer = [=](Movement::MoveSplineInit& init)
|
||||
{
|
||||
init.MoveTo(PositionToVector3(pos), false);
|
||||
init.SetAnimation(AnimTier::Hover, tierTransitionId.value_or(15));
|
||||
init.SetAnimation(AnimTier::Fly, tierTransitionId.value_or(2));
|
||||
init.SetFly(); // ensure smooth animation even if gravity is disabled after calling this function
|
||||
switch (speedSelectionMode)
|
||||
{
|
||||
case MovementWalkRunSpeedSelectionMode::ForceRun:
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
MovementGenerator::~MovementGenerator()
|
||||
{
|
||||
// Ensure script doesn't get stuck waiting for this movement
|
||||
SetScriptResult(MovementStopReason::Interrupted);
|
||||
}
|
||||
|
||||
|
||||
@@ -207,7 +207,8 @@ namespace Movement
|
||||
args.animTier.emplace();
|
||||
args.animTier->TierTransitionId = tierTransitionId;
|
||||
args.animTier->AnimTier = anim;
|
||||
args.flags.EnableAnimation();
|
||||
if (!tierTransitionId)
|
||||
args.flags.EnableAnimation();
|
||||
}
|
||||
|
||||
inline void MoveSplineInit::DisableTransportPathTransformations() { args.TransformForTransport = false; }
|
||||
|
||||
@@ -529,7 +529,7 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
|
||||
movementSpline.FaceGUID = moveSpline.facing.target;
|
||||
movementSpline.FaceSpot = Position(moveSpline.facing.f.x, moveSpline.facing.f.y, moveSpline.facing.f.z);
|
||||
|
||||
if (splineFlags.animation)
|
||||
if (moveSpline.anim_tier)
|
||||
{
|
||||
movementSpline.AnimTierTransition.emplace();
|
||||
movementSpline.AnimTierTransition->TierTransitionID = moveSpline.anim_tier->TierTransitionId;
|
||||
|
||||
Reference in New Issue
Block a user