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