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)
53{
55 {
56 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` for criteria (Entry: {}) has wrong data type ({}), ignored.", criteria->ID, dataType);
57 return false;
58 }
59
60 switch (criteria->requiredType)
61 {
66 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: // only hardcoded list
82 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: // only Children's Week achievements
83 case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements
90 break;
91 default:
93 {
94 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` has data for non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->ID, criteria->requiredType);
95 return false;
96 }
97 break;
98 }
99
100 switch (dataType)
101 {
105 return true;
107 if (!creature.id || !sObjectMgr->GetCreatureTemplate(creature.id))
108 {
109 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.",
110 criteria->ID, criteria->requiredType, dataType, creature.id);
111 return false;
112 }
113 return true;
115 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
116 {
117 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.",
118 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
119 return false;
120 }
121 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & sRaceMgr->GetPlayableRaceMask()) == 0)
122 {
123 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.",
124 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
125 return false;
126 }
127 return true;
129 if (health.percent < 1 || health.percent > 100)
130 {
131 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.",
132 criteria->ID, criteria->requiredType, dataType, health.percent);
133 return false;
134 }
135 return true;
137 if (player_dead.own_team_flag > 1)
138 {
139 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD ({}) has wrong boolean value1 ({}).",
140 criteria->ID, criteria->requiredType, dataType, player_dead.own_team_flag);
141 return false;
142 }
143 return true;
146 {
147 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(aura.spell_id);
148 if (!spellInfo)
149 {
150 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell id in value1 ({}), ignored.",
151 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);
152 return false;
153 }
154 if (aura.effect_idx >= 3)
155 {
156 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell effect index in value2 ({}), ignored.",
157 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);
158 return false;
159 }
160 if (!spellInfo->Effects[aura.effect_idx].ApplyAuraName)
161 {
162 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has non-aura spell effect (ID: {} Effect: {}), ignores.",
163 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);
164 return false;
165 }
166 return true;
167 }
169 if (!sAreaTableStore.LookupEntry(area.id))
170 {
171 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.",
172 criteria->ID, criteria->requiredType, dataType, area.id);
173 return false;
174 }
175 return true;
177 if (value.compType >= COMP_TYPE_MAX)
178 {
179 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE ({}) has wrong ComparisionType in value2 ({}), ignored.",
180 value.compType, criteria->requiredType, dataType, value.value);
181 return false;
182 }
183 return true;
185 if (level.minlevel > STRONG_MAX_LEVEL)
186 {
187 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.",
188 criteria->ID, criteria->requiredType, dataType, level.minlevel);
189 return false;
190 }
191 return true;
193 if (gender.gender > GENDER_NONE)
194 {
195 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.",
196 criteria->ID, criteria->requiredType, dataType, gender.gender);
197 return false;
198 }
199 return true;
201 if (!ScriptId)
202 {
203 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT ({}) does not have ScriptName set, ignored.",
204 criteria->ID, criteria->requiredType, dataType);
205 return false;
206 }
207 return true;
209 if (difficulty.difficulty >= MAX_DIFFICULTY)
210 {
211 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.",
212 criteria->ID, criteria->requiredType, dataType, difficulty.difficulty);
213 return false;
214 }
215 return true;
217 if (map_players.maxcount <= 0)
218 {
219 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.",
220 criteria->ID, criteria->requiredType, dataType, map_players.maxcount);
221 return false;
222 }
223 return true;
225 if (team.team != ALLIANCE && team.team != HORDE)
226 {
227 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.",
228 criteria->ID, criteria->requiredType, dataType, team.team);
229 return false;
230 }
231 return true;
233 if (drunk.state >= MAX_DRUNKEN)
234 {
235 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.",
236 criteria->ID, criteria->requiredType, dataType, drunk.state);
237 return false;
238 }
239 return true;
241 if (!sHolidaysStore.LookupEntry(holiday.id))
242 {
243 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY ({}) has unknown holiday in value1 ({}), ignored.",
244 criteria->ID, criteria->requiredType, dataType, holiday.id);
245 return false;
246 }
247 return true;
250 return true; // not check correctness node indexes
253 if (equipped_item.item_quality >= MAX_ITEM_QUALITY)
254 {
255 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.",
256 criteria->ID, criteria->requiredType, dataType, equipped_item.item_quality);
257 return false;
258 }
259 return true;
261 if (!sMapStore.LookupEntry(map_id.mapId))
262 {
263 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.",
264 criteria->ID, criteria->requiredType, dataType, map_id.mapId);
265 return false;
266 }
267 return true;
269 if (!classRace.class_id && !classRace.race_id)
270 {
271 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.",
272 criteria->ID, criteria->requiredType, dataType);
273 return false;
274 }
275 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
276 {
277 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.",
278 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
279 return false;
280 }
281 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & sRaceMgr->GetPlayableRaceMask()) == 0)
282 {
283 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.",
284 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
285 return false;
286 }
287 return true;
289 {
290 if (!sCharTitlesStore.LookupEntry(known_title.title_id))
291 {
292 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.",
293 criteria->ID, criteria->requiredType, dataType, known_title.title_id);
294 return false;
295 }
296 return true;
297 }
298 default:
299 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) has data for non-supported data type ({}), ignored.", criteria->ID, criteria->requiredType, dataType);
300 return false;
301 }
302}
@ 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:145
#define sObjectMgr
Definition ObjectMgr.h:1723
#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
305{
306 switch (dataType)
307 {
309 return true;
311 if (!target || !target->IsCreature())
312 return false;
313 return target->GetEntry() == creature.id;
315 if (!target || !target->IsPlayer())
316 return false;
317 if (classRace.class_id && classRace.class_id != target->ToPlayer()->getClass())
318 return false;
319 if (classRace.race_id && classRace.race_id != target->ToPlayer()->getRace())
320 return false;
321 return true;
323 if (!source || !source->IsPlayer())
324 return false;
325 if (classRace.class_id && classRace.class_id != source->ToPlayer()->getClass())
326 return false;
327 if (classRace.race_id && classRace.race_id != source->ToPlayer()->getRace())
328 return false;
329 return true;
331 if (!target || !target->IsPlayer())
332 return false;
333 return !target->HealthAbovePct(health.percent);
335 if (target && !target->IsAlive())
336 if (Player const* player = target->ToPlayer())
337 if (player->GetDeathTimer() != 0)
338 // flag set == must be same team, not set == different team
339 return (player->GetTeamId() == source->GetTeamId()) == (player_dead.own_team_flag != 0);
340 return false;
342 return source->HasAuraEffect(aura.spell_id, aura.effect_idx);
344 {
345 uint32 zone_id, area_id;
346 source->GetZoneAndAreaId(zone_id, area_id);
347 return area.id == zone_id || area.id == area_id;
348 }
350 return target && target->HasAuraEffect(aura.spell_id, aura.effect_idx);
352 return CompareValues(ComparisionType(value.compType), miscvalue1, value.value);
354 if (!target)
355 return false;
356 return target->GetLevel() >= level.minlevel;
358 if (!target)
359 return false;
360 return target->getGender() == gender.gender;
362 return sScriptMgr->OnCriteriaCheck(ScriptId, const_cast<Player*>(source), const_cast<Unit*>(target), criteria_id);
364 {
365 if (source->GetMap()->IsRaid())
366 if (source->GetMap()->Is25ManRaid() != ((difficulty.difficulty & RAID_DIFFICULTY_MASK_25MAN) != 0))
367 return false;
368
369 AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(criteria_id);
370 uint8 spawnMode = source->GetMap()->GetSpawnMode();
371 // Dungeons completed on heroic mode count towards both in general achievement, but not in statistics.
372 return sAchievementMgr->IsStatisticCriteria(criteria) ? spawnMode == difficulty.difficulty : spawnMode >= difficulty.difficulty;
373 }
375 return source->GetMap()->GetPlayersCountExceptGMs() <= map_players.maxcount;
377 {
378 if (!target || !target->IsPlayer())
379 return false;
380
381 // DB data compatibility...
382 uint32 teamOld = target->ToPlayer()->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE;
383 return teamOld == team.team;
384 }
386 return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= DrunkenState(drunk.state);
390 {
391 Battleground* bg = source->GetBattleground();
392 if (!bg)
393 return false;
394
395 uint32 score = bg->GetTeamScore(source->GetTeamId() == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
396 return score >= bg_loss_team_score.min_score && score <= bg_loss_team_score.max_score;
397 }
399 {
400 if (!source->IsInWorld())
401 return false;
402 Map* map = source->GetMap();
403 if (!map->IsDungeon())
404 {
405 LOG_ERROR("sql.sql", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} for non-dungeon/non-raid map {}",
407 return false;
408 }
409 InstanceScript* instance = map->ToInstanceMap()->GetInstanceScript();
410 if (!instance)
411 {
412 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",
414 return false;
415 }
416 return instance->CheckAchievementCriteriaMeet(criteria_id, source, target, miscvalue1);
417 }
419 {
420 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
421 if (!pProto)
422 return false;
423 return pProto->ItemLevel >= equipped_item.item_level && pProto->Quality >= equipped_item.item_quality;
424 }
426 return source->GetMapId() == map_id.mapId;
428 {
429 tm birthday_tm = Acore::Time::TimeBreakdown(sWorld->getIntConfig(CONFIG_BIRTHDAY_TIME));
430
431 // exactly N birthday
432 birthday_tm.tm_year += birthday_login.nth_birthday;
433
434 time_t birthday = mktime(&birthday_tm);
435 time_t now = GameTime::GetGameTime().count();
436 return now <= birthday + DAY && now >= birthday;
437 }
439 {
440 if (CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(known_title.title_id))
441 return source && source->HasTitle(titleInfo->bit_index);
442
443 return false;
444 }
446 {
447 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
448 if (!pProto)
449 return false;
450 return pProto->Quality == item.item_quality;
451 }
453 {
454 Battleground* bg = source->GetBattleground();
455 if (!bg)
456 {
457 return false;
458 }
459
460 TeamId winnerTeam = GetTeamId(bg->GetWinner());
461 if (winnerTeam == TEAM_NEUTRAL)
462 {
463 return false;
464 }
465
466 uint32 winnnerScore = bg->GetTeamScore(winnerTeam);
467 uint32 loserScore = bg->GetTeamScore(TeamId(!uint32(winnerTeam)));
468 return source->GetTeamId() == winnerTeam && winnnerScore == teams_scores.winner_score && loserScore == teams_scores.loser_score;
469 }
470 default:
471 break;
472 }
473 return false;
474}
#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:737
TeamId GetTeamId(PvPTeamId teamId)
Definition SharedDefines.h:3718
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:2974
bool CompareValues(ComparisionType type, T val1, T val2)
Definition Util.h:588
ComparisionType
Definition Util.h:578
@ CONFIG_BIRTHDAY_TIME
Definition WorldConfig.h:338
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:720
Definition InstanceScript.h:143
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=nullptr, uint32=0)
Definition InstanceScript.cpp:742
Definition Map.h:166
bool IsDungeon() const
Definition Map.h:297
uint32 GetId() const
Definition Map.h:232
InstanceMap * ToInstanceMap()
Definition Map.h:381
Player * ToPlayer()
Definition Object.h:202
Definition Player.h:1084
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition Player.cpp:977
Definition Unit.h:664
#define sWorld
Definition World.h:317
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: