From debbed0159fec031b4596295448e43d0fe071a01 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 8 Jan 2025 00:26:08 +0100 Subject: [PATCH] Core/AreaTriggers: Don't suppress TimeToTarget changes in values update on movement start --- .../game/Entities/AreaTrigger/AreaTrigger.cpp | 13 ++++--------- src/server/game/Entities/AreaTrigger/AreaTrigger.h | 2 +- .../SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp | 4 ++-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 0fe2c5c684c1e..8c749bc6b2eba 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -1086,10 +1086,10 @@ void AreaTrigger::InitSplineOffsets(std::vector const& offsets, uint32 rotatedPoints.emplace_back(x, y, z); } - InitSplines(std::move(rotatedPoints), timeToTarget); + InitSplines(rotatedPoints, timeToTarget); } -void AreaTrigger::InitSplines(std::vector splinePoints, uint32 timeToTarget) +void AreaTrigger::InitSplines(std::vector const& splinePoints, uint32 timeToTarget) { if (splinePoints.size() < 2) return; @@ -1097,15 +1097,10 @@ void AreaTrigger::InitSplines(std::vector splinePoints, uint32 tim _movementTime = 0; _spline = std::make_unique<::Movement::Spline>(); - _spline->init_spline(&splinePoints[0], splinePoints.size(), ::Movement::SplineBase::ModeLinear); + _spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear); _spline->initLengths(); - // should be sent in object create packets only - DoWithSuppressingObjectUpdates([&]() - { - SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget); - const_cast(*m_areaTriggerData).ClearChanged(&UF::AreaTriggerData::TimeToTarget); - }); + SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget); if (IsInWorld()) { diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index c1fc706d191ec..90b4b299c1797 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -153,7 +153,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject const& offsets, uint32 timeToTarget); - void InitSplines(std::vector splinePoints, uint32 timeToTarget); + void InitSplines(std::vector const& splinePoints, uint32 timeToTarget); bool HasSplines() const; ::Movement::Spline const& GetSpline() const { return *_spline; } uint32 GetElapsedTimeForMovement() const { return GetTimeSinceCreated(); } /// @todo: research the right value, in sniffs both timers are nearly identical diff --git a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp index 26ca7bd01266a..871c4d33beffd 100644 --- a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp +++ b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp @@ -2957,7 +2957,7 @@ struct at_anduin_wrynn_wicked_star : AreaTriggerAI splinePoints.push_back(PositionToVector3(at->GetPosition())); float timeToTarget = at->GetDistance(destPos.GetPositionX(), destPos.GetPositionY(), destPos.GetPositionZ()) * 2 / GetWickedStarSpeed(at->GetMap()->GetDifficultyID()) * 1000; - at->InitSplines(std::move(splinePoints), timeToTarget); + at->InitSplines(splinePoints, timeToTarget); } } @@ -3021,7 +3021,7 @@ struct at_anduin_wrynn_empowered_wicked_star : public at_anduin_wrynn_wicked_sta splinePoints.push_back(PositionToVector3(destPos)); float timeToTarget = at->GetDistance(destPos.GetPositionX(), destPos.GetPositionY(), destPos.GetPositionZ()) / EMPOWERED_WICKED_STAR_SPEED * 1000; - at->InitSplines(std::move(splinePoints), timeToTarget); + at->InitSplines(splinePoints, timeToTarget); } void OnInitialize() override