60 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` for criteria (Entry: {}) contains a wrong data type ({}), ignored.", criteria->
ID,
DataType);
95 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` contains data for a non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->
ID, criteria->
Entry->
Type);
109 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_CREATURE ({}) contains a non-existing creature id in value1 ({}), ignored.",
117 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE ({}) must not have 0 in either value field, ignored.",
123 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE ({}) contains a non-existing class in value1 ({}), ignored.",
129 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE ({}) contains a non-existing race in value2 ({}), ignored.",
137 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_PLAYER_LESS_HEALTH ({}) contains a wrong percent value in value1 ({}), ignored.",
148 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell id in value1 ({}), ignored.",
154 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell effect index in value2 ({}), ignored.",
160 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a non-aura spell effect (ID: {} Effect: {}), ignored.",
169 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_VALUE ({}) contains a wrong ComparisionType in value2 ({}), ignored.",
177 TC_LOG_ERROR(
"sql.sql",
"Table `CRITERIA_DATA` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_T_LEVEL ({}) contains a wrong minlevel in value1 ({}), ignored.",
185 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_T_GENDER ({}) contains a wrong gender value in value1 ({}), ignored.",
193 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_SCRIPT ({}) does not have a ScriptName set, ignored.",
201 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT ({}) contains a wrong max players count in value1 ({}), ignored.",
209 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_T_TEAM ({}) contains an unknown team value in value1 ({}), ignored.",
217 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_S_DRUNK ({}) contains an unknown drunken state value in value1 ({}), ignored.",
225 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_HOLIDAY ({}) contains an unknown holiday entry in value1 ({}), ignored.",
235 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_GAME_EVENT ({}) has unknown game_event in value1 ({}), ignored.",
246 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM ({}) contains an unknown quality state value in value2 ({}), ignored.",
254 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_MAP_ID ({}) contains an unknown map entry in value1 ({}), ignored.",
261 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) should not have 0 in either value field. Ignored.",
267 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) contains a non-existing class entry in value1 ({}), ignored.",
273 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE ({}) contains a non-existing race entry in value2 ({}), ignored.",
281 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_S_KNOWN_TITLE ({}) contains an unknown title_id in value1 ({}), ignore.",
289 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_S_ITEM_QUALITY ({}) contains an unknown quality state value in value1 ({}), ignored.",
295 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) contains data of a non-supported data type ({}), ignored.", criteria->
ID, criteria->
Entry->
Type,
DataType);
358 Unit const* unitTarget =
nullptr;
360 unitTarget = target->
ToUnit();
391 TC_LOG_ERROR(
"criteria",
"Criteria system call CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for criteria {} in a non-dungeon/non-raid map {}",
398 TC_LOG_ERROR(
"criteria",
"Criteria system call CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for criteria {} in map {}, but the map does not have an instance script.",
403 Unit const* unitTarget =
nullptr;
405 unitTarget = target->
ToUnit();
423 return source && source->
HasTitle(titleInfo->MaskID);
443 if (!criteriadata.Meets(
_criteriaId, source, target, miscValue1, miscValue2))
455 for (std::pair<uint32 const, CriteriaProgress>
const& criteriaprogress :
_criteriaProgress)
468 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria: Wrong criteria type {}",
uint32(type));
472 if (!referencePlayer)
474 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria: Player is NULL! Cant update criteria");
481 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria: [Player {} {}] {}, {} ({}), {}, {}, " UI64FMTD,
482 referencePlayer->
GetName(), referencePlayer->
IsGameMaster() ?
"GM mode on" :
"disallowed by RBAC",
487 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria({}, {}, {}, {}, {}) {}",
491 for (
Criteria const* criteria : criteriaList)
494 if (!
CanUpdateCriteria(criteria, trees, miscValue1, miscValue2, miscValue3, ref, referencePlayer))
499 if (!data->Meets(referencePlayer, ref,
uint32(miscValue1),
uint32(miscValue2)))
614 time_t nextDailyResetTime =
sWorld->GetNextDailyQuestsResetTime();
620 if (progress && progress->
Date < (nextDailyResetTime - 2 *
DAY))
629 else if (progress->
Date < (nextDailyResetTime - 2 *
DAY))
632 else if (progress->
Date < (nextDailyResetTime -
DAY))
653 for (
uint32 rewQuest : rewQuests)
701 for (
auto& [spellId, _] : referencePlayer->
GetSpellMap())
704 for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
706 if (skillIter->second->SkillLine ==
int32(criteria->Entry->Asset.SkillID))
739 uint32 reqTeamType = criteria->Entry->Asset.TeamType;
743 if (miscValue2 != reqTeamType)
757 if (!team || team->
GetType() != reqTeamType)
870 if (itr->second <= timeDiff)
878 itr->second -= timeDiff;
890 for (
Criteria const* criteria : *criteriaList)
893 if (criteria->Entry->StartTimer)
894 timeLimit =
Seconds(criteria->Entry->StartTimer);
896 timeLimit -= timeLost;
898 if (timeLimit <= Milliseconds::zero())
902 bool canStart = std::any_of(trees->begin(), trees->end(), [&](
CriteriaTree const* tree)
904 return !IsCompletedCriteriaTree(tree);
916 itr->second = timeLimit;
930 for (
Criteria const* criteria : *criteriaList)
935 bool allTreesFullyComplete = std::all_of(trees->begin(), trees->end(), [&](
CriteriaTree const* tree)
937 CriteriaTree const* root = tree;
938 if (CriteriaTree const* parent = sCriteriaMgr->GetCriteriaTree(root->Entry->Parent))
943 parent = sCriteriaMgr->GetCriteriaTree(root->Entry->Parent);
950 if (allTreesFullyComplete)
963 return &iter->second;
979 progress->
Counter = changeValue;
984 switch (progressType)
987 newValue = changeValue;
992 uint64 max_value = std::numeric_limits<uint64>::max();
993 newValue = max_value - progress->
Counter > changeValue ? progress->
Counter + changeValue : max_value;
997 newValue = progress->
Counter < changeValue ? changeValue : progress->
Counter;
1012 Seconds timeElapsed = Seconds::zero();
1025 bool allTreesCompleted = std::all_of(trees->begin(), trees->end(), [&](
CriteriaTree const* tree)
1027 return IsCompletedCriteriaTree(tree);
1030 if (allTreesCompleted)
1049 criteriaProgress->second.Counter = 0;
1050 criteriaProgress->second.Changed =
true;
1077 progress += criteriaProgress->Counter;
1079 return progress >= requiredCount;
1088 if (criteriaProgress->Counter > progress)
1089 progress = criteriaProgress->Counter;
1091 return progress >= requiredCount;
1099 if (criteriaProgress->Counter >= 1)
1100 if (++progress >= requiredCount)
1110 if (++progress >= requiredCount)
1122 progress += criteriaProgress->Counter * criteriaTree->
Entry->
Amount;
1124 return progress >= requiredCount;
1138 TC_LOG_TRACE(
"criteria",
"CriteriaHandler::CanUpdateCriteriaTree: (Id: {} Type {} CriteriaTree {}) Wrong faction",
1221 return progress->
Counter >= requiredAmount;
1239 return progress->
Counter >= 1;
1241 return progress->
Counter >= (requiredAmount * 75);
1243 return progress->
Counter >= 9000;
1245 return requiredAmount && progress->
Counter >= requiredAmount;
1295 bool treeRequirementPassed =
false;
1301 treeRequirementPassed =
true;
1305 if (!treeRequirementPassed)
1476 if (!data->Meets(referencePlayer, ref))
1513 if (!worldOverlayEntry)
1516 bool matchFound =
false;
1603 if (!miscValue1 || !miscValue2 ||
int64(miscValue2) < 0
1674 if (!--requiredAmount)
1697 if (inebriation < reqValue)
1717 if (!ref || ref->
GetEntry() != reqValue)
1733 if (!referencePlayer->
HasAura(reqValue))
1773 if (referencePlayer->
isDead())
1791 if (miscValue1 != reqValue)
1806 if (!ref || !ref->
IsUnit() || referencePlayer->
GetLevel() + reqValue < ref->ToUnit()->GetLevel())
1821 if (referencePlayer->
GetRace() != reqValue)
1825 if (referencePlayer->
GetClass() != reqValue)
1857 if (referencePlayer->
GetMapId() != reqValue)
1861 if (reqValue < sRealmList->GetMinorMajorBugfixVersionForBuild(
realm.
Build))
1866 if (slot.Pet.Level < reqValue)
1882 if (!referencePlayer->
HasTitle(reqValue))
1886 if (referencePlayer->
GetLevel() != reqValue)
1898 zoneId = areaEntry->ParentAreaID;
1899 if (zoneId != reqValue)
1910 zoneId = areaEntry->ParentAreaID;
1911 if (zoneId != reqValue)
1924 if (referencePlayer->
GetHealthPct() !=
float(reqValue))
1940 if (referencePlayer->
GetHealth() > reqValue)
1944 if (referencePlayer->
GetHealth() < reqValue)
1948 if (referencePlayer->
GetHealth() != reqValue)
2025 if (referencePlayer->
GetLevel() < reqValue)
2033 if (referencePlayer->
GetLevel() > reqValue)
2047 if (!scenario || scenario->
GetEntry()->
ID != reqValue)
2059 int16 category = achievement->Category;
2063 if (!categoryEntry || categoryEntry->
Parent == -1)
2066 category = categoryEntry->
Parent;
2072 uint32 petAchievementPoints = 0;
2080 if (petAchievementPoints < reqValue)
2099 uint32 guildMemberCount = 0;
2101 for (
GroupReference const* itr = group->GetFirstMember(); itr !=
nullptr; itr = itr->
next())
2102 if (itr->GetSource()->GetGuildId() == referencePlayer->
GetGuildId())
2105 if (guildMemberCount < reqValue)
2143 if (miscValue1 != reqValue)
2157 if (!friendshipRepReaction)
2160 if (!friendshipReputation)
2192 bool hasLanguageSkil = std::any_of(languageDescs.begin(), languageDescs.end(), [&](std::pair<uint32 const, LanguageDesc>
const& desc)
2194 return referencePlayer->GetSkillValue(desc.second.SkillId) >= secondaryAsset;
2196 if (!hasLanguageSkil)
2213 if (!referencePlayer->
HasSpell(reqValue))
2217 if (referencePlayer->
GetItemCount(reqValue,
false) < secondaryAsset)
2225 if (!referencePlayer->
HasAura([labelId = reqValue](
Aura const* aura) { return aura->GetSpellInfo()->HasLabel(labelId); }))
2245 if (!(referencePlayer->
m_activePlayerData->QuestCompleted[((questBit - 1) >> 6)] & (
UI64LIT(1) << ((questBit - 1) & 63))))
2272 if (referencePlayer->
GetItemCount(reqValue,
true) < secondaryAsset)
2287 int32 factionIndex = -1;
2294 if (factionIndex !=
int32(reqValue))
2307 if (!referencePlayer->
HasCurrency(reqValue, secondaryAsset))
2358 if (followerCount < reqValue)
2372 if (followerCount < reqValue)
2386 if (followerCount < 1)
2403 if (followerCount < 1)
2415 if (!followerBuilding)
2419 if (followerCount < 1)
2434 if (!followerBuilding)
2438 if (followerCount < 1)
2452 if (!followerBuilding)
2456 if (followerCount < 1)
2467 if (!plot->BuildingInfo.PacketInfo)
2495 if (!plot->BuildingInfo.PacketInfo)
2515 if (!plot->BuildingInfo.PacketInfo || plot->BuildingInfo.PacketInfo->GarrBuildingID != reqValue)
2518 return !plot->BuildingInfo.PacketInfo->Active;
2531 if (!plot->BuildingInfo.PacketInfo)
2561 if (followerCount < 1)
2577 if (!follower || !follower->
HasAbility(reqValue))
2586 if (followerCount < 1)
2608 if (followerCount < 1)
2630 if (followerCount < 1)
2647 if (!plot->BuildingInfo.PacketInfo || plot->BuildingInfo.PacketInfo->GarrBuildingID != miscValue1)
2674 if (slot.Pet.Species == secondaryAsset)
2676 if (count < reqValue)
2685 if (species->PetTypeEnum ==
int32(secondaryAsset))
2687 if (count < reqValue)
2698 if (slot.Pet.Health > 0)
2700 if (count < reqValue)
2715 if (followerCount < 1)
2756 if (!plot->BuildingInfo.PacketInfo)
2777 if (followerCount < 1)
2791 if (followerCount < reqValue)
2807 if (miscValue1 != reqValue)
2833 if (followerCount < reqValue)
2846 if (followerCount < 1)
2861 if (!garrPlotInstance || garrPlotInstance->
GarrPlotID != secondaryAsset)
2865 if (plotCount < reqValue)
2884 if (followerCount < 1)
2898 if (mount->
ID == reqValue)
2915 if (followerCount < reqValue)
2928 if (followerCount < 1)
2973 if (!hasAppearance.first || hasAppearance.second)
2984 return restriction.
Type == reqValue;
2986 if (restrictionIndex < 0)
3008 if (
Item* artifact = referencePlayer->
GetItemByGuid(artifactAura->GetCastItemGUID()))
3010 if (artifactAppearance->ArtifactAppearanceSetID == reqValue)
3041 for (
GroupReference const* itr = group->GetFirstMember(); itr !=
nullptr; itr = itr->
next())
3042 if (itr->GetSource() != referencePlayer && *referencePlayer->
m_playerData->VirtualPlayerRealm == *itr->GetSource()->m_playerData->VirtualPlayerRealm)
3044 if (memberCount < reqValue)
3082 if (bonusListIDs.empty())
3089 return std::find(bonusListIDs.begin(), bonusListIDs.end(), bonusListID) != bonusListIDs.end();
3093 if (bagScanReachedEnd)
3140 uint32 membersWithAchievement = 0;
3141 for (
GroupReference const* itr = group->GetFirstMember(); itr !=
nullptr; itr = itr->
next())
3142 if (itr->GetSource()->HasAchieved(secondaryAsset))
3143 ++membersWithAchievement;
3145 if (membersWithAchievement > reqValue)
3163 if (itemModifiedAppearaceExtra->DisplayWeaponSubclassID > 0)
3164 itemSubclass = itemModifiedAppearaceExtra->DisplayWeaponSubclassID;
3167 if (itemSubclass != reqValue)
3183 if (itemModifiedAppearaceExtra->DisplayWeaponSubclassID > 0)
3184 itemSubclass = itemModifiedAppearaceExtra->DisplayWeaponSubclassID;
3187 if (itemSubclass != reqValue)
3212 bool isOnQuest =
false;
3213 if (std::vector<QuestLineXQuestEntry const*>
const* questLineQuests =
sDB2Manager.GetQuestsForQuestLine(reqValue))
3215 isOnQuest = std::any_of(questLineQuests->begin(), questLineQuests->end(), [referencePlayer](
QuestLineXQuestEntry const* questLineQuest)
3217 return referencePlayer->FindQuestSlot(questLineQuest->QuestID) < MAX_QUEST_LOG_SIZE;
3247 std::vector<QuestLineXQuestEntry const*>
const* questLineQuests =
sDB2Manager.GetQuestsForQuestLine(reqValue);
3248 if (!questLineQuests)
3250 bool canTakeQuest = std::any_of(questLineQuests->begin(), questLineQuests->end(), [referencePlayer](
QuestLineXQuestEntry const* questLineQuest)
3252 if (Quest const* quest = sObjectMgr->GetQuestTemplate(questLineQuest->QuestID))
3253 return referencePlayer->CanTakeQuest(quest, false);
3262 std::vector<QuestLineXQuestEntry const*>
const* questLineQuests =
sDB2Manager.GetQuestsForQuestLine(reqValue);
3263 if (!questLineQuests)
3272 std::vector<QuestLineXQuestEntry const*>
const* questLineQuests =
sDB2Manager.GetQuestsForQuestLine(reqValue);
3273 if (!questLineQuests)
3275 uint32 completedQuests = 0;
3279 if (completedQuests < reqValue)
3285 std::vector<QuestLineXQuestEntry const*>
const* questLineQuests =
sDB2Manager.GetQuestsForQuestLine(reqValue);
3286 if (!questLineQuests || questLineQuests->empty())
3288 std::size_t completedQuests = 0;
3292 if (
GetPctOf(completedQuests, questLineQuests->size()) < reqValue)
3317 if (!creatureDisplayInfo)
3320 if (!creatureDisplayInfoExtra)
3328 if (!ref || !ref->
IsUnit())
3331 if (!creatureDisplayInfo)
3334 if (!creatureDisplayInfoExtra)
3343 if (!friendshipRepReaction)
3346 if (!friendshipReputation)
3349 if (!friendshipReactions)
3352 if (rank >= friendshipReactions->size())
3354 auto itr = friendshipReactions->begin();
3355 std::advance(itr, rank);
3356 if ((*itr)->ID != reqValue)
3361 if (referencePlayer->
GetAuraCount(secondaryAsset) != reqValue)
3369 if (referencePlayer->
GetAuraCount(secondaryAsset) < reqValue)
3404 if (!referencePlayer->
GetAuraEffect(reqValue, secondaryAsset))
3410 if (!spec || spec->
Role !=
int32(reqValue))
3421 if (!itemModifiedAppearance)
3432 if (essence.
AzeriteEssenceID == selectedEssences->AzeriteEssenceID[reqValue] && essence.
Rank < secondaryAsset)
3440 if (essence.
AzeriteEssenceID == selectedEssences->AzeriteEssenceID[reqValue] && essence.
Rank > secondaryAsset)
3449 return level >= levels->MinLevelWithDelta && level <= levels->MaxLevelWithDelta;
3450 return level >= levels->MinLevel && level <= levels->MaxLevel;
3456 if (!ref || !ref->
IsUnit())
3462 return level >= levels->MinLevelWithDelta && level <= levels->MaxLevelWithDelta;
3463 return level >= levels->MinLevel && level <= levels->MaxLevel;
3480 return secondaryAsset ? level >= levels->MinLevelWithDelta : level >= levels->MinLevel;
3485 if (!ref || !ref->
IsUnit())
3489 return secondaryAsset ? level >= levels->MinLevelWithDelta : level >= levels->MinLevel;
3551 eventTimestamp = time_t(1579618800);
3554 eventTimestamp = time_t(1602601200);
3557 eventTimestamp = time_t(1607439600);
3566 eventTimestamp = time_t(1699340400);
3569 eventTimestamp = time_t(1699945200);
3597 std::vector<uint32> areas =
sDB2Manager.GetAreasForGroup(reqValue);
3598 for (
uint32 areaInGroup : areas)
3607 std::vector<uint32> areas =
sDB2Manager.GetAreasForGroup(reqValue);
3608 for (
uint32 areaInGroup : areas)
3622 if (!
sDB2Manager.GetAzeriteEmpoweredItem(miscValue1))
3627 uint32 block = reqValue / 32;
3631 uint32 bit = reqValue % 32;
3635 if (!(referencePlayer->
m_playerData->CtrOptions->ContentTuningConditionMask & 1))
3646 for (
GroupReference const* itr = group->GetFirstMember(); itr !=
nullptr; itr = itr->
next())
3647 if (!itr->GetSource()->HasAchieved(reqValue))
3664 return choice->ID == formChoice;
3666 if (choiceItr == formModelData->
Choices->end())
3668 if (
int32(reqValue) != formModelData->
Displays[std::distance(formModelData->
Choices->begin(), choiceItr)]->DisplayID)
3715 if (customizationChoiceIndex < 0)
3757 if (bagScanReachedEnd)
3764 referencePlayer->
HasAura([secondaryAsset, &count](
Aura const* aura)
3770 if (count < reqValue)
3777 referencePlayer->
HasAura([secondaryAsset, &count](
Aura const* aura)
3783 if (count != reqValue)
3790 referencePlayer->
HasAura([secondaryAsset, &count](
Aura const* aura)
3796 if (count > reqValue)
3809 auto hasTraitNodeEntry = [referencePlayer, reqValue]()
3826 if (!hasTraitNodeEntry)
3832 auto traitNodeEntryRank = [referencePlayer, secondaryAsset]() ->
Optional<uint16>
3845 return traitEntry.
Rank;
3849 if (!traitNodeEntryRank || traitNodeEntryRank <
int32(reqValue))
3864 if (!itemTemplate || !referencePlayer->
CanUseItem(itemTemplate))
3869 if (referencePlayer->
m_playerData->CurrentBattlePetSpeciesID !=
int32(reqValue))
3878 auto traitNodeEntryRankCount = [referencePlayer, secondaryAsset]()
3895 if (traitNodeEntryRankCount < reqValue)
3913 if (bagScanReachedEnd)
3935 if (scenario->
GetStep()->
ID != reqValue)
3968 return "KillCreature";
3970 return "WinBattleground";
3972 return "CompleteResearchProject";
3974 return "CompleteAnyResearchProject";
3976 return "FindResearchObject";
3978 return "ReachLevel";
3980 return "ExhaustAnyResearchSite";
3982 return "SkillRaised";
3984 return "EarnAchievement";
3986 return "CompleteQuestsCount";
3988 return "CompleteAnyDailyQuestPerDay";
3990 return "CompleteQuestsInZone";
3992 return "CurrencyGained";
3994 return "DamageDealt";
3996 return "CompleteDailyQuest";
3998 return "ParticipateInBattleground";
4002 return "DieAnywhere";
4004 return "DieInInstance";
4006 return "RunInstance";
4008 return "KilledByCreature";
4010 return "CompleteInternalCriteria";
4012 return "CompleteAnyChallengeMode";
4014 return "KilledByPlayer";
4016 return "MaxDistFallenWithoutDying";
4018 return "EarnChallengeModeMedal";
4020 return "DieFromEnviromentalDamage";
4022 return "CompleteQuest";
4024 return "BeSpellTarget";
4028 return "TrackedWorldStateUIModified";
4030 return "PVPKillInArea";
4034 return "ParticipateInArena";
4036 return "LearnOrKnowSpell";
4038 return "EarnHonorableKill";
4040 return "AcquireItem";
4042 return "WinAnyRankedArena";
4044 return "EarnTeamArenaRating";
4046 return "EarnPersonalArenaRating";
4048 return "AchieveSkillStep";
4054 return "RevealWorldMapOverlay";
4058 return "BankSlotsPurchased";
4060 return "ReputationGained";
4062 return "TotalExaltedFactions";
4064 return "GotHaircut";
4066 return "EquipItemInSlot";
4072 return "DeliverKillingBlowToClass";
4074 return "DeliverKillingBlowToRace";
4078 return "HealingDone";
4080 return "DeliveredKillingBlow";
4084 return "CompleteQuestsInSort";
4086 return "MoneyEarnedFromSales";
4088 return "MoneySpentOnRespecs";
4090 return "TotalRespecs";
4092 return "MoneyEarnedFromQuesting";
4094 return "MoneySpentOnTaxis";
4096 return "KilledAllUnitsInSpawnRegion";
4098 return "MoneySpentAtBarberShop";
4100 return "MoneySpentOnPostage";
4102 return "MoneyLootedFromCreatures";
4104 return "UseGameobject";
4108 return "KillPlayer";
4110 return "CompleteChallengeMode";
4112 return "CatchFishInFishingHole";
4114 return "PlayerTriggerGameEvent";
4118 return "LearnSpellFromSkillLine";
4124 return "KillAnyCreature";
4126 return "CreatedItemsByCastingSpellWithLimit";
4128 return "MoneyEarnedFromAuctions";
4130 return "BattlePetAchievementPointsEarned";
4132 return "ItemsPostedAtAuction";
4134 return "HighestAuctionBid";
4136 return "AuctionsWon";
4138 return "HighestAuctionSale";
4140 return "MostMoneyOwned";
4142 return "TotalReveredFactions";
4144 return "TotalHonoredFactions";
4146 return "TotalFactionsEncountered";
4148 return "LootAnyItem";
4150 return "ObtainAnyItem";
4152 return "AnyoneTriggerGameEventScenario";
4154 return "RollAnyNeed";
4156 return "RollAnyGreed";
4158 return "ReleasedSpirit";
4160 return "AccountKnownPet";
4162 return "DefeatDungeonEncounterWhileElegibleForLoot";
4164 return "HighestDamageDone";
4166 return "HighestDamageTaken";
4168 return "TotalDamageTaken";
4170 return "HighestHealCast";
4172 return "TotalHealReceived";
4174 return "HighestHealReceived";
4176 return "AbandonAnyQuest";
4180 return "GetLootByType";
4182 return "LandTargetedSpellOnTarget";
4184 return "LearnTradeskillSkillLine";
4186 return "HonorableKills";
4188 return "AcceptSummon";
4190 return "EarnAchievementPoints";
4192 return "RollDisenchant";
4194 return "RollAnyDisenchant";
4196 return "CompletedLFGDungeon";
4198 return "CompletedLFGDungeonWithStrangers";
4200 return "KickInitiatorInLFGDungeon";
4202 return "KickVoterInLFGDungeon";
4204 return "KickTargetInLFGDungeon";
4206 return "AbandonedLFGDungeon";
4208 return "MoneySpentOnGuildRepair";
4210 return "GuildAttainedLevel";
4212 return "CreatedItemsByCastingSpell";
4214 return "FishInAnyPool";
4216 return "GuildBankTabsPurchased";
4218 return "EarnGuildAchievementPoints";
4220 return "WinAnyBattleground";
4222 return "ParticipateInAnyBattleground";
4224 return "EarnBattlegroundRating";
4226 return "GuildTabardCreated";
4228 return "CompleteQuestsCountForGuild";
4230 return "HonorableKillsForGuild";
4232 return "KillAnyCreatureForGuild";
4234 return "GroupedTankLeftEarlyInLFGDungeon";
4236 return "CompleteGuildChallenge";
4238 return "CompleteAnyGuildChallenge";
4240 return "MarkedAFKInBattleground";
4242 return "RemovedAFKInBattleground";
4244 return "StartAnyBattleground";
4246 return "CompleteAnyBattleground";
4248 return "MarkedSomeoneAFKInBattleground";
4250 return "CompletedLFRDungeon";
4252 return "AbandonedLFRDungeon";
4254 return "KickInitiatorInLFRDungeon";
4256 return "KickVoterInLFRDungeon";
4258 return "KickTargetInLFRDungeon";
4260 return "GroupedTankLeftEarlyInLFRDungeon";
4262 return "CompleteAnyScenario";
4264 return "CompleteScenario";
4266 return "EnterAreaTriggerWithActionSet";
4268 return "LeaveAreaTriggerWithActionSet";
4270 return "LearnedNewPet";
4272 return "UniquePetsOwned";
4274 return "AccountObtainPetThroughBattle";
4276 return "WinPetBattle";
4278 return "LosePetBattle";
4280 return "BattlePetReachLevel";
4282 return "PlayerObtainPetThroughBattle";
4284 return "ActivelyEarnPetLevel";
4290 return "DefeatDungeonEncounter";
4292 return "PlaceAnyGarrisonBuilding";
4294 return "PlaceGarrisonBuilding";
4296 return "ActivateAnyGarrisonBuilding";
4298 return "ActivateGarrisonBuilding";
4300 return "UpgradeGarrison";
4302 return "StartAnyGarrisonMissionWithFollowerType";
4304 return "StartGarrisonMission";
4306 return "SucceedAnyGarrisonMissionWithFollowerType";
4308 return "SucceedGarrisonMission";
4310 return "RecruitAnyGarrisonFollower";
4312 return "RecruitGarrisonFollower";
4314 return "AcquireGarrison";
4316 return "LearnAnyGarrisonBlueprint";
4318 return "LearnGarrisonBlueprint";
4320 return "LearnAnyGarrisonSpecialization";
4322 return "LearnGarrisonSpecialization";
4324 return "CollectGarrisonShipment";
4326 return "ItemLevelChangedForGarrisonFollower";
4328 return "LevelChangedForGarrisonFollower";
4332 return "LearnAnyToy";
4334 return "QualityUpgradedForGarrisonFollower";
4336 return "LearnHeirloom";
4338 return "LearnAnyHeirloom";
4340 return "EarnArtifactXP";
4342 return "AnyArtifactPowerRankPurchased";
4344 return "LearnTransmog";
4346 return "LearnAnyTransmog";
4348 return "HonorLevelIncrease";
4350 return "PrestigeLevelIncrease";
4352 return "ActivelyReachLevel";
4354 return "CompleteResearchAnyGarrisonTalent";
4356 return "CompleteResearchGarrisonTalent";
4358 return "LearnAnyTransmogInSlot";
4360 return "RecruitAnyGarrisonTroop";
4362 return "StartResearchAnyGarrisonTalent";
4364 return "StartResearchGarrisonTalent";
4366 return "CompleteAnyWorldQuest";
4368 return "EarnLicense";
4370 return "CollectTransmogSetFromGroup";
4372 return "ParagonLevelIncreaseWithFaction";
4374 return "PlayerHasEarnedHonor";
4376 return "KillCreatureScenario";
4378 return "ArtifactPowerRankPurchased";
4380 return "ChooseAnyRelicTalent";
4382 return "ChooseRelicTalent";
4384 return "EarnExpansionLevel";
4386 return "AccountHonorLevelReached";
4388 return "EarnArtifactXPForAzeriteItem";
4390 return "AzeriteLevelReached";
4392 return "MythicPlusCompleted";
4394 return "ScenarioGroupCompleted";
4396 return "CompleteAnyReplayQuest";
4398 return "BuyItemsFromVendors";
4400 return "SellItemsToVendors";
4402 return "ReachMaxLevel";
4404 return "MemorizeSpell";
4406 return "LearnTransmogIllusion";
4408 return "LearnAnyTransmogIllusion";
4410 return "EnterTopLevelArea";
4412 return "LeaveTopLevelArea";
4414 return "SocketGarrisonTalent";
4416 return "SocketAnySoulbindConduit";
4418 return "ObtainAnyItemWithCurrencyValue";
4420 return "MythicPlusRatingAttained";
4422 return "SpentTalentPoint";
4424 return "MythicPlusDisplaySeasonEnded";
4426 return "WinRatedSoloShuffleRound";
4428 return "ParticipateInRatedSoloShuffleRound";
4430 return "ReputationAmountGained";
4432 return "FulfillAnyCraftingOrder";
4434 return "FulfillCraftingOrderType";
4436 return "PerksProgramMonthComplete";
4438 return "CompleteTrackingQuest";
4440 return "GainLevels";
4442 return "MissingType";
4454inline bool IsCriteriaTypeStoredByAsset(
CriteriaType type)
4501 if (asset && IsCriteriaTypeStoredByAsset(type))
4516 return *criteriaList;
4546 for (std::pair<uint32 const, CriteriaTree*>& criteriaTree :
_criteriaTrees)
4547 delete criteriaTree.second;
4549 for (std::pair<uint32 const, Criteria*>& criteria :
_criteria)
4550 delete criteria.second;
4552 for (std::pair<uint32 const, ModifierTreeNode*>& criteriaModifier :
_criteriaModifiers)
4553 delete criteriaModifier.second;
4562 TC_LOG_ERROR(
"server.loading",
">> Loaded 0 criteria modifiers.");
4579 for (std::pair<uint32 const, ModifierTreeNode*>& criteriaModifier :
_criteriaModifiers)
4581 parentNode->
Children.push_back(criteriaModifier.second);
4590 auto itr = map.find(tree->
ID);
4591 while (itr == map.end())
4600 itr = map.find(cur->
ID);
4603 if (itr == map.end())
4615 if (achievement->CriteriaTree)
4616 achievementCriteriaTreeIds[achievement->CriteriaTree] = achievement;
4620 if (scenarioStep->Criteriatreeid)
4621 scenarioCriteriaTreeIds[scenarioStep->Criteriatreeid] = scenarioStep;
4624 for (
auto const& [questId, quest] :
sObjectMgr->GetQuestTemplates())
4632 questObjectiveCriteriaTreeIds[objective.
ObjectID] = &objective;
4643 if (!achievement && !scenarioStep && !questObjective)
4647 criteriaTree->
ID = tree->ID;
4651 criteriaTree->
Entry = tree;
4657 for (std::pair<uint32 const, CriteriaTree*>
const& criteriaTree :
_criteriaTrees)
4660 parent->
Children.push_back(criteriaTree.second);
4662 if (
sCriteriaStore.HasRecord(criteriaTree.second->Entry->CriteriaID))
4668 uint32 guildCriterias = 0;
4669 uint32 scenarioCriterias = 0;
4670 uint32 questObjectiveCriterias = 0;
4685 criteria->
ID = criteriaEntry->ID;
4686 criteria->
Entry = criteriaEntry;
4691 std::vector<uint32> scenarioIds;
4719 if (IsCriteriaTypeStoredByAsset(
CriteriaType(criteriaEntry->Type)))
4722 _criteriasByAsset[criteriaEntry->Type][criteriaEntry->Asset.ID].push_back(criteria);
4726 if (!worldOverlayEntry)
4731 if (worldOverlayEntry->
AreaID[j])
4734 for (
uint8 i = 0; i < j; ++i)
4735 if (worldOverlayEntry->
AreaID[j] == worldOverlayEntry->
AreaID[i])
4753 ++scenarioCriterias;
4754 for (
uint32 scenarioId : scenarioIds)
4760 ++questObjectiveCriterias;
4764 if (criteriaEntry->StartEvent)
4767 if (criteriaEntry->FailEvent)
4771 TC_LOG_INFO(
"server.loading",
">> Loaded {} criteria, {} guild criteria, {} scenario criteria and {} quest objective criteria in {} ms.", criterias, guildCriterias, scenarioCriterias, questObjectiveCriterias,
GetMSTimeDiffToNow(oldMSTime));
4780 QueryResult result =
WorldDatabase.Query(
"SELECT criteria_id, type, value1, value2, ScriptName FROM criteria_data");
4784 TC_LOG_INFO(
"server.loading",
">> Loaded 0 additional criteria data. DB table `criteria_data` is empty.");
4792 Field* fields = result->Fetch();
4799 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` contains data for non-existing criteria (Entry: {}). Ignored.", criteria_id);
4804 std::string scriptName = fields[4].
GetString();
4806 if (!scriptName.empty())
4809 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` contains a ScriptName for non-scripted data type (Entry: {}, type {}), useless data.", criteria_id, dataType);
4811 scriptId =
sObjectMgr->GetScriptId(scriptName);
4814 CriteriaData data(dataType, fields[2].GetUInt32(), fields[3].GetUInt32(), scriptId);
4830 while (result->NextRow());
constexpr uint32 ITEM_ID_HEART_OF_AZEROTH
T GetEntry(std::unordered_map< uint32, T > const &map, CriteriaTreeEntry const *tree)
@ CRITERIA_FLAG_CU_ACCOUNT
@ CRITERIA_FLAG_CU_PLAYER
@ CRITERIA_FLAG_CU_QUEST_OBJECTIVE
@ CRITERIA_FLAG_CU_SCENARIO
std::vector< Criteria const * > CriteriaList
std::vector< CriteriaTree const * > CriteriaTreeList
@ CRITERIA_DATA_TYPE_INSTANCE_SCRIPT
@ CRITERIA_DATA_TYPE_T_LEVEL
@ CRITERIA_DATA_TYPE_VALUE
@ CRITERIA_DATA_TYPE_T_CREATURE
@ CRITERIA_DATA_TYPE_SCRIPT
@ CRITERIA_DATA_TYPE_S_AURA
@ CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE
@ CRITERIA_DATA_TYPE_GAME_EVENT
@ CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH
@ CRITERIA_DATA_TYPE_MAP_ID
@ CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM
@ CRITERIA_DATA_TYPE_S_DRUNK
@ CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE
@ CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT
@ CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE
@ CRITERIA_DATA_TYPE_T_TEAM
@ CRITERIA_DATA_TYPE_HOLIDAY
@ CRITERIA_DATA_TYPE_T_GENDER
@ CRITERIA_DATA_TYPE_T_AURA
@ CRITERIA_DATA_TYPE_S_ITEM_QUALITY
@ CRITERIA_DATA_TYPE_NONE
@ CRITERIA_DATA_TYPE_S_KNOWN_TITLE
DB2Storage< ArtifactAppearanceEntry > sArtifactAppearanceStore("ArtifactAppearance.db2", &ArtifactAppearanceLoadInfo::Instance)
DB2Storage< DifficultyEntry > sDifficultyStore("Difficulty.db2", &DifficultyLoadInfo::Instance)
DB2Storage< WorldMapOverlayEntry > sWorldMapOverlayStore("WorldMapOverlay.db2", &WorldMapOverlayLoadInfo::Instance)
DB2Storage< ItemModifiedAppearanceExtraEntry > sItemModifiedAppearanceExtraStore("ItemModifiedAppearanceExtra.db2", &ItemModifiedAppearanceExtraLoadInfo::Instance)
DB2Storage< Achievement_CategoryEntry > sAchievementCategoryStore("Achievement_Category.db2", &AchievementCategoryLoadInfo::Instance)
DB2Storage< BattlemasterListEntry > sBattlemasterListStore("BattlemasterList.db2", &BattlemasterListLoadInfo::Instance)
DB2Storage< FriendshipReputationEntry > sFriendshipReputationStore("FriendshipReputation.db2", &FriendshipReputationLoadInfo::Instance)
DB2Storage< AchievementEntry > sAchievementStore("Achievement.db2", &AchievementLoadInfo::Instance)
DB2Storage< FriendshipRepReactionEntry > sFriendshipRepReactionStore("FriendshipRepReaction.db2", &FriendshipRepReactionLoadInfo::Instance)
DB2Storage< MapEntry > sMapStore("Map.db2", &MapLoadInfo::Instance)
DB2Storage< CriteriaEntry > sCriteriaStore("Criteria.db2", &CriteriaLoadInfo::Instance)
DB2Storage< GarrBuildingEntry > sGarrBuildingStore("GarrBuilding.db2", &GarrBuildingLoadInfo::Instance)
DB2Storage< ModifierTreeEntry > sModifierTreeStore("ModifierTree.db2", &ModifierTreeLoadInfo::Instance)
DB2Storage< WorldStateExpressionEntry > sWorldStateExpressionStore("WorldStateExpression.db2", &WorldStateExpressionLoadInfo::Instance)
DB2Storage< GarrPlotInstanceEntry > sGarrPlotInstanceStore("GarrPlotInstance.db2", &GarrPlotInstanceLoadInfo::Instance)
DB2Storage< CharTitlesEntry > sCharTitlesStore("CharTitles.db2", &CharTitlesLoadInfo::Instance)
DB2Storage< TraitNodeEntryEntry > sTraitNodeEntryStore("TraitNodeEntry.db2", &TraitNodeEntryLoadInfo::Instance)
DB2Storage< CreatureDisplayInfoExtraEntry > sCreatureDisplayInfoExtraStore("CreatureDisplayInfoExtra.db2", &CreatureDisplayInfoExtraLoadInfo::Instance)
DB2Storage< ScenarioStepEntry > sScenarioStepStore("ScenarioStep.db2", &ScenarioStepLoadInfo::Instance)
DB2Storage< CriteriaTreeEntry > sCriteriaTreeStore("CriteriaTree.db2", &CriteriaTreeLoadInfo::Instance)
DB2Storage< BattlePetSpeciesEntry > sBattlePetSpeciesStore("BattlePetSpecies.db2", &BattlePetSpeciesLoadInfo::Instance)
DB2Storage< ItemModifiedAppearanceEntry > sItemModifiedAppearanceStore("ItemModifiedAppearance.db2", &ItemModifiedAppearanceLoadInfo::Instance)
DB2Storage< PvpTierEntry > sPvpTierStore("PvpTier.db2", &PvpTierLoadInfo::Instance)
DB2Storage< ChrRacesEntry > sChrRacesStore("ChrRaces.db2", &ChrRacesLoadInfo::Instance)
DB2Storage< PlayerConditionEntry > sPlayerConditionStore("PlayerCondition.db2", &PlayerConditionLoadInfo::Instance)
DB2Storage< CreatureDisplayInfoEntry > sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", &CreatureDisplayInfoLoadInfo::Instance)
DB2Storage< HolidaysEntry > sHolidaysStore("Holidays.db2", &HolidaysLoadInfo::Instance)
DB2Storage< FactionTemplateEntry > sFactionTemplateStore("FactionTemplate.db2", &FactionTemplateLoadInfo::Instance)
DB2Storage< AreaTableEntry > sAreaTableStore("AreaTable.db2", &AreaTableLoadInfo::Instance)
DB2Storage< GarrFollowerEntry > sGarrFollowerStore("GarrFollower.db2", &GarrFollowerLoadInfo::Instance)
DB2Storage< FactionEntry > sFactionStore("Faction.db2", &FactionLoadInfo::Instance)
DB2Storage< GarrAbilityEntry > sGarrAbilityStore("GarrAbility.db2", &GarrAbilityLoadInfo::Instance)
#define MAX_WORLD_MAP_OVERLAY_AREA_IDX
@ InLFGFirstRandomDungeon
@ ACHIEVEMENT_FLAG_ACCOUNT
@ PlayerIsRestrictedAccount
@ PlayerInRatedBattleground
@ GroupMemberCountFromConnectedRealmEqualOrGreaterThan
@ RapidRenownCatchupActive
@ GarrisonShipmentContainerIsFull
@ PlayerExpansionLevelEqualOrGreaterThan
@ HasActiveGarrisonFollower
@ SelectionIsPlayerCorpse
@ PlayerHasTrackedCurrencyEqualOrGreaterThan
@ PlayerIsInNotOwnGarrison
@ PlayerToTargetLevelDeltaGreaterThan
@ PlayerMapOrCosmeticChildMap
@ HonorLevelEqualOrGreaterThan
@ PlayerHasItemQuantityIncludingBank
@ PlayerBattlegroundRatingEqualOrGreaterThan
@ PlayerHasTraitNodeEntryInActiveConfig
@ PlayerScenarioIsLastStep
@ GarrisonFollowersWithQualityEqualOrGreaterThan
@ PlayerHasCurrencyEqualOrGreaterThan
@ GarrisonFollowerHasAbility
@ ReputationWithFactionIsEqualOrGreaterThan
@ PlayerMythicPlusRunCountInCurrentExpansionEqualOrGreaterThan
@ PlayerIsQnQuestLinkedToScheduledWorldStateGroup
@ BattlePetTeamWithTypeEqualOrGreaterThan
@ GarrisonBuildingIsUnderConstruction
@ PlayerOffhandWeaponType
@ UniqueBattlePetsEqualOrGreaterThan
@ PlayerSummonedBattlePetSpecies
@ PlayerLanguageSkillEqualOrGreaterThan
@ ParagonReputationLevelWithFactionEqualOrGreaterThan
@ TargetAuraStackCountEqual
@ FriendshipRepReactionIsMet
@ PlayerHasAzeriteEssenceRankEqual
@ PlayerBestWeeklyWinPvpTier
@ PlayerHasImpInABallToySubscriptionReward
@ PlayerAuraStackCountEqual
@ AllPlayersInGroupHaveAchievement
@ PlayerHasWrathCollectorsEdition
@ GarrisonFollowerCountWithInactiveWithItemLevelEqualOrGreaterThan
@ TargetLevelWithinOrAboveLevelRange
@ PlayerHasAPACSubscriptionReward_2020
@ PlayerLevelEqualOrGreaterThan
@ PlayerHasCompletedQuestObjective
@ PlayerInArenaWithTeamSize
@ GarrisonBuildingWithLevelEqualOrGreaterThan
@ GarrisonFollowerWithAbilityAssignedToBuilding
@ PlayerHasBattlePetJournalLock
@ PlayerHasTBCCDEPathOfIllidan_Toy
@ GarrisonFollowerIsInBuilding
@ PlayerHasCompletedDungeonEncounterInDifficulty
@ PlayerUsedBoostLessThanHoursAgoRealTime
@ PlayerIsAtMaxExpansionLevel
@ PlayerCreatedCharacterLessThanHoursAgoRealTime
@ PlayerHasTBCCDEWarpStalker_Mount
@ GarrisonFollowerWithTraitAssignedToBuilding
@ CurrencySpentOnGarrisonTalentResearchEqualOrGreaterThan
@ LFgStatusEqualOrGreaterThan
@ PlayerCanAccessAlliedRaces
@ PlayerHasSoulbindConduitRankEqualOrGreaterThan
@ PlayerInChromieTimeForScaling
@ PlayerLevelWithinContentTuning
@ GarrisonBuildingLevelEqual
@ HasGarrisonBuildingActiveSpecialization
@ EarnedAchievementOnAccount
@ PlayerMainhandWeaponType
@ PlayerHasCompletedPercentageOfQuestline
@ PlayerInTimeWalkerInstance
@ MythicPlusMapChallengeMode
@ PrestigeLevelEqualOrGreaterThan
@ BattlePetOpponentCreatureId
@ PlayerHasItemWithKeystoneLevelModifierEqualOrGreaterThan
@ PlayerHasEmptyInventorySlotCountEqualOrGreaterThan
@ MythicPlusMilestoneSeason
@ JailersTowerActiveFloorIndexEqualOrGreaterThan
@ PlayerIsInAnyChromieTime
@ PlayerIsScenarioInitiator
@ PlayerLootSpecializationMatchesRole
@ PlayerIsOnQuestInQuestline
@ PlayerHasItemWithBonusListFromTreeAndQuality
@ InstancePlayerCountEqualOrLessThan
@ PlayerAuraStackCountEqualOrGreaterThan
@ GarrisonFollowerCountWithItemLevelEqualOrGreaterThan
@ PlayerSpellShapeshiftFormCreatureDisplayInfoSelection
@ MaxJailersTowerLevelEqualOrGreaterThan
@ PlayerSoulbindConduitCountAtRankEqualOrGreaterThan
@ TargetLevelWithinContentTuning
@ TargetHealthEqualsPercent
@ PlayerIsOnMapWithExpansion
@ GarrisonFollowersWithLevelEqualOrGreaterThan
@ MythicPlusCompletedInTime
@ InstancePlayerCountEqual
@ GarrisonFollowerIsOnAMission
@ PlayerHasCustomizationChoice
@ PlayerIsAllowedToToggleWarModeInArea
@ PlayerInRandomLfgDungeon
@ TargetHealthBelowPercent
@ PlayerUsedBoostLessThanHoursAgoGameTime
@ EarnedAchievementOnPlayer
@ PlayerHasPerksProgramPendingReward
@ GarrisonFollowerQualityEqual
@ PlayerInFirstRandomLfgDungeon
@ TargetThreatListSizeLessThan
@ GarrisonPlotInstanceHasBuildingThatIsReadyToActivate
@ PetBattleLastAbilityType
@ LegacyDungeonDifficulty
@ PlayerLastWeekRBGRating
@ GarrisonFollowerWithLevelAssignedToBuilding
@ PlayerLevelWithinOrAboveContentTuning
@ BattlePetTeamWithSpeciesEqualOrGreaterThan
@ PlayerIsReadyToTurnInQuest
@ PlayerHealthAbovePercent
@ ServerExpansionEqualOrGreaterThan
@ ParagonReputationLevelEqualOrGreaterThan
@ PlayerHealthBelowPercent
@ GuildGroupMemberCountEqualOrGreaterThan
@ JailersTowerActiveFloorDifficultyEqualOrGreaterThan
@ GarrisonTalentResearched
@ PlayerAuraWithLabelStackCountEqual
@ PlayerLastWeek2v2Rating
@ GarrisonFollowerLevelEqual
@ PlayerAuraWithLabelStackCountEqualOrLessThan
@ TillersReputationGreaterThan
@ GarrisonFollowerWithAbilityAtLevelEqualOrGreaterThan
@ AllGarrisonPlotsAreFull
@ GarrisonMissionIsReadyToCollect
@ TargetAuraStackCountEqualOrGreaterThan
@ MythicPlusDisplaySeason
@ ArtifactTraitUnlockedCountEqualOrGreaterThan
@ GarrisonFollowerWithTraitAtLevelEqualOrGreaterThan
@ TargetLevelEqualOrGreaterThan
@ AllGarrisonPlotsFilledWithBuildingsWithLevelEqualOrGreater
@ HasGarrisonBuildingSpecialization
@ PlayerBestWeeklyWinPvpTierInBracketEqualOrGreaterThan
@ PlayerInebriationLevelEqualOrGreaterThan
@ PlayerEquippedArtifactAppearanceSet
@ PlayerAzeriteLevelEqualOrGreaterThan
@ GarrisonFollowerCountWithLevelEqualOrGreaterThan
@ GroupMemberCountWithAchievementEqualOrLessThan
@ PlayerMythicPlusRatingEqualOrGreaterThan
@ PlayerCanAccessShadowlandsPrepurchaseContent
@ TargetIsOppositeFaction
@ GarrisonShipmentIsReady
@ TargetLevelEqualOrLessThan
@ GarrisonMissionHasBeenCompleted
@ PlayerPvpTierInBracketEqualOrGreaterThan
@ MinimumAverageItemHighWaterMarkForSpec
@ GarrisonMissionCountInSetLessThan
@ GarrisonTalentResearchInProgress
@ HasPersonalRatingEqualOrGreaterThan
@ TargetLevelWithinOrAboveContentTuning
@ GarrisonTalentResearchedAndAtRankEqualOrGreaterThan
@ PlayerLevelEqualOrLessThan
@ PlayerIsInPartySyncGroup
@ ClientVersionEqualOrLessThan
@ PlayerHasCompletedQuestOrIsOnQuest
@ GarrisonPlotInstanceCountEqualOrGreaterThan
@ PlayerCreatedCharacterLessThanHoursAgoGameTime
@ PlayerIsInCrossFactionGroup
@ PlayerCanAcceptQuestInQuestline
@ FriendshipRepReactionEqual
@ PlayerHasAzeriteEssenceInSlotAtRankGreaterThan
@ QuestHasPartySyncRewards
@ PlayerAuraWithLabelStackCountEqualOrGreaterThan
@ PlayerHasTraitNodeEntryInActiveConfigRankGreaterOrEqualThan
@ GroupedWithRaFRecruiter
@ PlayerHasAzeriteEssenceRankGreaterThan
@ PlayerInRankedArenaMatch
@ BattlePetHealthPercentLessThan
@ PlayerCountIsValidToStartGarrisonInvasion
@ HasBlueprintForGarrisonBuilding
@ PlayerHasRuneforgePower
@ BattlePetAchievementPointsEqualOrGreaterThan
@ PlayerHealthEqualsPercent
@ PlayerHasArtifactPowerRankCountPurchasedEqualOrGreaterThan
@ BattlePetTeamWithAliveEqualOrGreaterThan
@ PlayerLastWeek3v3Rating
@ PlayerHasItemInHistoryOfProgressiveEvent
@ PlayerSummonedBattlePetIsMaxLevel
@ PlayerHasAtLeastProfPathRanks
@ PlayerHasWeeklyRewardsAvailable
@ GarrisonFollowerHasTrait
@ PlayerDailyRandomValueMod_X_Equals
@ PlayerHasAuraWithEffectIndex
@ PlayerQuestObjectiveProgressEqual
@ PlayerHasItemTransmogrifiedToItemModifiedAppearance
@ PlayerQuestObjectiveProgressEqualOrGreaterThan
@ GarrisonMissionCountLessThan
@ PlayerLevelWithinOrAboveLevelRange
@ GarrisonTierEqualOrGreaterThan
@ GarrisonHasPermanentTalent
@ PlayerGuildReputationEqualOrGreaterThan
@ PlayerHealthEqualsValue
@ TargetHealthAbovePercent
@ PlayerSkillEqualOrGreaterThan
@ PlayerHasWarModeEnabled
@ PlayerHasCompletedQuest
@ CurrentGarrisonBuildingLevelEqual
@ MythicPlusKeystoneLevelEqualOrGreaterThan
@ PlayerHasTBCCollectorsEdition
@ PlayerHasCompletedQuestlineQuestCount
@ TargetIsPlayerAndMeetsCondition
@ PlayersAuthExpansionLevelEqualOrGreaterThan
@ TargetHealthEqualsValue
@ TargetToPlayerLevelDeltaGreaterThan
@ GarrisonShipmentOfTypeIsPending
@ PlayerHasCompletedQuestline
@ GarrisonFollowerItemLevelEqualOrGreaterThan
@ PlayerHasAzeriteEssenceInSlotAtRankLessThan
@ PlayerLevelEqualTargetLevel
@ OrderOfTheCloudSerpentReputationGreaterThan
@ PlayerHasMoreThanAchievementPoints
@ PlayerHasTBCCDEDarkPortal_Toy
@ PlayerHasAzeriteEssenceRankLessThan
@ PlayerHasVanillaCollectorsEdition
@ PlayerHasBeenGrantedLevelsFromRaF
uint32 constexpr ACHIVEMENT_CATEGORY_PET_BATTLES
@ CompleteResearchGarrisonTalent
@ ParticipateInRatedSoloShuffleRound
@ LearnGarrisonSpecialization
@ LevelChangedForGarrisonFollower
@ MoneyEarnedFromQuesting
@ MythicPlusDisplaySeasonEnded
@ CompleteAnyDailyQuestPerDay
@ MoneySpentOnGuildRepair
@ LearnAnyGarrisonSpecialization
@ ParagonLevelIncreaseWithFaction
@ LearnTradeskillSkillLine
@ BattlePetAchievementPointsEarned
@ LearnAnyGarrisonBlueprint
@ EarnPersonalArenaRating
@ CompletedLFGDungeonWithStrangers
@ CompleteQuestsCountForGuild
@ SucceedAnyGarrisonMissionWithFollowerType
@ KilledAllUnitsInSpawnRegion
@ MaxDistFallenWithoutDying
@ MoneyLootedFromCreatures
@ CompleteResearchAnyGarrisonTalent
@ KickInitiatorInLFRDungeon
@ CreatedItemsByCastingSpell
@ GroupedTankLeftEarlyInLFGDungeon
@ TotalFactionsEncountered
@ RecruitAnyGarrisonFollower
@ CollectTransmogSetFromGroup
@ CreatedItemsByCastingSpellWithLimit
@ PerksProgramMonthComplete
@ QualityUpgradedForGarrisonFollower
@ RecruitAnyGarrisonTroop
@ KickInitiatorInLFGDungeon
@ DeliverKillingBlowToClass
@ MarkedSomeoneAFKInBattleground
@ ItemLevelChangedForGarrisonFollower
@ FulfillCraftingOrderType
@ ParticipateInBattleground
@ DeliverKillingBlowToRace
@ KillAnyCreatureForGuild
@ MythicPlusRatingAttained
@ FulfillAnyCraftingOrder
@ CollectGarrisonShipment
@ ActivateAnyGarrisonBuilding
@ ArtifactPowerRankPurchased
@ StartResearchAnyGarrisonTalent
@ StartResearchGarrisonTalent
@ LearnAnyTransmogIllusion
@ LeaveAreaTriggerWithActionSet
@ ObtainAnyItemWithCurrencyValue
@ DieFromEnviromentalDamage
@ StartAnyGarrisonMissionWithFollowerType
@ EnterAreaTriggerWithActionSet
@ LearnSpellFromSkillLine
@ AnyArtifactPowerRankPurchased
@ AnyoneTriggerGameEventScenario
@ CompleteResearchProject
@ MarkedAFKInBattleground
@ ParticipateInAnyBattleground
@ LandTargetedSpellOnTarget
@ CompleteAnyBattleground
@ GroupedTankLeftEarlyInLFRDungeon
@ PlaceAnyGarrisonBuilding
@ SocketAnySoulbindConduit
@ RecruitGarrisonFollower
@ AccountObtainPetThroughBattle
@ WinRatedSoloShuffleRound
@ CompleteAnyResearchProject
@ ActivateGarrisonBuilding
@ TrackedWorldStateUIModified
@ EarnGuildAchievementPoints
@ MoneyEarnedFromAuctions
@ CompleteAnyChallengeMode
@ CompleteAnyGuildChallenge
@ PlayerObtainPetThroughBattle
@ DefeatDungeonEncounterWhileElegibleForLoot
@ EarnArtifactXPForAzeriteItem
@ AccountHonorLevelReached
@ CompleteInternalCriteria
@ RemovedAFKInBattleground
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
std::chrono::hours Hours
Hours shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
#define ASSERT_NOTNULL(pointer)
bool IsHolidayActive(HolidayIds id)
bool IsEventActive(uint16 eventId)
@ GARRISON_ABILITY_FLAG_TRAIT
@ FOLLOWER_STATUS_INACTIVE
@ GROUP_FLAG_CROSS_FACTION
@ ITEM_MODIFIER_CHALLENGE_KEYSTONE_LEVEL
@ ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID
@ ITEM_SUBCLASS_WEAPON_FIST_WEAPON
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_TRACE(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
std::optional< T > Optional
Optional helper class to wrap optional values within.
@ EQUIPMENT_SLOT_MAINHAND
@ PLAYER_FLAGS_WAR_MODE_ACTIVE
@ PLAYER_FLAGS_TIMEWALKING
@ PLAYER_LOCAL_FLAG_WAR_MODE
@ PLAYER_FLAGS_EX_MERCENARY_MODE
std::set< uint32 > RewardedQuestSet
@ QUEST_OBJECTIVE_CRITERIA_TREE
#define MAX_QUEST_LOG_SIZE
Role Based Access Control related classes definition.
constexpr Trinity::RaceMask< uint64 > RACEMASK_ALL_PLAYABLE
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
#define CLASSMASK_ALL_PLAYABLE
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
#define ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE
float GetPctOf(T value, T max)
bool CompareValues(ComparisionType type, T val1, T val2)
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
ArenaTeamMember * GetMember(ObjectGuid guid)
uint8 GetStackAmount() const
SpellInfo const * GetSpellInfo() const
ObjectGuid GetCastItemGUID() const
uint32 GetPetUniqueSpeciesCount() const
bool HasJournalLock() const
std::vector< WorldPackets::BattlePet::BattlePetSlot > const & GetSlots() const
uint8 GetArenaType() const
uint32 GetTeamScore(TeamId teamId) const
bool isBattleground() const
Team GetPlayerTeam(ObjectGuid guid) const
HeirloomContainer const & GetAccountHeirlooms() const
bool HasToy(uint32 itemId) const
MountContainer const & GetAccountMounts() const
std::pair< bool, bool > HasItemAppearance(uint32 itemModifiedAppearanceId) const
static bool IsPlayerMeetingCondition(Player const *player, PlayerConditionEntry const *condition)
static bool IsMeetingWorldStateExpression(Map const *map, WorldStateExpressionEntry const *expression)
static uint32 GetPlayerConditionLfgValue(Player const *player, PlayerConditionLfgStatus status)
CreatureTemplate const * GetCreatureTemplate() const
void SetCriteriaProgress(Criteria const *criteria, uint64 changeValue, Player *referencePlayer, ProgressType progressType=PROGRESS_SET)
virtual CriteriaList const & GetCriteriaByType(CriteriaType type, uint32 asset) const =0
virtual void AfterCriteriaTreeUpdate(CriteriaTree const *, Player *)
virtual void SendCriteriaProgressRemoved(uint32 criteriaId)=0
bool ModifierTreeSatisfied(ModifierTreeNode const *parent, uint64 miscValue1, uint64 miscValue2, WorldObject const *ref, Player *referencePlayer) const
virtual ~CriteriaHandler()
virtual bool RequiredAchievementSatisfied(uint32) const
bool RequirementsSatisfied(Criteria const *criteria, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject const *ref, Player *referencePlayer) const
std::unordered_map< uint32, Milliseconds > _startedCriteria
CriteriaProgress * GetCriteriaProgress(Criteria const *entry)
virtual void FailCriteria(CriteriaFailEvent failEvent, uint32 asset)
void StartCriteria(CriteriaStartEvent startEvent, uint32 entry, Milliseconds timeLost=Milliseconds::zero())
bool IsCompletedCriteria(Criteria const *criteria, uint64 requiredAmount)
virtual bool CanUpdateCriteriaTree(Criteria const *criteria, CriteriaTree const *tree, Player *referencePlayer) const
bool CanUpdateCriteria(Criteria const *criteria, CriteriaTreeList const *trees, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject const *ref, Player *referencePlayer)
CriteriaProgressMap _criteriaProgress
bool ModifierSatisfied(ModifierTreeEntry const *modifier, uint64 miscValue1, uint64 miscValue2, WorldObject const *ref, Player *referencePlayer) const
void RemoveCriteriaProgress(Criteria const *criteria)
virtual void CompletedCriteriaTree(CriteriaTree const *tree, Player *referencePlayer)=0
virtual bool CanCompleteCriteriaTree(CriteriaTree const *tree)
void UpdateTimedCriteria(Milliseconds timeDiff)
bool IsCompletedCriteriaTree(CriteriaTree const *tree)
virtual std::string GetOwnerInfo() const =0
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject const *ref=nullptr, Player *referencePlayer=nullptr)
bool ConditionsSatisfied(Criteria const *criteria, Player *referencePlayer) const
virtual void SendCriteriaUpdate(Criteria const *criteria, CriteriaProgress const *progress, Seconds timeElapsed, bool timedCompleted) const =0
std::unordered_map< int32, CriteriaList > const & GetCriteriaByStartEvent(CriteriaStartEvent startEvent) const
std::unordered_map< uint32, CriteriaTree * > _criteriaTrees
ModifierTreeNode const * GetModifierTree(uint32 modifierTreeId) const
CriteriaList _guildCriteriasByType[size_t(CriteriaType::Count)]
std::unordered_map< uint32, Criteria * > _criteria
static char const * GetCriteriaTypeString(CriteriaType type)
static void WalkCriteriaTree(CriteriaTree const *tree, Func const &func)
std::unordered_map< uint32, CriteriaDataSet > _criteriaDataMap
Criteria const * GetCriteria(uint32 criteriaId) const
CriteriaList const & GetScenarioCriteriaByTypeAndScenario(CriteriaType type, uint32 scenarioId) const
CriteriaList const & GetPlayerCriteriaByType(CriteriaType type, uint32 asset) const
std::unordered_map< uint32, CriteriaTreeList > _criteriaTreeByCriteria
static CriteriaList const EmptyCriteriaList
CriteriaListByAsset _scenarioCriteriasByTypeAndScenarioId[size_t(CriteriaType::Count)]
std::unordered_map< int32, CriteriaList > _criteriasByStartEvent[size_t(CriteriaStartEvent::Count)]
CriteriaTree const * GetCriteriaTree(uint32 criteriaTreeId) const
CriteriaListByAsset _criteriasByAsset[size_t(CriteriaType::Count)]
static CriteriaMgr * Instance()
void LoadCriteriaModifiersTree()
std::unordered_map< int32, CriteriaList > _criteriasByFailEvent[size_t(CriteriaFailEvent::Count)]
std::unordered_map< int32, CriteriaList > const & GetCriteriaByFailEvent(CriteriaFailEvent failEvent) const
CriteriaList _questObjectiveCriteriasByType[size_t(CriteriaType::Count)]
std::unordered_map< uint32, ModifierTreeNode * > _criteriaModifiers
CriteriaList _criteriasByType[size_t(CriteriaType::Count)]
static bool IsInArea(uint32 objectAreaId, uint32 areaId)
std::set< FriendshipRepReactionEntry const *, FriendshipRepReactionEntryComparator > FriendshipRepReactionSet
constexpr bool HasFlag(T flag) const
Class used to access individual fields of database query result.
std::string GetString() const
std::vector< GameEventData > GameEventDataMap
Follower const * GetFollower(uint64 dbId) const
uint32 CountFollowers(Predicate &&predicate) const
GarrisonType GetType() const
Plot * GetPlot(uint32 garrPlotInstanceId)
bool HasBlueprint(uint32 garrBuildingId) const
GarrSiteLevelEntry const * GetSiteLevel() const
std::vector< Plot * > GetPlots()
uint32 GetMembersCount() const
GroupReference * GetFirstMember()
GroupFlags GetGroupFlags() const
uint32 GetMaxPlayers() const
InstanceScript * GetInstanceScript()
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=nullptr, uint32=0)
AzeriteItem * ToAzeriteItem()
std::vector< int32 > const & GetBonusListIDs() const
UF::ArtifactPower const * GetArtifactPower(uint32 artifactPowerId) const
uint32 GetTotalUnlockedArtifactPowers() const
uint16 GetVisibleAppearanceModId(Player const *owner) const
uint32 GetModifier(ItemModifier modifier) const
Difficulty GetDifficultyID() const
MapEntry const * GetEntry() const
uint32 GetPlayersCountExceptGMs() const
InstanceMap * ToInstanceMap()
WeatherState GetZoneWeather(uint32 zoneId) const
uint32 GetInstanceId() const
PlayerList const & GetPlayers() const
LowType GetCounter() const
static ObjectGuid const Empty
static Creature * ToCreature(Object *o)
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
static bool InDbPhaseShift(WorldObject const *object, uint8 phaseUseFlags, uint16 phaseId, uint32 phaseGroupId)
ChrSpecialization GetPrimarySpecialization() const
uint32 GetHonorLevel() const
uint32 GetCustomizationChoice(uint32 chrCustomizationOptionId) const
UF::PVPInfo const * GetPvpInfoForBracket(int8 bracket) const
uint32 GetCurrencyTrackedQuantity(uint32 id) const
int32 GetReputation(uint32 factionentry) const
BattlegroundTypeId GetBattlegroundTypeId() const
bool HasPlayerFlagEx(PlayerFlagsEx flags) const
bool CanEnableWarModeInArea() const
std::vector< uint32 > GetCompletedAchievementIds() const
UF::UpdateField< UF::PlayerData, 0, TYPEID_PLAYER > m_playerData
bool ForEachItem(ItemSearchLocation location, T callback) const
Iterate over each item in the player storage.
uint32 GetTotalPlayedTime() const
RewardedQuestSet const & getRewardedQuests() const
uint8 GetDrunkValue() const
Gender GetNativeGender() const override
bool GetQuestRewardStatus(uint32 quest_id) const
bool HasRaceChanged() const
uint16 FindQuestSlot(uint32 quest_id) const
bool HasCurrency(uint32 id, uint32 amount) const
uint8 GetBankBagSlotCount() const
bool InBattleground() const
Item * GetItemByEntry(uint32 entry, ItemSearchLocation where=ItemSearchLocation::Default) const
uint32 GetItemCount(uint32 item, bool inBankAlso=false, Item *skipItem=nullptr) const
bool HasTitle(uint32 bitIndex) const
uint16 GetPureSkillValue(uint32 skill) const
bool HasAchieved(uint32 achievementId) const
WorldSession * GetSession() const
int32 GetQuestObjectiveData(uint32 questId, uint32 objectiveId) const
uint16 GetBaseSkillValue(uint32 skill) const
PlayerSpellMap const & GetSpellMap() const
uint16 GetPureMaxSkillValue(uint32 skill) const
bool HasExploredZone(uint32 areaId) const
bool HasPlayerLocalFlag(PlayerLocalFlags flags) const
Battleground * GetBattleground() const
ObjectGuid::LowType GetGuildId() const
uint32 GetFreeInventorySlotCount(EnumFlag< ItemSearchLocation > location=ItemSearchLocation::Inventory) const
bool IsGameMaster() const
uint32 GetRBGPersonalRating() const
uint32 GetAchievementPoints() const
bool CanTakeQuest(Quest const *quest, bool msg) const
bool IsQuestObjectiveComplete(uint16 slot, Quest const *quest, QuestObjective const &objective) const
QuestStatus GetQuestStatus(uint32 quest_id) const
UF::UpdateField< UF::ActivePlayerData, 0, TYPEID_ACTIVE_PLAYER > m_activePlayerData
Garrison * GetGarrison() const
bool HasLevelBoosted() const
ReputationRank GetReputationRank(uint32 faction_id) const
bool HasSpell(uint32 spell) const override
Group * GetGroup(Optional< uint8 > partyIndex)
bool HasPlayerFlag(PlayerFlags flags) const
size_t GetRewardedQuestCount() const
uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const
Item * GetItemByGuid(ObjectGuid guid) const
bool HasBeenGrantedLevelsFromRaF() const
ChrSpecializationEntry const * GetPrimarySpecializationEntry() const
uint32 GetArenaTeamId(uint8) const
ReputationMgr & GetReputationMgr()
static DrunkenState GetDrunkenstateByValue(uint8 value)
bool IsLockedToDungeonEncounter(uint32 dungeonEncounterId) const
uint32 GetCurrencyQuantity(uint32 id) const
bool IsQuestRewarded(uint32 quest_id) const
InventoryResult CanUseItem(Item *pItem, bool not_loading=true) const
int32 GetZoneOrSort() const
uint32 GetQuestInfoID() const
uint8 GetHonoredFactionCount() const
uint8 GetReveredFactionCount() const
int32 GetReputation(uint32 faction_id) const
int32 GetParagonLevel(uint32 paragonFactionId) const
uint8 GetExaltedFactionCount() const
uint8 GetVisibleFactionCount() const
ScenarioEntry const * GetEntry() const
ScenarioStepEntry const * GetLastStep() const
ScenarioStepEntry const * GetStep() const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
std::vector< SpellEffectInfo > const & GetEffects() const
bool HasLabel(uint32 labelId) const
size_t GetThreatListSize() const
bool HealthAbovePct(int32 pct) const
float GetHealthPct() const
bool CanHaveThreatList() const
====================== THREAT & COMBAT ====================
ThreatManager & GetThreatManager()
UF::UpdateField< UF::UnitData, 0, TYPEID_UNIT > m_unitData
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
uint32 GetCreatureType() const
uint32 GetDisplayId() const
uint32 GetAuraCount(uint32 spellId) const
bool HasAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid caster=ObjectGuid::Empty) const
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
bool HasAuraType(AuraType auraType) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
ObjectGuid GetTarget() const
constexpr uint32 GetMapId() const
Scenario * GetScenario() const
virtual uint8 GetLevelForTarget(WorldObject const *) const
bool IsHostileTo(WorldObject const *target) const
uint32 GetInstanceId() const
std::string const & GetName() const
bool CanAccessAlliedRaces() const
uint32 GetRecruiterId() const
bool HasPermission(uint32 permissionId)
uint32 GetAccountId() const
uint8 GetAccountExpansion() const
CollectionMgr * GetCollectionMgr() const
uint8 GetExpansion() const
BattlePets::BattlePetMgr * GetBattlePetMgr() const
void SetPackedTime(uint32 packedTime)
@ CONFIG_ARENA_SEASON_IN_PROGRESS
static constexpr uint16 MAX_BATTLE_PET_LEVEL
bool IsDisabledFor(DisableType type, uint32 entry, WorldObject const *ref, uint8 flags)
WowTime const * GetWowTime()
std::vector< int32 > GetAllBonusListsForTree(uint32 itemBonusTreeId)
auto MapGetValuePtr(M &map, typename M::key_type const &key)
TC_PROTO_API ::google::protobuf::internal::ExtensionIdentifier< ::google::protobuf::FieldOptions, ::google::protobuf::internal::MessageTypeTraits< ::bgs::protocol::FieldRestriction >, 11, false > valid
@ RBAC_PERM_CANNOT_EARN_ACHIEVEMENTS
EnumFlag< BattlemasterListFlags > GetFlags() const
int32 ExtendedDisplayInfoID
bool Meets(Player const *source, WorldObject const *target, uint32 miscValue1=0, uint32 miscValue2=0) const
std::vector< CriteriaData > _storage
void SetCriteriaId(uint32 id)
void Add(CriteriaData const &data)
struct CriteriaData::@9::@23 EquippedItem
struct CriteriaData::@9::@27 ItemQuality
CriteriaDataType DataType
struct CriteriaData::@9::@12 ClassRace
struct CriteriaData::@9::@21 Holiday
struct CriteriaData::@9::@16 Level
struct CriteriaData::@9::@26 GameEvent
struct CriteriaData::@9::@18 MapPlayers
struct CriteriaData::@9::@13 Health
bool IsValid(Criteria const *criteria)
bool Meets(uint32 criteriaId, Player const *source, WorldObject const *target, uint32 miscValue1=0, uint32 miscValue2=0) const
struct CriteriaData::@9::@20 Drunk
struct CriteriaData::@9::@25 KnownTitle
int16 EligibilityWorldStateID
union CriteriaEntry::AssetNameAlias Asset
int8 EligibilityWorldStateValue
EnumFlag< CriteriaTreeFlags > GetFlags() const
ScenarioStepEntry const * ScenarioStep
::Criteria const * Criteria
std::vector< CriteriaTree const * > Children
CriteriaTreeEntry const * Entry
::QuestObjective const * QuestObjective
AchievementEntry const * Achievement
CriteriaEntry const * Entry
ModifierTreeNode const * Modifier
Optional< WorldPackets::Garrison::GarrisonBuildingInfo > PacketInfo
WorldPackets::Garrison::GarrisonFollower PacketInfo
bool HasAbility(uint32 garrAbilityId) const
uint32 GetItemLevel() const
uint8 TransmogSourceTypeEnum
uint32 GetBaseItemLevel() const
uint32 GetQuality() const
uint32 GetSubClass() const
int16 CosmeticParentMapID
ModifierTreeEntry const * Entry
std::vector< ModifierTreeNode const * > Children
constexpr float GetPositionZ() const
constexpr bool HasRace(uint8 raceId) const
uint32 ChrCustomizationChoiceID
UpdateField< uint32, 0, 11 > PvpTierID
UpdateField< uint32, 0, 12 > WeeklyBestWinPvpTierID
UpdateField< int32, 4, 6 > SkillLineID
UpdateField< int32, 4, 5 > Type
UpdateField< int32, 8, 9 > CombatConfigFlags
DynamicUpdateField< UF::TraitEntry, 0, 1 > Entries
UpdateField< int32, 0, 2 > ID
UpdateField< uint16, 0, 4 > ItemAppearanceModID
UpdateField< int32, 0, 1 > ItemID
std::array< uint32, MAX_WORLD_MAP_OVERLAY_AREA_IDX > AreaID
int32 EnviromentalDamageType