From 77ddb4da816b4dfc7ff03b79b88b5ca80918bc2d Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 4 Dec 2021 23:47:40 +0100 Subject: Core/AreaTriggers: Move ScriptName from areatrigger_template to areatrigger_create_properties and areatrigger tables --- src/server/game/Entities/AreaTrigger/AreaTrigger.cpp | 10 +++++++++- src/server/game/Entities/AreaTrigger/AreaTrigger.h | 2 ++ .../game/Entities/AreaTrigger/AreaTriggerTemplate.cpp | 3 ++- .../game/Entities/AreaTrigger/AreaTriggerTemplate.h | 5 ++++- src/server/game/Globals/AreaTriggerDataStore.cpp | 17 ++++++++++------- 5 files changed, 27 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index a3720060d6f..e3902e82a0f 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -227,6 +227,8 @@ AreaTrigger* AreaTrigger::CreateAreaTrigger(uint32 areaTriggerCreatePropertiesId bool AreaTrigger::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool /*addToMap*/, bool /*allowDuplicate*/) { + _spawnId = spawnId; + AreaTriggerSpawn const* position = sAreaTriggerDataStore->GetAreaTriggerSpawn(spawnId); if (!position) return false; @@ -512,7 +514,13 @@ AreaTriggerTemplate const* AreaTrigger::GetTemplate() const uint32 AreaTrigger::GetScriptId() const { - return GetTemplate() ? GetTemplate()->ScriptId : 0; + if (_spawnId) + return ASSERT_NOTNULL(sAreaTriggerDataStore->GetAreaTriggerSpawn(_spawnId))->ScriptId; + + if (GetCreateProperties()) + return GetCreateProperties()->ScriptId; + + return 0; } Unit* AreaTrigger::GetCaster() const diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index f6bdaf8f583..094d9b4425b 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -142,6 +142,8 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject Actions; }; @@ -231,6 +230,8 @@ public: std::vector SplinePoints; Optional OrbitInfo; + + uint32 ScriptId; }; struct AreaTriggerSpawn @@ -243,6 +244,8 @@ struct AreaTriggerSpawn uint8 PhaseUseFlags = 0; AreaTriggerShapeInfo Shape; + + uint32 ScriptId = 0; }; #endif diff --git a/src/server/game/Globals/AreaTriggerDataStore.cpp b/src/server/game/Globals/AreaTriggerDataStore.cpp index d39acd1e34d..817f59d1284 100644 --- a/src/server/game/Globals/AreaTriggerDataStore.cpp +++ b/src/server/game/Globals/AreaTriggerDataStore.cpp @@ -150,8 +150,8 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates() TC_LOG_INFO("server.loading", ">> Loaded 0 AreaTrigger splines. DB table `areatrigger_create_properties_spline_point` is empty."); } - // 0 1 2 3 - if (QueryResult templates = WorldDatabase.Query("SELECT Id, IsServerSide, Flags, ScriptName FROM `areatrigger_template`")) + // 0 1 2 + if (QueryResult templates = WorldDatabase.Query("SELECT Id, IsServerSide, Flags FROM `areatrigger_template`")) { do { @@ -169,7 +169,6 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates() continue; } - areaTriggerTemplate.ScriptId = sObjectMgr->GetScriptId(fields[3].GetString()); areaTriggerTemplate.Actions = std::move(actionsByAreaTrigger[areaTriggerTemplate.Id]); _areaTriggerTemplateStore[areaTriggerTemplate.Id] = areaTriggerTemplate; @@ -179,8 +178,8 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates() // 0 1 2 3 4 5 6 7 8 9 10 if (QueryResult areatriggerCreateProperties = WorldDatabase.Query("SELECT Id, AreaTriggerId, MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, AnimId, AnimKitId, DecalPropertiesId, TimeToTarget, TimeToTargetScale, " - // 11 12 13 14 15 16 17 - "Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5 FROM `areatrigger_create_properties`")) + // 11 12 13 14 15 16 17 18 + "Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5, ScriptName FROM `areatrigger_create_properties`")) { do { @@ -235,6 +234,8 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates() for (uint8 i = 0; i < MAX_AREATRIGGER_ENTITY_DATA; ++i) createProperties.Shape.DefaultDatas.Data[i] = fields[12 + i].GetFloat(); + createProperties.ScriptId = sObjectMgr->GetScriptId(fields[18].GetString()); + if (shape == AREATRIGGER_TYPE_POLYGON) if (createProperties.Shape.PolygonDatas.Height <= 0.0f) createProperties.Shape.PolygonDatas.Height = 1.0f; @@ -306,8 +307,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 - "Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5 FROM `areatrigger`")) + // 11 12 13 14 15 16 17 18 + "Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5, ScriptName FROM `areatrigger`")) { do { @@ -352,6 +353,8 @@ 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[18].GetString()); + // Add the trigger to a map::cell map, which is later used by GridLoader to query CellCoord cellCoord = Trinity::ComputeCellCoord(spawn.Location.GetPositionX(), spawn.Location.GetPositionY()); _areaTriggerSpawnsByLocation[{ spawn.Location.GetMapId(), cellCoord.GetId() }].insert(spawnId); -- cgit v1.2.3