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)
50{
52 {
53 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` for criteria (Entry: {}) has wrong data type ({}), ignored.", criteria->ID, dataType);
54 return false;
55 }
56
57 switch (criteria->requiredType)
58 {
63 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: // only hardcoded list
79 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: // only Children's Week achievements
80 case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements
87 break;
88 default:
90 {
91 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` has data for non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->ID, criteria->requiredType);
92 return false;
93 }
94 break;
95 }
96
97 switch (dataType)
98 {
102 return true;
104 if (!creature.id || !sObjectMgr->GetCreatureTemplate(creature.id))
105 {
106 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.",
107 criteria->ID, criteria->requiredType, dataType, creature.id);
108 return false;
109 }
110 return true;
112 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
113 {
114 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.",
115 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
116 return false;
117 }
118 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & RACEMASK_ALL_PLAYABLE) == 0)
119 {
120 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.",
121 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
122 return false;
123 }
124 return true;
126 if (health.percent < 1 || health.percent > 100)
127 {
128 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.",
129 criteria->ID, criteria->requiredType, dataType, health.percent);
130 return false;
131 }
132 return true;
134 if (player_dead.own_team_flag > 1)
135 {
136 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD ({}) has wrong boolean value1 ({}).",
137 criteria->ID, criteria->requiredType, dataType, player_dead.own_team_flag);
138 return false;
139 }
140 return true;
143 {
144 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(aura.spell_id);
145 if (!spellInfo)
146 {
147 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell id in value1 ({}), ignored.",
148 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);
149 return false;
150 }
151 if (aura.effect_idx >= 3)
152 {
153 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell effect index in value2 ({}), ignored.",
154 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);
155 return false;
156 }
157 if (!spellInfo->Effects[aura.effect_idx].ApplyAuraName)
158 {
159 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has non-aura spell effect (ID: {} Effect: {}), ignores.",
160 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);
161 return false;
162 }
163 return true;
164 }
166 if (!sAreaTableStore.LookupEntry(area.id))
167 {
168 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.",
169 criteria->ID, criteria->requiredType, dataType, area.id);
170 return false;
171 }
172 return true;
174 if (value.compType >= COMP_TYPE_MAX)
175 {
176 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE ({}) has wrong ComparisionType in value2 ({}), ignored.",
177 value.compType, criteria->requiredType, dataType, value.value);
178 return false;
179 }
180 return true;
182 if (level.minlevel > STRONG_MAX_LEVEL)
183 {
184 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.",
185 criteria->ID, criteria->requiredType, dataType, level.minlevel);
186 return false;
187 }
188 return true;
190 if (gender.gender > GENDER_NONE)
191 {
192 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.",
193 criteria->ID, criteria->requiredType, dataType, gender.gender);
194 return false;
195 }
196 return true;
198 if (!ScriptId)
199 {
200 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT ({}) does not have ScriptName set, ignored.",
201 criteria->ID, criteria->requiredType, dataType);
202 return false;
203 }
204 return true;
206 if (difficulty.difficulty >= MAX_DIFFICULTY)
207 {
208 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.",
209 criteria->ID, criteria->requiredType, dataType, difficulty.difficulty);
210 return false;
211 }
212 return true;
214 if (map_players.maxcount <= 0)
215 {
216 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.",
217 criteria->ID, criteria->requiredType, dataType, map_players.maxcount);
218 return false;
219 }
220 return true;
222 if (team.team != ALLIANCE && team.team != HORDE)
223 {
224 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.",
225 criteria->ID, criteria->requiredType, dataType, team.team);
226 return false;
227 }
228 return true;
230 if (drunk.state >= MAX_DRUNKEN)
231 {
232 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.",
233 criteria->ID, criteria->requiredType, dataType, drunk.state);
234 return false;
235 }
236 return true;
238 if (!sHolidaysStore.LookupEntry(holiday.id))
239 {
240 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY ({}) has unknown holiday in value1 ({}), ignored.",
241 criteria->ID, criteria->requiredType, dataType, holiday.id);
242 return false;
243 }
244 return true;
247 return true; // not check correctness node indexes
250 if (equipped_item.item_quality >= MAX_ITEM_QUALITY)
251 {
252 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.",
253 criteria->ID, criteria->requiredType, dataType, equipped_item.item_quality);
254 return false;
255 }
256 return true;
258 if (!sMapStore.LookupEntry(map_id.mapId))
259 {
260 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.",
261 criteria->ID, criteria->requiredType, dataType, map_id.mapId);
262 return false;
263 }
264 return true;
266 if (!classRace.class_id && !classRace.race_id)
267 {
268 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.",
269 criteria->ID, criteria->requiredType, dataType);
270 return false;
271 }
272 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
273 {
274 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.",
275 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
276 return false;
277 }
278 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & RACEMASK_ALL_PLAYABLE) == 0)
279 {
280 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.",
281 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
282 return false;
283 }
284 return true;
286 {
287 if (!sCharTitlesStore.LookupEntry(known_title.title_id))
288 {
289 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.",
290 criteria->ID, criteria->requiredType, dataType, known_title.title_id);
291 return false;
292 }
293 return true;
294 }
295 default:
296 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) has data for non-supported data type ({}), ignored.", criteria->ID, criteria->requiredType, dataType);
297 return false;
298 }
299}
@ 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:157
#define sObjectMgr
Definition ObjectMgr.h:1636
#define MAX_DRUNKEN
Definition Player.h:475
@ GENDER_NONE
Definition SharedDefines.h:63
#define MAX_ITEM_QUALITY
Definition SharedDefines.h:339
@ ALLIANCE
Definition SharedDefines.h:768
@ HORDE
Definition SharedDefines.h:767
#define CLASSMASK_ALL_PLAYABLE
Definition SharedDefines.h:157
#define RACEMASK_ALL_PLAYABLE
Definition SharedDefines.h:97
#define sSpellMgr
Definition SpellMgr.h:825
@ COMP_TYPE_MAX
Definition Util.h:593
Definition SpellInfo.h:316
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:393
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:62

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, RACEMASK_ALL_PLAYABLE, AchievementCriteriaEntry::requiredType, sAreaTableStore, sCharTitlesStore, ScriptId, sHolidaysStore, sMapStore, sObjectMgr, 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
302{
303 switch (dataType)
304 {
306 return true;
308 if (!target || !target->IsCreature())
309 return false;
310 return target->GetEntry() == creature.id;
312 if (!target || !target->IsPlayer())
313 return false;
314 if (classRace.class_id && classRace.class_id != target->ToPlayer()->getClass())
315 return false;
316 if (classRace.race_id && classRace.race_id != target->ToPlayer()->getRace())
317 return false;
318 return true;
320 if (!source || !source->IsPlayer())
321 return false;
322 if (classRace.class_id && classRace.class_id != source->ToPlayer()->getClass())
323 return false;
324 if (classRace.race_id && classRace.race_id != source->ToPlayer()->getRace())
325 return false;
326 return true;
328 if (!target || !target->IsPlayer())
329 return false;
330 return !target->HealthAbovePct(health.percent);
332 if (target && !target->IsAlive())
333 if (Player const* player = target->ToPlayer())
334 if (player->GetDeathTimer() != 0)
335 // flag set == must be same team, not set == different team
336 return (player->GetTeamId() == source->GetTeamId()) == (player_dead.own_team_flag != 0);
337 return false;
339 return source->HasAuraEffect(aura.spell_id, aura.effect_idx);
341 {
342 uint32 zone_id, area_id;
343 source->GetZoneAndAreaId(zone_id, area_id);
344 return area.id == zone_id || area.id == area_id;
345 }
347 return target && target->HasAuraEffect(aura.spell_id, aura.effect_idx);
349 return CompareValues(ComparisionType(value.compType), miscvalue1, value.value);
351 if (!target)
352 return false;
353 return target->GetLevel() >= level.minlevel;
355 if (!target)
356 return false;
357 return target->getGender() == gender.gender;
359 return sScriptMgr->OnCriteriaCheck(ScriptId, const_cast<Player*>(source), const_cast<Unit*>(target), criteria_id);
361 {
362 if (source->GetMap()->IsRaid())
363 if (source->GetMap()->Is25ManRaid() != ((difficulty.difficulty & RAID_DIFFICULTY_MASK_25MAN) != 0))
364 return false;
365
366 AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(criteria_id);
367 uint8 spawnMode = source->GetMap()->GetSpawnMode();
368 // Dungeons completed on heroic mode count towards both in general achievement, but not in statistics.
369 return sAchievementMgr->IsStatisticCriteria(criteria) ? spawnMode == difficulty.difficulty : spawnMode >= difficulty.difficulty;
370 }
372 return source->GetMap()->GetPlayersCountExceptGMs() <= map_players.maxcount;
374 {
375 if (!target || !target->IsPlayer())
376 return false;
377
378 // DB data compatibility...
379 uint32 teamOld = target->ToPlayer()->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE;
380 return teamOld == team.team;
381 }
383 return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= DrunkenState(drunk.state);
387 {
388 Battleground* bg = source->GetBattleground();
389 if (!bg)
390 return false;
391
392 uint32 score = bg->GetTeamScore(source->GetTeamId() == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
393 return score >= bg_loss_team_score.min_score && score <= bg_loss_team_score.max_score;
394 }
396 {
397 if (!source->IsInWorld())
398 return false;
399 Map* map = source->GetMap();
400 if (!map->IsDungeon())
401 {
402 LOG_ERROR("sql.sql", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} for non-dungeon/non-raid map {}",
404 return false;
405 }
406 InstanceScript* instance = map->ToInstanceMap()->GetInstanceScript();
407 if (!instance)
408 {
409 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",
411 return false;
412 }
413 return instance->CheckAchievementCriteriaMeet(criteria_id, source, target, miscvalue1);
414 }
416 {
417 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
418 if (!pProto)
419 return false;
420 return pProto->ItemLevel >= equipped_item.item_level && pProto->Quality >= equipped_item.item_quality;
421 }
423 return source->GetMapId() == map_id.mapId;
425 {
426 tm birthday_tm = Acore::Time::TimeBreakdown(sWorld->getIntConfig(CONFIG_BIRTHDAY_TIME));
427
428 // exactly N birthday
429 birthday_tm.tm_year += birthday_login.nth_birthday;
430
431 time_t birthday = mktime(&birthday_tm);
432 time_t now = GameTime::GetGameTime().count();
433 return now <= birthday + DAY && now >= birthday;
434 }
436 {
437 if (CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(known_title.title_id))
438 return source && source->HasTitle(titleInfo->bit_index);
439
440 return false;
441 }
443 {
444 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
445 if (!pProto)
446 return false;
447 return pProto->Quality == item.item_quality;
448 }
450 {
451 Battleground* bg = source->GetBattleground();
452 if (!bg)
453 {
454 return false;
455 }
456
457 TeamId winnerTeam = GetTeamId(bg->GetWinner());
458 if (winnerTeam == TEAM_NEUTRAL)
459 {
460 return false;
461 }
462
463 uint32 winnnerScore = bg->GetTeamScore(winnerTeam);
464 uint32 loserScore = bg->GetTeamScore(TeamId(!uint32(winnerTeam)));
465 return source->GetTeamId() == winnerTeam && winnnerScore == teams_scores.winner_score && loserScore == teams_scores.loser_score;
466 }
467 default:
468 break;
469 }
470 return false;
471}
#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:1949
@ CONFIG_BIRTHDAY_TIME
Definition IWorld.h:383
DrunkenState
Definition Player.h:468
#define sScriptMgr
Definition ScriptMgr.h:727
TeamId GetTeamId(PvPTeamId teamId)
Definition SharedDefines.h:3462
TeamId
Definition SharedDefines.h:759
@ TEAM_NEUTRAL
Definition SharedDefines.h:762
@ TEAM_ALLIANCE
Definition SharedDefines.h:760
@ TEAM_HORDE
Definition SharedDefines.h:761
HolidayIds
Definition SharedDefines.h:2741
bool CompareValues(ComparisionType type, T val1, T val2)
Definition Util.h:597
ComparisionType
Definition Util.h:587
Definition Battleground.h:304
uint32 GetTeamScore(TeamId teamId) const
Definition Battleground.cpp:1834
PvPTeamId GetWinner() const
Definition Battleground.h:359
InstanceScript * GetInstanceScript()
Definition Map.h:664
Definition InstanceScript.h:143
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=nullptr, uint32=0)
Definition InstanceScript.cpp:731
Definition Map.h:156
bool IsDungeon() const
Definition Map.h:295
uint32 GetId() const
Definition Map.h:229
InstanceMap * ToInstanceMap()
Definition Map.h:393
Player * ToPlayer()
Definition Object.h:201
Definition Player.h:1081
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition Player.cpp:965
Definition Unit.h:636
#define sWorld
Definition World.h:363
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:69
Definition DBCStructure.h:631
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: