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
215 {
216 raw.value1 = 0;
217 raw.value2 = 0;
218 ScriptId = 0;
219 }
uint32 ScriptId
Definition: AchievementMgr.h:212
struct AchievementCriteriaData::@6::@29 raw

References raw, and ScriptId.

◆ AchievementCriteriaData() [2/2]

AchievementCriteriaData::AchievementCriteriaData ( uint32  _dataType,
uint32  _value1,
uint32  _value2,
uint32  _scriptId 
)
inline
222 {
223 raw.value1 = _value1;
224 raw.value2 = _value2;
225 ScriptId = _scriptId;
226 }
AchievementCriteriaDataType
Definition: AchievementMgr.h:44
AchievementCriteriaDataType dataType
Definition: AchievementMgr.h:86

References raw, and ScriptId.

Member Function Documentation

◆ IsValid()

bool AchievementCriteriaData::IsValid ( AchievementCriteriaEntry const *  criteria)
49{
51 {
52 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` for criteria (Entry: {}) has wrong data type ({}), ignored.", criteria->ID, dataType);
53 return false;
54 }
55
56 switch (criteria->requiredType)
57 {
62 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: // only hardcoded list
78 case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: // only Children's Week achievements
79 case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements
85 break;
86 default:
88 {
89 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` has data for non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->ID, criteria->requiredType);
90 return false;
91 }
92 break;
93 }
94
95 switch (dataType)
96 {
100 return true;
102 if (!creature.id || !sObjectMgr->GetCreatureTemplate(creature.id))
103 {
104 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.",
105 criteria->ID, criteria->requiredType, dataType, creature.id);
106 return false;
107 }
108 return true;
110 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
111 {
112 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.",
113 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
114 return false;
115 }
116 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & RACEMASK_ALL_PLAYABLE) == 0)
117 {
118 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.",
119 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
120 return false;
121 }
122 return true;
124 if (health.percent < 1 || health.percent > 100)
125 {
126 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.",
127 criteria->ID, criteria->requiredType, dataType, health.percent);
128 return false;
129 }
130 return true;
132 if (player_dead.own_team_flag > 1)
133 {
134 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD ({}) has wrong boolean value1 ({}).",
135 criteria->ID, criteria->requiredType, dataType, player_dead.own_team_flag);
136 return false;
137 }
138 return true;
141 {
142 SpellInfo const* spellEntry = sSpellMgr->GetSpellInfo(aura.spell_id);
143 if (!spellEntry)
144 {
145 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell id in value1 ({}), ignored.",
146 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);
147 return false;
148 }
149 if (aura.effect_idx >= 3)
150 {
151 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has wrong spell effect index in value2 ({}), ignored.",
152 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);
153 return false;
154 }
155 if (!spellEntry->Effects[aura.effect_idx].ApplyAuraName)
156 {
157 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) has non-aura spell effect (ID: {} Effect: {}), ignores.",
158 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);
159 return false;
160 }
161 return true;
162 }
164 if (!sAreaTableStore.LookupEntry(area.id))
165 {
166 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.",
167 criteria->ID, criteria->requiredType, dataType, area.id);
168 return false;
169 }
170 return true;
172 if (value.compType >= COMP_TYPE_MAX)
173 {
174 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE ({}) has wrong ComparisionType in value2 ({}), ignored.",
175 value.compType, criteria->requiredType, dataType, value.value);
176 return false;
177 }
178 return true;
180 if (level.minlevel > STRONG_MAX_LEVEL)
181 {
182 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.",
183 criteria->ID, criteria->requiredType, dataType, level.minlevel);
184 return false;
185 }
186 return true;
188 if (gender.gender > GENDER_NONE)
189 {
190 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.",
191 criteria->ID, criteria->requiredType, dataType, gender.gender);
192 return false;
193 }
194 return true;
196 if (!ScriptId)
197 {
198 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT ({}) does not have ScriptName set, ignored.",
199 criteria->ID, criteria->requiredType, dataType);
200 return false;
201 }
202 return true;
204 if (difficulty.difficulty >= MAX_DIFFICULTY)
205 {
206 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.",
207 criteria->ID, criteria->requiredType, dataType, difficulty.difficulty);
208 return false;
209 }
210 return true;
212 if (map_players.maxcount <= 0)
213 {
214 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.",
215 criteria->ID, criteria->requiredType, dataType, map_players.maxcount);
216 return false;
217 }
218 return true;
220 if (team.team != ALLIANCE && team.team != HORDE)
221 {
222 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.",
223 criteria->ID, criteria->requiredType, dataType, team.team);
224 return false;
225 }
226 return true;
228 if (drunk.state >= MAX_DRUNKEN)
229 {
230 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.",
231 criteria->ID, criteria->requiredType, dataType, drunk.state);
232 return false;
233 }
234 return true;
236 if (!sHolidaysStore.LookupEntry(holiday.id))
237 {
238 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY ({}) has unknown holiday in value1 ({}), ignored.",
239 criteria->ID, criteria->requiredType, dataType, holiday.id);
240 return false;
241 }
242 return true;
245 return true; // not check correctness node indexes
248 if (equipped_item.item_quality >= MAX_ITEM_QUALITY)
249 {
250 LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: {} Type: {}) for requirement ACHIEVEMENT_CRITERIA_REQUIRE_S_EQUIPED_ITEM ({}) has unknown quality state in value1 ({}), ignored.",
251 criteria->ID, criteria->requiredType, dataType, equipped_item.item_quality);
252 return false;
253 }
254 return true;
256 if (!sMapStore.LookupEntry(map_id.mapId))
257 {
258 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.",
259 criteria->ID, criteria->requiredType, dataType, map_id.mapId);
260 return false;
261 }
262 return true;
264 if (!classRace.class_id && !classRace.race_id)
265 {
266 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.",
267 criteria->ID, criteria->requiredType, dataType);
268 return false;
269 }
270 if (classRace.class_id && ((1 << (classRace.class_id - 1)) & CLASSMASK_ALL_PLAYABLE) == 0)
271 {
272 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.",
273 criteria->ID, criteria->requiredType, dataType, classRace.class_id);
274 return false;
275 }
276 if (classRace.race_id && ((1 << (classRace.race_id - 1)) & RACEMASK_ALL_PLAYABLE) == 0)
277 {
278 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.",
279 criteria->ID, criteria->requiredType, dataType, classRace.race_id);
280 return false;
281 }
282 return true;
284 {
285 if (!sCharTitlesStore.LookupEntry(known_title.title_id))
286 {
287 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.",
288 criteria->ID, criteria->requiredType, dataType, known_title.title_id);
289 return false;
290 }
291 return true;
292 }
293 default:
294 LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: {} Type: {}) has data for non-supported data type ({}), ignored.", criteria->ID, criteria->requiredType, dataType);
295 return false;
296 }
297}
#define LOG_ERROR(filterType__,...)
Definition: Log.h:159
@ COMP_TYPE_MAX
Definition: Util.h:588
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY
Definition: AchievementMgr.h:68
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT
Definition: AchievementMgr.h:57
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT
Definition: AchievementMgr.h:59
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER
Definition: AchievementMgr.h:56
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE
Definition: AchievementMgr.h:69
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA
Definition: AchievementMgr.h:52
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE
Definition: AchievementMgr.h:48
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE
Definition: AchievementMgr.h:54
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY
Definition: AchievementMgr.h:58
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK
Definition: AchievementMgr.h:61
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID
Definition: AchievementMgr.h:66
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA
Definition: AchievementMgr.h:51
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY
Definition: AchievementMgr.h:62
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA
Definition: AchievementMgr.h:53
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM
Definition: AchievementMgr.h:65
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE
Definition: AchievementMgr.h:67
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE
Definition: AchievementMgr.h:63
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL
Definition: AchievementMgr.h:55
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE
Definition: AchievementMgr.h:47
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH
Definition: AchievementMgr.h:49
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM
Definition: AchievementMgr.h:60
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT
Definition: AchievementMgr.h:64
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD
Definition: AchievementMgr.h:50
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE
Definition: AchievementMgr.h:46
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY
Definition: AchievementMgr.h:71
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES
Definition: AchievementMgr.h:70
#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE
Definition: AchievementMgr.h:73
DBCStorage< CharTitlesEntry > sCharTitlesStore(CharTitlesEntryfmt)
DBCStorage< HolidaysEntry > sHolidaysStore(Holidaysfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
#define MAX_DRUNKEN
Definition: Player.h:471
#define sObjectMgr
Definition: ObjectMgr.h:1640
#define sSpellMgr
Definition: SpellMgr.h:818
#define MAX_DIFFICULTY
Definition: DBCEnums.h:288
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE
Definition: DBCEnums.h:222
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2
Definition: DBCEnums.h:187
@ ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM
Definition: DBCEnums.h:161
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
Definition: DBCEnums.h:148
@ ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING
Definition: DBCEnums.h:145
@ ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL
Definition: DBCEnums.h:149
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST
Definition: DBCEnums.h:137
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT
Definition: DBCEnums.h:171
@ ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE
Definition: DBCEnums.h:174
@ ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL
Definition: DBCEnums.h:130
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE
Definition: DBCEnums.h:194
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM
Definition: DBCEnums.h:204
@ ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL
Definition: DBCEnums.h:155
@ ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2
Definition: DBCEnums.h:223
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST
Definition: DBCEnums.h:147
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA
Definition: DBCEnums.h:157
@ ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM
Definition: DBCEnums.h:169
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE
Definition: DBCEnums.h:128
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL
Definition: DBCEnums.h:192
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_BG
Definition: DBCEnums.h:129
@ ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL
Definition: DBCEnums.h:188
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
Definition: DBCEnums.h:150
@ ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS
Definition: DBCEnums.h:176
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA
Definition: DBCEnums.h:152
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT
Definition: DBCEnums.h:170
@ ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM
Definition: DBCEnums.h:205
@ ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN
Definition: DBCEnums.h:190
#define STRONG_MAX_LEVEL
Definition: DBCEnums.h:49
@ GENDER_NONE
Definition: SharedDefines.h:62
#define MAX_ITEM_QUALITY
Definition: SharedDefines.h:311
@ ALLIANCE
Definition: SharedDefines.h:740
@ HORDE
Definition: SharedDefines.h:739
#define CLASSMASK_ALL_PLAYABLE
Definition: SharedDefines.h:129
#define RACEMASK_ALL_PLAYABLE
Definition: SharedDefines.h:96
struct AchievementCriteriaData::@6::@11 player_dead
struct AchievementCriteriaData::@6::@15 level
struct AchievementCriteriaData::@6::@23 equipped_item
uint32 team
Definition: AchievementMgr.h:154
struct AchievementCriteriaData::@6::@26 known_title
uint32 value
Definition: AchievementMgr.h:127
uint32 difficulty
Definition: AchievementMgr.h:144
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:138
Definition: SpellInfo.h:314
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition: SpellInfo.h:391
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_EQUIPED_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_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
300{
301 switch (dataType)
302 {
304 return true;
306 if (!target || target->GetTypeId() != TYPEID_UNIT)
307 return false;
308 return target->GetEntry() == creature.id;
310 if (!target || target->GetTypeId() != TYPEID_PLAYER)
311 return false;
312 if (classRace.class_id && classRace.class_id != target->ToPlayer()->getClass())
313 return false;
314 if (classRace.race_id && classRace.race_id != target->ToPlayer()->getRace())
315 return false;
316 return true;
318 if (!source || source->GetTypeId() != TYPEID_PLAYER)
319 return false;
320 if (classRace.class_id && classRace.class_id != source->ToPlayer()->getClass())
321 return false;
322 if (classRace.race_id && classRace.race_id != source->ToPlayer()->getRace())
323 return false;
324 return true;
326 if (!target || target->GetTypeId() != TYPEID_PLAYER)
327 return false;
328 return !target->HealthAbovePct(health.percent);
330 if (target && !target->IsAlive())
331 if (Player const* player = target->ToPlayer())
332 if (player->GetDeathTimer() != 0)
333 // flag set == must be same team, not set == different team
334 return (player->GetTeamId() == source->GetTeamId()) == (player_dead.own_team_flag != 0);
335 return false;
337 return source->HasAuraEffect(aura.spell_id, aura.effect_idx);
339 {
340 uint32 zone_id, area_id;
341 source->GetZoneAndAreaId(zone_id, area_id);
342 return area.id == zone_id || area.id == area_id;
343 }
345 return target && target->HasAuraEffect(aura.spell_id, aura.effect_idx);
347 return CompareValues(ComparisionType(value.compType), miscvalue1, value.value);
349 if (!target)
350 return false;
351 return target->GetLevel() >= level.minlevel;
353 if (!target)
354 return false;
355 return target->getGender() == gender.gender;
357 return sScriptMgr->OnCriteriaCheck(ScriptId, const_cast<Player*>(source), const_cast<Unit*>(target), criteria_id);
359 {
360 if (source->GetMap()->IsRaid())
361 if (source->GetMap()->Is25ManRaid() != ((difficulty.difficulty & RAID_DIFFICULTY_MASK_25MAN) != 0))
362 return false;
363
364 AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(criteria_id);
365 uint8 spawnMode = source->GetMap()->GetSpawnMode();
366 // Dungeons completed on heroic mode count towards both in general achievement, but not in statistics.
367 return sAchievementMgr->IsStatisticCriteria(criteria) ? spawnMode == difficulty.difficulty : spawnMode >= difficulty.difficulty;
368 }
370 return source->GetMap()->GetPlayersCountExceptGMs() <= map_players.maxcount;
372 {
373 if (!target || target->GetTypeId() != TYPEID_PLAYER)
374 return false;
375
376 // DB data compatibility...
377 uint32 teamOld = target->ToPlayer()->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE;
378 return teamOld == team.team;
379 }
381 return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= DrunkenState(drunk.state);
385 {
386 Battleground* bg = source->GetBattleground();
387 if (!bg)
388 return false;
389
390 uint32 score = bg->GetTeamScore(source->GetTeamId() == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
391 return score >= bg_loss_team_score.min_score && score <= bg_loss_team_score.max_score;
392 }
394 {
395 if (!source->IsInWorld())
396 return false;
397 Map* map = source->GetMap();
398 if (!map->IsDungeon())
399 {
400 LOG_ERROR("sql.sql", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} for non-dungeon/non-raid map {}",
402 return false;
403 }
404 InstanceScript* instance = map->ToInstanceMap()->GetInstanceScript();
405 if (!instance)
406 {
407 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",
409 return false;
410 }
411 return instance->CheckAchievementCriteriaMeet(criteria_id, source, target, miscvalue1);
412 }
414 {
415 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
416 if (!pProto)
417 return false;
418 return pProto->ItemLevel >= equipped_item.item_level && pProto->Quality >= equipped_item.item_quality;
419 }
421 return source->GetMapId() == map_id.mapId;
423 {
424 tm birthday_tm = Acore::Time::TimeBreakdown(sWorld->getIntConfig(CONFIG_BIRTHDAY_TIME));
425
426 // exactly N birthday
427 birthday_tm.tm_year += birthday_login.nth_birthday;
428
429 time_t birthday = mktime(&birthday_tm);
430 time_t now = GameTime::GetGameTime().count();
431 return now <= birthday + DAY && now >= birthday;
432 }
434 {
435 if (CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(known_title.title_id))
436 return source && source->HasTitle(titleInfo->bit_index);
437
438 return false;
439 }
441 {
442 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
443 if (!pProto)
444 return false;
445 return pProto->Quality == item.item_quality;
446 }
448 {
449 Battleground* bg = source->GetBattleground();
450 if (!bg)
451 {
452 return false;
453 }
454
455 TeamId winnerTeam = GetTeamId(bg->GetWinner());
456 if (winnerTeam == TEAM_NEUTRAL)
457 {
458 return false;
459 }
460
461 uint32 winnnerScore = bg->GetTeamScore(winnerTeam);
462 uint32 loserScore = bg->GetTeamScore(TeamId(!uint32(winnerTeam)));
463 return source->GetTeamId() == winnerTeam && winnnerScore == teams_scores.winner_score && loserScore == teams_scores.loser_score;
464 }
465 default:
466 break;
467 }
468 return false;
469}
std::uint8_t uint8
Definition: Define.h:110
std::uint32_t uint32
Definition: Define.h:108
bool CompareValues(ComparisionType type, T val1, T val2)
Definition: Util.h:592
ComparisionType
Definition: Util.h:582
#define sAchievementMgr
Definition: AchievementMgr.h:421
DBCStorage< AchievementCriteriaEntry > sAchievementCriteriaStore(AchievementCriteriafmt)
@ TYPEID_UNIT
Definition: ObjectGuid.h:37
@ TYPEID_PLAYER
Definition: ObjectGuid.h:38
DrunkenState
Definition: Player.h:464
bool IsHolidayActive(HolidayIds id)
Definition: GameEventMgr.cpp:1910
#define sScriptMgr
Definition: ScriptMgr.h:2702
@ CONFIG_BIRTHDAY_TIME
Definition: IWorld.h:376
#define RAID_DIFFICULTY_MASK_25MAN
Definition: DBCEnums.h:284
TeamId
Definition: SharedDefines.h:731
@ TEAM_NEUTRAL
Definition: SharedDefines.h:734
@ TEAM_ALLIANCE
Definition: SharedDefines.h:732
@ TEAM_HORDE
Definition: SharedDefines.h:733
TeamId GetTeamId(PvPTeamId teamId)
Definition: SharedDefines.h:3434
HolidayIds
Definition: SharedDefines.h:2713
#define sWorld
Definition: World.h:451
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: Battleground.h:293
uint32 GetTeamScore(TeamId teamId) const
Definition: Battleground.cpp:1855
PvPTeamId GetWinner() const
Definition: Battleground.h:336
Definition: ItemTemplate.h:628
uint32 Quality
Definition: ItemTemplate.h:635
uint32 ItemLevel
Definition: ItemTemplate.h:644
Player * ToPlayer()
Definition: Object.h:195
Definition: Player.h:1046
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition: Player.cpp:960
Definition: Unit.h:1290
Definition: InstanceScript.h:140
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=nullptr, uint32=0)
Definition: InstanceScript.cpp:644
Definition: Map.h:312
bool IsDungeon() const
Definition: Map.h:447
uint32 GetId() const
Definition: Map.h:378
InstanceMap * ToInstanceMap()
Definition: Map.h:544
InstanceScript * GetInstanceScript()
Definition: Map.h:825
Definition: DBCStructure.h:70
Definition: DBCStructure.h:632

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_EQUIPED_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(), Object::GetTypeId(), Battleground::GetWinner(), WorldObject::GetZoneAndAreaId(), Unit::HasAuraEffect(), Player::HasTitle(), health, Unit::HealthAbovePct(), holiday, HORDE, Map::Is25ManRaid(), Unit::IsAlive(), Map::IsDungeon(), IsHolidayActive(), Object::IsInWorld(), 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(), TYPEID_PLAYER, TYPEID_UNIT, and value.

Member Data Documentation

◆ 

union { ... } AchievementCriteriaData::@7

◆ 

struct { ... } AchievementCriteriaData::area

Referenced by IsValid(), and Meets().

◆ 

struct { ... } AchievementCriteriaData::aura

Referenced by IsValid(), and Meets().

◆ 

struct { ... } AchievementCriteriaData::bg_loss_team_score

Referenced by Meets().

◆ 

struct { ... } AchievementCriteriaData::birthday_login

Referenced by Meets().

◆ class_id

uint32 AchievementCriteriaData::class_id

◆ 

struct { ... } AchievementCriteriaData::classRace

Referenced by IsValid(), and Meets().

◆ compType

uint32 AchievementCriteriaData::compType

◆ 

struct { ... } AchievementCriteriaData::creature

Referenced by IsValid(), and Meets().

◆ dataType

◆ difficulty [1/2]

uint32 AchievementCriteriaData::difficulty

Referenced by IsValid(), and Meets().

◆  [2/2]

struct { ... } AchievementCriteriaData::difficulty

◆ 

struct { ... } AchievementCriteriaData::drunk

Referenced by IsValid(), and Meets().

◆ effect_idx

uint32 AchievementCriteriaData::effect_idx

◆ 

struct { ... } AchievementCriteriaData::equipped_item

Referenced by IsValid(), and Meets().

◆ gender [1/2]

uint32 AchievementCriteriaData::gender

Referenced by IsValid(), and Meets().

◆  [2/2]

struct { ... } AchievementCriteriaData::gender

◆ 

struct { ... } AchievementCriteriaData::health

Referenced by IsValid(), and Meets().

◆ 

struct { ... } AchievementCriteriaData::holiday

Referenced by IsValid(), and Meets().

◆ id

uint32 AchievementCriteriaData::id

◆ 

struct { ... } AchievementCriteriaData::item

Referenced by Meets().

◆ item_level

uint32 AchievementCriteriaData::item_level

◆ item_quality

uint32 AchievementCriteriaData::item_quality

◆ 

struct { ... } AchievementCriteriaData::known_title

Referenced by IsValid(), and Meets().

◆ 

struct { ... } AchievementCriteriaData::level

Referenced by IsValid(), and Meets().

◆ loser_score

uint32 AchievementCriteriaData::loser_score

◆ 

struct { ... } AchievementCriteriaData::map_id

◆ 

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 { ... } AchievementCriteriaData::player_dead

Referenced by IsValid(), and Meets().

◆ race_id

uint32 AchievementCriteriaData::race_id

◆ 

struct { ... } AchievementCriteriaData::raw

Referenced by AchievementCriteriaData().

◆ 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().

◆  [2/2]

struct { ... } AchievementCriteriaData::team

◆ 

struct { ... } AchievementCriteriaData::teams_scores

Referenced by Meets().

◆ title_id

uint32 AchievementCriteriaData::title_id

◆ value [1/2]

uint32 AchievementCriteriaData::value

Referenced by IsValid(), and Meets().

◆  [2/2]

struct { ... } AchievementCriteriaData::value

◆ value1

uint32 AchievementCriteriaData::value1

◆ value2

uint32 AchievementCriteriaData::value2

◆ winner_score

uint32 AchievementCriteriaData::winner_score