diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-01-12 15:09:36 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-01-12 15:09:36 +0100 |
commit | 6ca301e8637bc71ff6fb89180bda6a3a8f4db205 (patch) | |
tree | 1afdd51f308a3d55fcd6d8afd394cc3d52433ab9 /src/server/game/Phasing/PhasingHandler.h | |
parent | 6f8d6f5c9bc32bbe11de3377501453da1106f98a (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.h | 12 |
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); }; |