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

This commit is contained in:
ModoX
2024-04-21 12:59:12 +02:00
committed by Shauren
parent 377b51f768
commit a28facb956
3 changed files with 7 additions and 18 deletions

View File

@@ -571,7 +571,7 @@ void Unit::UpdateSplineMovement(uint32 t_diff)
WorldPackets::Movement::FlightSplineSync flightSplineSync;
flightSplineSync.Guid = GetGUID();
flightSplineSync.SplineDist = movespline->timePassed() / movespline->Duration();
flightSplineSync.SplineDist = float(movespline->timePassed()) / movespline->Duration();
SendMessageToSet(flightSplineSync.Write(), true);
}
}

View File

@@ -28,7 +28,7 @@ namespace Movement
class MoveSplineFlag
{
public:
enum eFlags
enum eFlags : uint32
{
None = 0x00000000,
Unknown_0x1 = 0x00000001, // NOT VERIFIED

View File

@@ -522,7 +522,6 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
WorldPackets::Movement::MovementSpline& movementSpline = SplineData.Move;
::Movement::MoveSplineFlag splineFlags = moveSpline.splineflags;
splineFlags.enter_cycle = moveSpline.isCyclic();
movementSpline.Flags = uint32(splineFlags & uint32(~::Movement::MoveSplineFlag::Mask_No_Monster_Move));
movementSpline.Face = moveSpline.facing.type;
movementSpline.FaceDirection = moveSpline.facing.angle;
@@ -564,24 +563,14 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
if (splineFlags & ::Movement::MoveSplineFlag::UncompressedPath)
{
if (!splineFlags.cyclic)
{
uint32 count = spline.getPointCount() - 3;
for (uint32 i = 0; i < count; ++i)
movementSpline.Points.emplace_back(array[i + 2].x, array[i + 2].y, array[i + 2].z);
}
else
{
uint32 count = spline.getPointCount() - 3;
movementSpline.Points.emplace_back(array[1].x, array[1].y, array[1].z);
for (uint32 i = 0; i < count; ++i)
movementSpline.Points.emplace_back(array[i + 1].x, array[i + 1].y, array[i + 1].z);
}
uint32 count = spline.getPointCount() - (splineFlags.cyclic ? 4 : 3);
for (uint32 i = 0; i < count; ++i)
movementSpline.Points.emplace_back(array[i + 2].x, array[i + 2].y, array[i + 2].z);
}
else
{
uint32 lastIdx = spline.getPointCount() - 3;
G3D::Vector3 const* realPath = &spline.getPoint(1);
uint32 lastIdx = spline.getPointCount() - (splineFlags.cyclic ? 4 : 3);
G3D::Vector3 const* realPath = &array[1];
movementSpline.Points.emplace_back(realPath[lastIdx].x, realPath[lastIdx].y, realPath[lastIdx].z);