53 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` for criteria (Entry: {}) contains a wrong data type ({}), ignored.", criteria->
ID,
dataType);
57 switch (criteria->
Type)
90 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` contains data for a non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->
ID, criteria->
Type);
105 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_CREATURE ({}) contains a non-existing creature id in value1 ({}), ignored.",
113 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE ({}) contains a non-existing class in value1 ({}), ignored.",
119 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE ({}) contains a non-existing race in value2 ({}), ignored.",
127 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_PLAYER_LESS_HEALTH ({}) contains a wrong percent value in value1 ({}), ignored.",
135 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD ({}) contains a wrong boolean value1 ({}).",
146 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell id in value1 ({}), ignored.",
150 if (
aura.effect_idx >= 3)
152 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell effect index in value2 ({}), ignored.",
158 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a non-aura spell effect (ID: {} Effect: {}), ignored.",
167 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA ({}) contains a wrong area id in value1 ({}), ignored.",
175 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE ({}) contains a wrong ComparisionType in value2 ({}), ignored.",
183 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL ({}) contains a wrong minlevel in value1 ({}), ignored.",
191 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER ({}) contains a wrong gender value in value1 ({}), ignored.",
199 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT ({}) does not have a ScriptName set, ignored.",
207 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY ({}) contains a wrong difficulty value in value1 ({}), ignored.",
215 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT ({}) contains a wrong max players count in value1 ({}), ignored.",
223 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM ({}) contains an unknown team value in value1 ({}), ignored.",
231 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK ({}) contains an unknown drunken state value in value1 ({}), ignored.",
239 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY ({}) contains an unknown holiday entry in value1 ({}), ignored.",
249 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT ({}) has unknown game_event in value1 ({}), ignored.",
261 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains an unknown quality state value in value1 ({}), ignored.",
269 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID ({}) contains an unknown map id in value1 ({}), ignored.",
277 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) should not have 0 in either value field. Ignored.",
283 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) contains a non-existing class entry in value1 ({}), ignored.",
289 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) contains a non-existing race entry in value2 ({}), ignored.",
297 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE ({}) contains an unknown title_id in value1 ({}), ignore.",
303 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) contains data of a non-supported data type ({}), ignored.", criteria->
ID, criteria->
Type,
dataType);
342 if (!player->IsAlive() && player->GetDeathTimer() != 0)
352 return area.id == zone_id ||
area.id == area_id;
385 Unit const* unitTarget =
nullptr;
387 unitTarget = target->
ToUnit();
423 TC_LOG_ERROR(
"achievement",
"Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} in a non-dungeon/non-raid map {}",
430 TC_LOG_ERROR(
"achievement",
"Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} in map {}, but the map does not have an instance script.",
435 Unit const* unitTarget =
nullptr;
437 unitTarget = target->
ToUnit();
456 localtime_r(&birthday_start, &birthday_tm);
461 time_t birthday = mktime(&birthday_tm);
463 return now <= birthday + DAY && now >= birthday;
468 return source->
HasTitle(titleInfo->MaskID);
487 if (!criteriadata.Meets(
criteria_id, source, target, miscValue1, miscValue2))
504 data <<
uint32(completedAchievement.first);
508 for (std::pair<uint32 const, CriteriaProgress>
const& criteriaprogress :
m_criteriaProgress)
511 data <<
uint32(criteriaprogress.first);
526 TC_LOG_DEBUG(
"achievement",
"AchievementMgr::ResetAchievementCriteria({}, {}, {})", condition, value, evenIfCriteriaComplete);
533 if (!achievementCriteriaList)
571 if (!completedAchievement.second.changed)
575 stmt->
setUInt16(0, completedAchievement.first);
581 stmt->
setUInt16(1, completedAchievement.first);
585 completedAchievement.second.changed =
false;
593 if (!criteriaProgres.second.changed)
598 stmt->
setUInt16(1, criteriaProgres.first);
601 if (criteriaProgres.second.counter)
605 stmt->
setUInt16(1, criteriaProgres.first);
606 stmt->
setUInt32(2, criteriaProgres.second.counter);
611 criteriaProgres.second.changed =
false;
618 if (achievementResult)
622 Field* fields = achievementResult->Fetch();
631 ca.
date = time_t(fields[1].GetUInt32());
642 }
while (achievementResult->NextRow());
649 Field* fields = criteriaResult->Fetch();
652 time_t date = time_t(fields[2].GetUInt32());
658 TC_LOG_ERROR(
"achievement",
"Non-existing achievement criteria {} data has been removed from the table `character_achievement_progress`.",
id);
674 progress.
date = date;
676 }
while (criteriaResult->NextRow());
682 if (
GetPlayer()->GetSession()->PlayerLoading())
689 TC_LOG_DEBUG(
"achievement",
"AchievementMgr::SendAchievementEarned({})", achievement->
ID);
695 guild->BroadcastWorker(_localizer,
GetPlayer());
708 std::size_t linkTypePos = data.
wpos();
710 sWorld->SendGlobalMessage(&data,
nullptr, team);
724 auto achievementEarnedBuilder = [&](
Player const* receiver)
727 now += receiver->GetSession()->GetTimezoneOffset();
734 receiver->SendDirectMessage(&data);
758 data <<
uint32(timedCompleted ? 1 : 0);
760 data <<
uint32(timeElapsed);
784 TC_LOG_DEBUG(
"achievement",
"UpdateAchievementCriteria: Wrong criteria type {}", type);
791 TC_LOG_DEBUG(
"achievement",
"UpdateAchievementCriteria: [Player {} {}] {}, {} ({}), {}, {}"
796 TC_LOG_DEBUG(
"achievement",
"UpdateAchievementCriteria: {}, {} ({}), {}, {}"
803 if (!
CanUpdateCriteria(achievementCriteria, achievement, miscValue1, miscValue2, ref))
815 if (!data->Meets(
GetPlayer(), ref, miscValue1, miscValue2))
912 if (
uint32 skillvalue =
GetPlayer()->GetBaseSkillValue(achievementCriteria->Asset.SkillID))
916 if (
uint32 maxSkillvalue =
GetPlayer()->GetPureMaxSkillValue(achievementCriteria->Asset.SkillID))
924 time_t nextDailyResetTime =
sWorld->GetNextDailyQuestsResetTime();
930 if (progress && progress->
date < (nextDailyResetTime - 2 *
DAY))
939 else if (progress->
date < (nextDailyResetTime - 2 *
DAY))
942 else if (progress->
date < (nextDailyResetTime -
DAY))
957 for (
uint32 rewQuest : rewQuests)
1020 for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
1022 if (skillIter->second->SkillLine == achievementCriteria->Asset.SkillID)
1048 for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
1050 if (skillIter->second->SkillLine == achievementCriteria->Asset.SkillID)
1075 uint32 reqTeamType = achievementCriteria->Asset.TeamType;
1079 if (miscValue2 != reqTeamType)
1093 if (!team || team->
GetType() != reqTeamType)
1104 uint32 reqTeamType = achievementCriteria->Asset.TeamType;
1108 if (miscValue2 != reqTeamType)
1122 if (!team || team->
GetType() != reqTeamType)
1239 return progress->
counter >= 1;
1243 return progress->
counter >= 9000;
1332 if (count >= criteria->Quantity)
1339 bool completed_all =
true;
1348 completed_all =
false;
1351 if (achievementForTestCount > 0 && achievementForTestCount <= count)
1356 if (completed_all && achievementForTestCount == 0)
1369 return &(iter->second);
1390 progress->
counter = changeValue;
1398 newValue = changeValue;
1403 uint32 max_value = std::numeric_limits<uint32>::max();
1404 newValue = max_value - progress->
counter > changeValue ? progress->
counter + changeValue : max_value;
1408 newValue = progress->
counter < changeValue ? changeValue : progress->
counter;
1423 bool timedCompleted =
false;
1463 if (itr->second <= timeDiff)
1471 itr->second -= timeDiff;
1482 if (criteria->StartAsset != entry)
1504 if (criteria->StartAsset != entry)
1529 TC_LOG_INFO(
"achievement",
"AchievementMgr::CompletedAchievement({}). Player: {} {}",
1569 std::string subject = reward->
Subject;
1570 std::string text = reward->
Body;
1633 *data <<
uint32(completedAchievement.first);
1638 for (std::pair<uint32 const, CriteriaProgress>
const& criteriaProgress :
m_criteriaProgress)
1644 *data <<
uint32(criteriaProgress.first);
1665 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {}) Disabled",
1672 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {} Achievement {}) Wrong map",
1680 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {} Achievement {}) Wrong faction",
1687 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {}) Requirements have not been satisfied",
1694 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {}) Conditions have not been satisfied",
1715 if (!AdditionalRequirement.Type)
1718 switch (AdditionalRequirement.Type)
1807 if (!miscValue1 || achievementCriteria->
Asset.
CreatureID != miscValue1)
1812 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
SkillID)
1816 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
ZoneID)
1851 if (achievement->
ID == 318 && miscValue2 ==
GetPlayer()->GetTeam())
1855 if (!miscValue1 || miscValue2 != achievementCriteria->
Asset.
DamageType)
1876 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
SpellID)
1880 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
SpellID)
1888 if (!miscValue1 || !miscValue2)
1894 if (miscValue1 && achievementCriteria->
Asset.
ItemID != miscValue1)
1902 if (miscValue1 != achievementCriteria->
Asset.
ItemID)
1908 if (!worldOverlayEntry)
1911 bool matchFound =
false;
1935 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
FactionID)
1986 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
SkillID)
2000 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
ClassID)
2004 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
RaceID)
2012 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
AreaID)
2016 if (miscValue1 != achievementCriteria->
Asset.
MapID)
2036 return "KILL_CREATURE";
2038 return "TYPE_WIN_BG";
2040 return "REACH_LEVEL";
2042 return "REACH_SKILL_LEVEL";
2044 return "COMPLETE_ACHIEVEMENT";
2046 return "COMPLETE_QUEST_COUNT";
2048 return "COMPLETE_DAILY_QUEST_DAILY";
2050 return "COMPLETE_QUESTS_IN_ZONE";
2052 return "DAMAGE_DONE";
2054 return "COMPLETE_DAILY_QUEST";
2056 return "COMPLETE_BATTLEGROUND";
2058 return "DEATH_AT_MAP";
2062 return "DEATH_IN_DUNGEON";
2064 return "COMPLETE_RAID";
2066 return "KILLED_BY_CREATURE";
2068 return "KILLED_BY_PLAYER";
2070 return "FALL_WITHOUT_DYING";
2072 return "DEATHS_FROM";
2074 return "COMPLETE_QUEST";
2076 return "BE_SPELL_TARGET";
2078 return "CAST_SPELL";
2080 return "BG_OBJECTIVE_CAPTURE";
2082 return "HONORABLE_KILL_AT_AREA";
2086 return "PLAY_ARENA";
2088 return "LEARN_SPELL";
2090 return "HONORABLE_KILL";
2094 return "WIN_RATED_ARENA";
2096 return "HIGHEST_TEAM_RATING";
2098 return "HIGHEST_PERSONAL_RATING";
2100 return "LEARN_SKILL_LEVEL";
2106 return "EXPLORE_AREA";
2110 return "BUY_BANK_SLOT";
2112 return "GAIN_REPUTATION";
2114 return "GAIN_EXALTED_REPUTATION";
2116 return "VISIT_BARBER_SHOP";
2118 return "EQUIP_EPIC_ITEM";
2120 return "ROLL_NEED_ON_LOOT";
2122 return "GREED_ON_LOOT";
2130 return "HEALING_DONE";
2132 return "GET_KILLING_BLOWS";
2134 return "EQUIP_ITEM";
2136 return "MONEY_FROM_VENDORS";
2138 return "GOLD_SPENT_FOR_TALENTS";
2140 return "NUMBER_OF_TALENT_RESETS";
2142 return "MONEY_FROM_QUEST_REWARD";
2144 return "GOLD_SPENT_FOR_TRAVELLING";
2146 return "GOLD_SPENT_AT_BARBER";
2148 return "GOLD_SPENT_FOR_MAIL";
2150 return "LOOT_MONEY";
2152 return "USE_GAMEOBJECT";
2156 return "SPECIAL_PVP_KILL";
2158 return "FISH_IN_GAMEOBJECT";
2162 return "LEARN_SKILLLINE_SPELLS";
2168 return "KILL_CREATURE_TYPE";
2170 return "GOLD_EARNED_BY_AUCTIONS";
2172 return "CREATE_AUCTION";
2174 return "HIGHEST_AUCTION_BID";
2176 return "WON_AUCTIONS";
2178 return "HIGHEST_AUCTION_SOLD";
2180 return "HIGHEST_GOLD_VALUE_OWNED";
2182 return "GAIN_REVERED_REPUTATION";
2184 return "GAIN_HONORED_REPUTATION";
2186 return "KNOWN_FACTIONS";
2188 return "LOOT_EPIC_ITEM";
2190 return "RECEIVE_EPIC_ITEM";
2194 return "ROLL_GREED";
2196 return "HIGHEST_HEALTH";
2198 return "HIGHEST_POWER";
2200 return "HIGHEST_STAT";
2202 return "HIGHEST_SPELLPOWER";
2204 return "HIGHEST_ARMOR";
2206 return "HIGHEST_RATING";
2210 return "HIT_RECEIVED";
2212 return "TOTAL_DAMAGE_RECEIVED";
2214 return "HIGHEST_HEAL_CAST";
2216 return "TOTAL_HEALING_RECEIVED";
2218 return "HIGHEST_HEALING_RECEIVED";
2220 return "QUEST_ABANDONED";
2222 return "FLIGHT_PATHS_TAKEN";
2226 return "CAST_SPELL2";
2228 return "LEARN_SKILL_LINE";
2230 return "EARN_HONORABLE_KILL";
2232 return "ACCEPTED_SUMMONINGS";
2234 return "EARN_ACHIEVEMENT_POINTS";
2236 return "USE_LFD_TO_GROUP_WITH_PLAYERS";
2238 return "MISSING_TYPE";
2311 if (itr->second == SystemTimePoint ::min())
2314 if (itr->second == SystemTimePoint::max())
2341 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement criteria.");
2354 TC_LOG_DEBUG(
"server.loading",
"Achievement {} referenced by criteria {} doesn't exist, criteria not loaded.", criteria->
AchievementID, criteria->
ID);
2370 if (!worldOverlayEntry)
2375 if (worldOverlayEntry->
AreaID[j])
2378 for (
uint8 i = 0; i < j; ++i)
2379 if (worldOverlayEntry->
AreaID[j] == worldOverlayEntry->
AreaID[i])
2393 "ACHIEVEMENT_CRITERIA_CONDITION_MAX must be greater than or equal to %u but is currently equal to %u",
2422 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement references.");
2451 QueryResult result =
WorldDatabase.Query(
"SELECT criteria_id, type, value1, value2, ScriptName FROM achievement_criteria_data");
2455 TC_LOG_INFO(
"server.loading",
">> Loaded 0 additional achievement criteria data. DB table `achievement_criteria_data` is empty.");
2463 Field* fields = result->Fetch();
2470 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` contains data for non-existing criteria (Entry: {}). Ignored.", criteria_id);
2475 std::string scriptName = fields[4].
GetString();
2477 if (scriptName.length())
2480 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` contains a ScriptName for non-scripted data type (Entry: {}, type {}), useless data.", criteria_id, dataType);
2482 scriptId =
sObjectMgr->GetScriptId(scriptName);
2501 while (result->NextRow());
2510 switch (criteria->
Type)
2537 if (achievement->
ID == 1282)
2573 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` does not contain expected data for criteria (Entry: {} Type: {}) for achievement {}.", criteria->
ID, criteria->
Type, criteria->
AchievementID);
2595 TC_LOG_INFO(
"server.loading",
">> Loaded 0 realm first completed achievements. DB table `character_achievement` is empty.");
2601 Field* fields = result->Fetch();
2608 TC_LOG_ERROR(
"achievement",
"Non-existing achievement {} data has been removed from the table `character_achievement`.", achievementId);
2619 while (result->NextRow());
2631 QueryResult result =
WorldDatabase.Query(
"SELECT ID, TitleA, TitleH, ItemID, Sender, Subject, Body, MailTemplateID FROM achievement_reward");
2635 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement rewards. DB table `achievement_reward` is empty.");
2641 Field* fields = result->Fetch();
2646 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` contains a wrong achievement ID ({}), ignored.",
id);
2662 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not contain title or item reward data. Ignored.",
id);
2667 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) contains the title (A: {} H: {}) for only one team.",
id, reward.
TitleId[0], reward.
TitleId[1]);
2674 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (Entry: {}) contains an invalid title id ({}) in `title_A`, set to 0",
id, reward.
TitleId[0]);
2684 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (Entry: {}) contains an invalid title id ({}) in `title_H`, set to 0",
id, reward.
TitleId[1]);
2694 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) contains an invalid creature ID {} as sender, mail reward skipped.",
id, reward.
SenderCreatureId);
2701 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not have sender data, but contains an item reward. Item will not be rewarded.",
id);
2704 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not have sender data, but contains a mail subject.",
id);
2706 if (!reward.
Body.empty())
2707 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not have sender data, but contains mail text.",
id);
2710 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not have sender data, but has a MailTemplate.",
id);
2717 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) is using an invalid MailTemplate ({}).",
id, reward.
MailTemplateId);
2720 else if (!reward.
Subject.empty() || !reward.
Body.empty())
2721 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) is using MailTemplate ({}) and mail subject/text.",
id, reward.
MailTemplateId);
2728 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) contains an invalid item id {}, reward mail will not contain the rewarded item.",
id, reward.
ItemId);
2734 }
while (result->NextRow());
2750 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement reward locale strings. DB table `achievement_reward_locale` is empty.");
2756 Field* fields = result->Fetch();
2759 std::string localeName = fields[1].
GetString();
2767 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward_locale` (ID: {}) contains locale strings for a non-existing achievement reward.",
id);
2774 }
while (result->NextRow());
bool IsAchievementCriteriaTypeStoredByMiscValue(AchievementCriteriaTypes type)
static const uint32 achievIdByArenaSlot[MAX_ARENA_SLOT]
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_GENDER
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_VALUE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_AURA
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_LEVEL
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD
@ MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE
@ ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY
std::vector< AchievementCriteriaEntry const * > AchievementCriteriaEntryList
std::vector< AchievementEntry const * > AchievementEntryList
@ CHAR_DEL_CHAR_ACHIEVEMENT_PROGRESS_BY_CRITERIA
@ CHAR_INS_CHAR_ACHIEVEMENT_PROGRESS
@ CHAR_INS_CHAR_ACHIEVEMENT
@ CHAR_DEL_CHAR_ACHIEVEMENT_BY_ACHIEVEMENT
@ CHAR_DEL_INVALID_ACHIEVMENT
@ CHAR_DEL_CHAR_ACHIEVEMENT_PROGRESS
@ CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA
@ CHAR_DEL_CHAR_ACHIEVEMENT
LocaleConstant GetLocaleByName(const std::string &name)
@ ACHIEVEMENT_FACTION_HORDE
@ ACHIEVEMENT_FACTION_ALLIANCE
@ ACHIEVEMENT_FACTION_ANY
AchievementCriteriaTimedTypes
@ ACHIEVEMENT_TIMED_TYPE_MAX
AchievementCriteriaCondition
@ ACHIEVEMENT_CRITERIA_CONDITION_NONE
@ ACHIEVEMENT_CRITERIA_CONDITION_NOT_IN_GROUP
@ ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE
@ ACHIEVEMENT_CRITERIA_CONDITION_MAX
@ ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP
@ ACHIEVEMENT_FLAG_COUNTER
@ ACHIEVEMENT_FLAG_HIDDEN
@ ACHIEVEMENT_FLAG_REALM_FIRST_REACH
@ ACHIEVEMENT_FLAG_REALM_FIRST_KILL
@ ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE
@ ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY
@ ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED
@ ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
@ ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA
@ ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT
@ ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING
@ ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_ARMOR
@ ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH
@ ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER
@ ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST
@ ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE
@ ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED
@ ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION
@ ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS
@ ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED
@ ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP
@ ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL
@ ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT
@ ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED
@ ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL
@ ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL
@ ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE
@ ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION
@ ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD
@ ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED
@ ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_AURA
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_RATING
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT
@ ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION
@ ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2
@ ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS
@ ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE
@ ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED
@ ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT
@ ACHIEVEMENT_CRITERIA_TYPE_HK_RACE
@ ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS
@ ACHIEVEMENT_CRITERIA_TYPE_DEATH
@ ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA
@ ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS
@ ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS
@ ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL
@ ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE
@ ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD
@ ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL
@ ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT
@ ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_BG
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION
@ ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
@ ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS
@ ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY
@ ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA
@ ACHIEVEMENT_CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT
@ ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING
@ ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS
@ ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED
@ ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN
@ ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL
#define RAID_DIFFICULTY_MASK_25MAN
#define MAX_CRITERIA_REQUIREMENTS
@ CATEGORY_CHILDRENS_WEEK
#define ACHIEVEMENT_CRITERIA_TYPE_TOTAL
DBCStorage< AchievementCriteriaEntry > sAchievementCriteriaStore(AchievementCriteriafmt)
DBCStorage< CharTitlesEntry > sCharTitlesStore(CharTitlesEntryfmt)
DBCStorage< MailTemplateEntry > sMailTemplateStore(MailTemplateEntryfmt)
DBCStorage< HolidaysEntry > sHolidaysStore(Holidaysfmt)
DBCStorage< AchievementEntry > sAchievementStore(Achievementfmt)
DBCStorage< WorldMapOverlayEntry > sWorldMapOverlayStore(WorldMapOverlayEntryfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
#define MAX_WORLD_MAP_OVERLAY_AREA_IDX
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
@ DISABLE_TYPE_ACHIEVEMENT_CRITERIA
std::chrono::minutes Minutes
Minutes shorthand typedef.
bool IsHolidayActive(HolidayIds id)
bool IsEventActive(uint16 eventId)
@ BROADCAST_TEXT_ACHIEVEMENT_EARNED
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_TRACE(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
#define PLAYER_EXPLORED_ZONES_SIZE
std::set< uint32 > RewardedQuestSet
Role Based Access Control related classes definition.
@ CHAT_MSG_GUILD_ACHIEVEMENT
#define CLASSMASK_ALL_PLAYABLE
#define RACEMASK_ALL_PLAYABLE
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
@ PLAYER_EXPLORED_ZONES_1
@ PLAYER_FIELD_LIFETIME_HONORABLE_KILLS
bool CompareValues(ComparisionType type, T val1, T val2)
AchievementCriteriaDataSet const * GetCriteriaDataSet(AchievementCriteriaEntry const *achievementCriteria) const
AchievementCriteriaEntryList const & GetAchievementCriteriaByType(AchievementCriteriaTypes type, uint32 miscValue) const
void LoadCompletedAchievements()
AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]
static AchievementGlobalMgr * instance()
void LoadAchievementCriteriaData()
bool IsRealmCompleted(AchievementEntry const *achievement) const
AchievementCriteriaListByAchievement m_AchievementCriteriaListByAchievement
void LoadAchievementCriteriaList()
AchievementRewards m_achievementRewards
void SetRealmCompleted(AchievementEntry const *achievement)
AchievementListByReferencedId m_AchievementListByReferencedId
void LoadAchievementReferenceList()
static char const * GetCriteriaTypeString(AchievementCriteriaTypes type)
AchievementRewardLocales m_achievementRewardLocales
static AchievementCriteriaEntryList const EmptyCriteriaList
AchievementCriteriaListByMiscValue m_AchievementCriteriasByMiscValue[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]
AchievementCriteriaDataMap m_criteriaDataMap
AchievementCriteriaListByCondition m_AchievementCriteriasByCondition[ACHIEVEMENT_CRITERIA_CONDITION_MAX]
std::unordered_map< uint32, SystemTimePoint > _allCompletedAchievements
AchievementCriteriaEntryList m_AchievementCriteriasByTimedType[ACHIEVEMENT_TIMED_TYPE_MAX]
void SaveToDB(CharacterDatabaseTransaction trans)
Player * GetPlayer() const
CriteriaProgress * GetCriteriaProgress(AchievementCriteriaEntry const *entry)
void UpdateTimedAchievements(uint32 timeDiff)
void CompletedCriteriaFor(AchievementEntry const *achievement)
bool RequirementsSatisfied(AchievementCriteriaEntry const *criteria, AchievementEntry const *achievement, uint32 miscValue1, uint32 miscValue2, WorldObject const *ref) const
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost=0)
bool HasAchieved(uint32 achievementId) const
CriteriaProgressMap m_criteriaProgress
void ResetAchievementCriteria(AchievementCriteriaCondition condition, uint32 value, bool evenIfCriteriaComplete)
bool ConditionsSatisfied(AchievementCriteriaEntry const *criteria) const
void CompletedAchievement(AchievementEntry const *entry)
uint32 m_achievementPoints
bool CanUpdateCriteria(AchievementCriteriaEntry const *criteria, AchievementEntry const *achievement, uint32 miscValue1, uint32 miscValue2, WorldObject const *ref)
void SetCriteriaProgress(AchievementCriteriaEntry const *entry, uint32 changeValue, ProgressType ptype=PROGRESS_SET)
CompletedAchievementMap m_completedAchievements
void SendCriteriaUpdate(AchievementCriteriaEntry const *entry, CriteriaProgress const *progress, uint32 timeElapsed, bool timedCompleted) const
bool IsCompletedCriteria(AchievementCriteriaEntry const *achievementCriteria, AchievementEntry const *achievement)
void SendAllAchievementData() const
void RemoveCriteriaProgress(AchievementCriteriaEntry const *entry)
static void DeleteFromDB(ObjectGuid lowguid)
bool IsCompletedAchievement(AchievementEntry const *entry)
void CheckAllAchievementCriteria()
void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult)
void BuildAllDataPacket(Player const *receiver, WorldPacket *data) const
void SendRespondInspectAchievements(Player *player) const
AchievementMgr(Player *player)
void SendAchievementEarned(AchievementEntry const *achievement) const
void RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
TimedAchievementMap m_timedAchievements
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, WorldObject *ref=nullptr)
ArenaTeamStats const & GetStats() const
ArenaTeamMember * GetMember(ObjectGuid guid)
static uint8 GetSlotByType(uint32 type)
uint8 GetArenaType() const
uint32 GetTeamScore(uint32 TeamID) const
void appendPackGUID(uint64 guid)
void put(std::size_t pos, T value)
Class used to access individual fields of database query result.
std::string GetString() const
std::vector< GameEventData > GameEventDataMap
uint32 GetMaxPlayers() const
InstanceScript * GetInstanceScript()
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=nullptr, uint32=0)
virtual void SaveToDB(CharacterDatabaseTransaction trans)
static Item * CreateItem(uint32 itemEntry, uint32 count, Player const *player=nullptr)
void SendMailTo(CharacterDatabaseTransaction trans, MailReceiver const &receiver, MailSender const &sender, MailCheckMask checked=MAIL_CHECK_MASK_NONE, uint32 deliver_delay=0)
MailDraft & AddItem(Item *item)
uint8 GetSpawnMode() const
uint32 GetPlayersCountExceptGMs() const
InstanceMap * ToInstanceMap()
LowType GetCounter() const
std::string ToString() const
static std::string_view GetLocaleString(std::vector< std::string > const &data, size_t locale)
static void AddLocaleString(std::string &&value, LocaleConstant localeConstant, std::vector< std::string > &data)
PackedGuid const & GetPackGUID() const
static Unit * ToUnit(Object *o)
uint32 GetUInt32Value(uint16 index) const
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
RewardedQuestSet const & getRewardedQuests() const
uint8 GetDrunkValue() const
void SendDirectMessage(WorldPacket const *data) const
bool HasTitle(uint32 bitIndex) const
WorldSession * GetSession() const
static uint32 TeamForRace(uint8 race)
PlayerSpellMap const & GetSpellMap() const
uint32 GetArenaTeamId(uint8 slot) const
Battleground * GetBattleground() const
bool IsGameMaster() const
void SetTitle(CharTitlesEntry const *title, bool lost=false)
ReputationMgr & GetReputationMgr()
static DrunkenState GetDrunkenstateByValue(uint8 value)
void setUInt16(uint8 index, uint16 value)
void setUInt32(uint8 index, uint32 value)
int32 GetZoneOrSort() const
int32 GetReputation(uint32 faction_id) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
bool HealthAbovePct(int32 pct) const
bool HasAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid caster=ObjectGuid::Empty) const
std::string const & GetName() const
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
LocaleConstant GetSessionDbLocaleIndex() const
Minutes GetTimezoneOffset() const
bool HasPermission(uint32 permissionId)
void SetUtcTimeFromUnixTime(std::time_t unixTime)
@ SMSG_ACHIEVEMENT_EARNED
@ SMSG_SERVER_FIRST_ACHIEVEMENT
@ SMSG_RESPOND_INSPECT_ACHIEVEMENTS
@ SMSG_ALL_ACHIEVEMENT_DATA
@ SMSG_ACHIEVEMENT_DELETED
@ CONFIG_LISTEN_RANGE_SAY
bool IsDisabledFor(DisableType type, uint32 entry, WorldObject const *ref, uint8 flags)
WowTime const * GetUtcWowTime()
SystemTimePoint GetSystemTime()
Current chrono system_clock time point.
@ RBAC_PERM_CANNOT_EARN_REALM_FIRST_ACHIEVEMENTS
@ RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS
void Add(AchievementCriteriaData const &data)
bool Meets(Player const *source, WorldObject const *target, uint32 miscValue1=0, uint32 miscValue2=0) const
void SetCriteriaId(uint32 id)
struct AchievementCriteriaData::@5::@24 birthday_login
struct AchievementCriteriaData::@5::@26 game_event
bool IsValid(AchievementCriteriaEntry const *criteria)
bool Meets(uint32 criteria_id, Player const *source, WorldObject const *target, uint32 miscValue1=0, uint32 miscValue2=0) const
struct AchievementCriteriaData::@5::@10 player_dead
struct AchievementCriteriaData::@5::@21 bg_loss_team_score
struct AchievementCriteriaData::@5::@9 health
struct AchievementCriteriaData::@5::@14 level
AchievementCriteriaDataType dataType
struct AchievementCriteriaData::@5::@7 creature
struct AchievementCriteriaData::@5::@27 item
struct AchievementCriteriaData::@5::@22 equipped_item
struct AchievementCriteriaData::@5::@19 drunk
struct AchievementCriteriaData::@5::@8 classRace
struct AchievementCriteriaData::@5::@12 area
struct AchievementCriteriaData::@5::@25 known_title
struct AchievementCriteriaData::@5::@17 map_players
struct AchievementCriteriaData::@5::@20 holiday
struct AchievementCriteriaData::@5::@11 aura
union AchievementCriteriaEntry::@279 Asset
struct AchievementCriteriaEntry::@280 AdditionalRequirements[MAX_CRITERIA_REQUIREMENTS]
std::vector< std::string > Text
std::vector< std::string > Subject
static void VisitWorldObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]