diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-01-10 21:22:28 +0100 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2025-01-10 22:47:14 +0100 |
commit | 2693d73383d46240f9726123ddab8c80c37533d8 (patch) | |
tree | 401ecc02aaf63945efc5ff1dae95808e78125785 | |
parent | 4bc721aa25487ef55f7ee31b504d717f958e4276 (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
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)); |