diff --git a/Source/Game/Entities/Unit/Unit.Fields.cs b/Source/Game/Entities/Unit/Unit.Fields.cs index 785214922..919102a54 100644 --- a/Source/Game/Entities/Unit/Unit.Fields.cs +++ b/Source/Game/Entities/Unit/Unit.Fields.cs @@ -27,7 +27,6 @@ namespace Game.Entities public MoveSpline MoveSpline { get; set; } MotionMaster i_motionMaster; public uint m_movementCounter; //< Incrementing counter used in movement packets - TimeTracker splineSyncTimer; MovementForces _movementForces; PositionUpdateInfo _positionUpdateInfo; protected Unit m_unitMovedByMe; // only ever set for players, and only for direct client control diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index 48ee3dda6..20a19edae 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -1809,20 +1809,6 @@ namespace Game.Entities MoveSpline.UpdateState((int)diff); bool arrived = MoveSpline.Finalized(); - if (MoveSpline.IsCyclic()) - { - splineSyncTimer.Update(diff); - if (splineSyncTimer.Passed()) - { - splineSyncTimer.Reset(5000); // Retail value, do not change - - FlightSplineSync flightSplineSync = new(); - flightSplineSync.Guid = GetGUID(); - flightSplineSync.SplineDist = (float)MoveSpline.TimePassed() / MoveSpline.Duration(); - SendMessageToSet(flightSplineSync, true); - } - } - if (arrived) { DisableSpline(); @@ -1860,6 +1846,17 @@ namespace Game.Entities UpdatePosition(loc.X, loc.Y, loc.Z, loc.W); } + void SendFlightSplineSyncUpdate() + { + if (!MoveSpline.IsCyclic() || MoveSpline.Finalized()) + return; + + FlightSplineSync flightSplineSync = new(); + flightSplineSync.Guid = GetGUID(); + flightSplineSync.SplineDist = (float)MoveSpline.TimePassed() / MoveSpline.Duration(); + SendMessageToSet(flightSplineSync, true); + } + void InterruptMovementBasedAuras() { // TODO: Check if orientation transport offset changed instead of only global orientation diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 1dce8b7b9..2eb5b00fa 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -70,8 +70,6 @@ namespace Game.Entities m_serverSideVisibility.SetValue(ServerSideVisibilityType.Ghost, GhostVisibilityType.Alive); - splineSyncTimer = new TimeTracker(); - m_unitData = new UnitData(); } @@ -2557,6 +2555,14 @@ namespace Game.Entities return m_deathState; } + public override void Heartbeat() + { + base.Heartbeat(); + + // SMSG_FLIGHT_SPLINE_SYNC for cyclic splines + SendFlightSplineSyncUpdate(); + } + public bool HaveOffhandWeapon() { if (IsTypeId(TypeId.Player))