AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
PoolGroup< T > Class Template Reference

#include "PoolMgr.h"

Public Member Functions

 PoolGroup ()
 
void SetPoolId (uint32 pool_id)
 
 ~PoolGroup ()
 
bool IsEmpty () const
 
bool IsEmptyDeepCheck () const
 
void AddEntry (PoolObject &poolitem, uint32 maxentries)
 
bool CheckPool () const
 
void DespawnObject (SpawnedPoolData &spawns, ObjectGuid::LowType guid=0)
 
void Despawn1Object (SpawnedPoolData &spawns, ObjectGuid::LowType guid)
 
void SpawnObject (SpawnedPoolData &spawns, uint32 limit, uint32 triggerFrom)
 
void Spawn1Object (SpawnedPoolData &spawns, PoolObject *obj)
 
void ReSpawn1Object (SpawnedPoolData &spawns, PoolObject *obj)
 
void RemoveOneRelation (uint32 child_pool_id)
 
uint32 GetFirstEqualChancedObjectId ()
 
uint32 GetPoolId () const
 
std::vector< PoolObject > const & GetExplicitlyChanced () const
 
std::vector< PoolObject > const & GetEqualChanced () const
 

Private Types

typedef std::vector< PoolObjectPoolObjectList
 

Static Private Member Functions

static bool IsSpawnableOnMap (uint32 db_guid_or_pool_id, Map *map)
 

Private Attributes

uint32 poolId
 
PoolObjectList ExplicitlyChanced
 
PoolObjectList EqualChanced
 

Detailed Description

template<class T>
class PoolGroup< T >

Member Typedef Documentation

◆ PoolObjectList

template<class T >
typedef std::vector<PoolObject> PoolGroup< T >::PoolObjectList
private

Constructor & Destructor Documentation

◆ PoolGroup()

template<class T >
PoolGroup< T >::PoolGroup ( )
inlineexplicit
89: poolId(0) { }
uint32 poolId
Definition PoolMgr.h:115

◆ ~PoolGroup()

template<class T >
PoolGroup< T >::~PoolGroup ( )
inline
91{};

Member Function Documentation

◆ AddEntry()

template<class T >
void PoolGroup< T >::AddEntry ( PoolObject poolitem,
uint32  maxentries 
)
134{
135 if (poolitem.chance != 0 && maxentries == 1)
136 ExplicitlyChanced.push_back(poolitem);
137 else
138 EqualChanced.push_back(poolitem);
139}
PoolObjectList ExplicitlyChanced
Definition PoolMgr.h:116
PoolObjectList EqualChanced
Definition PoolMgr.h:117
float chance
Definition PoolMgr.h:40

References PoolObject::chance.

Referenced by PoolMgr::LoadFromDB().

◆ CheckPool()

template<class T >
bool PoolGroup< T >::CheckPool ( ) const
144{
145 if (EqualChanced.empty())
146 {
147 float chance = 0;
148 for (uint32 i = 0; i < ExplicitlyChanced.size(); ++i)
149 chance += ExplicitlyChanced[i].chance;
150 if (chance != 100 && chance != 0)
151 return false;
152 }
153 return true;
154}
std::uint32_t uint32
Definition Define.h:107

◆ Despawn1Object()

template<class T >
void PoolGroup< T >::Despawn1Object ( SpawnedPoolData spawns,
ObjectGuid::LowType  guid 
)

◆ DespawnObject()

template<class T >
void PoolGroup< T >::DespawnObject ( SpawnedPoolData spawns,
ObjectGuid::LowType  guid = 0 
)
182{
183 for (std::size_t i = 0; i < EqualChanced.size(); ++i)
184 {
185 // if spawned
186 if (spawns.IsSpawnedObject<T>(EqualChanced[i].guid))
187 {
188 if (!guid || EqualChanced[i].guid == guid)
189 {
190 Despawn1Object(spawns, EqualChanced[i].guid);
191 spawns.RemoveSpawn<T>(EqualChanced[i].guid, poolId);
192 }
193 }
194 }
195
196 for (std::size_t i = 0; i < ExplicitlyChanced.size(); ++i)
197 {
198 // spawned
199 if (spawns.IsSpawnedObject<T>(ExplicitlyChanced[i].guid))
200 {
201 if (!guid || ExplicitlyChanced[i].guid == guid)
202 {
203 Despawn1Object(spawns, ExplicitlyChanced[i].guid);
204 spawns.RemoveSpawn<T>(ExplicitlyChanced[i].guid, poolId);
205 }
206 }
207 }
208}
void Despawn1Object(SpawnedPoolData &spawns, ObjectGuid::LowType guid)
bool IsSpawnedObject(uint32 db_guid_or_pool_id) const
void RemoveSpawn(uint32 db_guid_or_pool_id, uint32 pool_id)

References SpawnedPoolData::IsSpawnedObject(), and SpawnedPoolData::RemoveSpawn().

◆ GetEqualChanced()

template<class T >
std::vector< PoolObject > const & PoolGroup< T >::GetEqualChanced ( ) const
inline
111{ return EqualChanced; }

References PoolGroup< T >::EqualChanced.

◆ GetExplicitlyChanced()

template<class T >
std::vector< PoolObject > const & PoolGroup< T >::GetExplicitlyChanced ( ) const
inline

◆ GetFirstEqualChancedObjectId()

template<class T >
uint32 PoolGroup< T >::GetFirstEqualChancedObjectId ( )
inline
104 {
105 if (EqualChanced.empty())
106 return 0;
107 return EqualChanced.front().guid;
108 }

References PoolGroup< T >::EqualChanced.

◆ GetPoolId()

template<class T >
uint32 PoolGroup< T >::GetPoolId ( ) const
inline
109{ return poolId; }

References PoolGroup< T >::poolId.

◆ IsEmpty()

template<class T >
bool PoolGroup< T >::IsEmpty ( ) const
inline

◆ IsEmptyDeepCheck()

template<class T >
bool PoolGroup< T >::IsEmptyDeepCheck ( ) const
158{
159 return IsEmpty();
160}
bool IsEmpty() const
Definition PoolMgr.h:92

◆ IsSpawnableOnMap()

template<class T >
bool PoolGroup< T >::IsSpawnableOnMap ( uint32  db_guid_or_pool_id,
Map map 
)
staticprivate
312{
313 return true;
314}

◆ RemoveOneRelation()

template<class T >
void PoolGroup< T >::RemoveOneRelation ( uint32  child_pool_id)

◆ ReSpawn1Object()

template<typename T >
void PoolGroup< T >::ReSpawn1Object ( SpawnedPoolData spawns,
PoolObject obj 
)
555{
556 Despawn1Object(spawns, obj->guid);
557 Spawn1Object(spawns, obj);
558}
void Spawn1Object(SpawnedPoolData &spawns, PoolObject *obj)
uint32 guid
Definition PoolMgr.h:39

References PoolObject::guid.

◆ SetPoolId()

template<class T >
void PoolGroup< T >::SetPoolId ( uint32  pool_id)
inline
90{ poolId = pool_id; }

References PoolGroup< T >::poolId.

Referenced by PoolMgr::LoadFromDB().

◆ Spawn1Object()

template<class T >
void PoolGroup< T >::Spawn1Object ( SpawnedPoolData spawns,
PoolObject obj 
)

Referenced by TEST_F().

◆ SpawnObject()

template<class T >
void PoolGroup< T >::SpawnObject ( SpawnedPoolData spawns,
uint32  limit,
uint32  triggerFrom 
)
332{
333 int count = limit - spawns.GetSpawnedObjects(poolId);
334
335 // If triggered from some object respawn this object is still marked as spawned
336 // and also counted into m_SpawnedPoolAmount so we need increase count to be
337 // spawned by 1
338 if (triggerFrom)
339 {
340 ++count;
341 }
342
343 if (count > 0)
344 {
345 PoolObjectList rolledObjects;
346 rolledObjects.reserve(count);
347
348 // roll objects to be spawned
349 if (!ExplicitlyChanced.empty())
350 {
351 float roll = (float)rand_chance();
352
353 for (PoolObject& obj : ExplicitlyChanced)
354 {
355 roll -= obj.chance;
356
357 // Triggering object is marked as spawned at this time and can be also rolled (respawn case)
358 // so this need explicit check for this case
359 if (roll < 0 && (obj.guid == triggerFrom || (!spawns.IsSpawnedObject<T>(obj.guid) && IsSpawnableOnMap(obj.guid, spawns.GetMap()))))
360 {
361 rolledObjects.push_back(obj);
362 break;
363 }
364 }
365 }
366
367 if (!EqualChanced.empty() && rolledObjects.empty())
368 {
369 std::copy_if(EqualChanced.begin(), EqualChanced.end(), std::back_inserter(rolledObjects), [triggerFrom, &spawns](PoolObject const& object)
370 {
371 return object.guid == triggerFrom || (!spawns.IsSpawnedObject<T>(object.guid) && IsSpawnableOnMap(object.guid, spawns.GetMap()));
372 });
373
374 Acore::Containers::RandomResize(rolledObjects, count);
375 }
376
377 // try to spawn rolled objects
378 for (PoolObject& obj : rolledObjects)
379 {
380 if (obj.guid == triggerFrom)
381 {
382 ReSpawn1Object(spawns, &obj);
383 triggerFrom = 0;
384 }
385 else
386 {
387 spawns.AddSpawn<T>(obj.guid, poolId);
388 Spawn1Object(spawns, &obj);
389 }
390 }
391 }
392
393 // One spawn one despawn no count increase
394 if (triggerFrom)
395 {
396 DespawnObject(spawns, triggerFrom);
397 }
398}
double rand_chance()
Definition Random.cpp:91
void ReSpawn1Object(SpawnedPoolData &spawns, PoolObject *obj)
Definition PoolMgr.cpp:554
void DespawnObject(SpawnedPoolData &spawns, ObjectGuid::LowType guid=0)
Definition PoolMgr.cpp:181
static bool IsSpawnableOnMap(uint32 db_guid_or_pool_id, Map *map)
Definition PoolMgr.cpp:311
std::vector< PoolObject > PoolObjectList
Definition PoolMgr.h:87
void AddSpawn(uint32 db_guid_or_pool_id, uint32 pool_id)
Map * GetMap() const
Definition PoolMgr.h:62
uint32 GetSpawnedObjects(uint32 pool_id) const
Definition PoolMgr.cpp:30
void RandomResize(C &container, std::size_t requestedSize)
Definition Containers.h:79
Definition PoolMgr.h:38

References SpawnedPoolData::AddSpawn(), SpawnedPoolData::GetMap(), SpawnedPoolData::GetSpawnedObjects(), SpawnedPoolData::IsSpawnedObject(), rand_chance(), and Acore::Containers::RandomResize().

Member Data Documentation

◆ EqualChanced

◆ ExplicitlyChanced

template<class T >
PoolObjectList PoolGroup< T >::ExplicitlyChanced
private

◆ poolId

template<class T >
uint32 PoolGroup< T >::poolId
private

The documentation for this class was generated from the following files: