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/Maps | |
| parent | 4e2b4ada0b8cb151837a6cc8f22b75baef028b13 (diff) | |
Core/Pools: Implemented pooling for instances
Diffstat (limited to 'src/server/game/Maps')
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.h | 5 | ||||
| -rw-r--r-- | src/server/game/Maps/SpawnData.h | 1 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 738d0d296c8..41d3d2a9abc 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -365,6 +365,8 @@ i_scriptLock(false), _respawnCheckTimer(0) GetGuidSequenceGenerator<HighGuid::Transport>().Set(sObjectMgr->GetGenerator<HighGuid::Transport>().GetNextAfterMaxUsed()); + _poolData = sPoolMgr->InitPoolsForMap(this); + MMAP::MMapFactory::createOrGetMMapManager()->loadMapInstance(sWorld->GetDataPath(), GetId(), i_InstanceId); sScriptMgr->OnCreateMap(this); @@ -3392,7 +3394,7 @@ void Map::ProcessRespawns() ASSERT_NOTNULL(GetRespawnMapForType(next->type))->erase(next->spawnId); // step 2: tell pooling logic to do its thing - sPoolMgr->UpdatePool(poolId, next->type, next->spawnId); + sPoolMgr->UpdatePool(GetPoolData(), poolId, next->type, next->spawnId); // step 3: get rid of the actual entry RemoveRespawnTime(next->type, next->spawnId, nullptr, true); @@ -3485,6 +3487,10 @@ bool Map::ShouldBeSpawnedOnGridLoad(SpawnObjectType type, ObjectGuid::LowType sp if (!IsSpawnGroupActive(spawnGroup->groupId)) return false; + if (spawnData->ToSpawnData()->poolId) + if (!GetPoolData().IsSpawnedObject(type, spawnId)) + return false; + return true; } diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 87dfda99b7a..d4b7b5c1c10 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -57,6 +57,7 @@ class MapInstanced; class Object; class PhaseShift; class Player; +class SpawnedPoolData; class TempSummon; class Unit; class Weather; @@ -807,6 +808,9 @@ class TC_GAME_API Map : public GridRefManager<NGridType> // This will not affect any already-present creatures in the group void SetSpawnGroupInactive(uint32 groupId) { SetSpawnGroupActive(groupId, false); } + SpawnedPoolData& GetPoolData() { return *_poolData; } + SpawnedPoolData const& GetPoolData() const { return *_poolData; } + typedef std::function<void(Map*)> FarSpellCallback; void AddFarSpellCallback(FarSpellCallback&& callback); @@ -891,6 +895,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType> } std::map<HighGuid, std::unique_ptr<ObjectGuidGeneratorBase>> _guidGenerators; + std::unique_ptr<SpawnedPoolData> _poolData; MapStoredObjectTypesContainer _objectsStore; CreatureBySpawnIdContainer _creatureBySpawnIdStore; GameObjectBySpawnIdContainer _gameobjectBySpawnIdStore; diff --git a/src/server/game/Maps/SpawnData.h b/src/server/game/Maps/SpawnData.h index 1b96a70ecc1..c672ec528ad 100644 --- a/src/server/game/Maps/SpawnData.h +++ b/src/server/game/Maps/SpawnData.h @@ -105,6 +105,7 @@ struct SpawnData : public SpawnMetadata uint32 phaseId = 0; uint32 phaseGroup = 0; int32 terrainSwapMap = -1; + uint32 poolId = 0; int32 spawntimesecs = 0; std::vector<Difficulty> spawnDifficulties; uint32 scriptId = 0; |
