aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-06-11 14:04:56 +0200
committerShauren <shauren.trinity@gmail.com>2022-06-11 14:04:56 +0200
commit94d829c84fb184990e26178551d10ecdca049efd (patch)
tree2adacdef7068e3d00db2983f00e7ac6799653206 /src/server/game/Maps
parent4e2b4ada0b8cb151837a6cc8f22b75baef028b13 (diff)
Core/Pools: Implemented pooling for instances
Diffstat (limited to 'src/server/game/Maps')
-rw-r--r--src/server/game/Maps/Map.cpp8
-rw-r--r--src/server/game/Maps/Map.h5
-rw-r--r--src/server/game/Maps/SpawnData.h1
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;