diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 0ceb461def9..45604e4ad79 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -6772,25 +6772,9 @@ Quest const* ObjectMgr::GetQuestTemplate(uint32 quest_id) const return itr != _questTemplates.end() ? itr->second.get() : nullptr; } -std::vector<Position> ObjectMgr::GetVerticesForAreaTrigger(AreaTriggerEntry const* areaTrigger) const +AreaTriggerPolygon const* ObjectMgr::GetAreaTriggerPolygon(uint32 areaTriggerId) const { - std::vector<Position> vertices; - if (areaTrigger && areaTrigger->ShapeType == 3 /* Polygon */) - { - if (std::vector<DBCPosition3D> const* pathNodes = sDB2Manager.GetNodesForPath(areaTrigger->ShapeID)) - { - vertices.resize(pathNodes->size()); - std::transform(pathNodes->cbegin(), pathNodes->cend(), vertices.begin(), [](DBCPosition3D dbcPosition) - { - return Position(dbcPosition.X, dbcPosition.Y, dbcPosition.Z); - }); - } - - // Drop first node (areatrigger position) - vertices.erase(vertices.begin()); - } - - return vertices; + return Trinity::Containers::MapGetValuePtr(_areaTriggerPolygons, areaTriggerId); } void ObjectMgr::LoadGraveyardZones() @@ -7204,6 +7188,30 @@ void ObjectMgr::LoadAreaTriggerTeleports() TC_LOG_INFO("server.loading", ">> Loaded {} area trigger teleport definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); } +void ObjectMgr::LoadAreaTriggerPolygons() +{ + for (AreaTriggerEntry const* areaTrigger : sAreaTriggerStore) + { + if (areaTrigger->ShapeType != 3) + continue; + + PathDb2 const* path = sDB2Manager.GetPath(areaTrigger->ShapeID); + if (!path || path->Locations.size() < 4) + continue; + + AreaTriggerPolygon& polygon = _areaTriggerPolygons[areaTrigger->ID]; + polygon.Vertices.resize(path->Locations.size() - 1); + std::ranges::transform(path->Locations.begin() + 1, path->Locations.end(), polygon.Vertices.begin(), [](DBCPosition3D const& pos) + { + return Position(pos.X, pos.Y, pos.Z); + }); + + for (PathPropertyEntry const* pathProperty : path->Properties) + if (pathProperty->GetPropertyIndex() == PathPropertyIndex::VolumeHeight) + polygon.Height = pathProperty->Value * 0.001f + 0.02f; + } +} + void ObjectMgr::LoadAccessRequirements() { uint32 oldMSTime = getMSTime(); |
