diff options
author | Meji <alvaro.megias@outlook.com> | 2024-05-04 13:20:13 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-06-20 01:07:04 +0200 |
commit | 889abca362de2949ab2fbda28741f8275e6f173b (patch) | |
tree | cb87c93e04a90044ea4ddc6b1220bd32de0e6eb8 /src/server/game/Globals/ObjectMgr.cpp | |
parent | 1334844ad86b7b9d153dcd914bcc0ba036ee6d7a (diff) |
Core/AreaTriggers: Fix triggering of client areatriggers for some shapes
(cherry picked from commit b070e63fa867f7f25e73e9ef3aafbe18902a50e9)
# Conflicts:
# sql/updates/auth/cata_classic/2024_05_27_00_hotfixes.sql
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 d7cb4e739bd..0ceb461def9 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -6772,6 +6772,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(); |