Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
AchievementMgr.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 SF_ACHIEVEMENTMGR_H
7#define SF_ACHIEVEMENTMGR_H
8
9#include <map>
10#include <string>
11
12#include "Common.h"
13#include "DatabaseEnv.h"
14#include "DBCEnums.h"
15#include "DBCStores.h"
16#include "Platform/Singleton.h"
17
18class Unit;
19class Player;
20class WorldPacket;
21
22typedef std::vector<CriteriaEntry const*> AchievementCriteriaEntryList;
23typedef std::vector<AchievementEntry const*> AchievementEntryList;
24typedef std::vector<CriteriaTreeEntry const*> AchievementCriteriaTreeList;
25typedef std::vector<ModifierTreeEntry const*> ModifierTreeEntryList;
26
32
34{
36 time_t date; // latest update time.
37 uint64 CompletedGUID; // GUID of the player that completed this criteria (guild achievements)
38 bool changed;
39};
40
42{ // value1 value2 comment
47 ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA = 5, // spell_id effect_idx
49 ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA = 7, // spell_id effect_idx
50 ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE = 8, // minvalue value provided with achievement update must be not less that limit
51 ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL = 9, // minlevel minlevel of target
52 ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER = 10, // gender 0=male; 1=female
53 ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT = 11, // scripted requirement
54 // REUSE
55 ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT = 13, // count "with less than %u people in the zone"
56 ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM = 14, // team HORDE(67), ALLIANCE(469)
57 ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK = 15, // drunken_state 0 (enum DrunkenState) of player
58 ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY = 16, // holiday_id 0 event in holiday time
59 ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE = 17, // min_score max_score player's team win bg and opposition team have team score in range
60 ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT = 18, // 0 0 maker instance script call for check current criteria requirements fit
61 ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM = 19, // item_level item_quality for equipped item in slot to check item level and quality
63};
64
65#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 22 // maximum value in AchievementCriteriaDataType enum
66
68{
70 union
71 {
72 // ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE = 0 (no data)
73 // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE = 1
74 struct
75 {
78 // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE = 2
79 // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE = 21
80 struct
81 {
85 // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH = 3
86 struct
87 {
90 // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA = 5
91 // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA = 7
92 struct
93 {
97 // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA = 6
98 struct
99 {
100 uint32 id;
102 // ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE = 8
103 struct
104 {
108 // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL = 9
109 struct
110 {
113 // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER = 10
114 struct
115 {
118 // ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT = 11 (no data)
119 // ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT = 13
120 struct
121 {
124 // ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM = 14
125 struct
126 {
129 // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK = 15
130 struct
131 {
134 // ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY = 16
135 struct
136 {
137 uint32 id;
139 // ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE= 17
140 struct
141 {
145 // ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT = 18 (no data)
146 // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM = 19
147 struct
148 {
152 // raw
153 struct
154 {
158 };
160
162 {
163 raw.value1 = 0;
164 raw.value2 = 0;
165 ScriptId = 0;
166 }
167
168 AchievementCriteriaData(uint32 _dataType, uint32 _value1, uint32 _value2, uint32 _scriptId) : dataType(AchievementCriteriaDataType(_dataType))
169 {
170 raw.value1 = _value1;
171 raw.value2 = _value2;
172 ScriptId = _scriptId;
173 }
174
175 bool IsValid(CriteriaEntry const* criteria);
176 bool Meets(uint32 criteria_id, Player const* source, Unit const* target, uint32 miscValue1 = 0) const;
177};
178
180{
182 typedef std::vector<AchievementCriteriaData> Storage;
183 void Add(AchievementCriteriaData const& data) { storage.push_back(data); }
184 bool Meets(Player const* source, Unit const* target, uint32 miscValue = 0) const;
186private:
189};
190
191typedef std::map<uint32, AchievementCriteriaDataSet> AchievementCriteriaDataMap;
192
202
204
206{
207 std::vector<std::string> subject;
208 std::vector<std::string> text;
209};
210
212
214{
215 time_t date;
216 std::set<uint64> guids;
218};
219
222
229
230template<class T>
232{
233public:
234 AchievementMgr(T* owner);
236
237 void Reset();
238 static void DeleteFromDB(uint32 lowguid);
239 void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult);
240 void SaveToDB(SQLTransaction& trans);
241 void ResetAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, bool evenIfCriteriaComplete = false);
242 void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, Unit const* unit = NULL, Player* referencePlayer = NULL);
243 void CompletedAchievement(AchievementEntry const* entry, Player* referencePlayer);
244 void CheckAllAchievementCriteria(Player* referencePlayer);
245 void SendAllAchievementData(Player* receiver) const;
246 void SendAchievementInfo(Player* receiver, uint32 achievementId = 0) const;
247 bool HasAchieved(uint32 achievementId) const;
248 T* GetOwner() const { return _owner; }
249
250 void UpdateTimedAchievements(uint32 timeDiff);
252 void RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry); // used for quest and scripted timed achievements
253
255private:
256 void SendAchievementEarned(AchievementEntry const* achievement) const;
257 void SendCriteriaUpdate(CriteriaEntry const* entry, CriteriaProgress const* progress, uint32 timeElapsed, bool timedCompleted) const;
259 void SetCriteriaProgress(CriteriaEntry const* entry, uint64 changeValue, Player* referencePlayer, ProgressType ptype = PROGRESS_SET);
260 void RemoveCriteriaProgress(CriteriaEntry const* entry);
261 void CompletedCriteriaFor(AchievementEntry const* achievement, Player* referencePlayer);
262 bool IsCompletedCriteria(CriteriaEntry const* criteria);
263 bool IsCompletedCriteriaForAchievement(CriteriaEntry const* criteria, AchievementEntry const* achievementEntry);
264 bool IsCompletedAchievement(AchievementEntry const* entry);
265 bool CanUpdateCriteria(CriteriaEntry const* criteria, AchievementEntry const* achievement, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit const* unit, Player* referencePlayer);
266 void SendPacket(WorldPacket* data) const;
267
268 bool ConditionsSatisfied(CriteriaEntry const* criteria, Player* referencePlayer) const;
269 bool RequirementsSatisfied(CriteriaEntry const* criteria, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit const* unit, Player* referencePlayer) const;
270 bool AdditionalRequirementsSatisfied(CriteriaEntry const* criteria, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit const* unit, Player* referencePlayer) const;
271
275 typedef std::map<uint32, uint32> TimedAchievementMap;
276 TimedAchievementMap m_timedAchievements; // Criteria id/time left in MS
278};
279
281{
282 friend class Skyfire::Singleton<AchievementGlobalMgr, Skyfire::NullMutex>;
285
286public:
287 static char const* GetCriteriaTypeString(AchievementCriteriaTypes type);
288 static char const* GetCriteriaTypeString(uint32 type);
289
294
299
304
306 {
307 AchievementListByReferencedId::const_iterator itr = m_AchievementListByReferencedId.find(id);
308 return itr != m_AchievementListByReferencedId.end() ? &itr->second : NULL;
309 }
310
312 {
313 ModifierTreeEntryByTreeId::const_iterator iter = m_ModifierTreeEntryByTreeId.find(id);
314 return iter != m_ModifierTreeEntryByTreeId.end() ? &iter->second : NULL;
315 }
316
318 {
319 AchievementRewards::const_iterator iter = m_achievementRewards.find(achievement->ID);
320 return iter != m_achievementRewards.end() ? &iter->second : NULL;
321 }
322
324 {
325 AchievementRewardLocales::const_iterator iter = m_achievementRewardLocales.find(achievement->ID);
326 return iter != m_achievementRewardLocales.end() ? &iter->second : NULL;
327 }
328
329 AchievementCriteriaDataSet const* GetCriteriaDataSet(CriteriaEntry const* achievementCriteria) const
330 {
331 AchievementCriteriaDataMap::const_iterator iter = m_criteriaDataMap.find(achievementCriteria->ID);
332 return iter != m_criteriaDataMap.end() ? &iter->second : NULL;
333 }
334
336 {
337 SubCriteriaTreeListById::const_iterator iter = m_SubCriteriaTreeListById.find(id);
338 return iter != m_SubCriteriaTreeListById.end() ? &iter->second : NULL;
339 }
340
342 {
343 while (true)
344 {
345 if (!criteria->parentID || criteria->parentID == criteria->ID)
346 {
347 AchievementEntryByCriteriaTree::const_iterator iter = m_AchievementEntryByCriteriaTree.find(criteria->ID);
348 return iter != m_AchievementEntryByCriteriaTree.end() ? iter->second : NULL;
349 }
350 criteria = sCriteriaTreeStore.LookupEntry(criteria->parentID);
351 }
352 return NULL;
353 }
354
355 bool IsRealmCompleted(AchievementEntry const* achievement) const
356 {
357 return m_allCompletedAchievements.find(achievement->ID) != m_allCompletedAchievements.end();
358 }
359
360 void SetRealmCompleted(AchievementEntry const* achievement)
361 {
362 m_allCompletedAchievements.insert(achievement->ID);
363 }
364
366 {
367 switch (type)
368 {
375 return true;
376 default:
377 break;
378 }
379
380 return false;
381 }
382
387 void LoadRewards();
388 void LoadRewardLocales();
389 AchievementEntry const* GetAchievement(uint32 achievementId) const;
390 CriteriaEntry const* GetAchievementCriteria(uint32 achievementId) const;
391private:
393
394 // store achievement criterias by type to speed up lookup
396
398
399 // store achievements by referenced achievement id to speed up lookup
401
405 typedef std::set<uint32> AllCompletedAchievements;
408
411};
412
413#define sAchievementMgr Skyfire::Singleton<AchievementGlobalMgr, Skyfire::NullMutex>::instance()
414
415#endif
UNORDERED_MAP< uint32, AchievementReward > AchievementRewards
ProgressType
@ PROGRESS_SET
@ PROGRESS_ACCUMULATE
@ PROGRESS_HIGHEST
std::vector< CriteriaTreeEntry const * > AchievementCriteriaTreeList
std::vector< CriteriaEntry const * > AchievementCriteriaEntryList
UNORDERED_MAP< uint32, AchievementEntry const * > AchievementEntryByCriteriaTree
AchievementCriteriaDataType
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE
@ ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE
UNORDERED_MAP< uint32, CompletedAchievementData > CompletedAchievementMap
UNORDERED_MAP< uint32, AchievementRewardLocale > AchievementRewardLocales
UNORDERED_MAP< uint32, AchievementCriteriaTreeList > AchievementCriteriaTreeByCriteriaId
UNORDERED_MAP< uint32, AchievementCriteriaTreeList > SubCriteriaTreeListById
std::vector< ModifierTreeEntry const * > ModifierTreeEntryList
std::map< uint32, AchievementCriteriaDataSet > AchievementCriteriaDataMap
UNORDERED_MAP< uint32, ModifierTreeEntryList > ModifierTreeEntryByTreeId
UNORDERED_MAP< uint32, CriteriaProgress > CriteriaProgressMap
UNORDERED_MAP< uint32, AchievementEntryList > AchievementListByReferencedId
std::vector< AchievementEntry const * > AchievementEntryList
AchievementCriteriaTimedTypes
Definition DBCEnums.h:157
@ ACHIEVEMENT_TIMED_TYPE_MAX
Definition DBCEnums.h:166
AchievementCriteriaTypes
Definition DBCEnums.h:170
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2
Definition DBCEnums.h:232
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
Definition DBCEnums.h:193
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA
Definition DBCEnums.h:202
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE
Definition DBCEnums.h:171
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_BG
Definition DBCEnums.h:172
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_BATTLEGROUND
Definition DBCEnums.h:277
#define ACHIEVEMENT_CRITERIA_TYPE_TOTAL
Definition DBCEnums.h:293
DBCStorage< CriteriaTreeEntry > sCriteriaTreeStore(CriteriaTreefmt)
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
Definition QueryResult.h:94
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
Definition Transaction.h:42
#define UNORDERED_MAP
AchievementCriteriaEntryList const & GetTimedAchievementCriteriaByType(AchievementCriteriaTimedTypes type) const
AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]
AchievementRewardLocale const * GetAchievementRewardLocale(AchievementEntry const *achievement) const
ModifierTreeEntryByTreeId m_ModifierTreeEntryByTreeId
ModifierTreeEntryList const * GetModifierTreeByModifierId(uint32 id) const
AchievementEntryByCriteriaTree m_AchievementEntryByCriteriaTree
bool IsRealmCompleted(AchievementEntry const *achievement) const
AchievementEntry const * GetAchievementEntryByCriteriaTree(CriteriaTreeEntry const *criteria) const
SubCriteriaTreeListById m_SubCriteriaTreeListById
AchievementCriteriaTreeList const & GetAchievementCriteriaTreeList(CriteriaEntry const *criteria)
AchievementRewards m_achievementRewards
void SetRealmCompleted(AchievementEntry const *achievement)
AchievementListByReferencedId m_AchievementListByReferencedId
AchievementCriteriaDataSet const * GetCriteriaDataSet(CriteriaEntry const *achievementCriteria) const
static char const * GetCriteriaTypeString(AchievementCriteriaTypes type)
AchievementReward const * GetAchievementReward(AchievementEntry const *achievement) const
AchievementRewardLocales m_achievementRewardLocales
AchievementEntryList const * GetAchievementByReferencedId(uint32 id) const
AchievementCriteriaEntryList const & GetAchievementCriteriaByType(AchievementCriteriaTypes type) const
bool IsGroupCriteriaType(AchievementCriteriaTypes type) const
AchievementCriteriaTreeByCriteriaId m_AchievementCriteriaTreeByCriteriaId
AllCompletedAchievements m_allCompletedAchievements
AchievementCriteriaDataMap m_criteriaDataMap
AchievementCriteriaTreeList const * GetSubCriteriaTreeById(uint32 id) const
AchievementEntry const * GetAchievement(uint32 achievementId) const
AchievementCriteriaEntryList m_AchievementCriteriasByTimedType[ACHIEVEMENT_TIMED_TYPE_MAX]
std::set< uint32 > AllCompletedAchievements
CriteriaEntry const * GetAchievementCriteria(uint32 achievementId) const
T * GetOwner() const
CriteriaProgressMap m_criteriaProgress
void SendPacket(WorldPacket *data) const
bool HasAchieved(uint32 achievementId) const
CompletedAchievementMap m_completedAchievements
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost=0)
void SendCriteriaUpdate(CriteriaEntry const *entry, CriteriaProgress const *progress, uint32 timeElapsed, bool timedCompleted) const
bool IsCompletedCriteriaForAchievement(CriteriaEntry const *criteria, AchievementEntry const *achievementEntry)
bool IsCompletedCriteria(CriteriaEntry const *criteria)
void SetCriteriaProgress(CriteriaEntry const *entry, uint64 changeValue, Player *referencePlayer, ProgressType ptype=PROGRESS_SET)
void CompletedAchievement(AchievementEntry const *entry, Player *referencePlayer)
void CompletedCriteriaFor(AchievementEntry const *achievement, Player *referencePlayer)
void UpdateTimedAchievements(uint32 timeDiff)
uint32 _achievementPoints
void SendAllAchievementData(Player *receiver) const
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, Unit const *unit=NULL, Player *referencePlayer=NULL)
bool RequirementsSatisfied(CriteriaEntry const *criteria, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit const *unit, Player *referencePlayer) const
void CheckAllAchievementCriteria(Player *referencePlayer)
static void DeleteFromDB(uint32 lowguid)
void SendAchievementInfo(Player *receiver, uint32 achievementId=0) const
void RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
TimedAchievementMap m_timedAchievements
void SaveToDB(SQLTransaction &trans)
void ResetAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1=0, uint64 miscValue2=0, bool evenIfCriteriaComplete=false)
std::map< uint32, uint32 > TimedAchievementMap
bool CanUpdateCriteria(CriteriaEntry const *criteria, AchievementEntry const *achievement, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit const *unit, Player *referencePlayer)
void RemoveCriteriaProgress(CriteriaEntry const *entry)
bool ConditionsSatisfied(CriteriaEntry const *criteria, Player *referencePlayer) const
void SendAchievementEarned(AchievementEntry const *achievement) const
CriteriaProgress * GetCriteriaProgress(CriteriaEntry const *entry)
bool IsCompletedAchievement(AchievementEntry const *entry)
void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult)
uint32 GetAchievementPoints() const
bool AdditionalRequirementsSatisfied(CriteriaEntry const *criteria, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit const *unit, Player *referencePlayer) const
AchievementMgr(T *owner)
Definition Unit.h:1367
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@024174374254033004277026301075062165130262072115 bg_loss_team_score
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@242275372266152233237245200135230111133067133327 drunk
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@057072032343071104215271130142020325273334150275 level
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@216021007006316026312235077267015221071344272202 aura
bool Meets(uint32 criteria_id, Player const *source, Unit const *target, uint32 miscValue1=0) const
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@336320011221331007167071255301216365172157057155 creature
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@320377026037266164246202240071302363266115322001 area
AchievementCriteriaDataType dataType
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@056275250256040003142024016221011315062167165214 health
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@244322361360134003272016350324260205076224125117 holiday
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@172302147354037330143253231262341126300056164132 classRace
AchievementCriteriaData(uint32 _dataType, uint32 _value1, uint32 _value2, uint32 _scriptId)
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@073272033060277337046210111031273001150026340123 raw
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@107316206207337342166046010026175222131076365132 map_players
bool IsValid(CriteriaEntry const *criteria)
struct AchievementCriteriaData::@106234210224313230010274346235221313360252063263::@127266277105012275312221217150103304016252214022 equipped_item
void Add(AchievementCriteriaData const &data)
std::vector< AchievementCriteriaData > Storage
bool Meets(Player const *source, Unit const *target, uint32 miscValue=0) const
uint32 ID
std::vector< std::string > text
std::vector< std::string > subject
std::set< uint64 > guids
uint32 ID
uint32 parentID
uint32 ID