Core/Movement: Fixed data sent in cyclic spline related packets

Port From (https://github.com/TrinityCore/TrinityCore/commit/a28facb95633435f89f134eec55a4a545251be9b)
This commit is contained in:
Hondacrx
2024-08-18 21:25:52 -04:00
parent 7d83729d84
commit 6356f68143
2 changed files with 6 additions and 17 deletions
+1 -1
View File
@@ -1818,7 +1818,7 @@ namespace Game.Entities
FlightSplineSync flightSplineSync = new(); FlightSplineSync flightSplineSync = new();
flightSplineSync.Guid = GetGUID(); flightSplineSync.Guid = GetGUID();
flightSplineSync.SplineDist = MoveSpline.TimePassed() / MoveSpline.Duration(); flightSplineSync.SplineDist = (float)MoveSpline.TimePassed() / MoveSpline.Duration();
SendMessageToSet(flightSplineSync, true); SendMessageToSet(flightSplineSync, true);
} }
} }
@@ -396,7 +396,6 @@ namespace Game.Networking.Packets
MovementSpline movementSpline = SplineData.Move; MovementSpline movementSpline = SplineData.Move;
MoveSplineFlag splineFlags = moveSpline.splineflags; MoveSplineFlag splineFlags = moveSpline.splineflags;
splineFlags.SetUnsetFlag(SplineFlag.Cyclic, moveSpline.IsCyclic());
movementSpline.Flags = (uint)(splineFlags.Flags & ~SplineFlag.MaskNoMonsterMove); movementSpline.Flags = (uint)(splineFlags.Flags & ~SplineFlag.MaskNoMonsterMove);
movementSpline.Face = moveSpline.facing.type; movementSpline.Face = moveSpline.facing.type;
movementSpline.FaceDirection = moveSpline.facing.angle; movementSpline.FaceDirection = moveSpline.facing.angle;
@@ -441,24 +440,14 @@ namespace Game.Networking.Packets
if (splineFlags.HasFlag(SplineFlag.UncompressedPath)) if (splineFlags.HasFlag(SplineFlag.UncompressedPath))
{ {
if (!splineFlags.HasFlag(SplineFlag.Cyclic)) int count = spline.GetPointCount() - (splineFlags.HasFlag(SplineFlag.Cyclic) ? 4 : 3);
{ for (int i = 0; i < count; ++i)
int count = spline.GetPointCount() - 3; movementSpline.Points.Add(new Vector3(array[i + 2].X, array[i + 2].Y, array[i + 2].Z));
for (uint i = 0; i < count; ++i)
movementSpline.Points.Add(array[i + 2]);
}
else
{
int count = spline.GetPointCount() - 3;
movementSpline.Points.Add(array[1]);
for (uint i = 0; i < count; ++i)
movementSpline.Points.Add(array[i + 1]);
}
} }
else else
{ {
int lastIdx = spline.GetPointCount() - 3; int lastIdx = spline.GetPointCount() - (splineFlags.HasFlag(SplineFlag.Cyclic) ? 4 : 3);
Span<Vector3> realPath = new Span<Vector3>(spline.GetPoints()).Slice(1); Vector3[] realPath = array[1..];
movementSpline.Points.Add(realPath[lastIdx]); movementSpline.Points.Add(realPath[lastIdx]);