diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index 98c7676ae..6567ce1d1 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -754,16 +754,6 @@ namespace Game.Entities SendMessageToSet(packet, true); } - if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root)) - { - if (IsGravityDisabled()) - SetAnimTier(AnimTier.Fly); - else if (IsHovering()) - SetAnimTier(AnimTier.Hover); - else - SetAnimTier(AnimTier.Ground); - } - if (IsAlive()) { if (IsGravityDisabled() || IsHovering()) @@ -774,6 +764,16 @@ namespace Game.Entities else if (IsPlayer()) // To update player who dies while flying/hovering SetPlayHoverAnim(false, false); + if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root)) + { + if (IsGravityDisabled()) + SetAnimTier(AnimTier.Fly); + else if (IsHovering()) + SetAnimTier(AnimTier.Hover); + else + SetAnimTier(AnimTier.Ground); + } + return true; } @@ -1137,16 +1137,6 @@ namespace Game.Entities SendMessageToSet(packet, true); } - if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root)) - { - if (IsGravityDisabled()) - SetAnimTier(AnimTier.Fly); - else if (IsHovering()) - SetAnimTier(AnimTier.Hover); - else - SetAnimTier(AnimTier.Ground); - } - if (IsAlive()) { if (IsGravityDisabled() || IsHovering()) @@ -1157,6 +1147,16 @@ namespace Game.Entities else if (IsPlayer()) // To update player who dies while flying/hovering SetPlayHoverAnim(false, false); + if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UnitState.Root)) + { + if (IsGravityDisabled()) + SetAnimTier(AnimTier.Fly); + else if (IsHovering()) + SetAnimTier(AnimTier.Hover); + else + SetAnimTier(AnimTier.Ground); + } + return true; } diff --git a/Source/Game/Movement/Generators/MovementGenerators.cs b/Source/Game/Movement/Generators/MovementGenerators.cs index 58fb4567f..6f5870624 100644 --- a/Source/Game/Movement/Generators/MovementGenerators.cs +++ b/Source/Game/Movement/Generators/MovementGenerators.cs @@ -17,6 +17,12 @@ namespace Game.Movement public UnitState BaseUnitState; public TaskCompletionSource ScriptResult; + ~MovementGenerator() + { + // Ensure script doesn't get stuck waiting for this movement + SetScriptResult(MovementStopReason.Interrupted); + } + // on top first update public virtual void Initialize(Unit owner) { } diff --git a/Source/Game/Movement/MotionMaster.cs b/Source/Game/Movement/MotionMaster.cs index 23b160964..dbd28ad23 100644 --- a/Source/Game/Movement/MotionMaster.cs +++ b/Source/Game/Movement/MotionMaster.cs @@ -645,6 +645,8 @@ namespace Game.Movement { init.MoveTo(pos, false); init.SetAnimation(AnimTier.Ground, tierTransitionId.GetValueOrDefault(1)); + init.SetFly(); // ensure smooth animation even if gravity is enabled before calling this function + init.SetSmooth(); switch (speedSelectionMode) { case MovementWalkRunSpeedSelectionMode.ForceRun: @@ -669,7 +671,8 @@ namespace Game.Movement var initializer = (MoveSplineInit init) => { init.MoveTo(pos, false); - init.SetAnimation(AnimTier.Hover, tierTransitionId.GetValueOrDefault(15)); + init.SetAnimation(AnimTier.Fly, tierTransitionId.GetValueOrDefault(2)); + init.SetFly(); // ensure smooth animation even if gravity is disabled after calling this function switch (speedSelectionMode) { case MovementWalkRunSpeedSelectionMode.ForceRun: diff --git a/Source/Game/Movement/MoveSplineInit.cs b/Source/Game/Movement/MoveSplineInit.cs index 0f9feeece..0f93032f8 100644 --- a/Source/Game/Movement/MoveSplineInit.cs +++ b/Source/Game/Movement/MoveSplineInit.cs @@ -321,7 +321,8 @@ namespace Game.Movement args.animTier = new(); args.animTier.TierTransitionId = tierTransitionId; args.animTier.AnimTier = (byte)anim; - args.flags.EnableAnimation(); + if (tierTransitionId == 0) + args.flags.EnableAnimation(); } public void DisableTransportPathTransformations() { args.TransformForTransport = false; } diff --git a/Source/Game/Networking/Packets/MovementPackets.cs b/Source/Game/Networking/Packets/MovementPackets.cs index a16b8813a..51cb6ea2e 100644 --- a/Source/Game/Networking/Packets/MovementPackets.cs +++ b/Source/Game/Networking/Packets/MovementPackets.cs @@ -403,7 +403,7 @@ namespace Game.Networking.Packets movementSpline.FaceGUID = moveSpline.facing.target; movementSpline.FaceSpot = moveSpline.facing.f; - if (splineFlags.HasFlag(SplineFlag.Animation)) + if (moveSpline.anim_tier != null) { MonsterSplineAnimTierTransition animTierTransition = new(); animTierTransition.TierTransitionID = (int)moveSpline.anim_tier.TierTransitionId;