AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
AchievementCriteriaData Struct Reference

#include "AchievementMgr.h"

Public Member Functions

 AchievementCriteriaData ()
 
 AchievementCriteriaData (uint32 _dataType, uint32 _value1, uint32 _value2, uint32 _scriptId)
 
bool IsValid (AchievementCriteriaEntry const *criteria)
 
bool Meets (uint32 criteria_id, Player const *source, Unit const *target, uint32 miscvalue1=0) const
 

Public Attributes

AchievementCriteriaDataType dataType {ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE}
 
union { 
 
   struct { 
 
      uint32   id 
 
   }   creature 
 
   struct { 
 
      uint32   class_id 
 
      uint32   race_id 
 
   }   classRace 
 
   struct { 
 
      uint32   percent 
 
   }   health 
 
   struct { 
 
      uint32   own_team_flag 
 
   }   player_dead 
 
   struct { 
 
      uint32   spell_id 
 
      uint32   effect_idx 
 
   }   aura 
 
   struct { 
 
      uint32   id 
 
   }   area 
 
   struct { 
 
      uint32   value 
 
      uint32   compType 
 
   }   value 
 
   struct { 
 
      uint32   minlevel 
 
   }   level 
 
   struct { 
 
      uint32   gender 
 
   }   gender 
 
   struct { 
 
      uint32   difficulty 
 
   }   difficulty 
 
   struct { 
 
      uint32   maxcount 
 
   }   map_players 
 
   struct { 
 
      uint32   team 
 
   }   team 
 
   struct { 
 
      uint32   state 
 
   }   drunk 
 
   struct { 
 
      uint32   id 
 
   }   holiday 
 
   struct { 
 
      uint32   min_score 
 
      uint32   max_score 
 
   }   bg_loss_team_score 
 
   struct { 
 
      uint32   item_level 
 
      uint32   item_quality 
 
   }   equipped_item 
 
   struct { 
 
      uint32   mapId 
 
   }   map_id 
 
   struct { 
 
      uint32   nth_birthday 
 
   }   birthday_login 
 
   struct { 
 
      uint32   title_id 
 
   }   known_title 
 
   struct { 
 
      uint32   winner_score 
 
      uint32   loser_score 
 
   }   teams_scores 
 
   struct { 
 
      uint32   item_quality 
 
   }   item 
 
   struct { 
 
      uint32   value1 
 
      uint32   value2 
 
   }   raw 
 
};  
 
uint32 ScriptId
 

Detailed Description

Constructor & Destructor Documentation

◆ AchievementCriteriaData() [1/2]

AchievementCriteriaData::AchievementCriteriaData ( )
inline
228 {
229 raw.value1 = 0;
230 raw.value2 = 0;
231 ScriptId = 0;
232 }
uint32 ScriptId
Definition AchievementMgr.h:225
struct AchievementCriteriaData::@6::@29 raw

References raw, and ScriptId.

◆ AchievementCriteriaData() [2/2]

AchievementCriteriaData::AchievementCriteriaData ( uint32  _dataType,
uint32  _value1,
uint32  _value2,
uint32  _scriptId 
)
inline
235 {
236 raw.value1 = _value1;
237 raw.value2 = _value2;
238 ScriptId = _scriptId;
239 }
AchievementCriteriaDataType
Definition AchievementMgr.h:57
AchievementCriteriaDataType dataType
Definition AchievementMgr.h:99

References raw, and ScriptId.

Member Function Documentation

◆ IsValid()

bool AchievementCriteriaData::IsValid ( AchievementCriteriaEntry const *  criteria)
52{
54 {
55 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` for criteria (Entry: {}) has wrong data type ({}), ignored.", criteria->ID, dataType);
56 return false;
57 }
58
59 switch (criteria->requiredType)
60 {
65 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: // only hardcoded list
81 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: // only Children's Week achievements
82 case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements
89 break;
90 default:
92 {
93 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` has data for non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->ID, criteria->requiredType);
94 return false;
95 }
96 break;
97 }
98
99 switch (dataType)
100 {
104 return true;
106 if (!creature.id || !sObjectMgr->GetCreatureTemplate(creature.id))
107 {
108 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_CREATURE ({}) has non-existing creature id in value1 ({}), ignored.",
109 criteria->ID, criteria->requiredType, dataType, creature.id);
110 return false;
111 }
112 return true;
114 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
115 {
116 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE ({}) has non-existing class in value1 ({}), ignored.",
117 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
118 return false;
119 }
120 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & sRaceMgr->GetPlayableRaceMask()) == 0)
121 {
122 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE ({}) has non-existing race in value2 ({}), ignored.",
123 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
124 return false;
125 }
126 return true;
128 if (health.percent < 1 || health.percent > 100)
129 {
130 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_PLAYER_LESS_HEALTH ({}) has wrong percent value in value1 ({}), ignored.",
131 criteria->ID, criteria->requiredType, dataType, health.percent);
132 return false;
133 }
134 return true;
136 if (player_dead.own_team_flag > 1)
137 {
138 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD ({}) has wrong boolean value1 ({}).",
139 criteria->ID, criteria->requiredType, dataType, player_dead.own_team_flag);
140 return false;
141 }
142 return true;
145 {
146 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(aura.spell_id);
147 if (!spellInfo)
148 {
149 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell id in value1 ({}), ignored.",
150 criteria->ID, criteria->requiredType, (dataType == ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA ? "ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA" : "ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA"), dataType, aura.spell_id);
151 return false;
152 }
153 if (aura.effect_idx >= 3)
154 {
155 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell effect index in value2 ({}), ignored.",
156 criteria->ID, criteria->requiredType, (dataType == ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA ? "ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA" : "ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA"), dataType, aura.effect_idx);
157 return false;
158 }
159 if (!spellInfo->Effects[aura.effect_idx].ApplyAuraName)
160 {
161 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has non-aura spell effect (ID: {} Effect: {}), ignores.",
162 criteria->ID, criteria->requiredType, (dataType == ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA ? "ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA" : "ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA"), dataType, aura.spell_id, aura.effect_idx);
163 return false;
164 }
165 return true;
166 }
168 if (!sAreaTableStore.LookupEntry(area.id))
169 {
170 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA ({}) has wrong area id in value1 ({}), ignored.",
171 criteria->ID, criteria->requiredType, dataType, area.id);
172 return false;
173 }
174 return true;
176 if (value.compType >= COMP_TYPE_MAX)
177 {
178 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE ({}) has wrong ComparisionType in value2 ({}), ignored.",
179 value.compType, criteria->requiredType, dataType, value.value);
180 return false;
181 }
182 return true;
184 if (level.minlevel > STRONG_MAX_LEVEL)
185 {
186 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL ({}) has wrong minlevel in value1 ({}), ignored.",
187 criteria->ID, criteria->requiredType, dataType, level.minlevel);
188 return false;
189 }
190 return true;
192 if (gender.gender > GENDER_NONE)
193 {
194 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER ({}) has wrong gender in value1 ({}), ignored.",
195 criteria->ID, criteria->requiredType, dataType, gender.gender);
196 return false;
197 }
198 return true;
200 if (!ScriptId)
201 {
202 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT ({}) does not have ScriptName set, ignored.",
203 criteria->ID, criteria->requiredType, dataType);
204 return false;
205 }
206 return true;
208 if (difficulty.difficulty >= MAX_DIFFICULTY)
209 {
210 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY ({}) has wrong difficulty in value1 ({}), ignored.",
211 criteria->ID, criteria->requiredType, dataType, difficulty.difficulty);
212 return false;
213 }
214 return true;
216 if (map_players.maxcount <= 0)
217 {
218 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT ({}) has wrong max players count in value1 ({}), ignored.",
219 criteria->ID, criteria->requiredType, dataType, map_players.maxcount);
220 return false;
221 }
222 return true;
224 if (team.team != ALLIANCE && team.team != HORDE)
225 {
226 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM ({}) has unknown team in value1 ({}), ignored.",
227 criteria->ID, criteria->requiredType, dataType, team.team);
228 return false;
229 }
230 return true;
232 if (drunk.state >= MAX_DRUNKEN)
233 {
234 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK ({}) has unknown drunken state in value1 ({}), ignored.",
235 criteria->ID, criteria->requiredType, dataType, drunk.state);
236 return false;
237 }
238 return true;
240 if (!sHolidaysStore.LookupEntry(holiday.id))
241 {
242 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY ({}) has unknown holiday in value1 ({}), ignored.",
243 criteria->ID, criteria->requiredType, dataType, holiday.id);
244 return false;
245 }
246 return true;
249 return true; // not check correctness node indexes
252 if (equipped_item.item_quality >= MAX_ITEM_QUALITY)
253 {
254 LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: {} Type: {}) for requirement ACHIEVEMENT_CRITERIA_REQUIRE_S_EQUIPPED_ITEM ({}) has unknown quality state in value1 ({}), ignored.",
255 criteria->ID, criteria->requiredType, dataType, equipped_item.item_quality);
256 return false;
257 }
258 return true;
260 if (!sMapStore.LookupEntry(map_id.mapId))
261 {
262 LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: {} Type: {}) for requirement ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID ({}) has unknown map id in value1 ({}), ignored.",
263 criteria->ID, criteria->requiredType, dataType, map_id.mapId);
264 return false;
265 }
266 return true;
268 if (!classRace.class_id && !classRace.race_id)
269 {
270 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) must not have 0 in either value field, ignored.",
271 criteria->ID, criteria->requiredType, dataType);
272 return false;
273 }
274 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
275 {
276 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) has non-existing class in value1 ({}), ignored.",
277 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
278 return false;
279 }
280 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & sRaceMgr->GetPlayableRaceMask()) == 0)
281 {
282 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) has non-existing race in value2 ({}), ignored.",
283 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
284 return false;
285 }
286 return true;
288 {
289 if (!sCharTitlesStore.LookupEntry(known_title.title_id))
290 {
291 LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: {} Type: {}) for requirement ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE ({}) have unknown title_id in value1 ({}), ignore.",
292 criteria->ID, criteria->requiredType, dataType, known_title.title_id);
293 return false;
294 }
295 return true;
296 }
297 default:
298 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) has data for non-supported data type ({}), ignored.", criteria->ID, criteria->requiredType, dataType);
299 return false;
300 }
301}
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY
Definition AchievementMgr.h:81
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT
Definition AchievementMgr.h:70
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT
Definition AchievementMgr.h:72
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER
Definition AchievementMgr.h:69
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE
Definition AchievementMgr.h:82
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA
Definition AchievementMgr.h:65
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE
Definition AchievementMgr.h:61
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE
Definition AchievementMgr.h:67
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY
Definition AchievementMgr.h:71
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM
Definition AchievementMgr.h:78
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK
Definition AchievementMgr.h:74
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID
Definition AchievementMgr.h:79
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA
Definition AchievementMgr.h:64
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY
Definition AchievementMgr.h:75
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA
Definition AchievementMgr.h:66
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE
Definition AchievementMgr.h:80
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE
Definition AchievementMgr.h:76
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL
Definition AchievementMgr.h:68
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE
Definition AchievementMgr.h:60
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH
Definition AchievementMgr.h:62
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM
Definition AchievementMgr.h:73
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT
Definition AchievementMgr.h:77
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD
Definition AchievementMgr.h:63
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE
Definition AchievementMgr.h:59
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY
Definition AchievementMgr.h:84
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES
Definition AchievementMgr.h:83
#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE
Definition AchievementMgr.h:86
#define MAX_DIFFICULTY
Definition DBCEnums.h:283
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE
Definition DBCEnums.h:216
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2
Definition DBCEnums.h:181
@ ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM
Definition DBCEnums.h:155
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
Definition DBCEnums.h:142
@ ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING
Definition DBCEnums.h:139
@ ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL
Definition DBCEnums.h:143
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST
Definition DBCEnums.h:131
@ ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK
Definition DBCEnums.h:158
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT
Definition DBCEnums.h:165
@ ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE
Definition DBCEnums.h:168
@ ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL
Definition DBCEnums.h:124
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE
Definition DBCEnums.h:188
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM
Definition DBCEnums.h:198
@ ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL
Definition DBCEnums.h:149
@ ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2
Definition DBCEnums.h:217
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST
Definition DBCEnums.h:141
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA
Definition DBCEnums.h:151
@ ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM
Definition DBCEnums.h:163
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE
Definition DBCEnums.h:122
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL
Definition DBCEnums.h:186
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_BG
Definition DBCEnums.h:123
@ ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL
Definition DBCEnums.h:182
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
Definition DBCEnums.h:144
@ ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS
Definition DBCEnums.h:170
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA
Definition DBCEnums.h:146
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT
Definition DBCEnums.h:164
@ ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM
Definition DBCEnums.h:199
@ ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN
Definition DBCEnums.h:184
#define STRONG_MAX_LEVEL
Definition DBCEnums.h:43
DBCStorage< CharTitlesEntry > sCharTitlesStore(CharTitlesEntryfmt)
DBCStorage< HolidaysEntry > sHolidaysStore(Holidaysfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define sObjectMgr
Definition ObjectMgr.h:1712
#define MAX_DRUNKEN
Definition Player.h:455
#define sRaceMgr
Definition RaceMgr.h:52
@ GENDER_NONE
Definition SharedDefines.h:63
#define MAX_ITEM_QUALITY
Definition SharedDefines.h:327
@ ALLIANCE
Definition SharedDefines.h:756
@ HORDE
Definition SharedDefines.h:755
#define CLASSMASK_ALL_PLAYABLE
Definition SharedDefines.h:142
#define sSpellMgr
Definition SpellMgr.h:836
@ COMP_TYPE_MAX
Definition Util.h:584
Definition SpellInfo.h:340
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:417
struct AchievementCriteriaData::@6::@11 player_dead
uint32 effect_idx
Definition AchievementMgr.h:130
struct AchievementCriteriaData::@6::@15 level
struct AchievementCriteriaData::@6::@23 equipped_item
uint32 team
Definition AchievementMgr.h:167
struct AchievementCriteriaData::@6::@26 known_title
uint32 value
Definition AchievementMgr.h:140
uint32 difficulty
Definition AchievementMgr.h:157
struct AchievementCriteriaData::@6::@12 aura
struct AchievementCriteriaData::@6::@8 creature
struct AchievementCriteriaData::@6::@9 classRace
struct AchievementCriteriaData::@6::@13 area
struct AchievementCriteriaData::@6::@20 drunk
struct AchievementCriteriaData::@6::@21 holiday
struct AchievementCriteriaData::@6::@10 health
struct AchievementCriteriaData::@6::@18 map_players
uint32 gender
Definition AchievementMgr.h:151
uint32 spell_id
Definition AchievementMgr.h:129
Definition System.cpp:63

References ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE, ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES, ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY, ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT, ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY, ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID, ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT, ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE, ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE, ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM, ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE, ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM, ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING, ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL, ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE, ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM, ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE, ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN, ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK, ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL, ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM, ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT, ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT, ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM, ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA, ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL, ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, ALLIANCE, area, aura, CLASSMASK_ALL_PLAYABLE, classRace, COMP_TYPE_MAX, creature, dataType, difficulty, drunk, SpellInfo::Effects, equipped_item, gender, GENDER_NONE, health, holiday, HORDE, AchievementCriteriaEntry::ID, known_title, level, LOG_ERROR, map_players, MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE, MAX_DIFFICULTY, MAX_DRUNKEN, MAX_ITEM_QUALITY, player_dead, AchievementCriteriaEntry::requiredType, sAreaTableStore, sCharTitlesStore, ScriptId, sHolidaysStore, sMapStore, sObjectMgr, sRaceMgr, sSpellMgr, STRONG_MAX_LEVEL, team, and value.

Referenced by AchievementGlobalMgr::LoadAchievementCriteriaData().

◆ Meets()

bool AchievementCriteriaData::Meets ( uint32  criteria_id,
Player const *  source,
Unit const *  target,
uint32  miscvalue1 = 0 
) const
304{
305 switch (dataType)
306 {
308 return true;
310 if (!target || !target->IsCreature())
311 return false;
312 return target->GetEntry() == creature.id;
314 if (!target || !target->IsPlayer())
315 return false;
316 if (classRace.class_id && classRace.class_id != target->ToPlayer()->getClass())
317 return false;
318 if (classRace.race_id && classRace.race_id != target->ToPlayer()->getRace())
319 return false;
320 return true;
322 if (!source || !source->IsPlayer())
323 return false;
324 if (classRace.class_id && classRace.class_id != source->ToPlayer()->getClass())
325 return false;
326 if (classRace.race_id && classRace.race_id != source->ToPlayer()->getRace())
327 return false;
328 return true;
330 if (!target || !target->IsPlayer())
331 return false;
332 return !target->HealthAbovePct(health.percent);
334 if (target && !target->IsAlive())
335 if (Player const* player = target->ToPlayer())
336 if (player->GetDeathTimer() != 0)
337 // flag set == must be same team, not set == different team
338 return (player->GetTeamId() == source->GetTeamId()) == (player_dead.own_team_flag != 0);
339 return false;
341 return source->HasAuraEffect(aura.spell_id, aura.effect_idx);
343 {
344 uint32 zone_id, area_id;
345 source->GetZoneAndAreaId(zone_id, area_id);
346 return area.id == zone_id || area.id == area_id;
347 }
349 return target && target->HasAuraEffect(aura.spell_id, aura.effect_idx);
351 return CompareValues(ComparisionType(value.compType), miscvalue1, value.value);
353 if (!target)
354 return false;
355 return target->GetLevel() >= level.minlevel;
357 if (!target)
358 return false;
359 return target->getGender() == gender.gender;
361 return sScriptMgr->OnCriteriaCheck(ScriptId, const_cast<Player*>(source), const_cast<Unit*>(target), criteria_id);
363 {
364 if (source->GetMap()->IsRaid())
365 if (source->GetMap()->Is25ManRaid() != ((difficulty.difficulty & RAID_DIFFICULTY_MASK_25MAN) != 0))
366 return false;
367
368 AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(criteria_id);
369 uint8 spawnMode = source->GetMap()->GetSpawnMode();
370 // Dungeons completed on heroic mode count towards both in general achievement, but not in statistics.
371 return sAchievementMgr->IsStatisticCriteria(criteria) ? spawnMode == difficulty.difficulty : spawnMode >= difficulty.difficulty;
372 }
374 return source->GetMap()->GetPlayersCountExceptGMs() <= map_players.maxcount;
376 {
377 if (!target || !target->IsPlayer())
378 return false;
379
380 // DB data compatibility...
381 uint32 teamOld = target->ToPlayer()->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE;
382 return teamOld == team.team;
383 }
385 return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= DrunkenState(drunk.state);
389 {
390 Battleground* bg = source->GetBattleground();
391 if (!bg)
392 return false;
393
394 uint32 score = bg->GetTeamScore(source->GetTeamId() == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
395 return score >= bg_loss_team_score.min_score && score <= bg_loss_team_score.max_score;
396 }
398 {
399 if (!source->IsInWorld())
400 return false;
401 Map* map = source->GetMap();
402 if (!map->IsDungeon())
403 {
404 LOG_ERROR("sql.sql", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} for non-dungeon/non-raid map {}",
406 return false;
407 }
408 InstanceScript* instance = map->ToInstanceMap()->GetInstanceScript();
409 if (!instance)
410 {
411 LOG_ERROR("sql.sql", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} for map {} but map does not have a instance script",
413 return false;
414 }
415 return instance->CheckAchievementCriteriaMeet(criteria_id, source, target, miscvalue1);
416 }
418 {
419 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
420 if (!pProto)
421 return false;
422 return pProto->ItemLevel >= equipped_item.item_level && pProto->Quality >= equipped_item.item_quality;
423 }
425 return source->GetMapId() == map_id.mapId;
427 {
428 tm birthday_tm = Acore::Time::TimeBreakdown(sWorld->getIntConfig(CONFIG_BIRTHDAY_TIME));
429
430 // exactly N birthday
431 birthday_tm.tm_year += birthday_login.nth_birthday;
432
433 time_t birthday = mktime(&birthday_tm);
434 time_t now = GameTime::GetGameTime().count();
435 return now <= birthday + DAY && now >= birthday;
436 }
438 {
439 if (CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(known_title.title_id))
440 return source && source->HasTitle(titleInfo->bit_index);
441
442 return false;
443 }
445 {
446 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
447 if (!pProto)
448 return false;
449 return pProto->Quality == item.item_quality;
450 }
452 {
453 Battleground* bg = source->GetBattleground();
454 if (!bg)
455 {
456 return false;
457 }
458
459 TeamId winnerTeam = GetTeamId(bg->GetWinner());
460 if (winnerTeam == TEAM_NEUTRAL)
461 {
462 return false;
463 }
464
465 uint32 winnnerScore = bg->GetTeamScore(winnerTeam);
466 uint32 loserScore = bg->GetTeamScore(TeamId(!uint32(winnerTeam)));
467 return source->GetTeamId() == winnerTeam && winnnerScore == teams_scores.winner_score && loserScore == teams_scores.loser_score;
468 }
469 default:
470 break;
471 }
472 return false;
473}
#define sAchievementMgr
Definition AchievementMgr.h:451
#define RAID_DIFFICULTY_MASK_25MAN
Definition DBCEnums.h:279
DBCStorage< AchievementCriteriaEntry > sAchievementCriteriaStore(AchievementCriteriafmt)
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
bool IsHolidayActive(HolidayIds id)
Definition GameEventMgr.cpp:2023
DrunkenState
Definition Player.h:448
#define sScriptMgr
Definition ScriptMgr.h:734
TeamId GetTeamId(PvPTeamId teamId)
Definition SharedDefines.h:3720
TeamId
Definition SharedDefines.h:747
@ TEAM_NEUTRAL
Definition SharedDefines.h:750
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
@ TEAM_HORDE
Definition SharedDefines.h:749
HolidayIds
Definition SharedDefines.h:2976
bool CompareValues(ComparisionType type, T val1, T val2)
Definition Util.h:588
ComparisionType
Definition Util.h:578
@ CONFIG_BIRTHDAY_TIME
Definition WorldConfig.h:342
Definition Battleground.h:294
uint32 GetTeamScore(TeamId teamId) const
Definition Battleground.cpp:1907
PvPTeamId GetWinner() const
Definition Battleground.h:349
InstanceScript * GetInstanceScript()
Definition Map.h:660
Definition InstanceScript.h:143
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=nullptr, uint32=0)
Definition InstanceScript.cpp:736
Definition Map.h:164
bool IsDungeon() const
Definition Map.h:295
uint32 GetId() const
Definition Map.h:230
InstanceMap * ToInstanceMap()
Definition Map.h:378
Player * ToPlayer()
Definition Object.h:202
Definition Player.h:1084
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition Player.cpp:976
Definition Unit.h:664
#define sWorld
Definition World.h:316
AC_COMMON_API std::tm TimeBreakdown(time_t t=0)
Definition Timer.cpp:233
Seconds GetGameTime()
Definition GameTime.cpp:38
struct AchievementCriteriaData::@6::@28 item
struct AchievementCriteriaData::@6::@27 teams_scores
struct AchievementCriteriaData::@6::@22 bg_loss_team_score
struct AchievementCriteriaData::@6::@25 birthday_login
Definition DBCStructure.h:70
Definition DBCStructure.h:632
Definition ItemTemplate.h:619
uint32 Quality
Definition ItemTemplate.h:626
uint32 ItemLevel
Definition ItemTemplate.h:635

References ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE, ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES, ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY, ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT, ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY, ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID, ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT, ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE, ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE, ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE, ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH, ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM, ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE, ALLIANCE, area, aura, bg_loss_team_score, birthday_login, InstanceScript::CheckAchievementCriteriaMeet(), classRace, CompareValues(), CONFIG_BIRTHDAY_TIME, creature, dataType, difficulty, drunk, equipped_item, gender, Player::GetBattleground(), Unit::getClass(), Player::GetDrunkenstateByValue(), Player::GetDrunkValue(), Object::GetEntry(), GameTime::GetGameTime(), Unit::getGender(), Map::GetId(), InstanceMap::GetInstanceScript(), Unit::GetLevel(), WorldObject::GetMap(), WorldLocation::GetMapId(), Map::GetPlayersCountExceptGMs(), Unit::getRace(), Map::GetSpawnMode(), Player::GetTeamId(), GetTeamId(), Battleground::GetTeamScore(), Battleground::GetWinner(), WorldObject::GetZoneAndAreaId(), Unit::HasAuraEffect(), Player::HasTitle(), health, Unit::HealthAbovePct(), holiday, HORDE, Map::Is25ManRaid(), Unit::IsAlive(), Object::IsCreature(), Map::IsDungeon(), IsHolidayActive(), Object::IsInWorld(), Object::IsPlayer(), Map::IsRaid(), item, ItemTemplate::ItemLevel, known_title, level, LOG_ERROR, map_players, player_dead, ItemTemplate::Quality, RAID_DIFFICULTY_MASK_25MAN, sAchievementCriteriaStore, sAchievementMgr, sCharTitlesStore, ScriptId, sObjectMgr, sScriptMgr, sWorld, team, TEAM_ALLIANCE, TEAM_HORDE, TEAM_NEUTRAL, teams_scores, Acore::Time::TimeBreakdown(), Map::ToInstanceMap(), Object::ToPlayer(), and value.

Member Data Documentation

◆ [union]

union { ... } AchievementCriteriaData

◆ [struct]

struct { ... } AchievementCriteriaData::area

Referenced by IsValid(), and Meets().

◆ [struct]

struct { ... } AchievementCriteriaData::aura

Referenced by IsValid(), and Meets().

◆ [struct]

struct { ... } AchievementCriteriaData::bg_loss_team_score

Referenced by Meets().

◆ [struct]

struct { ... } AchievementCriteriaData::birthday_login

Referenced by Meets().

◆ class_id

uint32 AchievementCriteriaData::class_id

◆ [struct]

struct { ... } AchievementCriteriaData::classRace

Referenced by IsValid(), and Meets().

◆ compType

uint32 AchievementCriteriaData::compType

◆ [struct]

struct { ... } AchievementCriteriaData::creature

Referenced by IsValid(), and Meets().

◆ dataType

◆ difficulty [1/2]

uint32 AchievementCriteriaData::difficulty

Referenced by IsValid(), and Meets().

◆ [struct] [2/2]

struct { ... } AchievementCriteriaData::difficulty

◆ [struct]

struct { ... } AchievementCriteriaData::drunk

Referenced by IsValid(), and Meets().

◆ effect_idx

uint32 AchievementCriteriaData::effect_idx

◆ [struct]

struct { ... } AchievementCriteriaData::equipped_item

Referenced by IsValid(), and Meets().

◆ gender [1/2]

uint32 AchievementCriteriaData::gender

Referenced by IsValid(), and Meets().

◆ [struct] [2/2]

struct { ... } AchievementCriteriaData::gender

◆ [struct]

struct { ... } AchievementCriteriaData::health

Referenced by IsValid(), and Meets().

◆ [struct]

struct { ... } AchievementCriteriaData::holiday

Referenced by IsValid(), and Meets().

◆ id

uint32 AchievementCriteriaData::id

◆ [struct]

struct { ... } AchievementCriteriaData::item

Referenced by Meets().

◆ item_level

uint32 AchievementCriteriaData::item_level

◆ item_quality

uint32 AchievementCriteriaData::item_quality

◆ [struct]

struct { ... } AchievementCriteriaData::known_title

Referenced by IsValid(), and Meets().

◆ [struct]

struct { ... } AchievementCriteriaData::level

Referenced by IsValid(), and Meets().

◆ loser_score

uint32 AchievementCriteriaData::loser_score

◆ [struct]

struct { ... } AchievementCriteriaData::map_id

◆ [struct]

struct { ... } AchievementCriteriaData::map_players

Referenced by IsValid(), and Meets().

◆ mapId

uint32 AchievementCriteriaData::mapId

◆ max_score

uint32 AchievementCriteriaData::max_score

◆ maxcount

uint32 AchievementCriteriaData::maxcount

◆ min_score

uint32 AchievementCriteriaData::min_score

◆ minlevel

uint32 AchievementCriteriaData::minlevel

◆ nth_birthday

uint32 AchievementCriteriaData::nth_birthday

◆ own_team_flag

uint32 AchievementCriteriaData::own_team_flag

◆ percent

uint32 AchievementCriteriaData::percent

◆ [struct]

struct { ... } AchievementCriteriaData::player_dead

Referenced by IsValid(), and Meets().

◆ race_id

uint32 AchievementCriteriaData::race_id

◆ [struct]

struct { ... } AchievementCriteriaData::raw

◆ ScriptId

uint32 AchievementCriteriaData::ScriptId

◆ spell_id

uint32 AchievementCriteriaData::spell_id

◆ state

uint32 AchievementCriteriaData::state

◆ team [1/2]

uint32 AchievementCriteriaData::team

Referenced by IsValid(), and Meets().

◆ [struct] [2/2]

struct { ... } AchievementCriteriaData::team

◆ [struct]

struct { ... } AchievementCriteriaData::teams_scores

Referenced by Meets().

◆ title_id

uint32 AchievementCriteriaData::title_id

◆ value [1/2]

uint32 AchievementCriteriaData::value

Referenced by IsValid(), and Meets().

◆ [struct] [2/2]

struct { ... } AchievementCriteriaData::value

◆ value1

uint32 AchievementCriteriaData::value1

◆ value2

uint32 AchievementCriteriaData::value2

◆ winner_score

uint32 AchievementCriteriaData::winner_score

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