aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2024-05-04 13:20:13 +0200
committerShauren <shauren.trinity@gmail.com>2024-05-27 18:53:47 +0200
commitb070e63fa867f7f25e73e9ef3aafbe18902a50e9 (patch)
treec3d0151e9b46d30ccb69d57983df431acfb673a3 /src/server/game/Globals/ObjectMgr.cpp
parent38e99e1569fcba821211fcd2d7c3a0b2bd00701c (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.cpp21
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();