From 94d829c84fb184990e26178551d10ecdca049efd Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 11 Jun 2022 14:04:56 +0200 Subject: Core/Pools: Implemented pooling for instances --- src/server/game/Events/GameEventMgr.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'src/server/game/Events/GameEventMgr.cpp') diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 72e12165505..3346b1625c1 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -416,8 +416,8 @@ void GameEventMgr::LoadFromDB() } // Log error for pooled object, but still spawn it - if (uint32 poolId = sPoolMgr->IsPartOfAPool(SPAWN_TYPE_CREATURE, guid)) - TC_LOG_ERROR("sql.sql", "`game_event_creature`: game event id (%i) contains creature (" UI64FMTD ") which is part of a pool (%u). This should be spawned in game_event_pool", event_id, guid, poolId); + if (data->poolId) + TC_LOG_ERROR("sql.sql", "`game_event_creature`: game event id (%i) contains creature (" UI64FMTD ") which is part of a pool (%u). This should be spawned in game_event_pool", event_id, guid, data->poolId); GuidList& crelist = mGameEventCreatureGuids[internal_event_id]; crelist.push_back(guid); @@ -466,8 +466,8 @@ void GameEventMgr::LoadFromDB() } // Log error for pooled object, but still spawn it - if (uint32 poolId = sPoolMgr->IsPartOfAPool(SPAWN_TYPE_GAMEOBJECT, guid)) - TC_LOG_ERROR("sql.sql", "`game_event_gameobject`: game event id (%i) contains game object (" UI64FMTD ") which is part of a pool (%u). This should be spawned in game_event_pool", event_id, guid, poolId); + if (data->poolId) + TC_LOG_ERROR("sql.sql", "`game_event_gameobject`: game event id (%i) contains game object (" UI64FMTD ") which is part of a pool (%u). This should be spawned in game_event_pool", event_id, guid, data->poolId); GuidList& golist = mGameEventGameobjectGuids[internal_event_id]; golist.push_back(guid); @@ -1288,7 +1288,15 @@ void GameEventMgr::GameEventSpawn(int16 event_id) } for (IdList::iterator itr = mGameEventPoolIds[internal_event_id].begin(); itr != mGameEventPoolIds[internal_event_id].end(); ++itr) - sPoolMgr->SpawnPool(*itr); + { + if (PoolTemplateData const* poolTemplate = sPoolMgr->GetPoolTemplate(*itr)) + { + sMapMgr->DoForAllMapsWithMapId(poolTemplate->MapId, [&itr](Map* map) + { + sPoolMgr->SpawnPool(map->GetPoolData(), *itr); + }); + } + } } void GameEventMgr::GameEventUnspawn(int16 event_id) @@ -1365,7 +1373,13 @@ void GameEventMgr::GameEventUnspawn(int16 event_id) for (IdList::iterator itr = mGameEventPoolIds[internal_event_id].begin(); itr != mGameEventPoolIds[internal_event_id].end(); ++itr) { - sPoolMgr->DespawnPool(*itr, true); + if (PoolTemplateData const* poolTemplate = sPoolMgr->GetPoolTemplate(*itr)) + { + sMapMgr->DoForAllMapsWithMapId(poolTemplate->MapId, [&itr](Map* map) + { + sPoolMgr->DespawnPool(map->GetPoolData(), *itr, true); + }); + } } } -- cgit v1.2.3