From 5e8adaabcc1bef7563036d3765a0c13894e860f7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 29 May 2025 12:53:58 +0200 Subject: Core/AreaTriggers: Fixed areatrigger spline duration calculation --- src/server/game/Entities/AreaTrigger/AreaTrigger.cpp | 14 +++++++------- src/server/game/Entities/AreaTrigger/AreaTrigger.h | 4 ++-- src/server/game/Server/Packets/MovementPackets.cpp | 2 +- src/server/game/Server/Packets/MovementPackets.h | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index a0b0ccb22d9..90874333897 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -347,7 +347,7 @@ void AreaTrigger::Update(uint32 diff) { float orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress()); if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation)) - orientation += GetStationaryO(); + orientation += _stationaryPosition.GetOrientation(); SetOrientation(orientation); } @@ -1094,8 +1094,8 @@ void AreaTrigger::InitSplines(std::vector const& splinePoints, Opt _movementTime = 0; - std::unique_ptr> spline = std::make_unique<::Movement::Spline>(); - spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear, GetStationaryO()); + std::unique_ptr> spline = std::make_unique<::Movement::Spline>(); + spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear, _stationaryPosition.GetOrientation()); spline->initLengths(); float speed = overrideSpeed.value_or(GetCreateProperties()->Speed); @@ -1131,7 +1131,7 @@ void AreaTrigger::InitSplines(std::vector const& splinePoints, Opt bool AreaTrigger::HasSplines() const { - return std::holds_alternative>>(_movement); + return std::holds_alternative>>(_movement); } void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional overrideSpeed) @@ -1259,7 +1259,7 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff) _movementTime += diff; - Movement::Spline& spline = *std::get>>(_movement); + Movement::Spline& spline = **std::get_if>>(&_movement); if (_movementTime >= GetTimeToTarget()) { @@ -1302,7 +1302,7 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff) G3D::Vector3 currentPosition; spline.evaluate_percent(lastPositionIndex, percentFromLastPoint, currentPosition); - float orientation = GetStationaryO(); + float orientation = _stationaryPosition.GetOrientation(); if (createProperties && createProperties->FacingCurveId) orientation += sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress()); @@ -1341,7 +1341,7 @@ void AreaTrigger::UpdateOverridePosition() { orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress()); if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation)) - orientation += GetStationaryO(); + orientation += _stationaryPosition.GetOrientation(); } } diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index 56ebef02f5d..fc42273f5d2 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -155,7 +155,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject const& offsets, Optional overrideSpeed = {}); void InitSplines(std::vector const& splinePoints, Optional overrideSpeed = {}); bool HasSplines() const; - ::Movement::Spline const& GetSpline() const { return *std::get>>(_movement); } + ::Movement::Spline const& GetSpline() const { return *std::get>>(_movement); } uint32 GetElapsedTimeForMovement() const { return GetTimeSinceCreated(); } /// @todo: research the right value, in sniffs both timers are nearly identical void InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional overrideSpeed = {}); @@ -223,7 +223,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject _polygonVertices; - std::variant>, std::unique_ptr> _movement; + std::variant>, std::unique_ptr> _movement; bool _reachedDestination; int32 _lastSplineIndex; diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 0075307b107..ac5413d59f2 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -513,7 +513,7 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con } } -void CommonMovement::WriteCreateObjectAreaTriggerSpline(::Movement::Spline const& spline, ByteBuffer& data) +void CommonMovement::WriteCreateObjectAreaTriggerSpline(::Movement::Spline const& spline, ByteBuffer& data) { data << BitsSize<16>(spline.getPoints()); data.append(reinterpret_cast(spline.getPoints().data()), spline.getPoints().size() * 3); diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 71a51a5b9b4..020305d0b49 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -148,7 +148,7 @@ namespace WorldPackets { public: static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const& moveSpline, ByteBuffer& data); - static void WriteCreateObjectAreaTriggerSpline(::Movement::Spline const& spline, ByteBuffer& data); + static void WriteCreateObjectAreaTriggerSpline(::Movement::Spline const& spline, ByteBuffer& data); static void WriteMovementForceWithDirection(MovementForce const& movementForce, ByteBuffer& data, Position const* objectPosition = nullptr); }; -- cgit v1.2.3