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:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,7 +4462,60 @@ 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)
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -310,7 +310,7 @@ namespace Game.Garrisons
|
||||
return _plots.Values;
|
||||
}
|
||||
|
||||
Plot GetPlot(uint garrPlotInstanceId)
|
||||
public Plot GetPlot(uint garrPlotInstanceId)
|
||||
{
|
||||
return _plots.LookupByKey(garrPlotInstanceId);
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ namespace Game
|
||||
while (result.NextRow());
|
||||
}
|
||||
|
||||
charResult.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= Expansion.BattleForAzeroth;
|
||||
charResult.IsAlliedRacesCreationAllowed = CanAccessAlliedRaces();
|
||||
|
||||
foreach (var requirement in Global.ObjectMgr.GetRaceUnlockRequirements())
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -676,6 +676,11 @@ namespace Game
|
||||
{
|
||||
return _transactionCallbacks.AddCallback(callback);
|
||||
}
|
||||
|
||||
public bool CanAccessAlliedRaces()
|
||||
{
|
||||
return GetAccountExpansion() >= Expansion.BattleForAzeroth;
|
||||
}
|
||||
|
||||
void InitWarden(BigInteger k)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user