aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-01-10 21:22:28 +0100
committerOvahlord <dreadkiller@gmx.de>2025-01-10 22:47:14 +0100
commit2693d73383d46240f9726123ddab8c80c37533d8 (patch)
tree401ecc02aaf63945efc5ff1dae95808e78125785
parent4bc721aa25487ef55f7ee31b504d717f958e4276 (diff)
Core/AreaTriggers: Replace fixed movement times in database for areatriggers with speed
(cherry picked from commit 069771e22ef29e47298c62e6cb9d7dce72375348) # Conflicts: # sql/updates/world/cata_classic/2025_01_10_00_world.sql # src/server/game/Entities/AreaTrigger/AreaTrigger.cpp # src/server/scripts/BrokenIsles/MawOfSouls/boss_ymiron_the_fallen_king.cpp # src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp # src/server/scripts/Spells/spell_priest.cpp # src/server/scripts/World/areatrigger_scripts.cpp
-rw-r--r--sql/updates/world/cata_classic/2025_01_10_01_world_2025_01_10_00_world.sql17
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp88
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h14
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp32
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h36
-rw-r--r--src/server/game/Entities/Object/Object.cpp2
-rw-r--r--src/server/game/Globals/AreaTriggerDataStore.cpp12
7 files changed, 99 insertions, 102 deletions
diff --git a/sql/updates/world/cata_classic/2025_01_10_01_world_2025_01_10_00_world.sql b/sql/updates/world/cata_classic/2025_01_10_01_world_2025_01_10_00_world.sql
new file mode 100644
index 00000000000..df38842bcfe
--- /dev/null
+++ b/sql/updates/world/cata_classic/2025_01_10_01_world_2025_01_10_00_world.sql
@@ -0,0 +1,17 @@
+ALTER TABLE `areatrigger_create_properties`
+ DROP `TimeToTarget`,
+ ADD `Speed` float NOT NULL DEFAULT 1 AFTER `TimeToTargetScale`;
+
+UPDATE `areatrigger_create_properties` SET `Speed`=40 WHERE `Id`=1315 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=40 WHERE `Id`=1316 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=20 WHERE `Id`=1612 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=26 WHERE `Id`=2148 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=6.5 WHERE `Id`=5838 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=7 WHERE `Id`=6887 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=15 WHERE `Id`=8661 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=5 WHERE `Id`=13339 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=7 WHERE `Id`=13734 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=18 WHERE `Id`=24322 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=14 WHERE `Id`=24599 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=15 WHERE `Id`=24740 AND `IsCustom`=0;
+UPDATE `areatrigger_create_properties` SET `Speed`=18 WHERE `Id`=24741 AND `IsCustom`=0;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 10ceed362e3..a29d421a754 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -204,7 +204,7 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
PhasingHandler::InitDbPhaseShift(GetPhaseShift(), spawnData->phaseUseFlags, spawnData->phaseId, spawnData->phaseGroup);
}
- if (target && GetCreateProperties() && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
+ if (target && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
m_movementInfo.transport.guid = target->GetGUID();
if (!IsStaticSpawn())
@@ -212,8 +212,6 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
UpdateShape();
- uint32 timeToTarget = GetCreateProperties()->TimeToTarget != 0 ? GetCreateProperties()->TimeToTarget : *m_areaTriggerData->Duration;
-
if (GetCreateProperties()->OrbitInfo)
{
AreaTriggerOrbitInfo orbit = *GetCreateProperties()->OrbitInfo;
@@ -222,11 +220,11 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
else
orbit.Center = pos;
- InitOrbit(orbit, timeToTarget);
+ InitOrbit(orbit, GetCreateProperties()->Speed);
}
else if (GetCreateProperties()->HasSplines())
{
- InitSplineOffsets(GetCreateProperties()->SplinePoints, timeToTarget);
+ InitSplineOffsets(GetCreateProperties()->SplinePoints);
}
// movement on transport of areatriggers on unit is handled by themself
@@ -1055,7 +1053,7 @@ void AreaTrigger::UndoActions(Unit* unit)
unit->RemoveAurasDueToSpell(action.Param, GetCasterGuid());
}
-void AreaTrigger::InitSplineOffsets(std::vector<Position> const& offsets, uint32 timeToTarget)
+void AreaTrigger::InitSplineOffsets(std::vector<Position> const& offsets, Optional<float> overrideSpeed)
{
float angleSin = std::sin(GetOrientation());
float angleCos = std::cos(GetOrientation());
@@ -1075,20 +1073,25 @@ void AreaTrigger::InitSplineOffsets(std::vector<Position> const& offsets, uint32
rotatedPoints.emplace_back(x, y, z);
}
- InitSplines(rotatedPoints, timeToTarget);
+ InitSplines(rotatedPoints, overrideSpeed);
}
-void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, uint32 timeToTarget)
+void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, Optional<float> overrideSpeed)
{
if (splinePoints.size() < 2)
return;
_movementTime = 0;
- _spline = std::make_unique<::Movement::Spline<int32>>();
- _spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear);
- _spline->initLengths();
+ std::unique_ptr<Movement::Spline<int32>> spline = std::make_unique<::Movement::Spline<int32>>();
+ spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear);
+ spline->initLengths();
+
+ float speed = overrideSpeed.value_or(GetCreateProperties()->Speed);
+ if (speed <= 0.0f)
+ speed = 1.0f;
+ uint32 timeToTarget = spline->length() / speed * float(IN_MILLISECONDS);
SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
if (IsInWorld())
@@ -1105,65 +1108,69 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, uin
reshape.AreaTriggerSpline.emplace();
reshape.AreaTriggerSpline->ElapsedTimeForMovement = GetElapsedTimeForMovement();
reshape.AreaTriggerSpline->TimeToTarget = timeToTarget;
- for (G3D::Vector3 const& vec : splinePoints)
+ for (G3D::Vector3 const& vec : spline->getPoints())
reshape.AreaTriggerSpline->Points.emplace_back(vec.x, vec.y, vec.z);
SendMessageToSet(reshape.Write(), true);
}
_reachedDestination = false;
+ _movement = std::move(spline);
}
bool AreaTrigger::HasSplines() const
{
- return bool(_spline);
+ return std::holds_alternative<std::unique_ptr<::Movement::Spline<int32>>>(_movement);
}
-void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, uint32 timeToTarget)
+void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> overrideSpeed)
{
// Circular movement requires either a center position or an attached unit
ASSERT(orbit.Center.has_value() || orbit.PathTarget.has_value());
- // 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);
- });
+ float speed = overrideSpeed.value_or(GetCreateProperties()->Speed);
+ if (speed <= 0.0f)
+ speed = 1.0f;
+
+ uint32 timeToTarget = static_cast<uint32>(orbit.Radius * 2.0f * static_cast<float>(M_PI) * static_cast<float>(IN_MILLISECONDS) / speed);
+ SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::OrbitPathTarget), orbit.PathTarget.value_or(ObjectGuid::Empty));
- _orbitInfo = orbit;
+ std::unique_ptr<AreaTriggerOrbitInfo> movementOrbit = std::make_unique<AreaTriggerOrbitInfo>();
- _orbitInfo->TimeToTarget = timeToTarget;
- _orbitInfo->ElapsedTimeForMovement = 0;
+ movementOrbit->TimeToTarget = timeToTarget;
+ movementOrbit->ElapsedTimeForMovement = 0;
if (IsInWorld())
{
WorldPackets::AreaTrigger::AreaTriggerRePath reshape;
reshape.TriggerGUID = GetGUID();
- reshape.AreaTriggerOrbit = _orbitInfo;
+ reshape.AreaTriggerOrbit = *movementOrbit;
SendMessageToSet(reshape.Write(), true);
}
+
+ _movement = std::move(movementOrbit);
}
bool AreaTrigger::HasOrbit() const
{
- return _orbitInfo.has_value();
+ return std::holds_alternative<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement);
}
Position const* AreaTrigger::GetOrbitCenterPosition() const
{
- if (!_orbitInfo)
+ if (!HasOrbit())
return nullptr;
- if (_orbitInfo->PathTarget)
- if (WorldObject* center = ObjectAccessor::GetWorldObject(*this, *_orbitInfo->PathTarget))
+ AreaTriggerOrbitInfo const& orbit = *std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement);
+ if (orbit.PathTarget)
+ if (WorldObject* center = ObjectAccessor::GetWorldObject(*this, *orbit.PathTarget))
return center;
- if (_orbitInfo->Center)
- return &_orbitInfo->Center->Pos;
+ if (orbit.Center)
+ return &orbit.Center->Pos;
return nullptr;
}
@@ -1175,7 +1182,7 @@ Position AreaTrigger::CalculateOrbitPosition() const
return GetPosition();
AreaTriggerCreateProperties const* createProperties = GetCreateProperties();
- AreaTriggerOrbitInfo const& cmi = *_orbitInfo;
+ AreaTriggerOrbitInfo const& cmi = GetOrbit();
// AreaTrigger make exactly "Duration / TimeToTarget" loops during his life time
float pathProgress = float(cmi.ElapsedTimeForMovement) / float(cmi.TimeToTarget);
@@ -1220,10 +1227,11 @@ Position AreaTrigger::CalculateOrbitPosition() const
void AreaTrigger::UpdateOrbitPosition(uint32 /*diff*/)
{
- if (_orbitInfo->StartDelay > GetElapsedTimeForMovement())
+ AreaTriggerOrbitInfo& orbit = *std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement);
+ if (orbit.StartDelay > GetElapsedTimeForMovement())
return;
- _orbitInfo->ElapsedTimeForMovement = GetElapsedTimeForMovement() - _orbitInfo->StartDelay;
+ orbit.ElapsedTimeForMovement = GetElapsedTimeForMovement() - orbit.StartDelay;
Position pos = CalculateOrbitPosition();
@@ -1240,12 +1248,14 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff)
_movementTime += diff;
+ Movement::Spline<int32>& spline = *std::get<std::unique_ptr<::Movement::Spline<int32>>>(_movement);
+
if (_movementTime >= GetTimeToTarget())
{
_reachedDestination = true;
- _lastSplineIndex = int32(_spline->last());
+ _lastSplineIndex = int32(spline.last());
- G3D::Vector3 lastSplinePosition = _spline->getPoint(_lastSplineIndex);
+ G3D::Vector3 lastSplinePosition = spline.getPoint(_lastSplineIndex);
GetMap()->AreaTriggerRelocation(this, lastSplinePosition.x, lastSplinePosition.y, lastSplinePosition.z, GetOrientation());
#ifdef TRINITY_DEBUG
DebugVisualizePosition();
@@ -1274,12 +1284,12 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff)
currentTimePercent = progress;
}
- int lastPositionIndex = 0;
+ int32 lastPositionIndex = 0;
float percentFromLastPoint = 0;
- _spline->computeIndex(currentTimePercent, lastPositionIndex, percentFromLastPoint);
+ spline.computeIndex(currentTimePercent, lastPositionIndex, percentFromLastPoint);
G3D::Vector3 currentPosition;
- _spline->evaluate_percent(lastPositionIndex, percentFromLastPoint, currentPosition);
+ spline.evaluate_percent(lastPositionIndex, percentFromLastPoint, currentPosition);
float orientation = GetStationaryO();
if (createProperties && createProperties->FacingCurveId)
@@ -1288,7 +1298,7 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff)
if (GetCreateProperties() && !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation) && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFaceMovementDir))
{
G3D::Vector3 derivative;
- _spline->evaluate_derivative(lastPositionIndex, percentFromLastPoint, derivative);
+ spline.evaluate_derivative(lastPositionIndex, percentFromLastPoint, derivative);
if (derivative.x != 0.0f || derivative.y != 0.0f)
orientation += std::atan2(derivative.y, derivative.x);
}
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
index e52cfb58356..ba2455751ad 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -150,15 +150,15 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
float GetMaxSearchRadius() const;
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> const& splinePoints, uint32 timeToTarget);
+ void InitSplineOffsets(std::vector<Position> const& offsets, Optional<float> overrideSpeed = {});
+ void InitSplines(std::vector<G3D::Vector3> const& splinePoints, Optional<float> overrideSpeed = {});
bool HasSplines() const;
- ::Movement::Spline<int32> const& GetSpline() const { return *_spline; }
+ ::Movement::Spline<int32> const& GetSpline() const { return *std::get<std::unique_ptr<::Movement::Spline<int32>>>(_movement); }
uint32 GetElapsedTimeForMovement() const { return GetTimeSinceCreated(); } /// @todo: research the right value, in sniffs both timers are nearly identical
- void InitOrbit(AreaTriggerOrbitInfo const& orbit, uint32 timeToTarget);
+ void InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> overrideSpeed = {});
bool HasOrbit() const;
- Optional<AreaTriggerOrbitInfo> const& GetOrbit() const { return _orbitInfo; }
+ AreaTriggerOrbitInfo const& GetOrbit() const { return *std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement); }
bool HasOverridePosition() const;
@@ -221,14 +221,12 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
Position _rollPitchYaw;
Position _targetRollPitchYaw;
std::vector<Position> _polygonVertices;
- std::unique_ptr<::Movement::Spline<int32>> _spline;
+ std::variant<std::monostate, std::unique_ptr<::Movement::Spline<int32>>, std::unique_ptr<AreaTriggerOrbitInfo>> _movement;
bool _reachedDestination;
int32 _lastSplineIndex;
uint32 _movementTime;
- Optional<AreaTriggerOrbitInfo> _orbitInfo;
-
AreaTriggerCreateProperties const* _areaTriggerCreateProperties;
AreaTriggerTemplate const* _areaTriggerTemplate;
GuidUnorderedSet _insideUnits;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp
index c4c9502c979..aa7d6d2c930 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp
@@ -16,7 +16,6 @@
*/
#include "AreaTriggerTemplate.h"
-#include <G3D/Vector3.h>
#include <algorithm>
#include <cstring>
#include <cmath>
@@ -73,37 +72,10 @@ float AreaTriggerShapeInfo::GetMaxSearchRadius() const
return 0.0f;
}
-AreaTriggerTemplate::AreaTriggerTemplate() : Flags(AreaTriggerFlag::None), ActionSetFlags(AreaTriggerActionSetFlag::None)
-{
- Id = { 0, false };
- ActionSetId = 0;
-}
-
+AreaTriggerTemplate::AreaTriggerTemplate() = default;
AreaTriggerTemplate::~AreaTriggerTemplate() = default;
-AreaTriggerCreateProperties::AreaTriggerCreateProperties() : Flags(AreaTriggerCreatePropertiesFlag::None)
-{
- Id = { 0, false };
- Template = nullptr;
-
- MoveCurveId = 0;
- ScaleCurveId = 0;
- MorphCurveId = 0;
- FacingCurveId = 0;
-
- AnimId = 0;
- AnimKitId = 0;
-
- DecalPropertiesId = 0;
-
- TimeToTarget = 0;
- TimeToTargetScale = 0;
-
- ExtraScale.emplace();
-
- ScriptId = 0;
-}
-
+AreaTriggerCreateProperties::AreaTriggerCreateProperties() = default;
AreaTriggerCreateProperties::~AreaTriggerCreateProperties() = default;
bool AreaTriggerCreateProperties::HasSplines() const
diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
index d72cfe3dda3..cbf281a3152 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
@@ -207,10 +207,10 @@ public:
AreaTriggerTemplate();
~AreaTriggerTemplate();
- AreaTriggerId Id;
- EnumFlag<AreaTriggerFlag> Flags;
- uint32 ActionSetId;
- EnumFlag<AreaTriggerActionSetFlag> ActionSetFlags;
+ AreaTriggerId Id = { .Id = 0, .IsCustom = false };
+ EnumFlag<AreaTriggerFlag> Flags = AreaTriggerFlag::None;
+ uint32 ActionSetId = 0;
+ EnumFlag<AreaTriggerActionSetFlag> ActionSetFlags = AreaTriggerActionSetFlag::None;
std::vector<AreaTriggerAction> Actions;
};
@@ -222,34 +222,34 @@ public:
bool HasSplines() const;
- AreaTriggerCreatePropertiesId Id;
- AreaTriggerTemplate const* Template;
- EnumFlag<AreaTriggerCreatePropertiesFlag> Flags;
+ AreaTriggerCreatePropertiesId Id = { .Id = 0, .IsCustom = false };
+ AreaTriggerTemplate const* Template = nullptr;
+ EnumFlag<AreaTriggerCreatePropertiesFlag> Flags = AreaTriggerCreatePropertiesFlag::None;
- uint32 MoveCurveId;
- uint32 ScaleCurveId;
- uint32 MorphCurveId;
- uint32 FacingCurveId;
+ uint32 MoveCurveId = 0;
+ uint32 ScaleCurveId = 0;
+ uint32 MorphCurveId = 0;
+ uint32 FacingCurveId = 0;
- int32 AnimId;
- int32 AnimKitId;
+ int32 AnimId = 0;
+ int32 AnimKitId = 0;
- uint32 DecalPropertiesId;
+ uint32 DecalPropertiesId = 0;
Optional<int32> SpellForVisuals;
- uint32 TimeToTarget;
- uint32 TimeToTargetScale;
+ uint32 TimeToTargetScale = 0;
Optional<AreaTriggerScaleCurveTemplate> OverrideScale;
- Optional<AreaTriggerScaleCurveTemplate> ExtraScale;
+ Optional<AreaTriggerScaleCurveTemplate> ExtraScale = Optional<AreaTriggerScaleCurveTemplate>(std::in_place);
AreaTriggerShapeInfo Shape;
+ float Speed = 1.0f;
std::vector<Position> SplinePoints;
Optional<AreaTriggerOrbitInfo> OrbitInfo;
- uint32 ScriptId;
+ uint32 ScriptId = 0;
};
struct AreaTriggerSpawn : SpawnData
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 28d787ffaac..5fe41de9610 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -627,7 +627,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
// *data << *areaTrigger->GetMovementScript(); // AreaTriggerMovementScriptInfo
if (hasOrbit)
- *data << *areaTrigger->GetOrbit();
+ *data << areaTrigger->GetOrbit();
}
if (flags.GameObject)
diff --git a/src/server/game/Globals/AreaTriggerDataStore.cpp b/src/server/game/Globals/AreaTriggerDataStore.cpp
index 62ff42c0de0..12b9236a1a2 100644
--- a/src/server/game/Globals/AreaTriggerDataStore.cpp
+++ b/src/server/game/Globals/AreaTriggerDataStore.cpp
@@ -168,8 +168,8 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates()
// 0 1 2 3 4
if (QueryResult areatriggerCreateProperties = WorldDatabase.Query("SELECT Id, IsCustom, AreaTriggerId, IsAreatriggerCustom, Flags, "
- // 5 6 7 8 9 10 11 12 13 14
- "MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, AnimId, AnimKitId, DecalPropertiesId, SpellForVisuals, TimeToTarget, TimeToTargetScale, "
+ // 5 6 7 8 9 10 11 12 13 14
+ "MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, AnimId, AnimKitId, DecalPropertiesId, SpellForVisuals, TimeToTargetScale, Speed, "
// 15 16 17 18 19 20 21 22 23 24
"Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5, ShapeData6, ShapeData7, ScriptName FROM `areatrigger_create_properties`"))
{
@@ -233,10 +233,10 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates()
}
}
- createProperties.TimeToTarget = fields[13].GetUInt32();
- createProperties.TimeToTargetScale = fields[14].GetUInt32();
+ createProperties.TimeToTargetScale = fields[13].GetUInt32();
+ createProperties.Speed = fields[14].GetFloat();
- createProperties.Shape.Type = static_cast<AreaTriggerShapeType>(shape);
+ createProperties.Shape.Type = shape;
for (uint8 i = 0; i < MAX_AREATRIGGER_ENTITY_DATA; ++i)
createProperties.Shape.DefaultDatas.Data[i] = fields[16 + i].GetFloat();
@@ -361,7 +361,7 @@ void AreaTriggerDataStore::LoadAreaTriggerSpawns()
continue;
}
- if (createProperties->TimeToTarget || createProperties->TimeToTargetScale || createProperties->FacingCurveId || createProperties->MoveCurveId)
+ if (createProperties->TimeToTargetScale)
{
TC_LOG_ERROR("sql.sql", "Table `areatrigger` has listed AreaTriggerCreatePropertiesId (Id: {}, IsCustom: {}) with time to target values",
createPropertiesId.Id, uint32(createPropertiesId.IsCustom));