diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-06-11 14:04:56 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-06-11 14:04:56 +0200 |
commit | 94d829c84fb184990e26178551d10ecdca049efd (patch) | |
tree | 2adacdef7068e3d00db2983f00e7ac6799653206 /src/server/game/Events/GameEventMgr.cpp | |
parent | 4e2b4ada0b8cb151837a6cc8f22b75baef028b13 (diff) |
Core/Pools: Implemented pooling for instances
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
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); + }); + } } } |