61 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` for criteria (Entry: {}) contains a wrong data type ({}), ignored.", criteria->
ID,
DataType);
96 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` contains data for a non-supported criteria type (Entry: {} Type: {}), ignored.", criteria->
ID, criteria->
Entry->
Type);
110 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.",
118 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.",
124 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.",
130 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.",
138 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.",
149 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell id in value1 ({}), ignored.",
155 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a wrong spell effect index in value2 ({}), ignored.",
161 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type {} ({}) contains a non-aura spell effect (ID: {} Effect: {}), ignored.",
170 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_VALUE ({}) contains a wrong ComparisionType in value2 ({}), ignored.",
178 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.",
186 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.",
194 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` (Entry: {} Type: {}) for data type CRITERIA_DATA_TYPE_SCRIPT ({}) does not have a ScriptName set, ignored.",
202 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.",
210 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.",
218 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.",
226 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.",
236 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.",
247 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.",
255 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.",
262 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.",
268 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.",
274 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.",
282 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.",
290 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.",
296 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);
359 Unit const* unitTarget =
nullptr;
361 unitTarget = target->
ToUnit();
392 TC_LOG_ERROR(
"criteria",
"Criteria system call CRITERIA_DATA_TYPE_INSTANCE_SCRIPT ({}) for criteria {} in a non-dungeon/non-raid map {}",
399 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.",
404 Unit const* unitTarget =
nullptr;
406 unitTarget = target->
ToUnit();
424 return source && source->
HasTitle(titleInfo->MaskID);
444 if (!criteriadata.Meets(
_criteriaId, source, target, miscValue1, miscValue2))
456 for (std::pair<uint32 const, CriteriaProgress>
const& criteriaprogress :
_criteriaProgress)
469 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria: Wrong criteria type {}",
uint32(type));
473 if (!referencePlayer)
475 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria: Player is NULL! Cant update criteria");
482 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria: [Player {} {}] {}, {} ({}), {}, {}, {}",
483 referencePlayer->
GetName(), referencePlayer->
IsGameMaster() ?
"GM mode on" :
"disallowed by RBAC",
488 TC_LOG_DEBUG(
"criteria",
"CriteriaHandler::UpdateCriteria({}, {}, {}, {}, {}) {}",
492 for (
Criteria const* criteria : criteriaList)
493 UpdateCriteria(criteria, miscValue1, miscValue2, miscValue3, ref, referencePlayer);
499 if (!
CanUpdateCriteria(criteria, trees, miscValue1, miscValue2, miscValue3, ref, referencePlayer))
504 if (!data->Meets(referencePlayer, ref,
uint32(miscValue1),
uint32(miscValue2)))
632 time_t nextDailyResetTime =
sWorld->GetNextDailyQuestsResetTime();
638 if (progress && progress->
Date < (nextDailyResetTime - 2 *
DAY))
647 else if (progress->
Date < (nextDailyResetTime - 2 *
DAY))
650 else if (progress->
Date < (nextDailyResetTime -
DAY))
671 for (
uint32 rewQuest : rewQuests)
722 for (
auto& [spellId, _] : referencePlayer->
GetSpellMap())
725 for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
764 if (miscValue2 != reqTeamType)
778 if (!team || team->
GetType() != reqTeamType)
895 if (itr->second <= timeDiff)
903 itr->second -= timeDiff;
915 for (
Criteria const* criteria : *criteriaList)
918 if (criteria->Entry->StartTimer)
919 timeLimit =
Seconds(criteria->Entry->StartTimer);
921 timeLimit -= timeLost;
923 if (timeLimit <= Milliseconds::zero())
927 bool canStart = std::any_of(trees->begin(), trees->end(), [&](
CriteriaTree const* tree)
929 return !IsCompletedCriteriaTree(tree);
941 itr->second = timeLimit;
955 for (
Criteria const* criteria : *criteriaList)
960 bool allTreesFullyComplete = std::all_of(trees->begin(), trees->end(), [&](
CriteriaTree const* tree)
962 CriteriaTree const* root = tree;
963 if (CriteriaTree const* parent = sCriteriaMgr->GetCriteriaTree(root->Entry->Parent))
968 parent = sCriteriaMgr->GetCriteriaTree(root->Entry->Parent);
975 if (allTreesFullyComplete)
988 return &iter->second;
1004 progress->
Counter = changeValue;
1009 switch (progressType)
1012 newValue = changeValue;
1017 uint64 max_value = std::numeric_limits<uint64>::max();
1018 newValue = max_value - progress->
Counter > changeValue ? progress->
Counter + changeValue : max_value;
1022 newValue = progress->
Counter < changeValue ? changeValue : progress->
Counter;
1037 Seconds timeElapsed = Seconds::zero();
1050 bool allTreesCompleted = std::all_of(trees->begin(), trees->end(), [&](
CriteriaTree const* tree)
1052 return IsCompletedCriteriaTree(tree);
1055 if (allTreesCompleted)
1074 criteriaProgress->second.Counter = 0;
1075 criteriaProgress->second.Changed =
true;
1102 progress += criteriaProgress->Counter;
1104 return progress >= requiredCount;
1113 if (criteriaProgress->Counter > progress)
1114 progress = criteriaProgress->Counter;
1116 return progress >= requiredCount;
1124 if (criteriaProgress->Counter >= 1)
1125 if (++progress >= requiredCount)
1135 if (++progress >= requiredCount)
1147 progress += criteriaProgress->Counter * criteriaTree->
Entry->
Amount;
1149 return progress >= requiredCount;
1163 TC_LOG_TRACE(
"criteria",
"CriteriaHandler::CanUpdateCriteriaTree: (Id: {} Type {} CriteriaTree {}) Wrong faction",
1256 return progress->
Counter >= requiredAmount;
1277 return progress->
Counter >= 1;
1279 return progress->
Counter >= (requiredAmount * 75);
1281 return progress->
Counter >= 9000;
1283 return requiredAmount && progress->
Counter >= requiredAmount;
1335 bool treeRequirementPassed =
false;
1341 treeRequirementPassed =
true;
1345 if (!treeRequirementPassed)
1519 if (!data->Meets(referencePlayer, ref))
1557 if (!worldOverlayEntry)
1560 bool matchFound =
false;
1648 if (!miscValue1 || !miscValue2 ||
int64(miscValue2) < 0
1741 if (!--requiredAmount)
1764 if (inebriation < reqValue)
1783 if (!ref || ref->
GetEntry() != reqValue)
1799 if (!referencePlayer->
HasAura(reqValue))
1839 if (referencePlayer->
isDead())
1857 if (miscValue1 != reqValue)
1872 if (!ref || !ref->
IsUnit() || referencePlayer->
GetLevel() + reqValue < ref->ToUnit()->GetLevel())
1887 if (referencePlayer->
GetRace() != reqValue)
1891 if (referencePlayer->
GetClass() != reqValue)
1923 if (referencePlayer->
GetMapId() != reqValue)
1928 std::shared_ptr<Realm const> currentRealm =
sRealmList->GetCurrentRealm();
1937 if (slot.Pet.Level < reqValue)
1953 if (!referencePlayer->
HasTitle(reqValue))
1957 if (referencePlayer->
GetLevel() != reqValue)
1969 zoneId = areaEntry->ParentAreaID;
1970 if (zoneId != reqValue)
1981 zoneId = areaEntry->ParentAreaID;
1982 if (zoneId != reqValue)
1995 if (referencePlayer->
GetHealthPct() !=
float(reqValue))
2011 if (referencePlayer->
GetHealth() > reqValue)
2015 if (referencePlayer->
GetHealth() < reqValue)
2019 if (referencePlayer->
GetHealth() != reqValue)
2095 if (referencePlayer->
GetLevel() < reqValue)
2103 if (referencePlayer->
GetLevel() > reqValue)
2117 if (!scenario || scenario->
GetEntry()->
ID != reqValue)
2129 int16 category = achievement->Category;
2133 if (!categoryEntry || categoryEntry->
Parent == -1)
2136 category = categoryEntry->
Parent;
2142 uint32 petAchievementPoints = 0;
2150 if (petAchievementPoints < reqValue)
2169 uint32 guildMemberCount = 0;
2172 if (itr.GetSource()->GetGuildId() == referencePlayer->
GetGuildId())
2175 if (guildMemberCount < reqValue)
2213 if (miscValue1 != reqValue)
2227 if (!friendshipRepReaction)
2230 if (!friendshipReputation)
2262 bool hasLanguageSkil = std::any_of(languageDescs.begin(), languageDescs.end(), [&](std::pair<uint32 const, LanguageDesc>
const& desc)
2264 return referencePlayer->GetSkillValue(desc.second.SkillId) >= secondaryAsset;
2266 if (!hasLanguageSkil)
2283 if (!referencePlayer->
HasSpell(reqValue))
2287 if (referencePlayer->
GetItemCount(reqValue,
false) < secondaryAsset)
2295 if (!referencePlayer->
HasAura([labelId = reqValue](
Aura const* aura) { return aura->GetSpellInfo()->HasLabel(labelId); }))
2341 if (referencePlayer->
GetItemCount(reqValue,
true) < secondaryAsset)
2356 int32 factionIndex = -1;
2363 if (factionIndex !=
int32(reqValue))
2376 if (!referencePlayer->
HasCurrency(reqValue, secondaryAsset))
2427 if (followerCount < reqValue)
2441 if (followerCount < reqValue)
2455 if (followerCount < 1)
2472 if (followerCount < 1)
2484 if (!followerBuilding)
2488 if (followerCount < 1)
2503 if (!followerBuilding)
2507 if (followerCount < 1)
2521 if (!followerBuilding)
2523 return followerBuilding->
BuildingType == secondaryAsset;
2525 if (followerCount < 1)
2536 if (!plot->BuildingInfo.PacketInfo)
2564 if (!plot->BuildingInfo.PacketInfo)
2584 if (!plot->BuildingInfo.PacketInfo || plot->BuildingInfo.PacketInfo->GarrBuildingID != reqValue)
2587 return !plot->BuildingInfo.PacketInfo->Active;
2600 if (!plot->BuildingInfo.PacketInfo)
2630 if (followerCount < 1)
2646 if (!follower || !follower->
HasAbility(reqValue))
2655 if (followerCount < 1)
2677 if (followerCount < 1)
2699 if (followerCount < 1)
2716 if (!plot->BuildingInfo.PacketInfo || plot->BuildingInfo.PacketInfo->GarrBuildingID != miscValue1)
2743 if (slot.Pet.Species == secondaryAsset)
2745 if (count < reqValue)
2754 if (species->PetTypeEnum ==
int32(secondaryAsset))
2756 if (count < reqValue)
2767 if (slot.Pet.Health > 0)
2769 if (count < reqValue)
2784 if (followerCount < 1)
2825 if (!plot->BuildingInfo.PacketInfo)
2846 if (followerCount < 1)
2860 if (followerCount < reqValue)
2876 if (miscValue1 != reqValue)
2902 if (followerCount < reqValue)
2915 if (followerCount < 1)
2930 if (!garrPlotInstance || garrPlotInstance->
GarrPlotID != secondaryAsset)
2934 if (plotCount < reqValue)
2953 if (followerCount < 1)
2967 if (mount->
ID == reqValue)
2984 if (followerCount < reqValue)
2997 if (followerCount < 1)
3042 if (!hasAppearance.first || hasAppearance.second)
3053 return restriction.
Type == reqValue;
3055 if (restrictionIndex < 0)
3077 if (
Item* artifact = referencePlayer->
GetItemByGuid(artifactAura->GetCastItemGUID()))
3079 if (artifactAppearance->ArtifactAppearanceSetID == reqValue)
3111 if (itr.GetSource() != referencePlayer && *referencePlayer->
m_playerData->VirtualPlayerRealm == *itr.GetSource()->m_playerData->VirtualPlayerRealm)
3113 if (memberCount < reqValue)
3151 if (bonusListIDs.empty())
3158 return std::find(bonusListIDs.begin(), bonusListIDs.end(), bonusListID) != bonusListIDs.end();
3162 if (bagScanReachedEnd)
3209 uint32 membersWithAchievement = 0;
3211 if (itr.GetSource()->HasAchieved(secondaryAsset))
3212 ++membersWithAchievement;
3214 if (membersWithAchievement > reqValue)
3231 if (itemModifiedAppearaceExtra->DisplayWeaponSubclassID > 0)
3232 itemSubclass = itemModifiedAppearaceExtra->DisplayWeaponSubclassID;
3235 if (itemSubclass != reqValue)
3250 if (itemModifiedAppearaceExtra->DisplayWeaponSubclassID > 0)
3251 itemSubclass = itemModifiedAppearaceExtra->DisplayWeaponSubclassID;
3254 if (itemSubclass != reqValue)
3350 if (!creatureDisplayInfo)
3353 if (!creatureDisplayInfoExtra)
3361 if (!ref || !ref->
IsUnit())
3364 if (!creatureDisplayInfo)
3367 if (!creatureDisplayInfoExtra)
3376 if (!friendshipRepReaction)
3379 if (!friendshipReputation)
3382 if (!friendshipReactions)
3385 if (rank >= friendshipReactions->size())
3387 auto itr = friendshipReactions->begin();
3388 std::advance(itr, rank);
3389 if ((*itr)->ID != reqValue)
3394 if (referencePlayer->
GetAuraCount(secondaryAsset) != reqValue)
3402 if (referencePlayer->
GetAuraCount(secondaryAsset) < reqValue)
3414 if (essence.AzeriteEssenceID == reqValue && essence.Rank < secondaryAsset)
3423 if (essence.AzeriteEssenceID == reqValue && essence.Rank == secondaryAsset)
3432 if (essence.AzeriteEssenceID == reqValue && essence.Rank > secondaryAsset)
3437 if (!referencePlayer->
GetAuraEffect(reqValue, secondaryAsset))
3443 if (!spec || spec->
Role !=
int32(reqValue))
3454 if (!itemModifiedAppearance)
3465 if (essence.AzeriteEssenceID == selectedEssences->AzeriteEssenceID[reqValue] && essence.Rank < secondaryAsset)
3473 if (essence.AzeriteEssenceID == selectedEssences->AzeriteEssenceID[reqValue] && essence.Rank > secondaryAsset)
3482 return level >= levels->MinLevelWithDelta && level <= levels->MaxLevelWithDelta;
3483 return level >= levels->MinLevel && level <= levels->MaxLevel;
3489 if (!ref || !ref->
IsUnit())
3495 return level >= levels->MinLevelWithDelta && level <= levels->MaxLevelWithDelta;
3496 return level >= levels->MinLevel && level <= levels->MaxLevel;
3513 return secondaryAsset ? level >= levels->MinLevelWithDelta : level >= levels->MinLevel;
3518 if (!ref || !ref->
IsUnit())
3522 return secondaryAsset ? level >= levels->MinLevelWithDelta : level >= levels->MinLevel;
3584 eventTimestamp = time_t(1579618800);
3587 eventTimestamp = time_t(1602601200);
3590 eventTimestamp = time_t(1607439600);
3599 eventTimestamp = time_t(1699340400);
3602 eventTimestamp = time_t(1699945200);
3630 std::vector<uint32> areas =
sDB2Manager.GetAreasForGroup(reqValue);
3631 for (
uint32 areaInGroup : areas)
3640 std::vector<uint32> areas =
sDB2Manager.GetAreasForGroup(reqValue);
3641 for (
uint32 areaInGroup : areas)
3655 if (!
sDB2Manager.GetAzeriteEmpoweredItem(miscValue1))
3660 uint32 block = reqValue / 32;
3664 uint32 bit = reqValue % 32;
3668 if (referencePlayer->
m_playerData->CtrOptions->ConditionalFlags.empty() || !(referencePlayer->
m_playerData->CtrOptions->ConditionalFlags[0] & 1))
3680 if (!itr.GetSource()->HasAchieved(reqValue))
3697 return choice->ID == formChoice;
3699 if (choiceItr == formModelData->
Choices->end())
3701 if (
int32(reqValue) != formModelData->
Displays[std::distance(formModelData->
Choices->begin(), choiceItr)]->DisplayID)
3748 if (customizationChoiceIndex < 0)
3790 if (bagScanReachedEnd)
3797 referencePlayer->
HasAura([secondaryAsset, &count](
Aura const* aura)
3803 if (count < reqValue)
3810 referencePlayer->
HasAura([secondaryAsset, &count](
Aura const* aura)
3816 if (count != reqValue)
3823 referencePlayer->
HasAura([secondaryAsset, &count](
Aura const* aura)
3829 if (count > reqValue)
3842 auto hasTraitNodeEntry = [referencePlayer, reqValue]
3847 if (traitEntry.TraitNodeEntryID ==
int32(reqValue))
3852 if (!hasTraitNodeEntry)
3858 auto traitNodeEntryRank = [referencePlayer, secondaryAsset]() ->
Optional<uint16>
3863 if (traitEntry.TraitNodeEntryID ==
int32(secondaryAsset))
3864 return traitEntry.Rank;
3868 if (!traitNodeEntryRank || traitNodeEntryRank <
int32(reqValue))
3883 if (!itemTemplate || !referencePlayer->
CanUseItem(itemTemplate))
3888 if (referencePlayer->
m_playerData->CurrentBattlePetSpeciesID !=
int32(reqValue))
3897 uint32 traitNodeEntryRankCount = [referencePlayer, secondaryAsset]
3900 for (
auto const& [_, traitConfig] : referencePlayer->
m_activePlayerData->TraitConfigs)
3905 if (*traitConfig.value.SkillLineID !=
int32(secondaryAsset))
3908 for (
UF::TraitEntry const& traitEntry : traitConfig.value.Entries)
3910 ranks += traitEntry.Rank + traitEntry.GrantedRanks;
3914 if (traitNodeEntryRankCount < reqValue)
3932 if (bagScanReachedEnd)
3954 if (scenario->
GetStep()->
ID != reqValue)
3991 if (!traitConfigWithSubtree)
4006 if (!targetCreature)
4013 return std::visit([&]<
typename T>(T value) {
return value >= T(secondaryAsset) && value <= T(tertiaryAsset); },
4016 return std::visit([&]<
typename T>(T value) {
return value >= T(secondaryAsset) && value <= T(tertiaryAsset); },
4036 case 1:
if (referencePlayer->
GetMoney() <= secondaryAsset)
return false;
break;
4037 case 2:
if (referencePlayer->
GetMoney() >= secondaryAsset)
return false;
break;
4038 case 3:
if (referencePlayer->
GetMoney() < secondaryAsset)
return false;
break;
4039 case 4:
if (referencePlayer->
GetMoney() > secondaryAsset)
return false;
break;
4040 default:
if (referencePlayer->
GetMoney() != secondaryAsset)
return false;
break;
4061 return "KillCreature";
4063 return "WinBattleground";
4065 return "CompleteResearchProject";
4067 return "CompleteAnyResearchProject";
4069 return "FindResearchObject";
4071 return "ReachLevel";
4073 return "ExhaustAnyResearchSite";
4075 return "SkillRaised";
4077 return "EarnAchievement";
4079 return "CompleteQuestsCount";
4081 return "CompleteAnyDailyQuestPerDay";
4083 return "CompleteQuestsInZone";
4085 return "CurrencyGained";
4087 return "DamageDealt";
4089 return "CompleteDailyQuest";
4091 return "ParticipateInBattleground";
4095 return "DieAnywhere";
4097 return "DieInInstance";
4099 return "RunInstance";
4101 return "KilledByCreature";
4103 return "CompleteInternalCriteria";
4105 return "CompleteAnyChallengeMode";
4107 return "KilledByPlayer";
4109 return "MaxDistFallenWithoutDying";
4111 return "EarnChallengeModeMedal";
4113 return "DieFromEnviromentalDamage";
4115 return "CompleteQuest";
4117 return "BeSpellTarget";
4121 return "TrackedWorldStateUIModified";
4123 return "PVPKillInArea";
4127 return "ParticipateInArena";
4129 return "LearnOrKnowSpell";
4131 return "EarnHonorableKill";
4133 return "AcquireItem";
4135 return "WinAnyRankedArena";
4137 return "EarnTeamArenaRating";
4139 return "EarnPersonalArenaRating";
4141 return "AchieveSkillStep";
4147 return "RevealWorldMapOverlay";
4151 return "BankSlotsPurchased";
4153 return "ReputationGained";
4155 return "TotalExaltedFactions";
4157 return "GotHaircut";
4159 return "EquipItemInSlot";
4165 return "DeliverKillingBlowToClass";
4167 return "DeliverKillingBlowToRace";
4171 return "HealingDone";
4173 return "DeliveredKillingBlow";
4177 return "CompleteQuestsInSort";
4179 return "MoneyEarnedFromSales";
4181 return "MoneySpentOnRespecs";
4183 return "TotalRespecs";
4185 return "MoneyEarnedFromQuesting";
4187 return "MoneySpentOnTaxis";
4189 return "KilledAllUnitsInSpawnRegion";
4191 return "MoneySpentAtBarberShop";
4193 return "MoneySpentOnPostage";
4195 return "MoneyLootedFromCreatures";
4197 return "UseGameobject";
4201 return "KillPlayer";
4203 return "CompleteChallengeMode";
4205 return "CatchFishInFishingHole";
4207 return "PlayerTriggerGameEvent";
4211 return "LearnSpellFromSkillLine";
4217 return "KillAnyCreature";
4219 return "CreatedItemsByCastingSpellWithLimit";
4221 return "MoneyEarnedFromAuctions";
4223 return "BattlePetAchievementPointsEarned";
4225 return "ItemsPostedAtAuction";
4227 return "HighestAuctionBid";
4229 return "AuctionsWon";
4231 return "HighestAuctionSale";
4233 return "MostMoneyOwned";
4235 return "TotalReveredFactions";
4237 return "TotalHonoredFactions";
4239 return "TotalFactionsEncountered";
4241 return "LootAnyItem";
4243 return "ObtainAnyItem";
4245 return "AnyoneTriggerGameEventScenario";
4247 return "RollAnyNeed";
4249 return "RollAnyGreed";
4251 return "ReleasedSpirit";
4253 return "AccountKnownPet";
4255 return "DefeatDungeonEncounterWhileElegibleForLoot";
4257 return "HighestDamageDone";
4259 return "HighestDamageTaken";
4261 return "TotalDamageTaken";
4263 return "HighestHealCast";
4265 return "TotalHealReceived";
4267 return "HighestHealReceived";
4269 return "AbandonAnyQuest";
4273 return "GetLootByType";
4275 return "LandTargetedSpellOnTarget";
4277 return "LearnTradeskillSkillLine";
4279 return "HonorableKills";
4281 return "AcceptSummon";
4283 return "EarnAchievementPoints";
4285 return "RollDisenchant";
4287 return "RollAnyDisenchant";
4289 return "CompletedLFGDungeon";
4291 return "CompletedLFGDungeonWithStrangers";
4293 return "KickInitiatorInLFGDungeon";
4295 return "KickVoterInLFGDungeon";
4297 return "KickTargetInLFGDungeon";
4299 return "AbandonedLFGDungeon";
4301 return "MoneySpentOnGuildRepair";
4303 return "GuildAttainedLevel";
4305 return "CreatedItemsByCastingSpell";
4307 return "FishInAnyPool";
4309 return "GuildBankTabsPurchased";
4311 return "EarnGuildAchievementPoints";
4313 return "WinAnyBattleground";
4315 return "ParticipateInAnyBattleground";
4317 return "EarnBattlegroundRating";
4319 return "GuildTabardCreated";
4321 return "CompleteQuestsCountForGuild";
4323 return "HonorableKillsForGuild";
4325 return "KillAnyCreatureForGuild";
4327 return "GroupedTankLeftEarlyInLFGDungeon";
4329 return "CompleteGuildChallenge";
4331 return "CompleteAnyGuildChallenge";
4333 return "MarkedAFKInBattleground";
4335 return "RemovedAFKInBattleground";
4337 return "StartAnyBattleground";
4339 return "CompleteAnyBattleground";
4341 return "MarkedSomeoneAFKInBattleground";
4343 return "CompletedLFRDungeon";
4345 return "AbandonedLFRDungeon";
4347 return "KickInitiatorInLFRDungeon";
4349 return "KickVoterInLFRDungeon";
4351 return "KickTargetInLFRDungeon";
4353 return "GroupedTankLeftEarlyInLFRDungeon";
4355 return "CompleteAnyScenario";
4357 return "CompleteScenario";
4359 return "EnterAreaTriggerWithActionSet";
4361 return "LeaveAreaTriggerWithActionSet";
4363 return "LearnedNewPet";
4365 return "UniquePetsOwned";
4367 return "AccountObtainPetThroughBattle";
4369 return "WinPetBattle";
4371 return "LosePetBattle";
4373 return "BattlePetReachLevel";
4375 return "PlayerObtainPetThroughBattle";
4377 return "ActivelyEarnPetLevel";
4383 return "DefeatDungeonEncounter";
4385 return "PlaceAnyGarrisonBuilding";
4387 return "PlaceGarrisonBuilding";
4389 return "ActivateAnyGarrisonBuilding";
4391 return "ActivateGarrisonBuilding";
4393 return "UpgradeGarrison";
4395 return "StartAnyGarrisonMissionWithFollowerType";
4397 return "StartGarrisonMission";
4399 return "SucceedAnyGarrisonMissionWithFollowerType";
4401 return "SucceedGarrisonMission";
4403 return "RecruitAnyGarrisonFollower";
4405 return "RecruitGarrisonFollower";
4407 return "AcquireGarrison";
4409 return "LearnAnyGarrisonBlueprint";
4411 return "LearnGarrisonBlueprint";
4413 return "LearnAnyGarrisonSpecialization";
4415 return "LearnGarrisonSpecialization";
4417 return "CollectGarrisonShipment";
4419 return "ItemLevelChangedForGarrisonFollower";
4421 return "LevelChangedForGarrisonFollower";
4425 return "LearnAnyToy";
4427 return "QualityUpgradedForGarrisonFollower";
4429 return "LearnHeirloom";
4431 return "LearnAnyHeirloom";
4433 return "EarnArtifactXP";
4435 return "AnyArtifactPowerRankPurchased";
4437 return "LearnTransmog";
4439 return "LearnAnyTransmog";
4441 return "HonorLevelIncrease";
4443 return "PrestigeLevelIncrease";
4445 return "ActivelyReachLevel";
4447 return "CompleteResearchAnyGarrisonTalent";
4449 return "CompleteResearchGarrisonTalent";
4451 return "LearnAnyTransmogInSlot";
4453 return "RecruitAnyGarrisonTroop";
4455 return "StartResearchAnyGarrisonTalent";
4457 return "StartResearchGarrisonTalent";
4459 return "CompleteAnyWorldQuest";
4461 return "EarnLicense";
4463 return "CollectTransmogSetFromGroup";
4465 return "ParagonLevelIncreaseWithFaction";
4467 return "PlayerHasEarnedHonor";
4469 return "KillCreatureScenario";
4471 return "ArtifactPowerRankPurchased";
4473 return "ChooseAnyRelicTalent";
4475 return "ChooseRelicTalent";
4477 return "EarnExpansionLevel";
4479 return "AccountHonorLevelReached";
4481 return "EarnArtifactXPForAzeriteItem";
4483 return "AzeriteLevelReached";
4485 return "MythicPlusCompleted";
4487 return "ScenarioGroupCompleted";
4489 return "CompleteAnyReplayQuest";
4491 return "BuyItemsFromVendors";
4493 return "SellItemsToVendors";
4495 return "ReachMaxLevel";
4497 return "MemorizeSpell";
4499 return "LearnTransmogIllusion";
4501 return "LearnAnyTransmogIllusion";
4503 return "EnterTopLevelArea";
4505 return "LeaveTopLevelArea";
4507 return "SocketGarrisonTalent";
4509 return "SocketAnySoulbindConduit";
4511 return "ObtainAnyItemWithCurrencyValue";
4513 return "MythicPlusRatingAttained";
4515 return "SpentTalentPoint";
4517 return "MythicPlusDisplaySeasonEnded";
4519 return "WinRatedSoloShuffleRound";
4521 return "ParticipateInRatedSoloShuffleRound";
4523 return "ReputationAmountGained";
4525 return "FulfillAnyCraftingOrder";
4527 return "FulfillCraftingOrderType";
4529 return "PerksProgramMonthComplete";
4531 return "CompleteTrackingQuest";
4533 return "GainLevels";
4535 return "CompleteQuestsCountOnAccount";
4537 return "BankTabPurchased";
4539 return "ReachRenownLevel";
4541 return "LearnTaxiNode";
4543 return "MissingType";
4555inline bool IsCriteriaTypeStoredByAsset(
CriteriaType type)
4604 if (asset && IsCriteriaTypeStoredByAsset(type))
4619 return *criteriaList;
4659 for (std::pair<uint32 const, CriteriaTree*>& criteriaTree :
_criteriaTrees)
4660 delete criteriaTree.second;
4662 for (std::pair<uint32 const, Criteria*>& criteria :
_criteria)
4663 delete criteria.second;
4665 for (std::pair<uint32 const, ModifierTreeNode*>& criteriaModifier :
_criteriaModifiers)
4666 delete criteriaModifier.second;
4675 TC_LOG_ERROR(
"server.loading",
">> Loaded 0 criteria modifiers.");
4692 for (std::pair<uint32 const, ModifierTreeNode*>& criteriaModifier :
_criteriaModifiers)
4694 parentNode->
Children.push_back(criteriaModifier.second);
4703 auto itr = map.find(tree->
ID);
4704 while (itr == map.end())
4713 itr = map.find(cur->
ID);
4716 if (itr == map.end())
4728 if (achievement->CriteriaTree)
4729 achievementCriteriaTreeIds[achievement->CriteriaTree] = achievement;
4733 if (scenarioStep->Criteriatreeid)
4734 scenarioCriteriaTreeIds[scenarioStep->Criteriatreeid] = scenarioStep;
4737 for (
auto const& [questId, quest] :
sObjectMgr->GetQuestTemplates())
4744 if (objective.ObjectID)
4745 questObjectiveCriteriaTreeIds[objective.ObjectID] = &objective;
4756 if (!achievement && !scenarioStep && !questObjective)
4760 criteriaTree->
ID = tree->ID;
4764 criteriaTree->
Entry = tree;
4770 for (std::pair<uint32 const, CriteriaTree*>
const& criteriaTree :
_criteriaTrees)
4773 parent->
Children.push_back(criteriaTree.second);
4775 if (
sCriteriaStore.HasRecord(criteriaTree.second->Entry->CriteriaID))
4781 uint32 guildCriterias = 0;
4782 uint32 scenarioCriterias = 0;
4783 uint32 questObjectiveCriterias = 0;
4798 criteria->
ID = criteriaEntry->ID;
4799 criteria->
Entry = criteriaEntry;
4804 std::vector<uint32> scenarioIds;
4819 else if (tree->ScenarioStep)
4822 scenarioIds.push_back(tree->ScenarioStep->ScenarioID);
4824 else if (tree->QuestObjective)
4832 if (IsCriteriaTypeStoredByAsset(
CriteriaType(criteriaEntry->Type)))
4835 _criteriasByAsset[criteriaEntry->Type][criteriaEntry->Asset.ID].push_back(criteria);
4839 if (!worldOverlayEntry)
4844 if (worldOverlayEntry->
AreaID[j])
4847 for (
uint8 i = 0; i < j; ++i)
4848 if (worldOverlayEntry->
AreaID[j] == worldOverlayEntry->
AreaID[i])
4866 ++scenarioCriterias;
4867 for (
uint32 scenarioId : scenarioIds)
4873 ++questObjectiveCriterias;
4877 if (criteriaEntry->StartEvent)
4880 if (criteriaEntry->FailEvent)
4884 TC_LOG_INFO(
"server.loading",
">> Loaded {} criteria, {} guild criteria, {} scenario criteria and {} quest objective criteria in {} ms.", criterias, guildCriterias, scenarioCriterias, questObjectiveCriterias,
GetMSTimeDiffToNow(oldMSTime));
4893 QueryResult result =
WorldDatabase.Query(
"SELECT criteria_id, type, value1, value2, ScriptName FROM criteria_data");
4897 TC_LOG_INFO(
"server.loading",
">> Loaded 0 additional criteria data. DB table `criteria_data` is empty.");
4905 Field* fields = result->Fetch();
4912 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` contains data for non-existing criteria (Entry: {}). Ignored.", criteria_id);
4919 if (!scriptName.empty())
4922 TC_LOG_ERROR(
"sql.sql",
"Table `criteria_data` contains a ScriptName for non-scripted data type (Entry: {}, type {}), useless data.", criteria_id, dataType);
4924 scriptId =
sObjectMgr->GetScriptId(scriptName);
4927 CriteriaData data(dataType, fields[2].GetUInt32(), fields[3].GetUInt32(), scriptId);
4943 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< 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
@ PlayerIsInTimerunningSeason
@ GroupMemberCountFromConnectedRealmEqualOrGreaterThan
@ RapidRenownCatchupActive
@ GarrisonShipmentContainerIsFull
@ PlayerExpansionLevelEqualOrGreaterThan
@ HasActiveGarrisonFollower
@ SelectionIsPlayerCorpse
@ PlayerHasTrackedCurrencyEqualOrGreaterThan
@ PlayerIsInNotOwnGarrison
@ PlayerToTargetLevelDeltaGreaterThan
@ PlayerDataFlagAccountIsSet
@ PlayerHasActiveTraitSubTree
@ PlayerMapOrCosmeticChildMap
@ HonorLevelEqualOrGreaterThan
@ PlayerHasItemQuantityIncludingBank
@ PlayerBattlegroundRatingEqualOrGreaterThan
@ PlayerHasTraitNodeEntryInActiveConfig
@ PlayerScenarioIsLastStep
@ GarrisonFollowersWithQualityEqualOrGreaterThan
@ PlayerHasCurrencyEqualOrGreaterThan
@ GarrisonFollowerHasAbility
@ ReputationWithFactionIsEqualOrGreaterThan
@ PlayerMythicPlusRunCountInCurrentExpansionEqualOrGreaterThan
@ PlayerIsQnQuestLinkedToScheduledWorldStateGroup
@ BattlePetTeamWithTypeEqualOrGreaterThan
@ PlayerDataElementCharacterBetween
@ GarrisonBuildingIsUnderConstruction
@ PlayerOffhandWeaponType
@ UniqueBattlePetsEqualOrGreaterThan
@ PlayerSummonedBattlePetSpecies
@ PlayerLanguageSkillEqualOrGreaterThan
@ PlayerDataElementAccountBetween
@ 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
@ PlayerHasCompletedQuestOrIsReadyToTurnIn
@ 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
@ TargetCreatureClassificationEqual
@ 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
@ PlayerDataFlagCharacterIsSet
@ PlayerHasCompletedCampaign
@ 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
@ CompleteQuestsCountOnAccount
@ 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::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::hours Hours
Hours 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__, message__,...)
#define TC_LOG_ERROR(filterType__, message__,...)
#define TC_LOG_INFO(filterType__, message__,...)
#define TC_LOG_TRACE(filterType__, message__,...)
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
#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
ObjectGuid const & GetGUID() 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 IsMeetingWorldStateExpression(Map const *map, WorldStateExpressionEntry const *expression)
static bool IsPlayerMeetingCondition(Player const *player, uint32 conditionId)
static uint32 GetPlayerConditionLfgValue(Player const *player, PlayerConditionLfgStatus status)
CreatureClassifications GetCreatureClassification() const
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
CriteriaTreeList const * GetCriteriaTreesByCriteria(uint32 criteriaId) const
CriteriaListByAsset _criteriasByAsset[size_t(CriteriaType::Count)]
static CriteriaMgr * Instance()
void LoadCriteriaModifiersTree()
CriteriaDataSet const * GetCriteriaDataSet(Criteria const *criteria) const
static std::span< CriteriaType const > GetRetroactivelyUpdateableCriteriaTypes()
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.
uint32 GetUInt32() const noexcept
std::string_view GetStringView() const noexcept
uint8 GetUInt8() const noexcept
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
GroupRefManager & GetMembers()
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 bool InDbPhaseShift(WorldObject const *object, uint8 phaseUseFlags, uint16 phaseId, uint32 phaseGroupId)
ChrSpecialization GetPrimarySpecialization() const
UF::UpdateField< UF::PlayerData, int32(WowCS::EntityFragment::CGObject), TYPEID_PLAYER > m_playerData
uint32 GetHonorLevel() const
uint32 GetCustomizationChoice(uint32 chrCustomizationOptionId) const
UF::PVPInfo const * GetPvpInfoForBracket(int8 bracket) const
bool HasDataFlagAccount(uint32 dataFlagId) 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
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
UF::UpdateField< UF::ActivePlayerData, int32(WowCS::EntityFragment::CGObject), TYPEID_ACTIVE_PLAYER > m_activePlayerData
bool GetQuestRewardStatus(uint32 quest_id) const
bool HasRaceChanged() const
bool HasDataFlagCharacter(uint32 dataFlagId) const
uint16 FindQuestSlot(uint32 quest_id) const
UF::TraitConfig const * GetTraitConfig(int32 configId) const
bool HasCurrency(uint32 id, uint32 amount) const
uint8 GetCharacterBankTabCount() const
uint8 GetBankBagSlotCount() const
bool InBattleground() const
Item * GetItemByEntry(uint32 entry, ItemSearchLocation where=ItemSearchLocation::Default) const
bool IsQuestCompletedBitSet(uint32 questId) 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
uint8 GetAccountBankTabCount() const
uint16 GetBaseSkillValue(uint32 skill) const
PlayerSpellMap const & GetSpellMap() const
uint16 GetPureMaxSkillValue(uint32 skill) const
std::variant< int64, float > GetDataElementAccount(uint32 dataElementId) 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
std::variant< int64, float > GetDataElementCharacter(uint32 dataElementId) 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
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
int32 FindIndexIf(Pred pred) const
float GetHealthPct() const
bool CanHaveThreatList() const
====================== THREAT & COMBAT ====================
ThreatManager & GetThreatManager()
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
UF::UpdateField< UF::UnitData, int32(WowCS::EntityFragment::CGObject), TYPEID_UNIT > m_unitData
bool HealthAbovePct(float pct) 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
uint32 GetMinorMajorBugfixVersionForBuild(uint32 build)
bool IsDisabledFor(DisableType type, uint32 entry, WorldObject const *ref, uint8 flags)
WowTime const * GetWowTime()
std::vector< int32 > GetAllBonusListsForTree(uint32 itemBonusTreeId)
TC_GAME_API bool IsQuestLineQuestActiveForPlayer(uint32 questLineId, Player const *player)
TC_GAME_API bool IsQuestLineCompletedByPlayer(uint32 questLineId, Player const *player)
TC_GAME_API bool IsCampaignCompletedByPlayer(uint32 campaignId, Player const *player)
TC_GAME_API bool IsQuestLineQuestAvailableForPlayer(uint32 questLineId, Player const *player)
TC_GAME_API QuestLineStats GetQuestLineStatsForPlayer(uint32 questLineId, Player const *player)
auto MapGetValuePtr(M &map, typename M::key_type const &key)
TC_GAME_API int32 GetValue(int32 worldStateId, Map const *map)
@ 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::@5::@9 Health
struct CriteriaData::@5::@8 ClassRace
struct CriteriaData::@5::@22 GameEvent
CriteriaDataType DataType
struct CriteriaData::@5::@12 Level
struct CriteriaData::@5::@21 KnownTitle
struct CriteriaData::@5::@19 EquippedItem
struct CriteriaData::@5::@23 ItemQuality
struct CriteriaData::@5::@16 Drunk
bool IsValid(Criteria const *criteria)
bool Meets(uint32 criteriaId, Player const *source, WorldObject const *target, uint32 miscValue1=0, uint32 miscValue2=0) const
struct CriteriaData::@5::@14 MapPlayers
struct CriteriaData::@5::@17 Holiday
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(uint32 raceId) const
uint32 ChrCustomizationChoiceID
UpdateField< uint32, 0, 11 > PvpTierID
UpdateField< uint32, 0, 12 > WeeklyBestWinPvpTierID
UpdateField< int32, 4, 6 > Type
DynamicUpdateField< UF::TraitEntry, 0, 1 > Entries
UpdateField< int32, 0, 3 > ID
DynamicUpdateField< UF::TraitSubTreeCache, 0, 2 > SubTrees
UpdateField< int32, 8, 10 > CombatConfigFlags
UpdateField< uint32, 0, 8 > ItemModifiedAppearanceID
UpdateField< int32, 0, 3 > ItemID
std::array< uint32, MAX_WORLD_MAP_OVERLAY_AREA_IDX > AreaID
int32 EnviromentalDamageType
int32 AreaTriggerActionSetID