From aa6ecec2ab6df86e4ef0a9892ac9d93a27e55ec9 Mon Sep 17 00:00:00 2001 From: Nefertumm Date: Fri, 4 Feb 2022 14:54:29 -0300 Subject: [PATCH] feat(Core/Map): add DoForAllPlayers method (#10371) --- src/server/game/Maps/Map.cpp | 11 +++++++++++ src/server/game/Maps/Map.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 595dbcb52..84e99e057 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3757,6 +3757,17 @@ void Map::SetZoneOverrideLight(uint32 zoneId, uint32 lightId, Milliseconds fadeI } } +void Map::DoForAllPlayers(std::function exec) +{ + for (auto const& it : GetPlayers()) + { + if (Player* player = it.GetSource()) + { + exec(player); + } + } +} + /** * @brief Check if a given source can reach a specific point following a path * and normalize the coords. Use this method for long paths, otherwise use the diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index f19e540eb..bb3618138 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -606,6 +606,9 @@ public: void UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Unit* source); void LogEncounterFinished(EncounterCreditType type, uint32 creditEntry); + // Do whatever you want to all the players in map [including GameMasters], i.e.: param exec = [&](Player* p) { p->Whatever(); } + void DoForAllPlayers(std::function exec); + GridMap* GetGrid(float x, float y); void EnsureGridCreated(const GridCoord&); [[nodiscard]] bool AllTransportsEmpty() const; // pussywizard