Core/Achievements: Defined all modifier tree types and implemented many of them

Port From (https://github.com/TrinityCore/TrinityCore/commit/d0be92ec0ad0334c38b4073a7e24a571982b17da)
This commit is contained in:
hondacrx
2021-06-07 13:13:46 -04:00
parent 9c58042e07
commit 1941148d8f
18 changed files with 1677 additions and 674 deletions
+324 -312
View File
@@ -91,319 +91,331 @@ namespace Framework.Constants
QuestObjective = 0x10
}
public enum CriteriaAdditionalCondition
public enum ModifierTreeType
{
SourceDrunkValue = 1,
SourcePlayerCondition = 2,
ItemLevel = 3,
TargetCreatureEntry = 4,
TargetMustBePlayer = 5,
TargetMustBeDead = 6,
TargetMustBeEnemy = 7,
SourceHasAura = 8,
SourceHasAuraType = 9,
TargetHasAura = 10,
TargetHasAuraType = 11,
SourceAuraState = 12,
TargetAuraState = 13,
ItemQualityMin = 14,
ItemQualityEquals = 15,
SourceIsAlive = 16,
SourceAreaOrZone = 17,
TargetAreaOrZone = 18,
//Unk19 = 19,
MapDifficultyOld = 20,
TargetCreatureYieldsXp = 21, // Nyi
SourceLevelAboveTarget = 22,
SourceLevelEqualTarget = 23,
ArenaType = 24,
SourceRace = 25,
SourceClass = 26,
TargetRace = 27,
TargetClass = 28,
MaxGroupMembers = 29,
TargetCreatureType = 30,
TargetCreatureFamily = 31,
SourceMap = 32,
ClientVersion = 33,
BattlePetTeamLevel = 34,
NotInGroup = 35,
InGroup = 36,
MinPersonalRating = 37, // Nyi
TitleBitIndex = 38,
SourceLevel = 39,
TargetLevel = 40,
SourceZone = 41,
TargetZone = 42,
SourceHealthPctLower = 43,
SourceHealthPctGreater = 44,
SourceHealthPctEqual = 45,
TargetHealthPctLower = 46,
TargetHealthPctGreater = 47,
TargetHealthPctEqual = 48,
SourceHealthLower = 49,
SourceHealthGreater = 50,
SourceHealthEqual = 51,
TargetHealthLower = 52,
TargetHealthGreater = 53,
TargetHealthEqual = 54,
TargetPlayerCondition = 55,
MinAchievementPoints = 56,
InLfgDungeon = 57,
InLfgRandomDungeon = 58,
InLfgFirstRandomDungeon = 59,
//Unk60 = 60, // Nyi
RequiresGuildGroup = 61, // Nyi
GuildReputation = 62,
RatedBattleground = 63, // Nyi
RatedBattlegroundRating = 64,
ProjectRarity = 65,
ProjectRace = 66,
WorldStateExpression = 67,
MapDifficulty = 68,
SourceLevelGreater = 69,
TargetLevelGreater = 70,
SourceLevelLower = 71,
TargetLevelLower = 72,
ModifierTree = 73,
ScenarioId = 74,
TheTillersReputation = 75,
PetBattleAchievementPoints = 76, // Nyi
//Unk77 = 77, // Nyi
BattlePetFamily = 78, // Nyi
BattlePetHealthPct = 79, // Nyi
GuildGroupMembers = 80, // Nyi
BattlePetEntry = 81, // Nyi
ScenarioStepIndex = 82,
ChallengeModeMedal = 83, // Nyi
IsOnQuest = 84,
ExaltedWithFaction = 85, // Nyi
HasAchievement = 86,
HasAchievementOnCharacter = 87, // Nyi
CloudSerpentReputation = 88,
BattlePetBreedQualityId = 89, // Nyi
PetBattleIsPvp = 90, // Nyi
BattlePetSpecies = 91,
ActiveExpansion = 92,
//Unk93 = 93, // Nyi
FriendshipRepReaction = 94, // Nyi
FactionStanding = 95,
ItemClassAndSubclass = 96, // Nyi
SourceSex = 97,
SourceNativeSex = 98,
Skill = 99,
//Unk100 = 100, // Nyi
NormalPhaseShift = 101,
InPhase = 102,
NotInPhase = 103,
HasSpell = 104,
ItemCount = 105,
AccountExpansion = 106,
SourceHasAuraLabel = 107, // Nyi, Spelllabel
//Unk108 = 108, // Nyi
TimeInRange = 109, // Nyi, Packed Time Between Asset And Secondaryasset
RewardedQuest = 110,
CompletedQuest = 111,
CompletedQuestObjective = 112, // Questobjectiveid
ExploredArea = 113,
ItemCountIncludingBank = 114,
//Unk115 = 115, // Nyi
SourcePvpFactionIndex = 116,
LfgValueEqual = 117,
LfgValueGreater = 118,
CurrencyAmount = 119,
//Unk120 = 120, // Nyi
CurrencyTrackedAmount = 121,
MapInstanceType = 122,
Mentor = 123,
//Unk124 = 124, // Nyi
//Unk125 = 125, // Nyi
GarrisonLevelAbove = 126, // Asset: Garrlevel, Secondaryasset: Garrtype
GarrisonFollowersAboveLevel = 127, // Asset: Count, Secondaryasset: Followerlevel, Tertiaryasset: Garrtype
GarrisonFollowersAboveQuality = 128, // Asset: Count, Secondaryasset: Followerquality, Tertiaryasset: Garrtype
GarrisonFollowerAboveLevelWithAbility = 129, // Asset: Followerlevel, Secondaryasset: Ability, Tertiaryasset: Garrtype
GarrisonFollowerAboveLevelWithTrait = 130, // Asset: Followerlevel, Secondaryasset: Ability, Tertiaryasset: Garrtype (Same As Above But Ability Must Have GarrisonAbilityFlagTrait)
GarrisonFollowerWithAbilityInBuilding = 131, // Asset: Ability, Secondaryasset: Buildingtype, Tertiaryasset: Garrtype
GarrisonFollowerWithTraitInBuilding = 132, // Asset: Ability, Secondaryasset: Buildingtype, Tertiaryasset: Garrtype
GarrisonFollowerAboveLevelInBuilding = 133, // Asset: Followerlevel, Secondaryasset: Buildingtype, Tertiaryasset: Garrtype
GarrisonBuildingAboveLevel = 134, // Asset: Buildingtype, Secondaryasset: Buildinglevel, Tertiaryasset: Garrtype
GarrisonBlueprint = 135, // Nyi
//Unk136 = 136, // Nyi
//Unk137 = 137, // Nyi
//Unk138 = 138, // Nyi
//Unk139 = 139, // Nyi
GarrisonBuildingInactive = 140,
//Unk141 = 141, // Nyi
GarrisonBuildingEqualLevel = 142, // Asset: Buildingtype, Secondaryasset: Buildinglevel, Tertiaryasset: Garrtype
GarrisonFollowerWithAbility = 143, // Asset: Ability, Secondaryasset: Garrtype
GarrisonFollowerWithTrait = 144, // Asset: Ability, Secondaryasset: Garrtype
GarrisonFollowerAboveQualityWod = 145, // Asset: Followerquality
GarrisonFollowerEqualLevel = 146, // Asset: Followerlevel, Secondaryasset: Garrtype
GarrisonRareMission = 147, // Nyi
//Unk148 = 148, // Nyi
GarrisonBuildingLevel = 149, // Nyi
//Unk150 = 150, // Nyi
BattlePetSpeciesInTeam = 151, // Asset: Count, Secondaryasset: Battlepetspeciesid
BattlePetFamilyInTeam = 152, // Asset: Count, Secondaryasset: Battlepetfamily
//Unk153 = 153, // Nyi
//Unk154 = 154, // Nyi
//Unk155 = 155, // Nyi
//Unk156 = 156, // Nyi
GarrisonFollowerId = 157, // Follower With Id, In Any Garrison
QuestObjectiveProgressEqual = 158, // Nyi Asset: Questobjectiveid, Secondaryasset: Progress
QuestObjectiveProgressAbove = 159, // Nyi Asset: Questobjectiveid, Secondaryasset: Progress
//Unk160 = 160, // Nyi
//Unk161 = 161, // Nyi
//Unk162 = 162, // Nyi
//Unk163 = 163, // Nyi
//Unk164 = 164, // Nyi
//Unk165 = 165, // Nyi
//Unk166 = 166, // Nyi
GarrisonMissionType = 167, // Nyi
GarrisonFollowerAboveItemLevel = 168, // Asset: Followeritemlevel
GarrisonFollowersAboveItemLevel = 169, // Asset: Count, Secondaryasset: Followeritemlevel, Tertiaryasset: Garrtype
GarrisonLevelEqual = 170, // Asset: Count
GarrisonGroupSize = 171, // Nyi
//Unk172 = 172, // Nyi Something To Do With Currency But Only Used On Criterias That Require The Same Currency
TargetingCorpse = 173,
//Unk174 = 174, // Nyi
GarrisonFollowersLevelEqual = 175, // Asset: Count, Secondaryasset: Followerlevel, Tertiaryasset: Garrtype
GarrisonFollowerIdInBuilding = 176, // Asset: Followerid, Secondaryasset: Buildingtype
//Unk177 = 177, // Nyi
//Unk178 = 178, // Nyi
WorldPvpArea = 179, // Nyi
NonOwnGarrison = 180, // Nyi
//Unk181 = 181, // Nyi
//Unk182 = 183, // Nyi
//Unk183 = 183, // Nyi
GarrisonFollowersItemLevelAbove = 184,
//Unk185 = 185, // Nyi
//Unk186 = 186, // Nyi
GarrisonFollowerType = 187, // Nyi
UsedLevelBoostLessThanTwoHoursAgo = 188, // Nyi
//Unk189 = 189, // Nyi
//Unk190 = 190, // Nyi
//Unk191 = 191, // Nyi
//Unk192 = 192, // Nyi
HonorLevel = 193,
PrestigeLevel = 194,
//Unk195 = 195, // Nyi
//Unk196 = 196, // Nyi
//Unk197 = 197, // Nyi
//Unk198 = 198, // Nyi
//Unk198 = 199, // Nyi
ItemModifiedAppearance = 200,
GarrisonSelectedTalent = 201, // Nyi Asset: Garrtalentid (Talent Selected, Research Timer Doesn'T Matter)
GarrisonResearchedTalent = 202, // Nyi Asset: Garrtalentid (Talent Selected, Research Must Be Finished)
HasCharacterRestrictions = 203,
//Unk204 = 204, // Nyi
//Unk205 = 205, // Nyi
QuestInfoId = 206,
GarrisonResearchingTalent = 207, // Nyi Asset: Garrtalentid (Talent Selected, Research Must Be In Progress)
ArtifactAppearanceSetUsed = 208,
CurrencyAmountEqual = 209,
//Unk210 = 210, // Nyi
ScenarioType = 211,
AccountExpansionEqual = 212,
//Unk213 = 213, // Nyi
//Unk214 = 214, // Nyi
//Unk215 = 215, // Nyi
ChallengeModeMedal2 = 216, // Nyi Keystone Master, Asset = 3
//Unk217 = 217, // Nyi
//Unk218 = 218, // Nyi
//Unk219 = 219, // Nyi
//Unk220 = 220, // Nyi
//Unk221 = 221, // Nyi
//Unk222 = 222, // Nyi
//Unk223 = 223, // Nyi
//Unk224 = 224, // Nyi
//Unk225 = 225, // Nyi
UsedLevelBoost = 226, // Nyi
UsedRaceChange = 227, // Nyi
UsedFactionChange = 228, // Nyi
//Unk229 = 229, // Nyi
//Unk230 = 230, // Nyi
AchievementGloballyIncompleted = 231, // Hall Of Fame Stuff, Asset: Unk, Secondaryasset: Achievementid
MainHandVisibleSubclass = 232,
OffHandVisibleSubclass = 233,
PvpTier = 234, // Nyi Asset: Pvptierid
AzeriteItemLevel = 235,
//Unk236 = 236, // Nyi
//Unk237 = 237, // Nyi
//Unk238 = 238, // Nyi
PvpTierGreater = 239, // Nyi Asset: Pvptierenum, Secondaryasset: Pvpbracket
//Unk240 = 240, // Nyi
//Unk241 = 241, // Nyi
//Unk242 = 242, // Nyi
//Unk243 = 243, // Nyi
//Unk244 = 244, // Nyi
InWarMode = 245,
//Unk246 = 246, // Nyi
KeystoneLevel = 247, // Nyi
//Unk248 = 248, // Nyi
KeystoneDungeon = 249, // Nyi Asset: Mapchallengemodeid
//Unk250 = 250, // Nyi
PvpSeason = 251, // Nyi Asset: That Unknown Column In Pvpseason.Db2
SourceDisplayRace = 252,
TargetDisplayRace = 253,
FriendshipRepReactionExact = 254, // Nyi
SourceAuraCountEqual = 255,
TargetAuraCountEqual = 256,
SourceAuraCountGreater = 257,
TargetAuraCountGreater = 258,
UnlockedAzeriteEssenceRankLower = 259,
UnlockedAzeriteEssenceRankEqual = 260,
UnlockedAzeriteEssenceRankGreater = 261,
SourceHasAuraEffectIndex = 262, // Asset: Spellid, Secondaryasset: Index
SourceSpecializationRole = 263,
SourceLevel120 = 264,
//Unk265 = 265,
SelectedAzeriteEssenceRankLower = 266,
SelectedAzeriteEssenceRankGreater = 267,
SourceLevelInRangeCt = 268,
TargetLevelInRangeCt = 269,
//Unk270 = 270,
//Unk271 = 271,
SourceLevelGreaterCt = 272, // Compare Levels Using Content Tuning
TargetLevelGreaterCt = 273, // Compare Levels Using Content Tuning
//Unk274 = 274,
//Unk275 = 275,
//Unk276 = 276,
RafRecruitInParty = 277, // NYI
//Unk278 = 278,
//Unk279 = 279,
MapOrCosmeticMap = 280,
//Unk281 = 281,
HasEntitlement = 282, // NYI
HasQuestSession = 283, // NYI
//Unk284 = 284,
//Unk285 = 285,
//Unk286 = 286,
//Unk287 = 287,
Covenant = 288,
//Unk289 = 289, // Related To Pvp Ranking
PermanentAnimaDiversionTalent = 290, // NYI
Soulbind = 291,
//Unk292 = 292,
SourceAreaOrZoneInGroup = 293,
//Unk294 = 294,
//Unk295 = 295,
//Unk296 = 296,
//Unk297 = 297,
//Unk298 = 298,
//Unk299 = 299,
SourceInSpecificChromieTime = 300,
SourceInAnyChromieTime = 301,
//Unk302 = 302,
SourceRuneforgeLegendaryKnown = 303,
//Unk304 = 304,
//Unk305 = 305,
//Unk306 = 306,
SoulbindConduitRank = 307, // NYI
ShapeshiftFormCustomizationDisplay = 308,
SoulbindMinConduitsAtRank = 309, // NYI
IsRestrictedAccount = 310, // NYI
SourceFlying = 311,
None = 0, // No modifier
PlayerInebriationLevelEqualOrGreaterThan = 1, // Player inebriation level is {#Drunkenness} or more
PlayerMeetsCondition = 2, // Player meets condition "{PlayerCondition}"
MinimumItemLevel = 3, // Minimum item level is {#Item Level}
TargetCreatureId = 4, // Target is NPC "{Creature}"
TargetIsPlayer = 5, // Target is player
TargetIsDead = 6, // Target is dead
TargetIsOppositeFaction = 7, // Target is opposite faction
PlayerHasAura = 8, // Player has aura "{Spell}"
PlayerHasAuraEffect = 9, // Player has aura effect "{SpellAuraNames.EnumID}"
TargetHasAura = 10, // Target has aura "{Spell}"
TargetHasAuraEffect = 11, // Target has aura effect "{SpellAuraNames.EnumID}"
TargetHasAuraState = 12, // Target has aura state "{$Aura State}"
PlayerHasAuraState = 13, // Player has aura state "{$Aura State}"
ItemQualityIsAtLeast = 14, // Item quality is at least {$Item Quality}
ItemQualityIsExactly = 15, // Item quality is exactly {$Item Quality}
PlayerIsAlive = 16, // Player is alive
PlayerIsInArea = 17, // Player is in area "{AreaTable}"
TargetIsInArea = 18, // Target is in area "{AreaTable}"
ItemId = 19, // Item is "{Item}"
LegacyDungeonDifficulty = 20, // Legacy dungeon difficulty is "{$Dungeon Difficulty}"
PlayerToTargetLevelDeltaGreaterThan = 21, // Exceeds the target's level by {#Level Delta} levels
TargetToPlayerLevelDeltaGreaterThan = 22, // Target exceeds your level by {#Level Delta} levels
PlayerLevelEqualTargetLevel = 23, // You and the target are equal level
PlayerInArenaWithTeamSize = 24, // Player is in an arena with team size {#Team Size}
PlayerRace = 25, // Player race is "{ChrRaces}"
PlayerClass = 26, // Player class is "{ChrClasses}"
TargetRace = 27, // Target race is "{ChrRaces}"
TargetClass = 28, // Target class is "{ChrClasses}"
LessThanTappers = 29, // Less than {#Tappers} tappers
CreatureType = 30, // Creature is type "{CreatureType}"
CreatureFamily = 31, // Creature is family "{CreatureFamily}"
PlayerMap = 32, // Player is on map "{Map}"
ClientVersionEqualOrLessThan = 33, // Milestone is at or before "{WowStaticSchemas}"
BattlePetTeamLevel = 34, // All three winning battle pets are at or above level {#Battle Pet Level}
PlayerIsNotInParty = 35, // Player is not in a party
PlayerIsInParty = 36, // Player is in a party
HasPersonalRatingEqualOrGreaterThan = 37, // Has a Personal Rating of at least {#Personal Rating}
HasTitle = 38, // Has title "{CharTitles.Mask_ID}"
PlayerLevelEqual = 39, // Player is exactly level {#Level}
TargetLevelEqual = 40, // Target is exactly level {#Level}
PlayerIsInZone = 41, // Player is in top-level area "{AreaTable}"
TargetIsInZone = 42, // Target is in top-level area "{AreaTable}"
PlayerHealthBelowPercent = 43, // Player health below {#Percent}%
PlayerHealthAbovePercent = 44, // Player health above {#Percent}%
PlayerHealthEqualsPercent = 45, // Player health equals {#Percent}%
TargetHealthBelowPercent = 46, // Target health below {#Percent}%
TargetHealthAbovePercent = 47, // Target health above {#Percent}%
TargetHealthEqualsPercent = 48, // Target health equals {#Percent}%
PlayerHealthBelowValue = 49, // Player health below {#Hit Points} HP
PlayerHealthAboveValue = 50, // Player health above {#Hit Points} HP
PlayerHealthEqualsValue = 51, // Player health equals {#Hit Points} HP
TargetHealthBelowValue = 52, // Target health below {#Hit Points} HP
TargetHealthAboveValue = 53, // Target health above {#Hit Points} HP
TargetHealthEqualsValue = 54, // Target health equals {#Hit Points} HP
TargetIsPlayerAndMeetsCondition = 55, // Target is a player with condition "{PlayerCondition}"
PlayerHasMoreThanAchievementPoints = 56, // Player has over {#Achievement Pts} achievement points
PlayerInLfgDungeon = 57, // Player is in a LFG dungeon
PlayerInRandomLfgDungeon = 58, // Player is in a random LFG dungeon
PlayerInFirstRandomLfgDungeon = 59, // Player is in a first random LFG dungeon
PlayerInRankedArenaMatch = 60, // Player is in a ranked arena match
PlayerInGuildParty = 61, /*NYI*/ // Player is in a guild party
PlayerGuildReputationEqualOrGreaterThan = 62, // Player has guild reputation of {#Guild Reputation} or more
PlayerInRatedBattleground = 63, // Player is in rated battleground
PlayerBattlegroundRatingEqualOrGreaterThan = 64, // Player has a battleground rating of {#Battleground Rating} or more
ResearchProjectRarity = 65, /*NYI*/ // Research project rarity is "{$Project Rarity}"
ResearchProjectBranch = 66, /*NYI*/ // Research project is in branch "{ResearchBranch}"
WorldStateExpression = 67, // World state expression "{WorldStateExpression}" is true
DungeonDifficulty = 68, // Dungeon difficulty is "{Difficulty}"
PlayerLevelEqualOrGreaterThan = 69, // Player level is {#Level} or more
TargetLevelEqualOrGreaterThan = 70, // Target level is {#Level} or more
PlayerLevelEqualOrLessThan = 71, // Player level is {#Level} or less
TargetLevelEqualOrLessThan = 72, // Target level is {#Level} or less
ModifierTree = 73, // Modifier tree "{ModifierTree}" is also true
PlayerScenario = 74, // Player is on scenario "{Scenario}"
TillersReputationGreaterThan = 75, // Reputation with Tillers is above {#Reputation}
BattlePetAchievementPointsEqualOrGreaterThan = 76, // Battle pet achievement points are at least {#Achievement Pts}
UniqueBattlePetsEqualOrGreaterThan = 77, // (Account) At least {#Pets Known} unique pets known
BattlePetType = 78, // Battlepet is of type "{$Battle Pet Types}"
BattlePetHealthPercentLessThan = 79, /*NYI*/ // (Account) Battlepet's health is below {#Health Percent} percent
GuildGroupMemberCountEqualOrGreaterThan = 80, // Be in a group with at least {#Members} guild members
BattlePetOpponentCreatureId = 81, /*NYI*/ // Battle pet opponent is "{Creature}"
PlayerScenarioStep = 82, // Player is on scenario step number {#Step Number}
ChallengeModeMedal = 83, // Challenge mode medal earned is "{#Challenge Mode Medal(OBSOLETE)}" (OBSOLETE)
PlayerOnQuest = 84, // Player is currently on the quest "{QuestV2}"
ExaltedWithFaction = 85, // Reach exalted with "{Faction}"
EarnedAchievementOnAccount = 86, // Earned achievement "{Achievement}" on this account
EarnedAchievementOnPlayer = 87, // Earned achievement "{Achievement}" on this player
OrderOfTheCloudSerpentReputationGreaterThan = 88, // Reputation with Order of the Cloud Serpent is above {#Reputation}
BattlePetQuality = 89, /*NYI*/ // Battle pet is of quality "{BattlePetBreedQuality}"
BattlePetFightWasPVP = 90, /*NYI*/ // Battle pet fight was PVP
BattlePetSpecies = 91, // Battle pet is species type "{BattlePetSpecies}"
ServerExpansionEqualOrGreaterThan = 92, // Server expansion level is "{$Expansion Level}" or higher
PlayerHasBattlePetJournalLock = 93, // Player has battle pet journal lock
FriendshipRepReactionIsMet = 94, // Friendship rep reaction "{FriendshipRepReaction}" is met
ReputationWithFactionIsEqualOrGreaterThan = 95, // Reputation with "{Faction}" is {#Reputation} or more
ItemClassAndSubclass = 96, // Item is class "{ItemClass.ClassID}", subclass "{^ItemSubclass.SubclassID:ItemSubclass.ClassID = ?}"
PlayerGender = 97, // Player's gender is "{$Gender}"
PlayerNativeGender = 98, // Player's native gender is "{$Gender}"
PlayerSkillEqualOrGreaterThan = 99, // Player skill "{SkillLine}" is level {#Skill Level} or higher
PlayerLanguageSkillEqualOrGreaterThan = 100, // Player language "{Languages}" is level {#Language Level} or higher
PlayerIsInNormalPhase = 101, // Player is in normal phase
PlayerIsInPhase = 102, // Player is in phase "{Phase}"
PlayerIsInPhaseGroup = 103, // Player is in phase group "{PhaseGroup}"
PlayerKnowsSpell = 104, // Player knows spell "{Spell}"
PlayerHasItemQuantity = 105, // Player is carrying item "{Item}", quantity {#Quantity}
PlayerExpansionLevelEqualOrGreaterThan = 106, // Player expansion level is "{$Expansion Level}" or higher
PlayerHasAuraWithLabel = 107, // Player has aura with label {Label}
PlayersRealmWorldState = 108, // Player's realm state "{WorldState}" equals {#Value}
TimeBetween = 109, // Time is between "{/Begin Date}" and "{/End Date}"
PlayerHasCompletedQuest = 110, // Player has previously completed quest "{QuestV2}"
PlayerIsReadyToTurnInQuest = 111, // Player is ready to turn in quest "{QuestV2}"
PlayerHasCompletedQuestObjective = 112, // Player has completed Quest Objective "{QuestObjective}"
PlayerHasExploredArea = 113, // Player has explored area "{AreaTable}"
PlayerHasItemQuantityIncludingBank = 114, // Player or bank has item "{Item}", quantity {#Quantity}
Weather = 115, // Weather is "{Weather}"
PlayerFaction = 116, // Player faction is {$Player Faction}
LfgStatusEqual = 117, // Looking-for-group status "{$LFG Status}" equals {#Value}
LFgStatusEqualOrGreaterThan = 118, // Looking-for-group status "{$LFG Status}" is {#Value} or more
PlayerHasCurrencyEqualOrGreaterThan = 119, // Player has currency "{CurrencyTypes}" in amount {#Amount} or more
TargetThreatListSizeLessThan = 120, // Player Killed creature with less than "{#Targets}" threat list targets
PlayerHasTrackedCurrencyEqualOrGreaterThan = 121, // Player has currency "{CurrencyTypes}" tracked (per season) in amount {#Amount} or more
PlayerMapInstanceType = 122, // Player is on a map of type "{@INSTANCE_TYPE}"
PlayerInTimeWalkerInstance = 123, // Player was in a Time Walker instance
PvpSeasonIsActive = 124, // PVP season is active
PvpSeason = 125, // Current PVP season is {#Season}
GarrisonTierEqualOrGreaterThan = 126, // Garrison is tier {#Tier} or higher for garrison type "{GarrType}"
GarrisonFollowersWithLevelEqualOrGreaterThan = 127, // At least {#Followers} followers of at least level {#Level} for follower type "{GarrFollowerType}"
GarrisonFollowersWithQualityEqualOrGreaterThan = 128, // At least {#Followers} followers at least quality "{@GARR_FOLLOWER_QUALITY}" for follower type "{GarrFollowerType}"
GarrisonFollowerWithAbilityAtLevelEqualOrGreaterThan = 129, // Follower of at least level {#Level} has ability {GarrAbility} for follower type "{GarrFollowerType}"
GarrisonFollowerWithTraitAtLevelEqualOrGreaterThan = 130, // Follower of at least level {#Level} has trait {GarrAbility} for follower type "{GarrFollowerType}"
GarrisonFollowerWithAbilityAssignedToBuilding = 131, // Follower with ability "{GarrAbility}" is assigned to building type "{@GARRISON_BUILDING_TYPE}" for garrison type "{GarrType}"
GarrisonFollowerWithTraitAssignedToBuilding = 132, // Follower with trait "{GarrAbility}" is assigned to building type "{@GARRISON_BUILDING_TYPE}" for garrison type "{GarrType}"
GarrisonFollowerWithLevelAssignedToBuilding = 133, // Follower at least level {#Level} is assigned to building type "{@GARRISON_BUILDING_TYPE}" for garrison type "GarrType}"
GarrisonBuildingWithLevelEqualOrGreaterThan = 134, // Building "{@GARRISON_BUILDING_TYPE}" is at least level {#Level} for garrison type "{GarrType}"
HasBlueprintForGarrisonBuilding = 135, // Has blueprint for garrison building "{GarrBuilding}" of type "{GarrType}"
HasGarrisonBuildingSpecialization = 136, // Has garrison building specialization "{GarrSpecialization}"
AllGarrisonPlotsAreFull = 137, // All garrison type "{GarrType}" plots are full
PlayerIsInOwnGarrison = 138, // Player is in their own garrison
GarrisonShipmentOfTypeIsPending = 139, /*NYI*/ // Shipment of type "{CharShipmentContainer}" is pending
GarrisonBuildingIsUnderConstruction = 140, // Garrison building "{GarrBuilding}" is under construction
GarrisonMissionHasBeenCompleted = 141, /*NYI*/ // Garrison mission "{GarrMission}" has been completed
GarrisonBuildingLevelEqual = 142, // Building {@GARRISON_BUILDING_TYPE} is exactly level {#Level} for garrison type "{GarrType}"
GarrisonFollowerHasAbility = 143, // This follower has ability "{GarrAbility}" for garrison type "{GarrType}"
GarrisonFollowerHasTrait = 144, // This follower has trait "{GarrAbility}" for garrison type "{GarrType}"
GarrisonFollowerQualityEqual = 145, // This Garrison Follower is {@GARR_FOLLOWER_QUALITY} quality
GarrisonFollowerLevelEqual = 146, // This Garrison Follower is level {#Level}
GarrisonMissionIsRare = 147, /*NYI*/ // This Garrison Mission is Rare
GarrisonMissionIsElite = 148, /*NYI*/ // This Garrison Mission is Elite
CurrentGarrisonBuildingLevelEqual = 149, // This Garrison Building is level {#Level} - building type passed as argument
GarrisonPlotInstanceHasBuildingThatIsReadyToActivate = 150, // Garrison plot instance "{GarrPlotInstance}" has building that is ready to activate
BattlePetTeamWithSpeciesEqualOrGreaterThan = 151, // Battlepet: with at least {#Amount} "{BattlePetSpecies}"
BattlePetTeamWithTypeEqualOrGreaterThan = 152, // Battlepet: with at least {#Amount} pets of type "{$Battle Pet Types}"
PetBattleLastAbility = 153, /*NYI*/ // Battlepet: last ability was "{BattlePetAbility}"
PetBattleLastAbilityType = 154, /*NYI*/ // Battlepet: last ability was of type "{$Battle Pet Types}"
BattlePetTeamWithAliveEqualOrGreaterThan = 155, // Battlepet: with at least {#Alive} alive
HasGarrisonBuildingActiveSpecialization = 156, // Has Garrison building active specialization "{GarrSpecialization}"
HasGarrisonFollower = 157, // Has Garrison follower "{GarrFollower}"
PlayerQuestObjectiveProgressEqual = 158, // Player's progress on Quest Objective "{QuestObjective}" is equal to {#Value}
PlayerQuestObjectiveProgressEqualOrGreaterThan = 159, // Player's progress on Quest Objective "{QuestObjective}" is at least {#Value}
IsPTRRealm = 160, // This is a PTR Realm
IsBetaRealm = 161, // This is a Beta Realm
IsQARealm = 162, // This is a QA Realm
GarrisonShipmentContainerIsFull = 163, /*NYI*/ // Shipment Container "{CharShipmentContainer}" is full
PlayerCountIsValidToStartGarrisonInvasion = 164, // Player count is valid to start garrison invasion
InstancePlayerCountEqualOrLessThan = 165, // Instance has at most {#Players} players
AllGarrisonPlotsFilledWithBuildingsWithLevelEqualOrGreater = 166, // All plots are full and at least level {#Level} for garrison type "{GarrType}"
GarrisonMissionType = 167, /*NYI*/ // This mission is type "{GarrMissionType}"
GarrisonFollowerItemLevelEqualOrGreaterThan = 168, // This follower is at least item level {#Level}
GarrisonFollowerCountWithItemLevelEqualOrGreaterThan = 169, // At least {#Followers} followers are at least item level {#Level} for follower type "{GarrFollowerType}"
GarrisonTierEqual = 170, // Garrison is exactly tier {#Tier} for garrison type "{GarrType}"
InstancePlayerCountEqual = 171, // Instance has exactly {#Players} players
CurrencyId = 172, // The currency is type "{CurrencyTypes}"
SelectionIsPlayerCorpse = 173, // Target is player corpse
PlayerCanAcceptQuest = 174, // Player is currently eligible for quest "{QuestV2}"
GarrisonFollowerCountWithLevelEqualOrGreaterThan = 175, // At least {#Followers} followers exactly level {#Level} for follower type "{GarrFollowerType}"
GarrisonFollowerIsInBuilding = 176, // Garrison follower "{GarrFollower}" is in building "{GarrBuilding}"
GarrisonMissionCountLessThan = 177, /*NYI*/ // Player has less than {#Available} available and {#In-Progress} in-progress missions of garrison type "{GarrType}"
GarrisonPlotInstanceCountEqualOrGreaterThan = 178, // Player has at least {#Amount} instances of plot "{GarrPlot}" available
CurrencySource = 179, /*NYI*/ // Currency source is {$Currency Source}
PlayerIsInNotOwnGarrison = 180, // Player is in another garrison (not their own)
HasActiveGarrisonFollower = 181, // Has active Garrison follower "{GarrFollower}"
PlayerDailyRandomValueMod_X_Equals = 182, /*NYI*/ // Player daily random value mod {#Mod Value} equals {#Equals Value}
PlayerHasMount = 183, // Player has Mount "{Mount}"
GarrisonFollowerCountWithInactiveWithItemLevelEqualOrGreaterThan = 184, // At least {#Followers} followers (including inactive) are at least item level {#Level} for follower type "{GarrFollowerType}"
GarrisonFollowerIsOnAMission = 185, // Garrison follower "{GarrFollower}" is on a mission
GarrisonMissionCountInSetLessThan = 186, /*NYI*/ // Player has less than {#Missions} available and in-progress missions of set "{GarrMissionSet}" in garrison type "{GarrType}"
GarrisonFollowerType = 187, // This Garrison Follower is of type "{GarrFollowerType}"
PlayerUsedBoostLessThanHoursAgoRealTime = 188, /*NYI*/ // Player has boosted and boost occurred < {#Hours} hours ago (real time)
PlayerUsedBoostLessThanHoursAgoGameTime = 189, /*NYI*/ // Player has boosted and boost occurred < {#Hours} hours ago (in-game time)
PlayerIsMercenary = 190, // Player is currently Mercenary
PlayerEffectiveRace = 191, /*NYI*/ // Player effective race is "{ChrRaces}"
TargetEffectiveRace = 192, /*NYI*/ // Target effective race is "{ChrRaces}"
HonorLevelEqualOrGreaterThan = 193, // Honor level >= {#Level}
PrestigeLevelEqualOrGreaterThan = 194, // Prestige level >= {#Level}
GarrisonMissionIsReadyToCollect = 195, /*NYI*/ // Garrison mission "{GarrMission}" is ready to collect
PlayerIsInstanceOwner = 196, /*NYI*/ // Player is the instance owner (requires 'Lock Instance Owner' LFGDungeon flag)
PlayerHasHeirloom = 197, // Player has heirloom "{Item}"
TeamPoints = 198, /*NYI*/ // Team has {#Points} Points
PlayerHasToy = 199, // Player has toy "{Item}"
PlayerHasTransmog = 200, // Player has transmog "{ItemModifiedAppearance}"
GarrisonTalentSelected = 201, /*NYI*/ // Garrison has talent "{GarrTalent}" selected
GarrisonTalentResearched = 202, /*NYI*/ // Garrison has talent "{GarrTalent}" researched
PlayerHasRestriction = 203, // Player has restriction of type "{@CHARACTER_RESTRICTION_TYPE}"
PlayerCreatedCharacterLessThanHoursAgoRealTime = 204, /*NYI*/ // Player has created their character < {#Hours} hours ago (real time)
PlayerCreatedCharacterLessThanHoursAgoGameTime = 205, // Player has created their character < {#Hours} hours ago (in-game time)
QuestHasQuestInfoId = 206, // Quest has Quest Info "{QuestInfo}"
GarrisonTalentResearchInProgress = 207, /*NYI*/ // Garrison is researching talent "{GarrTalent}"
PlayerEquippedArtifactAppearanceSet = 208, // Player has equipped Artifact Appearance Set "{ArtifactAppearanceSet}"
PlayerHasCurrencyEqual = 209, // Player has currency "{CurrencyTypes}" in amount {#Amount} exactly
MinimumAverageItemHighWaterMarkForSpec = 210, /*NYI*/ // Minimum average item high water mark is {#Item High Water Mark} for "{$Item History Spec Match}")
PlayerScenarioType = 211, // Player in scenario of type "{$Scenario Type}"
PlayersAuthExpansionLevelEqualOrGreaterThan = 212, // Player's auth expansion level is "{$Expansion Level}" or higher
PlayerLastWeek2v2Rating = 213, /*NYI*/ // Player achieved at least a rating of {#Rating} in 2v2 last week player played
PlayerLastWeek3v3Rating = 214, /*NYI*/ // Player achieved at least a rating of {#Rating} in 3v3 last week player played
PlayerLastWeekRBGRating = 215, /*NYI*/ // Player achieved at least a rating of {#Rating} in RBG last week player played
GroupMemberCountFromConnectedRealmEqualOrGreaterThan = 216, // At least {#Num Players} members of the group are from your connected realms
ArtifactTraitUnlockedCountEqualOrGreaterThan = 217, // At least {#Num Traits} traits have been unlocked in artifact "{Item}"
ParagonReputationLevelEqualOrGreaterThan = 218, // Paragon level >= "{#Level}"
GarrisonShipmentIsReady = 219, /*NYI*/ // Shipment in container type "{CharShipmentContainer}" ready
PlayerIsInPvpBrawl = 220, // Player is in PvP Brawl
ParagonReputationLevelWithFactionEqualOrGreaterThan = 221, // Paragon level >= "{#Level}" with faction "{Faction}"
PlayerHasItemWithBonusListFromTreeAndQuality = 222, // Player has an item with bonus list from tree "{ItemBonusTree}" and of quality "{$Item Quality}"
PlayerHasEmptyInventorySlotCountEqualOrGreaterThan = 223, // Player has at least "{#Number of empty slots}" empty inventory slots
PlayerHasItemInHistoryOfProgressiveEvent = 224, /*NYI*/ // Player has item "{Item}" in the item history of progressive event "{ProgressiveEvent}"
PlayerHasArtifactPowerRankCountPurchasedEqualOrGreaterThan = 225, // Player has at least {#Purchased Ranks} ranks of {ArtifactPower} on equipped artifact
PlayerHasBoosted = 226, // Player has boosted
PlayerHasRaceChanged = 227, // Player has race changed
PlayerHasBeenGrantedLevelsFromRaF = 228, // Player has been granted levels from Recruit a Friend
IsTournamentRealm = 229, // Is Tournament Realm
PlayerCanAccessAlliedRaces = 230, // Player can access allied races
GroupMemberCountWithAchievementEqualOrLessThan = 231, // No More Than {#Group Members} With Achievement {Achievement} In Group (true if no group)
PlayerMainhandWeaponType = 232, // Player has main hand weapon of type "{$Weapon Type}"
PlayerOffhandWeaponType = 233, // Player has off-hand weapon of type "{$Weapon Type}"
PlayerPvpTier = 234, // Player is in PvP tier {PvpTier}
PlayerAzeriteLevelEqualOrGreaterThan = 235, // Players' Azerite Item is at or above level "{#Azerite Level}"
PlayerIsOnQuestInQuestline = 236, // Player is on quest in questline "{QuestLine}"
PlayerIsQnQuestLinkedToScheduledWorldStateGroup = 237, // Player is on quest associated with current progressive unlock group "{ScheduledWorldStateGroup}"
PlayerIsInRaidGroup = 238, // Player is in raid group
PlayerPvpTierInBracketEqualOrGreaterThan = 239, // Player is at or above "{@PVP_TIER_ENUM}" for "{@PVP_BRACKET}"
PlayerCanAcceptQuestInQuestline = 240, // Player is eligible for quest in questline "{Questline}"
PlayerHasCompletedQuestline = 241, // Player has completed questline "{Questline}"
PlayerHasCompletedQuestlineQuestCount = 242, // Player has completed "{#Quests}" quests in questline "{Questline}"
PlayerHasCompletedPercentageOfQuestline = 243, // Player has completed "{#Percentage}" % of quests in questline "{Questline}"
PlayerHasWarModeEnabled = 244, // Player has WarMode Enabled (regardless of shard state)
PlayerIsOnWarModeShard = 245, // Player is on a WarMode Shard
PlayerIsAllowedToToggleWarModeInArea = 246, // Player is allowed to toggle WarMode in area
MythicPlusKeystoneLevelEqualOrGreaterThan = 247, /*NYI*/ // Mythic Plus Keystone Level Atleast {#Level}
MythicPlusCompletedInTime = 248, /*NYI*/ // Mythic Plus Completed In Time
MythicPlusMapChallengeMode = 249, /*NYI*/ // Mythic Plus Map Challenge Mode {MapChallengeMode}
MythicPlusDisplaySeason = 250, /*NYI*/ // Mythic Plus Display Season {#Season}
MythicPlusMilestoneSeason = 251, /*NYI*/ // Mythic Plus Milestone Season {#Season}
PlayerVisibleRace = 252, // Player visible race is "{ChrRaces}"
TargetVisibleRace = 253, // Target visible race is "{ChrRaces}"
FriendshipRepReactionEqual = 254, // Friendship rep reaction is exactly "{FriendshipRepReaction}"
PlayerAuraStackCountEqual = 255, // Player has exactly {#Stacks} stacks of aura "{Spell}"
TargetAuraStackCountEqual = 256, // Target has exactly {#Stacks} stacks of aura "{Spell}"
PlayerAuraStackCountEqualOrGreaterThan = 257, // Player has at least {#Stacks} stacks of aura "{Spell}"
TargetAuraStackCountEqualOrGreaterThan = 258, // Target has at least {#Stacks} stacks of aura "{Spell}"
PlayerHasAzeriteEssenceRankLessThan = 259, // Player has Azerite Essence {AzeriteEssence} at less than rank {#rank}
PlayerHasAzeriteEssenceRankEqual = 260, // Player has Azerite Essence {AzeriteEssence} at rank {#rank}
PlayerHasAzeriteEssenceRankGreaterThan = 261, // Player has Azerite Essence {AzeriteEssence} at greater than rank {#rank}
PlayerHasAuraWithEffectIndex = 262, // Player has Aura {Spell} with Effect Index {#index} active
PlayerLootSpecializationMatchesRole = 263, // Player loot specialization matches role {@LFG_ROLE}
PlayerIsAtMaxExpansionLevel = 264, // Player is at max expansion level
TransmogSource = 265, // Transmog Source is "{@TRANSMOG_SOURCE}"
PlayerHasAzeriteEssenceInSlotAtRankLessThan = 266, // Player has Azerite Essence in slot {@AZERITE_ESSENCE_SLOT} at less than rank {#rank}
PlayerHasAzeriteEssenceInSlotAtRankGreaterThan = 267, // Player has Azerite Essence in slot {@AZERITE_ESSENCE_SLOT} at greater than rank {#rank}
PlayerLevelWithinContentTuning = 268, // Player has level within Content Tuning {ContentTuning}
TargetLevelWithinContentTuning = 269, // Target has level within Content Tuning {ContentTuning}
PlayerIsScenarioInitiator = 270, /*NYI*/ // Player is Scenario Initiator
PlayerHasCompletedQuestOrIsOnQuest = 271, // Player is currently on or previously completed quest "{QuestV2}"
PlayerLevelWithinOrAboveContentTuning = 272, // Player has level within or above Content Tuning {ContentTuning}
TargetLevelWithinOrAboveContentTuning = 273, // Target has level within or above Content Tuning {ContentTuning}
PlayerLevelWithinOrAboveLevelRange = 274, /*NYI*/ // Player has level within or above Level Range {LevelRange}
TargetLevelWithinOrAboveLevelRange = 275, /*NYI*/ // Target has level within or above Level Range {LevelRange}
MaxJailersTowerLevelEqualOrGreaterThan = 276, // Max Jailers Tower Level Atleast {#Level}
GroupedWithRaFRecruit = 277, // Grouped With Recruit
GroupedWithRaFRecruiter = 278, // Grouped with Recruiter
PlayerSpecialization = 279, // Specialization is "{ChrSpecialization}"
PlayerMapOrCosmeticChildMap = 280, // Player is on map or cosmetic child map "{Map}"
PlayerCanAccessShadowlandsPrepurchaseContent = 281, // Player can access Shadowlands (9.0) prepurchase content
PlayerHasEntitlement = 282, /*NYI*/ // Player has entitlement "{BattlePayDeliverable}"
PlayerIsInPartySyncGroup = 283, /*NYI*/ // Player is in party sync group
QuestHasPartySyncRewards = 284, /*NYI*/ // Quest is eligible for party sync rewards
HonorGainSource = 285, /*NYI*/ // Player gained honor from source {@SPECIAL_MISC_HONOR_GAIN_SOURCE}
JailersTowerActiveFloorIndexEqualOrGreaterThan = 286, /*NYI*/ // Active Floor Index Atleast {#Level}
JailersTowerActiveFloorDifficultyEqualOrGreaterThan = 287, /*NYI*/ // Active Floor Difficulty Atleast {#Level}
PlayerCovenant = 288, // Player is member of covenant "{Covenant}"
HasTimeEventPassed = 289, // Has time event "{TimeEvent}" passed
GarrisonHasPermanentTalent = 290, /*NYI*/ // Garrison has permanent talent "{GarrTalent}"
HasActiveSoulbind = 291, // Has Active Soulbind "{Soulbind}"
HasMemorizedSpell = 292, /*NYI*/ // Has memorized spell "{Spell}"
PlayerHasAPACSubscriptionReward_2020 = 293, // Player has APAC Subscription Reward 2020
PlayerHasTBCCDEWarpStalker_Mount = 294, // Player has TBCC:DE Warp Stalker Mount
PlayerHasTBCCDEDarkPortal_Toy = 295, // Player has TBCC:DE Dark Portal Toy
PlayerHasTBCCDEPathOfIllidan_Toy = 296, // Player has TBCC:DE Path of Illidan Toy
PlayerHasImpInABallToySubscriptionReward = 297, // Player has Imp in a Ball Toy Subscription Reward
PlayerIsInAreaGroup = 298, // Player is in area group "{AreaGroup}"
TargetIsInAreaGroup = 299, // Target is in area group "{AreaGroup}"
PlayerIsInChromieTime = 300, // Player has selected Chromie Time ID "{UiChromieTimeExpansionInfo}"
PlayerIsInAnyChromieTime = 301, // Player has selected ANY Chromie Time ID
ItemIsAzeriteArmor = 302, // Item is Azerite Armor
PlayerHasRuneforgePower = 303, // Player Has Runeforge Power "{RuneforgeLegendaryAbility}"
PlayerInChromieTimeForScaling = 304, // Player is Chromie Time for Scaling
IsRaFRecruit = 305, // Is RAF recruit
AllPlayersInGroupHaveAchievement = 306, // All Players In Group Have Achievement "{Achievement}"
PlayerHasSoulbindConduitRankEqualOrGreaterThan = 307, /*NYI*/ // Player has Conduit "{SoulbindConduit}" at Rank {#Rank} or Higher
PlayerSpellShapeshiftFormCreatureDisplayInfoSelection = 308, // Player has chosen {CreatureDisplayInfo} for shapeshift form {SpellShapeshiftForm}
PlayerSoulbindConduitCountAtRankEqualOrGreaterThan = 309, /*NYI*/ // Player has at least {#Level} Conduits at Rank {#Rank} or higher.
PlayerIsRestrictedAccount = 310, // Player is a Restricted Account
PlayerIsFlying = 311, // Player is flying
PlayerScenarioIsLastStep = 312, // Player is on the last step of a Scenario
PlayerHasWeeklyRewardsAvailable = 313, // Player has weekly rewards available
TargetCovenant = 314, // Target is member of covenant "{Covenant}"
PlayerHasTBCCollectorsEdition = 315, // Player has TBC Collector's Edition
PlayerHasWrathCollectorsEdition = 316, // Player has Wrath Collector's Edition
GarrisonTalentResearchedAndAtRankEqualOrGreaterThan = 317, /*NYI*/ // Garrison has talent "{GarrTalent}" researched and active at or above {#Rank}
CurrencySpentOnGarrisonTalentResearchEqualOrGreaterThan = 318, /*NYI*/ // Currency {CurrencyTypes} Spent on Garrison Talent Research in Tree {GarrTalentTree} is greater than or equal to {#Quantity}
RenownCatchupActive = 319, /*NYI*/ // Renown Catchup Active
RapidRenownCatchupActive = 320, /*NYI*/ // Rapid Renown Catchup Active
PlayerMythicPlusRatingEqualOrGreaterThan = 321, /*NYI*/ // Player has Mythic+ Rating of at least "{#DungeonScore}"
PlayerMythicPlusRunCountInCurrentExpansionEqualOrGreaterThan = 322, /*NYI*/ // Player has completed at least "{#MythicKeystoneRuns}" Mythic+ runs in current expansion
}
public enum CriteriaFailEvent : byte
+1
View File
@@ -988,6 +988,7 @@ namespace Framework.Constants
Max
}
[Flags]
public enum BattlemasterListFlags : int
{
Disabled = 0x01,
@@ -469,6 +469,7 @@ namespace Framework.Constants
UsingPartGarrison = 0x100,
CanUseObjectsMounted = 0x200,
CanVisitPartyGarrison = 0x400,
WarMode = 0x800,
AccountSecured = 0x1000, // Script_IsAccountSecured
OverrideTransportServerTime = 0x8000,
MentorRestricted = 0x20000,
@@ -44,6 +44,7 @@ namespace Framework.Constants
public const int MaxAzeriteEmpoweredTier = 5;
public const int MaxAzeriteEssenceSlot = 4;
public const int MaxAzeriteEssenceRank = 4;
public const int AchivementCategoryPetBattles = 15117;
/// <summary>
/// BattlePets Const
@@ -59,6 +59,11 @@ namespace Game.Achievements
return _achievementPoints;
}
public ICollection<uint> GetCompletedAchievementIds()
{
return _completedAchievements.Keys;
}
public override bool CanUpdateCriteriaTree(Criteria criteria, CriteriaTree tree, Player referencePlayer)
{
AchievementRecord achievement = tree.Achievement;
File diff suppressed because it is too large Load Diff
@@ -319,6 +319,15 @@ namespace Game.BattlePets
return (byte)_pets.Values.Count(battlePet => battlePet.PacketInfo.Species == species && battlePet.SaveInfo != BattlePetSaveInfo.Removed);
}
public uint GetPetUniqueSpeciesCount()
{
HashSet<uint> speciesIds = new();
foreach (var pair in _pets)
speciesIds.Add(pair.Value.PacketInfo.Species);
return (uint)speciesIds.Count;
}
public void UnlockSlot(byte slot)
{
if (!_slots[slot].Locked)
@@ -460,6 +469,8 @@ namespace Game.BattlePets
public ushort GetTrapLevel() { return _trapLevel; }
public List<BattlePetSlot> GetSlots() { return _slots; }
public bool HasJournalLock() { return true; }
WorldSession _owner;
ushort _trapLevel;
Dictionary<ulong, BattlePet> _pets = new();
+11
View File
@@ -1463,6 +1463,17 @@ namespace Game.DataStorage
return bonusListIDs;
}
public List<uint> GetAllItemBonusTreeBonuses(uint itemBonusTreeId)
{
List<uint> bonusListIDs = new List<uint>();
VisitItemBonusTree(itemBonusTreeId, true, bonusTreeNode =>
{
if (bonusTreeNode.ChildItemBonusListID != 0)
bonusListIDs.Add(bonusTreeNode.ChildItemBonusListID);
});
return bonusListIDs;
}
void LoadAzeriteEmpoweredItemUnlockMappings(MultiMap<uint, AzeriteUnlockMappingRecord> azeriteUnlockMappingsBySet, uint itemId)
{
var itemIdRange = _itemToBonusTree.LookupByKey(itemId);
+24
View File
@@ -2089,6 +2089,30 @@ namespace Game.Entities
}
}
public uint GetTotalUnlockedArtifactPowers()
{
uint purchased = GetTotalPurchasedArtifactPowers();
ulong artifactXp = m_itemData.ArtifactXP;
uint currentArtifactTier = GetModifier(ItemModifier.ArtifactTier);
uint extraUnlocked = 0;
do
{
ulong xpCost = 0;
var cost = CliDB.ArtifactLevelXPGameTable.GetRow(purchased + extraUnlocked + 1);
if (cost != null)
xpCost = (ulong)(currentArtifactTier == PlayerConst.MaxArtifactTier ? cost.XP2 : cost.XP);
if (artifactXp < xpCost)
break;
artifactXp -= xpCost;
++extraUnlocked;
} while (true);
return purchased + extraUnlocked;
}
public uint GetTotalPurchasedArtifactPowers()
{
uint purchasedRanks = 0;
@@ -728,7 +728,7 @@ namespace Game.Entities
{
int transmogSlot = Item.ItemTransmogrificationSlots[(int)item.inventoryType];
if (transmogSlot >= 0)
_owner.GetPlayer().UpdateCriteria(CriteriaTypes.AppearanceUnlockedBySlot, (ulong)transmogSlot, 1);
_owner.GetPlayer().UpdateCriteria(CriteriaTypes.AppearanceUnlockedBySlot, (ulong)transmogSlot, itemModifiedAppearance.Id);
}
var sets = Global.DB2Mgr.GetTransmogSetsForItemModifiedAppearance(itemModifiedAppearance.Id);
@@ -20,6 +20,7 @@ using Game.Achievements;
using Game.DataStorage;
using Game.Guilds;
using Game.Scenarios;
using System.Collections.Generic;
namespace Game.Entities
{
@@ -39,6 +40,12 @@ namespace Game.Entities
{
return m_achievementSys.GetAchievementPoints();
}
public ICollection<uint> GetCompletedAchievementIds()
{
return m_achievementSys.GetCompletedAchievementIds();
}
public bool HasAchieved(uint achievementId)
{
return m_achievementSys.HasAchieved(achievementId);
+71 -25
View File
@@ -1511,7 +1511,7 @@ namespace Game.Entities
InventoryResult res = InventoryResult.Ok;
uint tempcount = 0;
bool result = ForEachStorageItem(ItemSearchLocation.Equipment, pItem =>
bool result = ForEachItem(ItemSearchLocation.Equipment, pItem =>
{
if (pItem.GetEntry() == item)
{
@@ -2615,7 +2615,7 @@ namespace Game.Entities
public Item GetItemByGuid(ObjectGuid guid)
{
Item result = null;
ForEachStorageItem(ItemSearchLocation.Everywhere, item =>
ForEachItem(ItemSearchLocation.Everywhere, item =>
{
if (item.GetGUID() == guid)
{
@@ -2637,7 +2637,7 @@ namespace Game.Entities
location |= ItemSearchLocation.Bank;
uint count = 0;
ForEachStorageItem(location, pItem =>
ForEachItem(location, pItem =>
{
if (pItem != skipItem)
{
@@ -2684,7 +2684,7 @@ namespace Game.Entities
public Item GetItemByEntry(uint entry, ItemSearchLocation where = ItemSearchLocation.Default)
{
Item result = null;
ForEachStorageItem(where, item =>
ForEachItem(where, item =>
{
if (item.GetEntry() == entry)
{
@@ -2704,7 +2704,7 @@ namespace Game.Entities
location |= ItemSearchLocation.Bank;
List<Item> itemList = new();
ForEachStorageItem(location, item =>
ForEachItem(location, item =>
{
if (item.GetEntry() == entry)
itemList.Add(item);
@@ -2721,7 +2721,7 @@ namespace Game.Entities
location |= ItemSearchLocation.Bank;
uint currentCount = 0;
return !ForEachStorageItem(location, pItem =>
return !ForEachItem(location, pItem =>
{
if (pItem && pItem.GetEntry() == item && !pItem.IsInTrade())
{
@@ -2791,7 +2791,7 @@ namespace Game.Entities
public Item GetChildItemByGuid(ObjectGuid guid)
{
Item result = null;
ForEachStorageItem(ItemSearchLocation.Equipment | ItemSearchLocation.Inventory, item =>
ForEachItem(ItemSearchLocation.Equipment | ItemSearchLocation.Inventory, item =>
{
if (item.GetGUID() == guid)
{
@@ -2807,7 +2807,7 @@ namespace Game.Entities
uint GetItemCountWithLimitCategory(uint limitCategory, Item skipItem)
{
uint count = 0;
ForEachStorageItem(ItemSearchLocation.Everywhere, item =>
ForEachItem(ItemSearchLocation.Everywhere, item =>
{
if (item != skipItem)
{
@@ -3428,23 +3428,16 @@ namespace Game.Entities
return false;
}
uint GetMaxPersonalArenaRatingRequirement(uint minarenaslot)
public uint GetMaxPersonalArenaRatingRequirement(uint minarenaslot)
{
// returns the maximal personal arena rating that can be used to purchase items requiring this condition
// the personal rating of the arena team must match the required limit as well
// so return max[in arenateams](min(personalrating[teamtype], teamrating[teamtype]))
// so return max[in arenateams](personalrating[teamtype])
uint max_personal_rating = 0;
for (byte i = (byte)minarenaslot; i < SharedConst.MaxArenaSlot; ++i)
{
ArenaTeam at = Global.ArenaTeamMgr.GetArenaTeamById(GetArenaTeamId(i));
if (at != null)
{
uint p_rating = GetArenaPersonalRating(i);
uint t_rating = at.GetRating();
p_rating = p_rating < t_rating ? p_rating : t_rating;
if (max_personal_rating < p_rating)
max_personal_rating = p_rating;
}
uint p_rating = GetArenaPersonalRating(i);
if (max_personal_rating < p_rating)
max_personal_rating = p_rating;
}
return max_personal_rating;
}
@@ -4469,6 +4462,59 @@ namespace Game.Entities
{
return StoreItem(dest, pItem, update);
}
public uint GetFreeInventorySlotCount(ItemSearchLocation location = ItemSearchLocation.Inventory)
{
uint freeSlotCount = 0;
if (location.HasFlag(ItemSearchLocation.Equipment))
for (byte i = EquipmentSlot.Start; i < EquipmentSlot.End; ++i)
if (GetItemByPos(InventorySlots.Bag0, i) == null)
++freeSlotCount;
if (location.HasFlag(ItemSearchLocation.Inventory))
{
int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
if (GetItemByPos(InventorySlots.Bag0, i) == null)
++freeSlotCount;
for (byte i = InventorySlots.BagStart; i < InventorySlots.BagEnd; ++i)
{
Bag bag = GetBagByPos(i);
if (bag != null)
{
for (byte j = 0; j < bag.GetBagSize(); ++j)
if (bag.GetItemByPos(j) == null)
++freeSlotCount;
}
}
}
if (location.HasFlag(ItemSearchLocation.Bank))
{
for (byte i = InventorySlots.BankItemStart; i < InventorySlots.BankItemEnd; ++i)
if (GetItemByPos(InventorySlots.Bag0, i) == null)
++freeSlotCount;
for (byte i = InventorySlots.BankBagStart; i < InventorySlots.BankBagEnd; ++i)
{
Bag bag = GetBagByPos(i);
if (bag != null)
{
for (byte j = 0; j < bag.GetBagSize(); ++j)
if (bag.GetItemByPos(j) == null)
++freeSlotCount;
}
}
}
if (location.HasFlag(ItemSearchLocation.ReagentBank))
for (byte i = InventorySlots.ReagentStart; i < InventorySlots.ReagentEnd; ++i)
if (GetItemByPos(InventorySlots.Bag0, i) == null)
++freeSlotCount;
return freeSlotCount;
}
//Bags
public Bag GetBagByPos(byte bag)
@@ -5242,7 +5288,7 @@ namespace Game.Entities
ItemTemplate pProto = Global.ObjectMgr.GetItemTemplate(item);
bool includeGems = pProto?.GetGemProperties() != 0;
return !ForEachStorageItem(ItemSearchLocation.Equipment, pItem =>
return !ForEachItem(ItemSearchLocation.Equipment, pItem =>
{
if (pItem.GetSlot() != except_slot)
{
@@ -5261,7 +5307,7 @@ namespace Game.Entities
bool HasItemWithLimitCategoryEquipped(uint limitCategory, uint count, byte except_slot)
{
uint tempcount = 0;
return !ForEachStorageItem(ItemSearchLocation.Equipment, pItem =>
return !ForEachItem(ItemSearchLocation.Equipment, pItem =>
{
if (pItem.GetSlot() == except_slot)
return true;
@@ -5280,7 +5326,7 @@ namespace Game.Entities
bool HasGemWithLimitCategoryEquipped(uint limitCategory, uint count, byte except_slot)
{
uint tempcount = 0;
return !ForEachStorageItem(ItemSearchLocation.Equipment, pItem =>
return !ForEachItem(ItemSearchLocation.Equipment, pItem =>
{
if (pItem.GetSlot() == except_slot)
return true;
@@ -6555,7 +6601,7 @@ namespace Game.Entities
// @todo other types of power scaling such as timewalking
}
bool ForEachStorageItem(ItemSearchLocation location, Func<Item, bool> callback)
public bool ForEachItem(ItemSearchLocation location, Func<Item, bool> callback)
{
if (location.HasAnyFlag(ItemSearchLocation.Equipment))
{
@@ -6720,7 +6766,7 @@ namespace Game.Entities
(InventoryType inventoryType, uint itemLevel, ObjectGuid guid)[] bestItemLevels = new (InventoryType inventoryType, uint itemLevel, ObjectGuid guid)[EquipmentSlot.End];
float sum = 0;
ForEachStorageItem(ItemSearchLocation.Everywhere, item =>
ForEachItem(ItemSearchLocation.Everywhere, item =>
{
ItemTemplate itemTemplate = item.GetTemplate();
if (itemTemplate != null)
+17 -7
View File
@@ -5015,7 +5015,7 @@ namespace Game.Entities
return true;
}
bool CanEnableWarModeInArea()
public bool CanEnableWarModeInArea()
{
var area = CliDB.AreaTableStorage.LookupByKey(GetAreaId());
if (area == null || !IsFriendlyArea(area))
@@ -5878,6 +5878,16 @@ namespace Game.Entities
return reputationMgr;
}
public void SetReputation(uint factionentry, int value)
{
GetReputationMgr().SetReputation(CliDB.FactionStorage.LookupByKey(factionentry), value);
}
public int GetReputation(uint factionentry)
{
return GetReputationMgr().GetReputation(CliDB.FactionStorage.LookupByKey(factionentry));
}
#region Sends / Updates
void BeforeVisibilityDestroy(WorldObject obj, Player p)
{
@@ -6423,12 +6433,12 @@ namespace Game.Entities
SendMovementSetCollisionHeight(scale * GetCollisionHeight(), UpdateCollisionHeightReason.Scale);
}
bool HasRaceChanged() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.HasRaceChanged); }
void SetHasRaceChanged() { m_ExtraFlags |= PlayerExtraFlags.HasRaceChanged; }
bool HasBeenGrantedLevelsFromRaF() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.GrantedLevelsFromRaf); }
void SetBeenGrantedLevelsFromRaF() { m_ExtraFlags |= PlayerExtraFlags.GrantedLevelsFromRaf; }
bool HasLevelBoosted() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.LevelBoosted); }
void SetHasLevelBoosted() { m_ExtraFlags |= PlayerExtraFlags.LevelBoosted; }
public bool HasRaceChanged() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.HasRaceChanged); }
public void SetHasRaceChanged() { m_ExtraFlags |= PlayerExtraFlags.HasRaceChanged; }
public bool HasBeenGrantedLevelsFromRaF() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.GrantedLevelsFromRaf); }
public void SetBeenGrantedLevelsFromRaF() { m_ExtraFlags |= PlayerExtraFlags.GrantedLevelsFromRaf; }
public bool HasLevelBoosted() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.LevelBoosted); }
public void SetHasLevelBoosted() { m_ExtraFlags |= PlayerExtraFlags.LevelBoosted; }
public uint GetXP() { return m_activePlayerData.XP; }
public uint GetXPForNextLevel() { return m_activePlayerData.NextLevelXP; }
+1 -1
View File
@@ -310,7 +310,7 @@ namespace Game.Garrisons
return _plots.Values;
}
Plot GetPlot(uint garrPlotInstanceId)
public Plot GetPlot(uint garrPlotInstanceId)
{
return _plots.LookupByKey(garrPlotInstanceId);
}
+1 -1
View File
@@ -123,7 +123,7 @@ namespace Game
while (result.NextRow());
}
charResult.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= Expansion.BattleForAzeroth;
charResult.IsAlliedRacesCreationAllowed = CanAccessAlliedRaces();
foreach (var requirement in Global.ObjectMgr.GetRaceUnlockRequirements())
{
+1 -1
View File
@@ -182,7 +182,7 @@ namespace Game
return GetForcedRankIfAny(factionTemplateEntry.Faction);
}
int GetParagonLevel(uint paragonFactionId)
public int GetParagonLevel(uint paragonFactionId)
{
return GetParagonLevel(CliDB.FactionStorage.LookupByKey(paragonFactionId));
}
+31 -15
View File
@@ -35,8 +35,8 @@ namespace Game.Scenarios
//ASSERT(_data);
foreach (var step in _data.Steps)
SetStepState(step.Value, ScenarioStepState.NotStarted);
foreach (var scenarioStep in _data.Steps.Values)
SetStepState(scenarioStep, ScenarioStepState.NotStarted);
ScenarioStepRecord firstStep = GetFirstStep();
if (firstStep != null)
@@ -80,16 +80,16 @@ namespace Game.Scenarios
return;
ScenarioStepRecord newStep = null;
foreach (var _step in _data.Steps.Values)
foreach (var scenarioStep in _data.Steps.Values)
{
if (_step.IsBonusObjective())
if (scenarioStep.IsBonusObjective())
continue;
if (GetStepState(_step) == ScenarioStepState.Done)
if (GetStepState(scenarioStep) == ScenarioStepState.Done)
continue;
if (newStep == null || _step.OrderIndex < newStep.OrderIndex)
newStep = _step;
if (newStep == null || scenarioStep.OrderIndex < newStep.OrderIndex)
newStep = scenarioStep;
}
SetStep(newStep);
@@ -129,12 +129,12 @@ namespace Game.Scenarios
bool IsComplete()
{
foreach (var step in _data.Steps.Values)
foreach (var scenarioStep in _data.Steps.Values)
{
if (step.IsBonusObjective())
if (scenarioStep.IsBonusObjective())
continue;
if (GetStepState(step) != ScenarioStepState.Done)
if (GetStepState(scenarioStep) != ScenarioStepState.Done)
return false;
}
@@ -278,6 +278,22 @@ namespace Game.Scenarios
return firstStep;
}
public ScenarioStepRecord GetLastStep()
{
// Do it like this because we don't know what order they're in inside the container.
ScenarioStepRecord lastStep = null;
foreach (var scenarioStep in _data.Steps.Values)
{
if (scenarioStep.IsBonusObjective())
continue;
if (lastStep == null || scenarioStep.OrderIndex > lastStep.OrderIndex)
lastStep = scenarioStep;
}
return lastStep;
}
public void SendScenarioState(Player player)
{
ScenarioState scenarioState = new();
@@ -288,16 +304,16 @@ namespace Game.Scenarios
List<BonusObjectiveData> GetBonusObjectivesData()
{
List<BonusObjectiveData> bonusObjectivesData = new();
foreach (var step in _data.Steps.Values)
foreach (var scenarioStep in _data.Steps.Values)
{
if (!step.IsBonusObjective())
if (!scenarioStep.IsBonusObjective())
continue;
if (Global.CriteriaMgr.GetCriteriaTree(step.CriteriaTreeId) != null)
if (Global.CriteriaMgr.GetCriteriaTree(scenarioStep.CriteriaTreeId) != null)
{
BonusObjectiveData bonusObjectiveData;
bonusObjectiveData.BonusObjectiveID = (int)step.Id;
bonusObjectiveData.ObjectiveComplete = GetStepState(step) == ScenarioStepState.Done;
bonusObjectiveData.BonusObjectiveID = (int)scenarioStep.Id;
bonusObjectiveData.ObjectiveComplete = GetStepState(scenarioStep) == ScenarioStepState.Done;
bonusObjectivesData.Add(bonusObjectiveData);
}
}
+5
View File
@@ -677,6 +677,11 @@ namespace Game
return _transactionCallbacks.AddCallback(callback);
}
public bool CanAccessAlliedRaces()
{
return GetAccountExpansion() >= Expansion.BattleForAzeroth;
}
void InitWarden(BigInteger k)
{
if (_os == "Win")