diff options
author | Meji <alvaro.megias@outlook.com> | 2024-05-04 13:20:13 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-05-27 18:53:47 +0200 |
commit | b070e63fa867f7f25e73e9ef3aafbe18902a50e9 (patch) | |
tree | c3d0151e9b46d30ccb69d57983df431acfb673a3 /src/server/game/Globals/ObjectMgr.cpp | |
parent | 38e99e1569fcba821211fcd2d7c3a0b2bd00701c (diff) |
Core/AreaTriggers: Fix triggering of client areatriggers for some shapes
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 838f5f575c1..c5f5c0986cb 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -6761,6 +6761,27 @@ 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 +{ + 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; +} + void ObjectMgr::LoadGraveyardZones() { uint32 oldMSTime = getMSTime(); |