aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Phasing/PhasingHandler.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-01-12 15:09:36 +0100
committerShauren <shauren.trinity@gmail.com>2022-01-12 15:09:36 +0100
commit6ca301e8637bc71ff6fb89180bda6a3a8f4db205 (patch)
tree1afdd51f308a3d55fcd6d8afd394cc3d52433ab9 /src/server/game/Phasing/PhasingHandler.h
parent6f8d6f5c9bc32bbe11de3377501453da1106f98a (diff)
Core/Phasing: Fixed stack overflow happening when modifying vehicle passenger phases (looping player->vehicle->passenger(player)->vehicle...)
Closes #27599
Diffstat (limited to 'src/server/game/Phasing/PhasingHandler.h')
-rw-r--r--src/server/game/Phasing/PhasingHandler.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/server/game/Phasing/PhasingHandler.h b/src/server/game/Phasing/PhasingHandler.h
index 17d40977e56..dfb8eb7aa94 100644
--- a/src/server/game/Phasing/PhasingHandler.h
+++ b/src/server/game/Phasing/PhasingHandler.h
@@ -20,6 +20,7 @@
#include "Define.h"
#include <string>
+#include <vector>
class ChatHandler;
class Map;
@@ -74,8 +75,15 @@ public:
static bool IsPersonalPhase(uint32 phaseId);
private:
- static void AddPhase(WorldObject* object, uint32 phaseId, ObjectGuid const& personalGuid, bool updateVisibility);
- static void AddPhaseGroup(WorldObject* object, uint32 phaseGroupId, ObjectGuid const& personalGuid, bool updateVisibility);
+ class ControlledUnitVisitor;
+ friend ControlledUnitVisitor;
+
+ static void AddPhase(WorldObject* object, uint32 phaseId, ObjectGuid const& personalGuid, bool updateVisibility, ControlledUnitVisitor& visitor);
+ static void RemovePhase(WorldObject* object, uint32 phaseId, bool updateVisibility, ControlledUnitVisitor& visitor);
+ static void AddPhaseGroup(WorldObject* object, std::vector<uint32> const* phasesInGroup, ObjectGuid const& personalGuid, bool updateVisibility, ControlledUnitVisitor& visitor);
+ static void RemovePhaseGroup(WorldObject* object, std::vector<uint32> const* phasesInGroup, bool updateVisibility, ControlledUnitVisitor& visitor);
+ static void AddVisibleMapId(WorldObject* object, uint32 visibleMapId, ControlledUnitVisitor& visitor);
+ static void RemoveVisibleMapId(WorldObject* object, uint32 visibleMapId, ControlledUnitVisitor& visitor);
static void UpdateVisibilityIfNeeded(WorldObject* object, bool updateVisibility, bool changed);
};