aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2023-12-29 14:02:37 +0100
committerGitHub <noreply@github.com>2023-12-29 14:02:37 +0100
commitfb64d7fe8efe5ecba40123cdc96195d3ca52d7c0 (patch)
tree68541c9d117fb4779ecf3a4cc864d63dd9119d79 /src/server/game
parenta2be97414bc73448267b52dd1fd6fc997df57b4f (diff)
Core/Maps: Properly set initial spawn group state for groups that have conditions (#29509)
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Maps/Map.cpp10
-rw-r--r--src/server/game/Maps/Map.h1
-rw-r--r--src/server/game/Maps/MapManager.cpp4
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;
}