54 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` for criteria (Entry: {}) contains a wrong data type ({}), ignored.", criteria->
ID,
dataType);
58 switch (criteria->
Type)
91 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` contains data for a non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->
ID, criteria->
Type);
106 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.",
114 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.",
120 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.",
128 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.",
136 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 ({}).",
147 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell id in value1 ({}), ignored.",
151 if (
aura.effect_idx >= 3)
153 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell effect index in value2 ({}), ignored.",
159 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a non-aura spell effect (ID: {} Effect: {}), ignored.",
168 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.",
176 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.",
184 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.",
192 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.",
200 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.",
208 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.",
216 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.",
224 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.",
232 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.",
240 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.",
250 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.",
262 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains an unknown quality state value in value1 ({}), ignored.",
270 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.",
278 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.",
284 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.",
290 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.",
298 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.",
304 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);
343 if (!player->IsAlive() && player->GetDeathTimer() != 0)
353 return area.id == zone_id ||
area.id == area_id;
386 Unit const* unitTarget =
nullptr;
388 unitTarget = target->
ToUnit();
427 TC_LOG_ERROR(
"achievement",
"Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for achievement criteria {} in a non-dungeon/non-raid map {}",
434 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.",
439 Unit const* unitTarget =
nullptr;
441 unitTarget = target->
ToUnit();
460 localtime_r(&birthday_start, &birthday_tm);
465 time_t birthday = mktime(&birthday_tm);
467 return now <= birthday + DAY && now >= birthday;
472 return source->
HasTitle(titleInfo->MaskID);
491 if (!criteriadata.Meets(
criteria_id, source, target, miscValue1, miscValue2))
508 achievementDeleted.
AchievementID = completedAchievement.first;
512 for (std::pair<uint32 const, CriteriaProgress>
const& criteriaprogress :
m_criteriaProgress)
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 sWorld->SendGlobalMessage(serverFirstAchievement.
Write(),
nullptr, team);
710 serverFirstAchievement.
Clear();
723 auto achievementEarnedBuilder = [&](
Player const* receiver)
729 achievementEarned.
Time += receiver->GetSession()->GetTimezoneOffset();
731 receiver->SendDirectMessage(achievementEarned.
Write());
745 criteriaUpdate.
Flags = 0;
747 criteriaUpdate.
Flags = timedCompleted ? 1 : 0;
783 TC_LOG_DEBUG(
"achievement",
"UpdateAchievementCriteria: Wrong criteria type {}", type);
790 TC_LOG_DEBUG(
"achievement",
"UpdateAchievementCriteria: [Player {} {}] {}, {} ({}), {}, {}"
795 TC_LOG_DEBUG(
"achievement",
"UpdateAchievementCriteria: {}, {} ({}), {}, {}"
802 if (!
CanUpdateCriteria(achievementCriteria, achievement, miscValue1, miscValue2, ref))
814 if (!data->Meets(
GetPlayer(), ref, miscValue1, miscValue2))
911 if (
uint32 skillvalue =
GetPlayer()->GetBaseSkillValue(achievementCriteria->Asset.SkillID))
915 if (
uint32 maxSkillvalue =
GetPlayer()->GetPureMaxSkillValue(achievementCriteria->Asset.SkillID))
923 time_t nextDailyResetTime =
sWorld->GetNextDailyQuestsResetTime();
929 if (progress && progress->
date < (nextDailyResetTime - 2 *
DAY))
938 else if (progress->
date < (nextDailyResetTime - 2 *
DAY))
941 else if (progress->
date < (nextDailyResetTime -
DAY))
956 for (
uint32 rewQuest : rewQuests)
1019 for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
1021 if (skillIter->second->SkillLine == achievementCriteria->Asset.SkillID)
1047 for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
1049 if (skillIter->second->SkillLine == achievementCriteria->Asset.SkillID)
1074 uint32 reqTeamType = achievementCriteria->Asset.TeamType;
1078 if (miscValue2 != reqTeamType)
1092 if (!team || team->
GetType() != reqTeamType)
1103 uint32 reqTeamType = achievementCriteria->Asset.TeamType;
1107 if (miscValue2 != reqTeamType)
1121 if (!team || team->
GetType() != reqTeamType)
1238 return progress->
counter >= 1;
1242 return progress->
counter >= 9000;
1331 if (count >= criteria->Quantity)
1338 bool completed_all =
true;
1347 completed_all =
false;
1350 if (achievementForTestCount > 0 && achievementForTestCount <= count)
1355 if (completed_all && achievementForTestCount == 0)
1368 return &(iter->second);
1389 progress->
counter = changeValue;
1397 newValue = changeValue;
1402 uint32 max_value = std::numeric_limits<uint32>::max();
1403 newValue = max_value - progress->
counter > changeValue ? progress->
counter + changeValue : max_value;
1407 newValue = progress->
counter < changeValue ? changeValue : progress->
counter;
1422 bool timedCompleted =
false;
1460 if (itr->second <= timeDiff)
1468 itr->second -= timeDiff;
1479 if (criteria->StartAsset != entry)
1501 if (criteria->StartAsset != entry)
1526 TC_LOG_INFO(
"achievement",
"AchievementMgr::CompletedAchievement({}). Player: {} {}",
1566 std::string subject = reward->
Subject;
1567 std::string text = reward->
Body;
1628 earned.
Id = completedAchievement.first;
1634 for (std::pair<uint32 const, CriteriaProgress>
const& criteriaProgres :
m_criteriaProgress)
1637 progress.
Id = criteriaProgres.first;
1638 progress.
Quantity = criteriaProgres.second.counter;
1657 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {}) Disabled",
1664 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {} Achievement {}) Wrong map",
1672 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {} Achievement {}) Wrong faction",
1679 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {}) Requirements have not been satisfied",
1686 TC_LOG_TRACE(
"achievement",
"CanUpdateCriteria: (Id: {} Type {}) Conditions have not been satisfied",
1707 if (!AdditionalRequirement.Type)
1710 switch (AdditionalRequirement.Type)
1799 if (!miscValue1 || achievementCriteria->
Asset.
CreatureID != miscValue1)
1804 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
SkillID)
1808 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
ZoneID)
1843 if (achievement->
ID == 318 && miscValue2 ==
GetPlayer()->GetTeam())
1847 if (!miscValue1 || miscValue2 != achievementCriteria->
Asset.
DamageType)
1868 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
SpellID)
1872 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
SpellID)
1880 if (!miscValue1 || !miscValue2)
1886 if (miscValue1 && achievementCriteria->
Asset.
ItemID != miscValue1)
1894 if (miscValue1 != achievementCriteria->
Asset.
ItemID)
1900 if (!worldOverlayEntry)
1903 bool matchFound =
false;
1927 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
FactionID)
1978 if (miscValue1 && miscValue1 != achievementCriteria->
Asset.
SkillID)
1992 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
ClassID)
1996 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
RaceID)
2004 if (!miscValue1 || miscValue1 != achievementCriteria->
Asset.
AreaID)
2008 if (miscValue1 != achievementCriteria->
Asset.
MapID)
2028 return "KILL_CREATURE";
2030 return "TYPE_WIN_BG";
2032 return "REACH_LEVEL";
2034 return "REACH_SKILL_LEVEL";
2036 return "COMPLETE_ACHIEVEMENT";
2038 return "COMPLETE_QUEST_COUNT";
2040 return "COMPLETE_DAILY_QUEST_DAILY";
2042 return "COMPLETE_QUESTS_IN_ZONE";
2044 return "DAMAGE_DONE";
2046 return "COMPLETE_DAILY_QUEST";
2048 return "COMPLETE_BATTLEGROUND";
2050 return "DEATH_AT_MAP";
2054 return "DEATH_IN_DUNGEON";
2056 return "COMPLETE_RAID";
2058 return "KILLED_BY_CREATURE";
2060 return "KILLED_BY_PLAYER";
2062 return "FALL_WITHOUT_DYING";
2064 return "DEATHS_FROM";
2066 return "COMPLETE_QUEST";
2068 return "BE_SPELL_TARGET";
2070 return "CAST_SPELL";
2072 return "BG_OBJECTIVE_CAPTURE";
2074 return "HONORABLE_KILL_AT_AREA";
2078 return "PLAY_ARENA";
2080 return "LEARN_SPELL";
2082 return "HONORABLE_KILL";
2086 return "WIN_RATED_ARENA";
2088 return "HIGHEST_TEAM_RATING";
2090 return "HIGHEST_PERSONAL_RATING";
2092 return "LEARN_SKILL_LEVEL";
2098 return "EXPLORE_AREA";
2102 return "BUY_BANK_SLOT";
2104 return "GAIN_REPUTATION";
2106 return "GAIN_EXALTED_REPUTATION";
2108 return "VISIT_BARBER_SHOP";
2110 return "EQUIP_EPIC_ITEM";
2112 return "ROLL_NEED_ON_LOOT";
2114 return "GREED_ON_LOOT";
2122 return "HEALING_DONE";
2124 return "GET_KILLING_BLOWS";
2126 return "EQUIP_ITEM";
2128 return "MONEY_FROM_VENDORS";
2130 return "GOLD_SPENT_FOR_TALENTS";
2132 return "NUMBER_OF_TALENT_RESETS";
2134 return "MONEY_FROM_QUEST_REWARD";
2136 return "GOLD_SPENT_FOR_TRAVELLING";
2138 return "GOLD_SPENT_AT_BARBER";
2140 return "GOLD_SPENT_FOR_MAIL";
2142 return "LOOT_MONEY";
2144 return "USE_GAMEOBJECT";
2148 return "SPECIAL_PVP_KILL";
2150 return "FISH_IN_GAMEOBJECT";
2154 return "LEARN_SKILLLINE_SPELLS";
2160 return "KILL_CREATURE_TYPE";
2162 return "GOLD_EARNED_BY_AUCTIONS";
2164 return "CREATE_AUCTION";
2166 return "HIGHEST_AUCTION_BID";
2168 return "WON_AUCTIONS";
2170 return "HIGHEST_AUCTION_SOLD";
2172 return "HIGHEST_GOLD_VALUE_OWNED";
2174 return "GAIN_REVERED_REPUTATION";
2176 return "GAIN_HONORED_REPUTATION";
2178 return "KNOWN_FACTIONS";
2180 return "LOOT_EPIC_ITEM";
2182 return "RECEIVE_EPIC_ITEM";
2186 return "ROLL_GREED";
2188 return "HIGHEST_HEALTH";
2190 return "HIGHEST_POWER";
2192 return "HIGHEST_STAT";
2194 return "HIGHEST_SPELLPOWER";
2196 return "HIGHEST_ARMOR";
2198 return "HIGHEST_RATING";
2202 return "HIT_RECEIVED";
2204 return "TOTAL_DAMAGE_RECEIVED";
2206 return "HIGHEST_HEAL_CAST";
2208 return "TOTAL_HEALING_RECEIVED";
2210 return "HIGHEST_HEALING_RECEIVED";
2212 return "QUEST_ABANDONED";
2214 return "FLIGHT_PATHS_TAKEN";
2218 return "CAST_SPELL2";
2220 return "LEARN_SKILL_LINE";
2222 return "EARN_HONORABLE_KILL";
2224 return "ACCEPTED_SUMMONINGS";
2226 return "EARN_ACHIEVEMENT_POINTS";
2228 return "USE_LFD_TO_GROUP_WITH_PLAYERS";
2230 return "MISSING_TYPE";
2303 if (itr->second == SystemTimePoint ::min())
2306 if (itr->second == SystemTimePoint::max())
2335 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement criteria.");
2348 TC_LOG_DEBUG(
"server.loading",
"Achievement {} referenced by criteria {} doesn't exist, criteria not loaded.", criteria->
AchievementID, criteria->
ID);
2364 if (!worldOverlayEntry)
2369 if (worldOverlayEntry->
AreaID[j])
2372 for (
uint8 i = 0; i < j; ++i)
2373 if (worldOverlayEntry->
AreaID[j] == worldOverlayEntry->
AreaID[i])
2387 "ACHIEVEMENT_CRITERIA_CONDITION_MAX must be greater than or equal to %u but is currently equal to %u",
2416 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement references.");
2445 QueryResult result =
WorldDatabase.Query(
"SELECT criteria_id, type, value1, value2, ScriptName FROM achievement_criteria_data");
2449 TC_LOG_INFO(
"server.loading",
">> Loaded 0 additional achievement criteria data. DB table `achievement_criteria_data` is empty.");
2457 Field* fields = result->Fetch();
2464 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` contains data for non-existing criteria (Entry: {}). Ignored.", criteria_id);
2469 std::string scriptName = fields[4].
GetString();
2471 if (!scriptName.empty())
2474 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_criteria_data` contains a ScriptName for non-scripted data type (Entry: {}, type {}), useless data.", criteria_id, dataType);
2476 scriptId =
sObjectMgr->GetScriptId(scriptName);
2495 while (result->NextRow());
2504 switch (criteria->
Type)
2531 if (achievement->
ID == 1282)
2567 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);
2589 TC_LOG_INFO(
"server.loading",
">> Loaded 0 realm first completed achievements. DB table `character_achievement` is empty.");
2595 Field* fields = result->Fetch();
2602 TC_LOG_ERROR(
"achievement",
"Non-existing achievement {} data has been removed from the table `character_achievement`.", achievementId);
2613 while (result->NextRow());
2625 QueryResult result =
WorldDatabase.Query(
"SELECT ID, TitleA, TitleH, ItemID, Sender, Subject, Body, MailTemplateID FROM achievement_reward");
2629 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement rewards. DB table `achievement_reward` is empty.");
2635 Field* fields = result->Fetch();
2640 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` contains a wrong achievement ID ({}), ignored.",
id);
2656 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not contain title or item reward data. Ignored.",
id);
2661 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]);
2668 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (Entry: {}) contains an invalid title id ({}) in `title_A`, set to 0",
id, reward.
TitleId[0]);
2678 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (Entry: {}) contains an invalid title id ({}) in `title_H`, set to 0",
id, reward.
TitleId[1]);
2688 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) contains an invalid creature ID {} as sender, mail reward skipped.",
id, reward.
SenderCreatureId);
2695 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);
2698 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not have sender data, but contains a mail subject.",
id);
2700 if (!reward.
Body.empty())
2701 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not have sender data, but contains mail text.",
id);
2704 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) does not have sender data, but has a MailTemplate.",
id);
2711 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) is using an invalid MailTemplate ({}).",
id, reward.
MailTemplateId);
2714 else if (!reward.
Subject.empty() || !reward.
Body.empty())
2715 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward` (ID: {}) is using MailTemplate ({}) and mail subject/text.",
id, reward.
MailTemplateId);
2722 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);
2728 }
while (result->NextRow());
2744 TC_LOG_INFO(
"server.loading",
">> Loaded 0 achievement reward locale strings. DB table `achievement_reward_locale` is empty.");
2750 Field* fields = result->Fetch();
2753 std::string localeName = fields[1].
GetString();
2761 TC_LOG_ERROR(
"sql.sql",
"Table `achievement_reward_locale` (ID: {}) contains locale strings for a non-existing achievement reward.",
id);
2768 }
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
@ RAID_DIFFICULTY_25MAN_HEROIC
@ RAID_DIFFICULTY_25MAN_NORMAL
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 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()
static AchievementGlobalMgr * instance()
AchievementRewards _achievementRewards
void LoadAchievementCriteriaData()
AchievementRewardLocales _achievementRewardLocales
AchievementCriteriaDataMap _criteriaDataMap
bool IsRealmCompleted(AchievementEntry const *achievement) const
AchievementCriteriaEntryList _achievementCriteriasByTimedType[ACHIEVEMENT_TIMED_TYPE_MAX]
AchievementCriteriaListByCondition _achievementCriteriasByCondition[ACHIEVEMENT_CRITERIA_CONDITION_MAX]
void LoadAchievementCriteriaList()
AchievementCriteriaEntryList _achievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]
void SetRealmCompleted(AchievementEntry const *achievement)
void LoadAchievementReferenceList()
static char const * GetCriteriaTypeString(AchievementCriteriaTypes type)
static AchievementCriteriaEntryList const EmptyCriteriaList
AchievementCriteriaListByMiscValue _achievementCriteriasByMiscalue[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]
std::unordered_map< uint32, SystemTimePoint > _allCompletedAchievements
AchievementListByReferencedId _achievementListByReferencedId
AchievementCriteriaListByAchievement _achievementCriteriaListByAchievement
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
static void DeleteFromDB(ObjectGuid lowguid)
bool IsCompletedAchievement(AchievementEntry const *entry)
void BuildAllDataPacket(Player const *receiver, WorldPackets::Achievement::AllAchievements *data) const
void CheckAllAchievementCriteria()
void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult)
void SendRespondInspectAchievements(Player *player) const
void SendCriteriaProgressRemoved(uint32 criteriaId) const
AchievementMgr(Player *player)
void SendAchievementEarned(AchievementEntry const *achievement) const
void RemoveCriteriaProgress(AchievementCriteriaEntry const *criteria)
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
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, LocaleConstant locale)
static void AddLocaleString(std::string &&value, LocaleConstant localeConstant, std::vector< std::string > &data)
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
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
LocaleConstant GetSessionDbLocaleIndex() const
Minutes GetTimezoneOffset() const
bool HasPermission(uint32 permissionId)
void SetUtcTimeFromUnixTime(std::time_t unixTime)
@ 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 GetBaseItemLevel() const
uint32 GetQuality() const
uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]
std::vector< CriteriaProgress > Progress
std::vector< EarnedAchievement > Earned