Core/Achievements: Implement many new ModifierTree types

This commit is contained in:
Shauren
2019-11-15 23:25:01 +01:00
parent 36d6959ae6
commit aa8ad4d2fd
14 changed files with 1244 additions and 91 deletions

View File

@@ -549,7 +549,10 @@ void PlayerAchievementMgr::CompletedAchievement(AchievementEntry const* achievem
bool PlayerAchievementMgr::ModifierTreeSatisfied(uint32 modifierTreeId) const
{
return AdditionalRequirementsSatisfied(sCriteriaMgr->GetModifierTree(modifierTreeId), 0, 0, nullptr, _owner);
if (ModifierTreeNode const* modifierTree = sCriteriaMgr->GetModifierTree(modifierTreeId))
return ModifierTreeSatisfied(modifierTree, 0, 0, nullptr, _owner);
return false;
}
void PlayerAchievementMgr::SendCriteriaUpdate(Criteria const* criteria, CriteriaProgress const* progress, uint32 timeElapsed, bool timedCompleted) const

View File

@@ -91,6 +91,7 @@ public:
void CompletedAchievement(AchievementEntry const* entry, Player* referencePlayer) override;
using CriteriaHandler::ModifierTreeSatisfied;
bool ModifierTreeSatisfied(uint32 modifierTreeId) const;
protected:

File diff suppressed because it is too large Load Diff

View File

@@ -299,7 +299,8 @@ protected:
bool ConditionsSatisfied(Criteria const* criteria, Player* referencePlayer) const;
bool RequirementsSatisfied(Criteria const* criteria, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, Unit const* unit, Player* referencePlayer) const;
virtual bool RequiredAchievementSatisfied(uint32 /*achievementId*/) const { return false; }
bool AdditionalRequirementsSatisfied(ModifierTreeNode const* parent, uint64 miscValue1, uint64 miscValue2, Unit const* unit, Player* referencePlayer) const;
bool ModifierTreeSatisfied(ModifierTreeNode const* parent, uint64 miscValue1, uint64 miscValue2, Unit const* unit, Player* referencePlayer) const;
bool ModifierSatisfied(ModifierTreeEntry const* modifier, uint64 miscValue1, uint64 miscValue2, Unit const* unit, Player* referencePlayer) const;
virtual std::string GetOwnerInfo() const = 0;
virtual CriteriaList const& GetCriteriaByType(CriteriaTypes type) const = 0;

View File

@@ -195,9 +195,9 @@ enum CriteriaCondition
enum CriteriaAdditionalCondition
{
CRITERIA_ADDITIONAL_CONDITION_SOURCE_DRUNK_VALUE = 1, // NYI
CRITERIA_ADDITIONAL_CONDITION_SOURCE_DRUNK_VALUE = 1,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_PLAYER_CONDITION = 2,
CRITERIA_ADDITIONAL_CONDITION_ITEM_LEVEL = 3, // NYI
CRITERIA_ADDITIONAL_CONDITION_ITEM_LEVEL = 3,
CRITERIA_ADDITIONAL_CONDITION_TARGET_CREATURE_ENTRY = 4,
CRITERIA_ADDITIONAL_CONDITION_TARGET_MUST_BE_PLAYER = 5,
CRITERIA_ADDITIONAL_CONDITION_TARGET_MUST_BE_DEAD = 6,
@@ -213,8 +213,11 @@ enum CriteriaAdditionalCondition
CRITERIA_ADDITIONAL_CONDITION_SOURCE_IS_ALIVE = 16,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_AREA_OR_ZONE = 17,
CRITERIA_ADDITIONAL_CONDITION_TARGET_AREA_OR_ZONE = 18,
//CRITERIA_ADDITIONAL_CONDITION_UNK_19 = 19,
CRITERIA_ADDITIONAL_CONDITION_MAP_DIFFICULTY_OLD = 20,
CRITERIA_ADDITIONAL_CONDITION_TARGET_CREATURE_YIELDS_XP = 21, // NYI
CRITERIA_ADDITIONAL_CONDITION_SOURCE_LEVEL_ABOVE_TARGET = 22,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_LEVEL_EQUAL_TARGET = 23,
CRITERIA_ADDITIONAL_CONDITION_ARENA_TYPE = 24,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_RACE = 25,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_CLASS = 26,
@@ -222,57 +225,261 @@ enum CriteriaAdditionalCondition
CRITERIA_ADDITIONAL_CONDITION_TARGET_CLASS = 28,
CRITERIA_ADDITIONAL_CONDITION_MAX_GROUP_MEMBERS = 29,
CRITERIA_ADDITIONAL_CONDITION_TARGET_CREATURE_TYPE = 30,
CRITERIA_ADDITIONAL_CONDITION_TARGET_CREATURE_FAMILY = 31,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_MAP = 32,
CRITERIA_ADDITIONAL_CONDITION_ITEM_CLASS = 33, // NYI
CRITERIA_ADDITIONAL_CONDITION_ITEM_SUBCLASS = 34, // NYI
CRITERIA_ADDITIONAL_CONDITION_COMPLETE_QUEST_NOT_IN_GROUP = 35, // NYI
CRITERIA_ADDITIONAL_CONDITION_MIN_PERSONAL_RATING = 37, // NYI (when implementing don't forget about CRITERIA_CONDITION_NO_LOSE)
CRITERIA_ADDITIONAL_CONDITION_CLIENT_VERSION = 33,
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_TEAM_LEVEL = 34,
CRITERIA_ADDITIONAL_CONDITION_NOT_IN_GROUP = 35,
CRITERIA_ADDITIONAL_CONDITION_IN_GROUP = 36,
CRITERIA_ADDITIONAL_CONDITION_MIN_PERSONAL_RATING = 37, // NYI
CRITERIA_ADDITIONAL_CONDITION_TITLE_BIT_INDEX = 38,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_LEVEL = 39,
CRITERIA_ADDITIONAL_CONDITION_TARGET_LEVEL = 40,
CRITERIA_ADDITIONAL_CONDITION_TARGET_ZONE = 41,
CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_PERCENT_BELOW = 46,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_ZONE = 41,
CRITERIA_ADDITIONAL_CONDITION_TARGET_ZONE = 42,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HEALTH_PCT_LOWER = 43,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HEALTH_PCT_GREATER = 44,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HEALTH_PCT_EQUAL = 45,
CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_PCT_LOWER = 46,
CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_PCT_GREATER = 47,
CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_PCT_EQUAL = 48,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HEALTH_LOWER = 49,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HEALTH_GREATER = 50,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HEALTH_EQUAL = 51,
CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_LOWER = 52,
CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_GREATER = 53,
CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_EQUAL = 54,
CRITERIA_ADDITIONAL_CONDITION_TARGET_PLAYER_CONDITION = 55,
CRITERIA_ADDITIONAL_CONDITION_MIN_ACHIEVEMENT_POINTS = 56, // NYI
CRITERIA_ADDITIONAL_CONDITION_REQUIRES_LFG_GROUP = 58, // NYI
CRITERIA_ADDITIONAL_CONDITION_UNK60 = 60,
CRITERIA_ADDITIONAL_CONDITION_MIN_ACHIEVEMENT_POINTS = 56,
CRITERIA_ADDITIONAL_CONDITION_IN_LFG_DUNGEON = 57,
CRITERIA_ADDITIONAL_CONDITION_IN_LFG_RANDOM_DUNGEON = 58,
CRITERIA_ADDITIONAL_CONDITION_IN_LFG_FIRST_RANDOM_DUNGEON = 59,
//CRITERIA_ADDITIONAL_CONDITION_UNK_60 = 60, // NYI
CRITERIA_ADDITIONAL_CONDITION_REQUIRES_GUILD_GROUP = 61, // NYI
CRITERIA_ADDITIONAL_CONDITION_GUILD_REPUTATION = 62, // NYI
CRITERIA_ADDITIONAL_CONDITION_GUILD_REPUTATION = 62,
CRITERIA_ADDITIONAL_CONDITION_RATED_BATTLEGROUND = 63, // NYI
CRITERIA_ADDITIONAL_CONDITION_RATED_BATTLEGROUND_RATING = 64,
CRITERIA_ADDITIONAL_CONDITION_PROJECT_RARITY = 65,
CRITERIA_ADDITIONAL_CONDITION_PROJECT_RACE = 66,
CRITERIA_ADDITIONAL_CONDITION_WORLD_STATE = 67, // NYI
CRITERIA_ADDITIONAL_CONDITION_MAP_DIFFICULTY = 68, // NYI
CRITERIA_ADDITIONAL_CONDITION_PLAYER_LEVEL = 69, // NYI
CRITERIA_ADDITIONAL_CONDITION_TARGET_PLAYER_LEVEL = 70, // NYI
//CRITERIA_ADDITIONAL_CONDITION_PLAYER_LEVEL_ON_ACCOUNT = 71, // Not verified
//CRITERIA_ADDITIONAL_CONDITION_UNK73 = 73, // References another modifier tree id
CRITERIA_ADDITIONAL_CONDITION_SCENARIO_ID = 74, // NYI
CRITERIA_ADDITIONAL_CONDITION_WORLD_STATE_EXPRESSION = 67,
CRITERIA_ADDITIONAL_CONDITION_MAP_DIFFICULTY = 68,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_LEVEL_GREATER = 69,
CRITERIA_ADDITIONAL_CONDITION_TARGET_LEVEL_GREATER = 70,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_LEVEL_LOWER = 71,
CRITERIA_ADDITIONAL_CONDITION_TARGET_LEVEL_LOWER = 72,
CRITERIA_ADDITIONAL_CONDITION_MODIFIER_TREE = 73,
CRITERIA_ADDITIONAL_CONDITION_SCENARIO_ID = 74,
CRITERIA_ADDITIONAL_CONDITION_THE_TILLERS_REPUTATION = 75,
CRITERIA_ADDITIONAL_CONDITION_PET_BATTLE_ACHIEVEMENT_POINTS = 76, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_77 = 77, // NYI
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_FAMILY = 78, // NYI
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_HEALTH_PCT = 79, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK80 = 80 // Something to do with world bosses
CRITERIA_ADDITIONAL_CONDITION_GUILD_GROUP_MEMBERS = 80, // NYI
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_ENTRY = 81, // NYI
//CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_ENTRY_ID = 82, // Some sort of data id?
CRITERIA_ADDITIONAL_CONDITION_SCENARIO_STEP_INDEX = 82,
CRITERIA_ADDITIONAL_CONDITION_CHALLENGE_MODE_MEDAL = 83, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK84 = 84, // Quest id
//CRITERIA_ADDITIONAL_CONDITION_UNK86 = 86, // Some external event id
//CRITERIA_ADDITIONAL_CONDITION_UNK87 = 87, // Achievement id
CRITERIA_ADDITIONAL_CONDITION_IS_ON_QUEST = 84,
CRITERIA_ADDITIONAL_CONDITION_EXALTED_WITH_FACTION = 85, // NYI
CRITERIA_ADDITIONAL_CONDITION_HAS_ACHIEVEMENT = 86,
CRITERIA_ADDITIONAL_CONDITION_HAS_ACHIEVEMENT_ON_CHARACTER = 87, // NYI
CRITERIA_ADDITIONAL_CONDITION_CLOUD_SERPENT_REPUTATION = 88,
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_BREED_QUALITY_ID = 89, // NYI
CRITERIA_ADDITIONAL_CONDITION_PET_BATTLE_IS_PVP = 90, // NYI
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_SPECIES = 91,
CRITERIA_ADDITIONAL_CONDITION_EXPANSION = 92,
CRITERIA_ADDITIONAL_CONDITION_ACTIVE_EXPANSION = 92,
//CRITERIA_ADDITIONAL_CONDITION_UNK_93 = 93, // NYI
CRITERIA_ADDITIONAL_CONDITION_FRIENDSHIP_REP_REACTION = 94, // NYI
CRITERIA_ADDITIONAL_CONDITION_FACTION_STANDING = 95,
CRITERIA_ADDITIONAL_CONDITION_ITEM_CLASS_AND_SUBCLASS = 96, // NYI
CRITERIA_ADDITIONAL_CONDITION_SOURCE_SEX = 97,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_NATIVE_SEX = 98,
CRITERIA_ADDITIONAL_CONDITION_SKILL = 99,
//CRITERIA_ADDITIONAL_CONDITION_UNK_100 = 100, // NYI
CRITERIA_ADDITIONAL_CONDITION_NORMAL_PHASE_SHIFT = 101,
CRITERIA_ADDITIONAL_CONDITION_IN_PHASE = 102,
CRITERIA_ADDITIONAL_CONDITION_NOT_IN_PHASE = 103,
CRITERIA_ADDITIONAL_CONDITION_HAS_SPELL = 104,
CRITERIA_ADDITIONAL_CONDITION_ITEM_COUNT = 105,
CRITERIA_ADDITIONAL_CONDITION_ACCOUNT_EXPANSION = 106,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HAS_AURA_LABEL = 107, // NYI, SpellLabel
//CRITERIA_ADDITIONAL_CONDITION_UNK_108 = 108, // NYI
CRITERIA_ADDITIONAL_CONDITION_TIME_IN_RANGE = 109, // NYI, packed time between asset and secondaryAsset
CRITERIA_ADDITIONAL_CONDITION_REWARDED_QUEST = 110,
CRITERIA_ADDITIONAL_CONDITION_COMPLETED_QUEST = 111,
CRITERIA_ADDITIONAL_CONDITION_COMPLETED_QUEST_OBJECTIVE = 112, // NYI, QuestObjectiveID
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ENTRY = 144,
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_QUALITY = 145,
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_LEVEL = 146,
CRITERIA_ADDITIONAL_CONDITION_EXPLORED_AREA = 113,
CRITERIA_ADDITIONAL_CONDITION_ITEM_COUNT_INCLUDING_BANK = 114,
//CRITERIA_ADDITIONAL_CONDITION_UNK_115 = 115, // NYI
CRITERIA_ADDITIONAL_CONDITION_SOURCE_PVP_FACTION_INDEX = 116,
CRITERIA_ADDITIONAL_CONDITION_LFG_VALUE_EQUAL = 117,
CRITERIA_ADDITIONAL_CONDITION_LFG_VALUE_GREATER = 118,
CRITERIA_ADDITIONAL_CONDITION_CURRENCY_AMOUNT = 119,
//CRITERIA_ADDITIONAL_CONDITION_UNK_120 = 120, // NYI
CRITERIA_ADDITIONAL_CONDITION_CURRENCY_TRACKED_AMOUNT = 121,
CRITERIA_ADDITIONAL_CONDITION_MAP_INSTANCE_TYPE = 122,
CRITERIA_ADDITIONAL_CONDITION_MENTOR = 123,
//CRITERIA_ADDITIONAL_CONDITION_UNK_124 = 124, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_125 = 125, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_LEVEL_ABOVE = 126, // asset: garrLevel, secondaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWERS_ABOVE_LEVEL = 127, // asset: count, secondaryAsset: followerLevel, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWERS_ABOVE_QUALITY = 128, // asset: count, secondaryAsset: followerQuality, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ABOVE_LEVEL_WITH_ABILITY = 129, // asset: followerLevel, secondaryAsset: ability, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ABOVE_LEVEL_WITH_TRAIT = 130, // asset: followerLevel, secondaryAsset: ability, tertiaryAsset: garrType (same as above but ability must have GARRISON_ABILITY_FLAG_TRAIT)
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_WITH_ABILITY_IN_BUILDING = 131, // asset: ability, secondaryAsset: buildingType, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_WITH_TRAIT_IN_BUILDING = 132, // asset: ability, secondaryAsset: buildingType, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ABOVE_LEVEL_IN_BUILDING = 133, // asset: followerLevel, secondaryAsset: buildingType, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_BUILDING_ABOVE_LEVEL = 134, // asset: buildingType, secondaryAsset: buildingLevel, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_BLUEPRINT = 135, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_136 = 136, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_137 = 137, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_138 = 138, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_139 = 139, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_BUILDING_INACTIVE = 140,
//CRITERIA_ADDITIONAL_CONDITION_UNK_141 = 141, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_BUILDING_EQUAL_LEVEL = 142, // asset: buildingType, secondaryAsset: buildingLevel, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_WITH_ABILITY= 143, // asset: ability, secondaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_WITH_TRAIT = 144, // asset: ability, secondaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ABOVE_QUALITY_WOD = 145, // asset: followerQuality
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_EQUAL_LEVEL = 146, // asset: followerLevel, secondaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_RARE_MISSION = 147, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_148 = 148, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_BUILDING_LEVEL = 149, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_150 = 150, // NYI
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_SPECIES_IN_TEAM = 151, // asset: count, secondaryAsset: battlePetSpeciesId
CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_FAMILY_IN_TEAM = 152, // asset: count, secondaryAsset: battlePetFamily
//CRITERIA_ADDITIONAL_CONDITION_UNK_153 = 153, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_154 = 154, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_155 = 155, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_156 = 156, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ID = 157, // follower with id, in any garrison
CRITERIA_ADDITIONAL_CONDITION_QUEST_OBJECTIVE_PROGRESS_EQUAL= 158, // NYI asset: questObjectiveId, secondaryAsset: progress
CRITERIA_ADDITIONAL_CONDITION_QUEST_OBJECTIVE_PROGRESS_ABOVE= 159, // NYI asset: questObjectiveId, secondaryAsset: progress
//CRITERIA_ADDITIONAL_CONDITION_UNK_160 = 160, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_161 = 161, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_162 = 162, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_163 = 163, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_164 = 164, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_165 = 165, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_166 = 166, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_MISSION_TYPE = 167, // NYI
CRITERIA_ADDITIONAL_CONDITION_PLAYER_ITEM_LEVEL = 169, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ILVL = 184,
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ABOVE_ITEM_LEVEL = 168, // asset: followerItemLevel
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWERS_ABOVE_ITEM_LEVEL = 169, // asset: count, secondaryAsset: followerItemLevel, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_LEVEL_EQUAL = 170, // asset: count
CRITERIA_ADDITIONAL_CONDITION_GARRISON_GROUP_SIZE = 171, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_172 = 172, // NYI something to do with currency but only used on criterias that require the same currency
CRITERIA_ADDITIONAL_CONDITION_TARGETING_CORPSE = 173,
//CRITERIA_ADDITIONAL_CONDITION_UNK_174 = 174, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWERS_LEVEL_EQUAL= 175, // asset: count, secondaryAsset: followerLevel, tertiaryAsset: garrType
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ID_IN_BUILDING = 176, // asset: followerId, secondaryAsset: buildingType
//CRITERIA_ADDITIONAL_CONDITION_UNK_177 = 177, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_178 = 178, // NYI
CRITERIA_ADDITIONAL_CONDITION_WORLD_PVP_AREA = 179, // NYI
CRITERIA_ADDITIONAL_CONDITION_NON_OWN_GARRISON = 180, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_181 = 181, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_182 = 183, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_183 = 183, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWERS_ITEM_LEVEL_ABOVE = 184,
//CRITERIA_ADDITIONAL_CONDITION_UNK_185 = 185, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_186 = 186, // NYI
CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_TYPE = 187, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_188 = 188, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_189 = 189, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_190 = 190, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_191 = 191, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_192 = 192, // NYI
CRITERIA_ADDITIONAL_CONDITION_HONOR_LEVEL = 193,
CRITERIA_ADDITIONAL_CONDITION_PRESTIGE_LEVEL = 194
CRITERIA_ADDITIONAL_CONDITION_PRESTIGE_LEVEL = 194,
//CRITERIA_ADDITIONAL_CONDITION_UNK_195 = 195, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_196 = 196, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_197 = 197, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_198 = 198, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_198 = 199, // NYI
CRITERIA_ADDITIONAL_CONDITION_ITEM_MODIFIED_APPEARANCE = 200,
CRITERIA_ADDITIONAL_CONDITION_GARRISON_SELECTED_TALENT = 201, // NYI asset: garrTalentId (talent selected, research timer doesn't matter)
CRITERIA_ADDITIONAL_CONDITION_GARRISON_RESEARCHED_TALENT = 202, // NYI asset: garrTalentId (talent selected, research must be finished)
CRITERIA_ADDITIONAL_CONDITION_HAS_CHARACTER_RESTRICTIONS = 203,
//CRITERIA_ADDITIONAL_CONDITION_UNK_204 = 204, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_205 = 205, // NYI
CRITERIA_ADDITIONAL_CONDITION_QUEST_INFO_ID = 206,
CRITERIA_ADDITIONAL_CONDITION_GARRISON_RESEARCHING_TALENT = 207, // NYI asset: garrTalentId (talent selected, research must be in progress)
CRITERIA_ADDITIONAL_CONDITION_ARTIFACT_APPEARANCE_SET_USED = 208,
CRITERIA_ADDITIONAL_CONDITION_CURRENCY_AMOUNT_EQUAL = 209,
//CRITERIA_ADDITIONAL_CONDITION_UNK_210 = 210, // NYI
CRITERIA_ADDITIONAL_CONDITION_SCENARIO_TYPE = 211,
CRITERIA_ADDITIONAL_CONDITION_ACCOUNT_EXPANSION_EQUAL = 212,
//CRITERIA_ADDITIONAL_CONDITION_UNK_213 = 213, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_214 = 214, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_215 = 215, // NYI
CRITERIA_ADDITIONAL_CONDITION_CHALLENGE_MODE_MEDAL_2 = 216, // NYI keystone master, asset = 3
//CRITERIA_ADDITIONAL_CONDITION_UNK_217 = 217, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_218 = 218, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_219 = 219, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_220 = 220, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_221 = 221, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_222 = 222, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_223 = 223, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_224 = 224, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_225 = 225, // NYI
CRITERIA_ADDITIONAL_CONDITION_USED_LEVEL_BOOST = 226, // NYI
CRITERIA_ADDITIONAL_CONDITION_USED_RACE_CHANGE = 227, // NYI
CRITERIA_ADDITIONAL_CONDITION_USED_FACTION_CHANGE = 228, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_229 = 229, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_230 = 230, // NYI
CRITERIA_ADDITIONAL_CONDITION_ACHIEVEMENT_GLOBALLY_INCOMPLETED = 231, // hall of fame stuff, asset: unk, secondaryAsset: achievementId
CRITERIA_ADDITIONAL_CONDITION_MAIN_HAND_VISIBLE_SUBCLASS = 232,
CRITERIA_ADDITIONAL_CONDITION_OFF_HAND_VISIBLE_SUBCLASS = 233,
CRITERIA_ADDITIONAL_CONDITION_PVP_TIER = 234, // NYI asset: pvpTierId
CRITERIA_ADDITIONAL_CONDITION_AZERITE_ITEM_LEVEL = 235,
//CRITERIA_ADDITIONAL_CONDITION_UNK_236 = 236, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_237 = 237, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_238 = 238, // NYI
CRITERIA_ADDITIONAL_CONDITION_PVP_TIER_GREATER = 239, // NYI asset: pvpTierEnum, secondaryAsset: pvpBracket
//CRITERIA_ADDITIONAL_CONDITION_UNK_240 = 240, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_241 = 241, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_242 = 242, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_243 = 243, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_244 = 244, // NYI
CRITERIA_ADDITIONAL_CONDITION_IN_WAR_MODE = 245,
//CRITERIA_ADDITIONAL_CONDITION_UNK_246 = 246, // NYI
CRITERIA_ADDITIONAL_CONDITION_KEYSTONE_LEVEL = 247, // NYI
//CRITERIA_ADDITIONAL_CONDITION_UNK_248 = 248, // NYI
CRITERIA_ADDITIONAL_CONDITION_KEYSTONE_DUNGEON = 249, // NYI asset: mapChallengeModeId
//CRITERIA_ADDITIONAL_CONDITION_UNK_250 = 250, // NYI
CRITERIA_ADDITIONAL_CONDITION_PVP_SEASON = 251, // NYI asset: that unknown column in PvpSeason.db2
CRITERIA_ADDITIONAL_CONDITION_SOURCE_DISPLAY_RACE = 252,
CRITERIA_ADDITIONAL_CONDITION_TARGET_DISPLAY_RACE = 253,
CRITERIA_ADDITIONAL_CONDITION_FRIENDSHIP_REP_REACTION_EXACT = 254, // NYI
CRITERIA_ADDITIONAL_CONDITION_SOURCE_AURA_COUNT_EQUAL = 255,
CRITERIA_ADDITIONAL_CONDITION_TARGET_AURA_COUNT_EQUAL = 256,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_AURA_COUNT_GREATER = 257,
CRITERIA_ADDITIONAL_CONDITION_TARGET_AURA_COUNT_GREATER = 258,
CRITERIA_ADDITIONAL_CONDITION_UNLOCKED_AZERITE_ESSENCE_RANK_LOWER = 259,
CRITERIA_ADDITIONAL_CONDITION_UNLOCKED_AZERITE_ESSENCE_RANK_EQUAL = 260,
CRITERIA_ADDITIONAL_CONDITION_UNLOCKED_AZERITE_ESSENCE_RANK_GREATER = 261,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_HAS_AURA_EFFECT_INDEX = 262, // asset: spellId, secondaryAsset: index
CRITERIA_ADDITIONAL_CONDITION_SOURCE_SPECIALIZATION_ROLE = 263,
CRITERIA_ADDITIONAL_CONDITION_SOURCE_LEVEL_120 = 264,
//CRITERIA_ADDITIONAL_CONDITION_UNK_265 = 265,
CRITERIA_ADDITIONAL_CONDITION_SELECTED_AZERITE_ESSENCE_RANK_LOWER = 266,
CRITERIA_ADDITIONAL_CONDITION_SELECTED_AZERITE_ESSENCE_RANK_GREATER = 267,
//CRITERIA_ADDITIONAL_CONDITION_UNK_268 = 268,
//CRITERIA_ADDITIONAL_CONDITION_UNK_269 = 269,
//CRITERIA_ADDITIONAL_CONDITION_UNK_270 = 270,
//CRITERIA_ADDITIONAL_CONDITION_UNK_271 = 271,
//CRITERIA_ADDITIONAL_CONDITION_UNK_272 = 272,
//CRITERIA_ADDITIONAL_CONDITION_UNK_273 = 273,
//CRITERIA_ADDITIONAL_CONDITION_UNK_274 = 274,
//CRITERIA_ADDITIONAL_CONDITION_UNK_275 = 275,
//CRITERIA_ADDITIONAL_CONDITION_UNK_276 = 276,
//CRITERIA_ADDITIONAL_CONDITION_UNK_277 = 277,
//CRITERIA_ADDITIONAL_CONDITION_UNK_278 = 278,
//CRITERIA_ADDITIONAL_CONDITION_UNK_279 = 279,
CRITERIA_ADDITIONAL_CONDITION_MAP_OR_COSMETIC_MAP = 280,
//CRITERIA_ADDITIONAL_CONDITION_UNK_281 = 281,
CRITERIA_ADDITIONAL_CONDITION_HAS_ENTITLEMENT = 282,
CRITERIA_ADDITIONAL_CONDITION_HAS_QUEST_SESSION = 283,
//CRITERIA_ADDITIONAL_CONDITION_UNK_284 = 284,
//CRITERIA_ADDITIONAL_CONDITION_UNK_285 = 285,
};
enum CriteriaFlags
@@ -900,6 +1107,14 @@ enum MapDifficultyFlags : uint8
MAP_DIFFICULTY_FLAG_CANNOT_EXTEND = 0x10
};
enum class ModifierTreeOperator : int8
{
SingleTrue = 2,
SingleFalse = 3,
All = 4,
Some = 8
};
enum MountCapabilityFlags
{
MOUNT_CAPABILITY_FLAG_GROUND = 0x1,

View File

@@ -200,6 +200,15 @@ void AzeriteItem::GiveXP(uint64 xp)
owner->SendDirectMessage(xpGain.Write());
}
UF::SelectedAzeriteEssences const* AzeriteItem::GetSelectedAzeriteEssences() const
{
for (UF::SelectedAzeriteEssences const& essences : m_azeriteItemData->SelectedEssences)
if (essences.Enabled)
return &essences;
return nullptr;
}
void AzeriteItem::BuildValuesCreate(ByteBuffer* data, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);

View File

@@ -41,6 +41,8 @@ public:
static uint64 CalcTotalXPToNextLevel(uint32 level, uint32 knowledgeLevel);
void GiveXP(uint64 xp);
UF::SelectedAzeriteEssences const* GetSelectedAzeriteEssences() const;
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;

View File

@@ -615,6 +615,11 @@ namespace UF
return _values.end();
}
bool empty() const
{
return _values.empty();
}
std::size_t size() const
{
return _values.size();

View File

@@ -6719,6 +6719,15 @@ uint32 Player::GetCurrencyOnWeek(uint32 id) const
return itr->second.WeeklyQuantity;
}
uint32 Player::GetTrackedCurrencyCount(uint32 id) const
{
PlayerCurrenciesMap::const_iterator itr = _currencyStorage.find(id);
if (itr == _currencyStorage.end())
return 0;
return itr->second.TrackedQuantity;
}
bool Player::HasCurrency(uint32 id, uint32 count) const
{
PlayerCurrenciesMap::const_iterator itr = _currencyStorage.find(id);
@@ -15003,6 +15012,7 @@ void Player::AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver)
case TYPEID_ITEM:
case TYPEID_CONTAINER:
case TYPEID_AZERITE_ITEM:
case TYPEID_AZERITE_EMPOWERED_ITEM:
{
Item* item = static_cast<Item*>(questGiver);
sScriptMgr->OnQuestAccept(this, item, quest);
@@ -15541,7 +15551,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
}
if (quest->GetZoneOrSort() > 0)
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE, quest->GetZoneOrSort());
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE, quest->GetQuestId());
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUEST_COUNT);
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUEST, quest->GetQuestId());

View File

@@ -1188,6 +1188,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
uint32 GetCurrencyOnWeek(uint32 id) const;
/// return week cap by currency id
uint32 GetCurrencyWeekCap(uint32 id) const;
/// return tracked currency count by currency id
uint32 GetTrackedCurrencyCount(uint32 id) const;
/// return presence related currency
bool HasCurrency(uint32 id, uint32 count) const;
/// initialize currency count for custom initialization at create character

View File

@@ -843,3 +843,11 @@ uint32 Garrison::Follower::GetItemLevel() const
{
return (PacketInfo.ItemLevelWeapon + PacketInfo.ItemLevelArmor) / 2;
}
bool Garrison::Follower::HasAbility(uint32 garrAbilityId) const
{
return std::find_if(PacketInfo.AbilityID.begin(), PacketInfo.AbilityID.end(), [garrAbilityId](GarrAbilityEntry const* garrAbility)
{
return garrAbility->ID == garrAbilityId;
}) != PacketInfo.AbilityID.end();
}

View File

@@ -204,6 +204,7 @@ public:
struct Follower
{
uint32 GetItemLevel() const;
bool HasAbility(uint32 garrAbilityId) const;
WorldPackets::Garrison::GarrisonFollower PacketInfo;
};

View File

@@ -124,6 +124,11 @@ bool Scenario::IsComplete()
return true;
}
ScenarioEntry const* Scenario::GetEntry() const
{
return _data->Entry;
}
ScenarioStepState Scenario::GetStepState(ScenarioStepEntry const* step)
{
std::map<ScenarioStepEntry const*, ScenarioStepState>::const_iterator itr = _stepStates.find(step);

View File

@@ -64,6 +64,7 @@ class TC_GAME_API Scenario : public CriteriaHandler
bool IsComplete();
void SetStepState(ScenarioStepEntry const* step, ScenarioStepState state) { _stepStates[step] = state; }
ScenarioEntry const* GetEntry() const;
ScenarioStepState GetStepState(ScenarioStepEntry const* step);
ScenarioStepEntry const* GetStep() const { return _currentstep; }
ScenarioStepEntry const* GetFirstStep() const;