diff options
author | ModoX <moardox@gmail.com> | 2023-08-31 20:58:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-31 20:58:58 +0200 |
commit | 0e818e23e71b5bc824913a4e06f55e16a925341a (patch) | |
tree | ced75fff6deb506e2b86afc2e9a363342490c379 /src | |
parent | 7f620475bd11669bb7f7c2ade9fa5d2c78fc721a (diff) |
Core/AreaTriggers: Added SpellForVisual for db spawned areatriggers (#29277)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTrigger.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h | 1 | ||||
-rw-r--r-- | src/server/game/Globals/AreaTriggerDataStore.cpp | 18 |
3 files changed, 30 insertions, 9 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index efaae072f82..7fcbff488a3 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -275,14 +275,22 @@ bool AreaTrigger::CreateServer(Map* map, AreaTriggerTemplate const* areaTriggerT auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::BoundsRadius2D), GetMaxSearchRadius()); - SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::DecalPropertiesID), 24); // blue decal, for .debug areatrigger visibility + if (position.SpellForVisuals) + { + SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(*position.SpellForVisuals, DIFFICULTY_NONE); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellForVisuals), *position.SpellForVisuals); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellVisual).ModifyValue(&UF::SpellCastVisual::SpellXSpellVisualID), spellInfo->GetSpellXSpellVisualId()); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellVisual).ModifyValue(&UF::SpellCastVisual::ScriptVisualID), 0); + } + + if (IsServerSide()) + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::DecalPropertiesID), 24); // blue decal, for .debug areatrigger visibility + + SetScaleCurve(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve), AreaTriggerScaleCurveTemplate()); - float tmp = 1.0000001f; - uint32 tmp2; - memcpy(&tmp2, &tmp, sizeof(tmp)); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::AnimationDataID), -1); - SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::ParameterCurve), tmp2); - SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::OverrideActive), true); + SetDuration(-1); _shape = position.Shape; _maxSearchRadius = _shape.GetMaxSearchRadius(); diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h index 3b5e287077e..ac1a68aa1a6 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h @@ -254,6 +254,7 @@ struct AreaTriggerSpawn : SpawnData AreaTriggerId Id; AreaTriggerShapeInfo Shape; + Optional<int32> SpellForVisuals; }; #endif diff --git a/src/server/game/Globals/AreaTriggerDataStore.cpp b/src/server/game/Globals/AreaTriggerDataStore.cpp index d3f5a843484..6b49e5cf332 100644 --- a/src/server/game/Globals/AreaTriggerDataStore.cpp +++ b/src/server/game/Globals/AreaTriggerDataStore.cpp @@ -24,6 +24,7 @@ #include "Log.h" #include "MapManager.h" #include "ObjectMgr.h" +#include "SpellMgr.h" #include "Timer.h" #include <cmath> @@ -299,8 +300,8 @@ void AreaTriggerDataStore::LoadAreaTriggerSpawns() // Load area trigger positions (to put them on the server) // 0 1 2 3 4 5 6 7 8 9 10 if (QueryResult templates = WorldDatabase.Query("SELECT SpawnId, AreaTriggerId, IsServerSide, MapId, PosX, PosY, PosZ, Orientation, PhaseUseFlags, PhaseId, PhaseGroup, " - // 11 12 13 14 15 16 17 18 19 20 - "Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5, ShapeData6, ShapeData7, ScriptName FROM `areatrigger`")) + // 11 12 13 14 15 16 17 18 19 20 21 + "Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5, ShapeData6, ShapeData7, SpellForVisuals, ScriptName FROM `areatrigger`")) { do { @@ -346,7 +347,18 @@ void AreaTriggerDataStore::LoadAreaTriggerSpawns() for (uint8 i = 0; i < MAX_AREATRIGGER_ENTITY_DATA; ++i) spawn.Shape.DefaultDatas.Data[i] = fields[12 + i].GetFloat(); - spawn.scriptId = sObjectMgr->GetScriptId(fields[20].GetString()); + if (!fields[20].IsNull()) + { + spawn.SpellForVisuals = fields[20].GetInt32(); + if (!sSpellMgr->GetSpellInfo(*spawn.SpellForVisuals, DIFFICULTY_NONE)) + { + TC_LOG_ERROR("sql.sql", "Table `areatrigger` has listed areatrigger SpawnId: {} with invalid SpellForVisual {}, set to none.", + spawnId, *spawn.SpellForVisuals); + spawn.SpellForVisuals.reset(); + } + } + + spawn.scriptId = sObjectMgr->GetScriptId(fields[21].GetString()); spawn.spawnGroupData = sObjectMgr->GetLegacySpawnGroup(); // Add the trigger to a map::cell map, which is later used by GridLoader to query |