aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-01-08 00:26:08 +0100
committerOvahlord <dreadkiller@gmx.de>2025-01-09 20:53:53 +0100
commitefeb9add00cf930ff4911340b93f61a908b66e7c (patch)
tree443da0399f00d3a35990ba6a84dca4cbe2b31bfb
parent43c1a47c3da0c0be0b180d230b575bacb3485157 (diff)
Core/AreaTriggers: Don't suppress TimeToTarget changes in values update on movement start
(cherry picked from commit debbed0159fec031b4596295448e43d0fe071a01) # Conflicts: # src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp13
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h2
2 files changed, 5 insertions, 10 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 7178a58ae7f..10ceed362e3 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -1075,10 +1075,10 @@ void AreaTrigger::InitSplineOffsets(std::vector<Position> const& offsets, uint32
rotatedPoints.emplace_back(x, y, z);
}
- InitSplines(std::move(rotatedPoints), timeToTarget);
+ InitSplines(rotatedPoints, timeToTarget);
}
-void AreaTrigger::InitSplines(std::vector<G3D::Vector3> splinePoints, uint32 timeToTarget)
+void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, uint32 timeToTarget)
{
if (splinePoints.size() < 2)
return;
@@ -1086,15 +1086,10 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> splinePoints, uint32 tim
_movementTime = 0;
_spline = std::make_unique<::Movement::Spline<int32>>();
- _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<UF::AreaTriggerData&>(*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 db134bb3549..e52cfb58356 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -151,7 +151,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
Position const& GetRollPitchYaw() const { return _rollPitchYaw; }
Position const& GetTargetRollPitchYaw() const { return _targetRollPitchYaw; }
void InitSplineOffsets(std::vector<Position> const& offsets, uint32 timeToTarget);
- void InitSplines(std::vector<G3D::Vector3> splinePoints, uint32 timeToTarget);
+ void InitSplines(std::vector<G3D::Vector3> const& splinePoints, uint32 timeToTarget);
bool HasSplines() const;
::Movement::Spline<int32> const& GetSpline() const { return *_spline; }
uint32 GetElapsedTimeForMovement() const { return GetTimeSinceCreated(); } /// @todo: research the right value, in sniffs both timers are nearly identical