Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
PoolMgr.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRE_POOLHANDLER_H
7#define SKYFIRE_POOLHANDLER_H
8
9#include "Creature.h"
10#include "Define.h"
11#include "GameObject.h"
12#include "Platform/Singleton.h"
13#include "QuestDef.h"
14
19
21{
23 float chance;
24 PoolObject(uint32 _guid, float _chance) : guid(_guid), chance(fabs(_chance)) { }
25};
26
27class Pool // for Pool of Pool case
28{
29};
30
31typedef std::set<uint32> ActivePoolObjects;
32typedef std::map<uint32, uint32> ActivePoolPools;
33
35{
36public:
37 template<typename T>
38 bool IsActiveObject(uint32 db_guid_or_pool_id) const;
39
40 uint32 GetActiveObjectCount(uint32 pool_id) const;
41
42 template<typename T>
43 void ActivateObject(uint32 db_guid_or_pool_id, uint32 pool_id);
44
45 template<typename T>
46 void RemoveObject(uint32 db_guid_or_pool_id, uint32 pool_id);
47
48 ActivePoolObjects GetActiveQuests() const { return mActiveQuests; } // a copy of the set
49private:
54};
55
56template <class T>
58{
59 typedef std::vector<PoolObject> PoolObjectList;
60public:
61 explicit PoolGroup() : poolId(0) { }
62 void SetPoolId(uint32 pool_id) { poolId = pool_id; }
64 bool isEmpty() const { return ExplicitlyChanced.empty() && EqualChanced.empty(); }
65 void AddEntry(PoolObject& poolitem, uint32 maxentries);
66 bool CheckPool() const;
67 PoolObject* RollOne(ActivePoolData& spawns, uint32 triggerFrom);
68 void DespawnObject(ActivePoolData& spawns, uint32 guid = 0);
70 void SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 triggerFrom);
71
74 void RemoveOneRelation(uint32 child_pool_id);
76 {
77 if (EqualChanced.empty())
78 return 0;
79 return EqualChanced.front().guid;
80 }
81 uint32 GetPoolId() const { return poolId; }
82private:
86};
87
88typedef std::multimap<uint32, uint32> PooledQuestRelation;
89typedef std::pair<PooledQuestRelation::const_iterator, PooledQuestRelation::const_iterator> PooledQuestRelationBounds;
90typedef std::pair<PooledQuestRelation::iterator, PooledQuestRelation::iterator> PooledQuestRelationBoundsNC;
91
93{
94 friend class Skyfire::Singleton<PoolMgr, Skyfire::NullMutex>;
95
96private:
97 PoolMgr();
98 ~PoolMgr() { };
99
100public:
101 void LoadFromDB();
102 void LoadQuestPools();
103 void SaveQuestsToDB();
104
105 void Initialize();
106
107 template<typename T>
108 uint32 IsPartOfAPool(uint32 db_guid_or_pool_id) const;
109
110 template<typename T>
111 bool IsSpawnedObject(uint32 db_guid_or_pool_id) const { return mSpawnedData.IsActiveObject<T>(db_guid_or_pool_id); }
112
113 bool CheckPool(uint32 pool_id) const;
114
115 void SpawnPool(uint32 pool_id);
116 void DespawnPool(uint32 pool_id);
117
118 template<typename T>
119 void UpdatePool(uint32 pool_id, uint32 db_guid_or_pool_id);
120
121 void ChangeDailyQuests();
122 void ChangeWeeklyQuests();
123
126
127private:
128 template<typename T>
129 void SpawnPool(uint32 pool_id, uint32 db_guid_or_pool_id);
130
132 typedef std::vector<PoolTemplateData> PoolTemplateDataMap;
133 typedef std::vector<PoolGroup<Creature> > PoolGroupCreatureMap;
134 typedef std::vector<PoolGroup<GameObject> > PoolGroupGameObjectMap;
135 typedef std::vector<PoolGroup<Pool> > PoolGroupPoolMap;
136 typedef std::vector<PoolGroup<Quest> > PoolGroupQuestMap;
137 typedef std::pair<uint32, uint32> SearchPair;
138 typedef std::map<uint32, uint32> SearchMap;
139
149
150 // dynamic data
152};
153
154#define sPoolMgr Skyfire::Singleton<PoolMgr, Skyfire::NullMutex>::instance()
155
156// Method that tell if the creature is part of a pool and return the pool id if yes
157template<>
159{
160 SearchMap::const_iterator itr = mCreatureSearchMap.find(db_guid);
161 if (itr != mCreatureSearchMap.end())
162 return itr->second;
163
164 return 0;
165}
166
167// Method that tell if the gameobject is part of a pool and return the pool id if yes
168template<>
170{
171 SearchMap::const_iterator itr = mGameobjectSearchMap.find(db_guid);
172 if (itr != mGameobjectSearchMap.end())
173 return itr->second;
174
175 return 0;
176}
177
178// Method that tell if the quest is part of another pool and return the pool id if yes
179template<>
181{
182 SearchMap::const_iterator itr = mQuestSearchMap.find(pool_id);
183 if (itr != mQuestSearchMap.end())
184 return itr->second;
185
186 return 0;
187}
188
189// Method that tell if the pool is part of another pool and return the pool id if yes
190template<>
192{
193 SearchMap::const_iterator itr = mPoolSearchMap.find(pool_id);
194 if (itr != mPoolSearchMap.end())
195 return itr->second;
196
197 return 0;
198}
199
200#endif
std::uint32_t uint32
Definition Define.h:77
std::pair< PooledQuestRelation::iterator, PooledQuestRelation::iterator > PooledQuestRelationBoundsNC
Definition PoolMgr.h:90
std::set< uint32 > ActivePoolObjects
Definition PoolMgr.h:31
std::multimap< uint32, uint32 > PooledQuestRelation
Definition PoolMgr.h:88
std::map< uint32, uint32 > ActivePoolPools
Definition PoolMgr.h:32
std::pair< PooledQuestRelation::const_iterator, PooledQuestRelation::const_iterator > PooledQuestRelationBounds
Definition PoolMgr.h:89
ActivePoolObjects mActiveQuests
Definition PoolMgr.h:52
bool IsActiveObject(uint32 db_guid_or_pool_id) const
void RemoveObject(uint32 db_guid_or_pool_id, uint32 pool_id)
uint32 GetActiveObjectCount(uint32 pool_id) const
Definition PoolMgr.cpp:16
ActivePoolObjects mSpawnedCreatures
Definition PoolMgr.h:50
ActivePoolPools mSpawnedPools
Definition PoolMgr.h:53
void ActivateObject(uint32 db_guid_or_pool_id, uint32 pool_id)
ActivePoolObjects mSpawnedGameobjects
Definition PoolMgr.h:51
ActivePoolObjects GetActiveQuests() const
Definition PoolMgr.h:48
void SetPoolId(uint32 pool_id)
Definition PoolMgr.h:62
void SpawnObject(ActivePoolData &spawns, uint32 limit, uint32 triggerFrom)
Definition PoolMgr.cpp:302
void ReSpawn1Object(PoolObject *obj)
uint32 GetFirstEqualChancedObjectId()
Definition PoolMgr.h:75
void Despawn1Object(uint32 guid)
void RemoveOneRelation(uint32 child_pool_id)
PoolObjectList ExplicitlyChanced
Definition PoolMgr.h:84
PoolGroup()
Definition PoolMgr.h:61
void Spawn1Object(PoolObject *obj)
uint32 GetPoolId() const
Definition PoolMgr.h:81
void AddEntry(PoolObject &poolitem, uint32 maxentries)
Definition PoolMgr.cpp:119
~PoolGroup()
Definition PoolMgr.h:63
void DespawnObject(ActivePoolData &spawns, uint32 guid=0)
Definition PoolMgr.cpp:174
bool CheckPool() const
Definition PoolMgr.cpp:129
uint32 poolId
Definition PoolMgr.h:83
std::vector< PoolObject > PoolObjectList
Definition PoolMgr.h:59
PoolObjectList EqualChanced
Definition PoolMgr.h:85
PoolObject * RollOne(ActivePoolData &spawns, uint32 triggerFrom)
Definition PoolMgr.cpp:143
bool isEmpty() const
Definition PoolMgr.h:64
Definition PoolMgr.h:28
std::pair< uint32, uint32 > SearchPair
Definition PoolMgr.h:137
uint32 max_pool_id
Definition PoolMgr.h:131
std::map< uint32, uint32 > SearchMap
Definition PoolMgr.h:138
bool CheckPool(uint32 pool_id) const
Definition PoolMgr.cpp:1035
void Initialize()
Definition PoolMgr.cpp:526
void ChangeWeeklyQuests()
Definition PoolMgr.cpp:959
std::vector< PoolTemplateData > PoolTemplateDataMap
Definition PoolMgr.h:132
PoolGroupCreatureMap mPoolCreatureGroups
Definition PoolMgr.h:141
void LoadFromDB()
Definition PoolMgr.cpp:546
void SaveQuestsToDB()
Definition PoolMgr.cpp:916
PoolGroupPoolMap mPoolPoolGroups
Definition PoolMgr.h:143
uint32 IsPartOfAPool(uint32 db_guid_or_pool_id) const
SearchMap mGameobjectSearchMap
Definition PoolMgr.h:146
PoolTemplateDataMap mPoolTemplate
Definition PoolMgr.h:140
std::vector< PoolGroup< Quest > > PoolGroupQuestMap
Definition PoolMgr.h:136
void LoadQuestPools()
Definition PoolMgr.cpp:914
std::vector< PoolGroup< GameObject > > PoolGroupGameObjectMap
Definition PoolMgr.h:134
std::vector< PoolGroup< Creature > > PoolGroupCreatureMap
Definition PoolMgr.h:133
void SpawnPool(uint32 pool_id)
Definition PoolMgr.cpp:1010
void ChangeDailyQuests()
Definition PoolMgr.cpp:943
std::vector< PoolGroup< Pool > > PoolGroupPoolMap
Definition PoolMgr.h:135
void SpawnPool(uint32 pool_id, uint32 db_guid_or_pool_id)
void UpdatePool(uint32 pool_id, uint32 db_guid_or_pool_id)
Definition PoolMgr.cpp:1048
SearchMap mPoolSearchMap
Definition PoolMgr.h:147
PoolGroupGameObjectMap mPoolGameobjectGroups
Definition PoolMgr.h:142
ActivePoolData mSpawnedData
Definition PoolMgr.h:151
SearchMap mQuestSearchMap
Definition PoolMgr.h:148
void DespawnPool(uint32 pool_id)
Definition PoolMgr.cpp:1019
PooledQuestRelation mQuestGORelation
Definition PoolMgr.h:125
PooledQuestRelation mQuestCreatureRelation
Definition PoolMgr.h:124
PoolGroupQuestMap mPoolQuestGroups
Definition PoolMgr.h:144
bool IsSpawnedObject(uint32 db_guid_or_pool_id) const
Definition PoolMgr.h:111
SearchMap mCreatureSearchMap
Definition PoolMgr.h:145
PoolObject(uint32 _guid, float _chance)
Definition PoolMgr.h:24
uint32 guid
Definition PoolMgr.h:22
float chance
Definition PoolMgr.h:23
uint32 MaxLimit
Definition PoolMgr.h:17