diff options
author | Jeremy <Golrag@users.noreply.github.com> | 2023-12-29 14:02:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-29 14:02:37 +0100 |
commit | fb64d7fe8efe5ecba40123cdc96195d3ca52d7c0 (patch) | |
tree | 68541c9d117fb4779ecf3a4cc864d63dd9119d79 /src/server | |
parent | a2be97414bc73448267b52dd1fd6fc997df57b4f (diff) |
Core/Maps: Properly set initial spawn group state for groups that have conditions (#29509)
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 1 | ||||
-rw-r--r-- | src/server/game/Maps/MapManager.cpp | 4 |
3 files changed, 15 insertions, 0 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 4610cecd4b2..b348094c3cd 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2452,6 +2452,16 @@ bool Map::IsSpawnGroupActive(uint32 groupId) const return (_toggledSpawnGroupIds.find(groupId) != _toggledSpawnGroupIds.end()) != !(data->flags & SPAWNGROUP_FLAG_MANUAL_SPAWN); } +void Map::InitSpawnGroupState() +{ + std::vector<uint32> const* spawnGroups = sObjectMgr->GetSpawnGroupsForMap(GetId()); + if (!spawnGroups) + return; + + for (uint32 spawnGroupId : *spawnGroups) + SetSpawnGroupActive(spawnGroupId, sConditionMgr->IsMapMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPAWN_GROUP, spawnGroupId, this)); +} + void Map::UpdateSpawnGroupConditions() { std::vector<uint32> const* spawnGroups = sObjectMgr->GetSpawnGroupsForMap(GetId()); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 454718916cf..227e20b5f49 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -713,6 +713,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType> typedef std::function<void(Map*)> FarSpellCallback; void AddFarSpellCallback(FarSpellCallback&& callback); + void InitSpawnGroupState(); void UpdateSpawnGroupConditions(); private: diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 40ac78eaff3..dcb6e77082b 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -74,6 +74,7 @@ Map* MapManager::CreateWorldMap(uint32 mapId, uint32 instanceId) Map* map = new Map(mapId, i_gridCleanUpDelay, instanceId, DIFFICULTY_NONE); map->LoadRespawnTimes(); map->LoadCorpseData(); + map->InitSpawnGroupState(); if (sWorld->getBoolConfig(CONFIG_BASEMAP_LOAD_GRIDS)) map->LoadAllCells(); @@ -107,6 +108,7 @@ InstanceMap* MapManager::CreateInstance(uint32 mapId, uint32 instanceId, Instanc map->CreateInstanceData(); map->SetInstanceScenario(sScenarioMgr->CreateInstanceScenario(map, team)); + map->InitSpawnGroupState(); if (sWorld->getBoolConfig(CONFIG_INSTANCEMAP_LOAD_GRIDS)) map->LoadAllCells(); @@ -122,6 +124,7 @@ BattlegroundMap* MapManager::CreateBattleground(uint32 mapId, uint32 instanceId, ASSERT(map->IsBattlegroundOrArena()); map->SetBG(bg); bg->SetBgMap(map); + map->InitSpawnGroupState(); if (sWorld->getBoolConfig(CONFIG_BATTLEGROUNDMAP_LOAD_GRIDS)) map->LoadAllCells(); @@ -133,6 +136,7 @@ GarrisonMap* MapManager::CreateGarrison(uint32 mapId, uint32 instanceId, Player* { GarrisonMap* map = new GarrisonMap(mapId, i_gridCleanUpDelay, instanceId, owner->GetGUID()); ASSERT(map->IsGarrison()); + map->InitSpawnGroupState(); return map; } |