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
committerOvahlord <dreadkiller@gmx.de>2024-06-20 01:07:04 +0200
commit889abca362de2949ab2fbda28741f8275e6f173b (patch)
treecb87c93e04a90044ea4ddc6b1220bd32de0e6eb8 /src/server/game/Globals/ObjectMgr.cpp
parent1334844ad86b7b9d153dcd914bcc0ba036ee6d7a (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.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 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();