diff options
author | Meji <alvaromegias_46@hotmail.com> | 2021-08-20 09:41:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-20 09:41:13 +0200 |
commit | bca465a5694101c476dc01aeafa95dfb3531e427 (patch) | |
tree | 2b7bc7619b7b9f2ec6dc3dcc3331a15c0d5d7057 /src | |
parent | d0394f939a829e385242ab936c30555afafd0616 (diff) |
Core/Achievements: Several criteria fixes (#26839)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 82 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 174 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 10 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Handlers/LootHandler.cpp | 4 |
5 files changed, 165 insertions, 118 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 135d83cc289..baf0ca54f38 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -74,7 +74,7 @@ bool CriteriaData::IsValid(Criteria const* criteria) case CRITERIA_TYPE_CAST_SPELL2: case CRITERIA_TYPE_BE_SPELL_TARGET: case CRITERIA_TYPE_BE_SPELL_TARGET2: - case CRITERIA_TYPE_EQUIP_EPIC_ITEM: + case CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT: case CRITERIA_TYPE_ROLL_NEED_ON_LOOT: case CRITERIA_TYPE_ROLL_GREED_ON_LOOT: case CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: @@ -84,8 +84,8 @@ bool CriteriaData::IsValid(Criteria const* criteria) case CRITERIA_TYPE_GET_KILLING_BLOWS: case CRITERIA_TYPE_REACH_LEVEL: case CRITERIA_TYPE_ON_LOGIN: - case CRITERIA_TYPE_LOOT_EPIC_ITEM: - case CRITERIA_TYPE_RECEIVE_EPIC_ITEM: + case CRITERIA_TYPE_LOOT_ANY_ITEM: + case CRITERIA_TYPE_OBTAIN_ANY_ITEM: break; default: if (DataType != CRITERIA_DATA_TYPE_SCRIPT) @@ -387,7 +387,7 @@ bool CriteriaData::Meets(uint32 criteriaId, Player const* source, Unit const* ta { Criteria const* entry = ASSERT_NOTNULL(sCriteriaMgr->GetCriteria(criteriaId)); - uint32 itemId = (entry->Entry->Type == CRITERIA_TYPE_EQUIP_EPIC_ITEM ? miscValue2 : miscValue1); + uint32 itemId = (entry->Entry->Type == CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT ? miscValue2 : miscValue1); ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId); if (!itemTemplate) return false; @@ -489,8 +489,8 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_QUEST_ABANDONED: case CRITERIA_TYPE_FLIGHT_PATHS_TAKEN: case CRITERIA_TYPE_ACCEPTED_SUMMONINGS: - case CRITERIA_TYPE_LOOT_EPIC_ITEM: - case CRITERIA_TYPE_RECEIVE_EPIC_ITEM: + case CRITERIA_TYPE_LOOT_ANY_ITEM: + case CRITERIA_TYPE_OBTAIN_ANY_ITEM: case CRITERIA_TYPE_DEATH: case CRITERIA_TYPE_COMPLETE_DAILY_QUEST: case CRITERIA_TYPE_COMPLETE_BATTLEGROUND: @@ -522,7 +522,6 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_ON_LOGIN: case CRITERIA_TYPE_PLACE_GARRISON_BUILDING: case CRITERIA_TYPE_UPGRADE_GARRISON_BUILDING: - case CRITERIA_TYPE_OWN_BATTLE_PET_COUNT: case CRITERIA_TYPE_HONOR_LEVEL_REACHED: case CRITERIA_TYPE_PRESTIGE_REACHED: case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT: @@ -641,11 +640,12 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_LEARN_SPELL: case CRITERIA_TYPE_EXPLORE_AREA: case CRITERIA_TYPE_VISIT_BARBER_SHOP: - case CRITERIA_TYPE_EQUIP_EPIC_ITEM: + case CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT: case CRITERIA_TYPE_EQUIP_ITEM: case CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: case CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER: case CRITERIA_TYPE_OWN_BATTLE_PET: + case CRITERIA_TYPE_ACTIVELY_REACH_LEVEL: SetCriteriaProgress(criteria, 1, referencePlayer); break; case CRITERIA_TYPE_BUY_BANK_SLOT: @@ -735,6 +735,9 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 } break; } + case CRITERIA_TYPE_OWN_BATTLE_PET_COUNT: + SetCriteriaProgress(criteria, referencePlayer->GetSession()->GetBattlePetMgr()->GetPetUniqueSpeciesCount(), referencePlayer); + break; case CRITERIA_TYPE_REACH_GUILD_LEVEL: SetCriteriaProgress(criteria, miscValue1, referencePlayer); break; @@ -820,6 +823,8 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_MYTHIC_KEYSTONE_COMPLETED: case CRITERIA_TYPE_APPLY_CONDUIT: case CRITERIA_TYPE_CONVERT_ITEMS_TO_CURRENCY: + case CRITERIA_TYPE_EXPANSION_LEVEL: + case CRITERIA_TYPE_OWN_ITEM_MODIFIED_APPEARANCE: break; // Not implemented yet :( } @@ -1157,7 +1162,7 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi case CRITERIA_TYPE_GAIN_REPUTATION: case CRITERIA_TYPE_GAIN_EXALTED_REPUTATION: case CRITERIA_TYPE_VISIT_BARBER_SHOP: - case CRITERIA_TYPE_EQUIP_EPIC_ITEM: + case CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT: case CRITERIA_TYPE_ROLL_NEED_ON_LOOT: case CRITERIA_TYPE_ROLL_GREED_ON_LOOT: case CRITERIA_TYPE_HK_CLASS: @@ -1198,6 +1203,7 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi case CRITERIA_TYPE_OWN_BATTLE_PET: case CRITERIA_TYPE_HONOR_LEVEL_REACHED: case CRITERIA_TYPE_PRESTIGE_REACHED: + case CRITERIA_TYPE_ACTIVELY_REACH_LEVEL: case CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED: return progress->Counter >= 1; case CRITERIA_TYPE_LEARN_SKILL_LEVEL: @@ -1233,8 +1239,8 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi case CRITERIA_TYPE_GAIN_REVERED_REPUTATION: case CRITERIA_TYPE_GAIN_HONORED_REPUTATION: case CRITERIA_TYPE_KNOWN_FACTIONS: - case CRITERIA_TYPE_LOOT_EPIC_ITEM: - case CRITERIA_TYPE_RECEIVE_EPIC_ITEM: + case CRITERIA_TYPE_LOOT_ANY_ITEM: + case CRITERIA_TYPE_OBTAIN_ANY_ITEM: case CRITERIA_TYPE_ROLL_NEED: case CRITERIA_TYPE_ROLL_GREED: case CRITERIA_TYPE_QUEST_ABANDONED: @@ -1333,11 +1339,13 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis case CRITERIA_TYPE_HIGHEST_HIT_DEALT: case CRITERIA_TYPE_HIGHEST_HIT_RECEIVED: case CRITERIA_TYPE_HONORABLE_KILL: + case CRITERIA_TYPE_LOOT_ANY_ITEM: case CRITERIA_TYPE_LOOT_MONEY: case CRITERIA_TYPE_LOSE_DUEL: case CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD: case CRITERIA_TYPE_MONEY_FROM_VENDORS: case CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS: + case CRITERIA_TYPE_OBTAIN_ANY_ITEM: case CRITERIA_TYPE_QUEST_ABANDONED: case CRITERIA_TYPE_REACH_GUILD_LEVEL: case CRITERIA_TYPE_ROLL_GREED: @@ -1368,6 +1376,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis case CRITERIA_TYPE_KNOWN_FACTIONS: case CRITERIA_TYPE_REACH_LEVEL: case CRITERIA_TYPE_ON_LOGIN: + case CRITERIA_TYPE_OWN_BATTLE_PET_COUNT: break; case CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: if (!RequiredAchievementSatisfied(criteria->Entry->Asset.AchievementID)) @@ -1512,9 +1521,10 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis if (miscValue1 && miscValue1 != uint32(criteria->Entry->Asset.FactionID)) return false; break; - case CRITERIA_TYPE_EQUIP_EPIC_ITEM: - // miscValue1 = itemSlot miscValue2 = itemid - if (!miscValue2 || miscValue1 != uint32(criteria->Entry->Asset.ItemSlot)) + case CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT: + case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT: + // miscValue1 = EquipmentSlot miscValue2 = itemid | itemModifiedAppearanceId + if (!miscValue2 || miscValue1 != uint32(criteria->Entry->Asset.EquipmentSlot)) return false; break; case CRITERIA_TYPE_ROLL_NEED_ON_LOOT: @@ -1558,16 +1568,6 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis if (miscValue1 && miscValue1 != uint32(criteria->Entry->Asset.SkillID)) return false; break; - case CRITERIA_TYPE_LOOT_EPIC_ITEM: - case CRITERIA_TYPE_RECEIVE_EPIC_ITEM: - { - if (!miscValue1) - return false; - ItemTemplate const* proto = sObjectMgr->GetItemTemplate(uint32(miscValue1)); - if (!proto || proto->GetQuality() < ITEM_QUALITY_EPIC) - return false; - break; - } case CRITERIA_TYPE_HK_CLASS: if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.ClassID)) return false; @@ -1581,6 +1581,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis return false; break; case CRITERIA_TYPE_HONORABLE_KILL_AT_AREA: + case CRITERIA_TYPE_TRAVELLED_TO_AREA: if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.AreaID)) return false; break; @@ -1596,19 +1597,20 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis case CRITERIA_TYPE_HIGHEST_TEAM_RATING: return false; case CRITERIA_TYPE_PLACE_GARRISON_BUILDING: + case CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING: if (miscValue1 != uint32(criteria->Entry->Asset.GarrBuildingID)) return false; break; - case CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED: - if (miscValue1 != uint32(criteria->Entry->Asset.TransmogSetGroupID)) + case CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER: + if (miscValue1 != uint32(criteria->Entry->Asset.GarrFollowerID)) return false; break; - case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT: - if (!miscValue2 /*login case*/ || miscValue1 != uint32(criteria->Entry->Asset.EquipmentSlot)) + case CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED: + if (miscValue1 != uint32(criteria->Entry->Asset.TransmogSetGroupID)) return false; break; - case CRITERIA_TYPE_TRAVELLED_TO_AREA: - if (miscValue1 != uint32(criteria->Entry->Asset.AreaID)) + case CRITERIA_TYPE_ACTIVELY_REACH_LEVEL: + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.PlayerLevel)) return false; default: break; @@ -3833,8 +3835,8 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaTypes type) return "GAIN_EXALTED_REPUTATION"; case CRITERIA_TYPE_VISIT_BARBER_SHOP: return "VISIT_BARBER_SHOP"; - case CRITERIA_TYPE_EQUIP_EPIC_ITEM: - return "EQUIP_EPIC_ITEM"; + case CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT: + return "EQUIP_ITEM_IN_SLOT"; case CRITERIA_TYPE_ROLL_NEED_ON_LOOT: return "ROLL_NEED_ON_LOOT"; case CRITERIA_TYPE_ROLL_GREED_ON_LOOT: @@ -3913,10 +3915,10 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaTypes type) return "GAIN_HONORED_REPUTATION"; case CRITERIA_TYPE_KNOWN_FACTIONS: return "KNOWN_FACTIONS"; - case CRITERIA_TYPE_LOOT_EPIC_ITEM: - return "LOOT_EPIC_ITEM"; - case CRITERIA_TYPE_RECEIVE_EPIC_ITEM: - return "RECEIVE_EPIC_ITEM"; + case CRITERIA_TYPE_LOOT_ANY_ITEM: + return "LOOT_ANY_ITEM"; + case CRITERIA_TYPE_OBTAIN_ANY_ITEM: + return "OBTAIN_ANY_ITEM"; case CRITERIA_TYPE_SEND_EVENT_SCENARIO: return "SEND_EVENT_SCENARIO"; case CRITERIA_TYPE_ROLL_NEED: @@ -4077,10 +4079,14 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaTypes type) return "ARTIFACT_POWER_EARNED"; case CRITERIA_TYPE_ARTIFACT_TRAITS_UNLOCKED: return "ARTIFACT_TRAITS_UNLOCKED"; + case CRITERIA_TYPE_OWN_ITEM_MODIFIED_APPEARANCE: + return "OWN_ITEM_MODIFIED_APPEARANCE"; case CRITERIA_TYPE_HONOR_LEVEL_REACHED: return "HONOR_LEVEL_REACHED"; case CRITERIA_TYPE_PRESTIGE_REACHED: return "PRESTIGE_REACHED"; + case CRITERIA_TYPE_ACTIVELY_REACH_LEVEL: + return "ACTIVELY_REACH_LEVEL"; case CRITERIA_TYPE_ORDER_HALL_TALENT_LEARNED: return "ORDER_HALL_TALENT_LEARNED"; case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT: @@ -4097,6 +4103,8 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaTypes type) return "EARN_HONOR_XP"; case CRITERIA_TYPE_RELIC_TALENT_UNLOCKED: return "RELIC_TALENT_UNLOCKED"; + case CRITERIA_TYPE_EXPANSION_LEVEL: + return "EXPANSION_LEVEL"; case CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL: return "REACH_ACCOUNT_HONOR_LEVEL"; case CRITERIA_TYPE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED: @@ -4152,7 +4160,7 @@ inline bool IsCriteriaTypeStoredByAsset(CriteriaTypes type) case CRITERIA_TYPE_LOOT_ITEM: case CRITERIA_TYPE_EXPLORE_AREA: case CRITERIA_TYPE_GAIN_REPUTATION: - case CRITERIA_TYPE_EQUIP_EPIC_ITEM: + case CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT: case CRITERIA_TYPE_HK_CLASS: case CRITERIA_TYPE_HK_RACE: case CRITERIA_TYPE_DO_EMOTE: diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index a6d07fab005..a1e05e12c71 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -1007,137 +1007,173 @@ struct CriteriaEntry union AssetNameAlias { int32 ID; - // CRITERIA_TYPE_KILL_CREATURE = 0 - // CRITERIA_TYPE_KILLED_BY_CREATURE = 20 + // CRITERIA_TYPE_KILL_CREATURE = 0 + // CRITERIA_TYPE_KILLED_BY_CREATURE = 20 + // CRITERIA_TYPE_OWN_PET = 96 + // CRITERIA_TYPE_208 = 208 int32 CreatureID; - // CRITERIA_TYPE_WIN_BG = 1 - // CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15 - // CRITERIA_TYPE_DEATH_AT_MAP = 16 - // CRITERIA_TYPE_WIN_ARENA = 32 - // CRITERIA_TYPE_PLAY_ARENA = 33 + // CRITERIA_TYPE_WIN_BG = 1 + // CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15 + // CRITERIA_TYPE_DEATH_AT_MAP = 16 + // CRITERIA_TYPE_WIN_ARENA = 32 + // CRITERIA_TYPE_PLAY_ARENA = 33 + // CRITERIA_TYPE_COMPLETE_CHALLENGE_MODE = 71 int32 MapID; - // CRITERIA_TYPE_REACH_SKILL_LEVEL = 7 - // CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40 - // CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75 - // CRITERIA_TYPE_LEARN_SKILL_LINE = 112 + // CRITERIA_TYPE_SURVEY_GAMEOBJECT = 4 + // CRITERIA_TYPE_USE_GAMEOBJECT = 68 + // CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72 + int32 GameObjectID; + + // CRITERIA_TYPE_REACH_SKILL_LEVEL = 7 + // CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40 + // CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75 + // CRITERIA_TYPE_LEARN_SKILL_LINE = 112 int32 SkillID; - // CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8 + // CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8 int32 AchievementID; - // CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11 + // CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11 int32 ZoneID; - // CRITERIA_TYPE_CURRENCY = 12 + // CRITERIA_TYPE_CURRENCY = 12 + // CRITERIA_TYPE_CONVERT_ITEMS_TO_CURRENCY = 229 int32 CurrencyID; - // CRITERIA_TYPE_DEATH_IN_DUNGEON = 18 - // CRITERIA_TYPE_COMPLETE_RAID = 19 + // CRITERIA_TYPE_DEATH_IN_DUNGEON = 18 + // CRITERIA_TYPE_COMPLETE_RAID = 19 int32 GroupSize; - // CRITERIA_TYPE_DEATHS_FROM = 26 + // CRITERIA_TYPE_MANUAL_COMPLETE_CRITERIA = 21 + int32 CriteriaID; + + // CRITERIA_TYPE_DEATHS_FROM = 26 int32 DamageType; - // CRITERIA_TYPE_COMPLETE_QUEST = 27 + // CRITERIA_TYPE_COMPLETE_QUEST = 27 int32 QuestID; - // CRITERIA_TYPE_BE_SPELL_TARGET = 28 - // CRITERIA_TYPE_BE_SPELL_TARGET2 = 69 - // CRITERIA_TYPE_CAST_SPELL = 29 - // CRITERIA_TYPE_CAST_SPELL2 = 110 - // CRITERIA_TYPE_LEARN_SPELL = 34 + // CRITERIA_TYPE_BE_SPELL_TARGET = 28 + // CRITERIA_TYPE_CAST_SPELL = 29 + // CRITERIA_TYPE_LEARN_SPELL = 34 + // CRITERIA_TYPE_BE_SPELL_TARGET2 = 69 + // CRITERIA_TYPE_CAST_SPELL2 = 110 int32 SpellID; - // CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE + // CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE = 30 int32 ObjectiveId; - // CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31 - // CRITERIA_TYPE_ENTER_AREA = 163 - // CRITERIA_TYPE_LEAVE_AREA = 164 - // CRITERIA_TYPE_TRAVELED_TO_AREA = 225 + // CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31 + // CRITERIA_TYPE_ENTER_AREA = 163 + // CRITERIA_TYPE_LEAVE_AREA = 164 + // CRITERIA_TYPE_TRAVELLED_TO_AREA = 225 int32 AreaID; - // CRITERIA_TYPE_OWN_ITEM = 36 - // CRITERIA_TYPE_USE_ITEM = 41 - // CRITERIA_TYPE_LOOT_ITEM = 42 - // CRITERIA_TYPE_EQUIP_ITEM = 57 - // CRITERIA_TYPE_OWN_TOY = 185 + // CRITERIA_TYPE_OWN_ITEM = 36 + // CRITERIA_TYPE_USE_ITEM = 41 + // CRITERIA_TYPE_LOOT_ITEM = 42 + // CRITERIA_TYPE_EQUIP_ITEM = 57 + // CRITERIA_TYPE_OWN_TOY = 185 int32 ItemID; - // CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38 - // CRITERIA_TYPE_REACH_TEAM_RATING = 39 - // CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39 + // CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38 + // CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39 int32 TeamType; - // CRITERIA_TYPE_EXPLORE_AREA = 43 + // CRITERIA_TYPE_EXPLORE_AREA = 43 int32 WorldMapOverlayID; - // CRITERIA_TYPE_GAIN_REPUTATION = 46 - // CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206 + // CRITERIA_TYPE_GAIN_REPUTATION = 46 + // CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206 int32 FactionID; - // CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49 - int32 ItemSlot; + // CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT = 49 + // CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT = 199 + int32 EquipmentSlot; - // CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50 - // CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51 + // CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50 + // CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51 int32 RollValue; - // CRITERIA_TYPE_HK_CLASS = 52 + // CRITERIA_TYPE_HK_CLASS = 52 int32 ClassID; - // CRITERIA_TYPE_HK_RACE = 53 + // CRITERIA_TYPE_HK_RACE = 53 int32 RaceID; - // CRITERIA_TYPE_DO_EMOTE = 54 + // CRITERIA_TYPE_DO_EMOTE = 54 int32 EmoteID; - // CRITERIA_TYPE_USE_GAMEOBJECT = 68 - // CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72 - int32 GameObjectID; + // CRITERIA_TYPE_SEND_EVENT = 73 + // CRITERIA_TYPE_SEND_EVENT_SCENARIO = 92 + int32 EventID; - // CRITERIA_TYPE_HIGHEST_POWER = 96 - int32 PowerType; + // CRITERIA_TYPE_GARRISON_COMPLETE_DUNGEON_ENCOUNTER = 97 + // CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165 + int32 DungeonEncounterID; - // CRITERIA_TYPE_HIGHEST_STAT = 97 - int32 StatType; + // CRITERIA_TYPE_LOOT_TYPE = 109 + int32 LootType; - // CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98 - int32 SpellSchool; + // CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE_TYPE = 138 + int32 GuildChallengeType; - // CRITERIA_TYPE_LOOT_TYPE = 109 - int32 LootType; + // CRITERIA_TYPE_COMPLETE_SCENARIO = 152 + int32 ScenarioID; - // CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165 - int32 DungeonEncounterID; + // CRITERIA_TYPE_REACH_AREATRIGGER_WITH_ACTIONSET = 153 + int32 AreaTriggerActionSetID; + + // CRITERIA_TYPE_LEVEL_BATTLE_PET = 160 + // CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT = 162 + int32 PetLevel; - // CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169 + // CRITERIA_TYPE_PLACE_GARRISON_BUILDING = 167 + // CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169 int32 GarrBuildingID; - // CRITERIA_TYPE_UPGRADE_GARRISON = 170 + // CRITERIA_TYPE_UPGRADE_GARRISON = 170 int32 GarrisonLevel; - // CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174 + // CRITERIA_TYPE_START_GARRISON_MISSION = 171 + // CRITERIA_TYPE_COMPLETE_GARRISON_MISSION_COUNT = 173 + int32 GarrFollowerTypeID; + + // CRITERIA_TYPE_START_ORDER_HALL_MISSION = 172 + // CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174 int32 GarrMissionID; - // CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182 + // CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER = 176 + int32 GarrFollowerID; + + // CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182 int32 CharShipmentContainerID; - // CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT - int32 EquipmentSlot; + // CRITERIA_TYPE_OWN_ITEM_MODIFIED_APPEARANCE = 192 + int32 ItemModifiedAppearanceID; + + // CRITERIA_TYPE_ACTIVELY_REACH_LEVEL = 196 + int32 PlayerLevel; - // CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205 + // CRITERIA_TYPE_ORDER_HALL_TALENT_LEARNED = 198 + // CRITERIA_TYPE_202 = 202 + int32 GarrTalentID; + + // CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205 int32 TransmogSetGroupID; - // CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211 + // CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211 int32 ArtifactPowerID; - // CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213 + // CRITERIA_TYPE_EXPANSION_LEVEL = 212 + int32 ExpansionLevel; + + // CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213 int32 AccountHonorLevel; - // CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215 + // CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215 int32 HeartOfAzerothLevel; } Asset; uint32 ModifierTreeId; diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 44a0301a3eb..fdc4a3aac10 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -354,7 +354,7 @@ enum CriteriaTypes : uint8 CRITERIA_TYPE_GAIN_REPUTATION = 46, CRITERIA_TYPE_GAIN_EXALTED_REPUTATION = 47, CRITERIA_TYPE_VISIT_BARBER_SHOP = 48, - CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49, + CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT = 49, CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50, /// @todo itemlevel is mentioned in text but not present in dbc CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51, CRITERIA_TYPE_HK_CLASS = 52, @@ -395,8 +395,8 @@ enum CriteriaTypes : uint8 CRITERIA_TYPE_GAIN_REVERED_REPUTATION = 87, CRITERIA_TYPE_GAIN_HONORED_REPUTATION = 88, CRITERIA_TYPE_KNOWN_FACTIONS = 89, - CRITERIA_TYPE_LOOT_EPIC_ITEM = 90, - CRITERIA_TYPE_RECEIVE_EPIC_ITEM = 91, + CRITERIA_TYPE_LOOT_ANY_ITEM = 90, + CRITERIA_TYPE_OBTAIN_ANY_ITEM = 91, CRITERIA_TYPE_SEND_EVENT_SCENARIO = 92, CRITERIA_TYPE_ROLL_NEED = 93, CRITERIA_TYPE_ROLL_GREED = 94, @@ -497,9 +497,10 @@ enum CriteriaTypes : uint8 CRITERIA_TYPE_OWN_HEIRLOOMS = 189, CRITERIA_TYPE_ARTIFACT_POWER_EARNED = 190, CRITERIA_TYPE_ARTIFACT_TRAITS_UNLOCKED = 191, + CRITERIA_TYPE_OWN_ITEM_MODIFIED_APPEARANCE = 192, CRITERIA_TYPE_HONOR_LEVEL_REACHED = 194, CRITERIA_TYPE_PRESTIGE_REACHED = 195, - // 196 - CRITERIA_TYPE_REACH_LEVEL_2 or something + CRITERIA_TYPE_ACTIVELY_REACH_LEVEL = 196, // 197 - Order Hall Advancement related CRITERIA_TYPE_ORDER_HALL_TALENT_LEARNED = 198, CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT = 199, @@ -512,6 +513,7 @@ enum CriteriaTypes : uint8 CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206, CRITERIA_TYPE_EARN_HONOR_XP = 207, CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211, + CRITERIA_TYPE_EXPANSION_LEVEL = 212, CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213, CRITERIA_TYPE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED= 214, CRITERIA_TYPE_HEART_OF_AZEROTH_LEVEL_REACHED = 215, diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 66b7b9ee684..a4afd3a0889 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2382,6 +2382,7 @@ void Player::GiveLevel(uint8 level) } UpdateCriteria(CRITERIA_TYPE_REACH_LEVEL); + UpdateCriteria(CRITERIA_TYPE_ACTIVELY_REACH_LEVEL, level); PushQuests(); @@ -12045,7 +12046,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat if (item) { ItemAddedQuestCheck(itemId, count); - UpdateCriteria(CRITERIA_TYPE_RECEIVE_EPIC_ITEM, itemId, count); + UpdateCriteria(CRITERIA_TYPE_OBTAIN_ANY_ITEM, itemId, count); UpdateCriteria(CRITERIA_TYPE_OWN_ITEM, itemId, 1); item->AddItemFlag(ITEM_FIELD_FLAG_NEW_ITEM); @@ -12235,7 +12236,7 @@ Item* Player::EquipNewItem(uint16 pos, uint32 item, ItemContext context, bool up if (Item* pItem = Item::CreateItem(item, 1, context, this)) { ItemAddedQuestCheck(item, 1); - UpdateCriteria(CRITERIA_TYPE_RECEIVE_EPIC_ITEM, item, 1); + UpdateCriteria(CRITERIA_TYPE_OBTAIN_ANY_ITEM, item, 1); return EquipItem(pos, pItem, update); } @@ -12350,7 +12351,7 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update) // only for full equip instead adding to stack UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM, pItem->GetEntry()); - UpdateCriteria(CRITERIA_TYPE_EQUIP_EPIC_ITEM, slot, pItem->GetEntry()); + UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT, slot, pItem->GetEntry()); UpdateAverageItemLevelEquipped(); @@ -12478,7 +12479,7 @@ void Player::QuickEquipItem(uint16 pos, Item* pItem) CheckTitanGripPenalty(); UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM, pItem->GetEntry()); - UpdateCriteria(CRITERIA_TYPE_EQUIP_EPIC_ITEM, slot, pItem->GetEntry()); + UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT, slot, pItem->GetEntry()); } } @@ -12635,7 +12636,7 @@ void Player::MoveItemToInventory(ItemPosCountVec const& dest, Item* pItem, bool { // update quest counters ItemAddedQuestCheck(pItem->GetEntry(), pItem->GetCount()); - UpdateCriteria(CRITERIA_TYPE_RECEIVE_EPIC_ITEM, pItem->GetEntry(), pItem->GetCount()); + UpdateCriteria(CRITERIA_TYPE_OBTAIN_ANY_ITEM, pItem->GetEntry(), pItem->GetCount()); // store item Item* pLastItem = StoreItem(dest, pItem, update); @@ -26334,7 +26335,7 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot, AELootResult* aeResult/* SendNewItem(newitem, uint32(item->count), false, false, true); UpdateCriteria(CRITERIA_TYPE_LOOT_ITEM, item->itemid, item->count); UpdateCriteria(CRITERIA_TYPE_LOOT_TYPE, item->itemid, item->count, loot->loot_type); - UpdateCriteria(CRITERIA_TYPE_LOOT_EPIC_ITEM, item->itemid, item->count); + UpdateCriteria(CRITERIA_TYPE_LOOT_ANY_ITEM, item->itemid, item->count); } else aeResult->Add(newitem, item->count, loot->loot_type); diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index c9404dc1be2..f9074df7fbb 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -137,7 +137,7 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem& p player->SendNewItem(resultValue.item, resultValue.count, false, false, true); player->UpdateCriteria(CRITERIA_TYPE_LOOT_ITEM, resultValue.item->GetEntry(), resultValue.count); player->UpdateCriteria(CRITERIA_TYPE_LOOT_TYPE, resultValue.item->GetEntry(), resultValue.count, resultValue.lootType); - player->UpdateCriteria(CRITERIA_TYPE_LOOT_EPIC_ITEM, resultValue.item->GetEntry(), resultValue.count); + player->UpdateCriteria(CRITERIA_TYPE_LOOT_ANY_ITEM, resultValue.item->GetEntry(), resultValue.count); } } } @@ -548,7 +548,7 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPackets::Loot::MasterLootItem target->SendNewItem(resultValue.item, resultValue.count, false, false, true); target->UpdateCriteria(CRITERIA_TYPE_LOOT_ITEM, resultValue.item->GetEntry(), resultValue.count); target->UpdateCriteria(CRITERIA_TYPE_LOOT_TYPE, resultValue.item->GetEntry(), resultValue.count, resultValue.lootType); - target->UpdateCriteria(CRITERIA_TYPE_LOOT_EPIC_ITEM, resultValue.item->GetEntry(), resultValue.count); + target->UpdateCriteria(CRITERIA_TYPE_LOOT_ANY_ITEM, resultValue.item->GetEntry(), resultValue.count); } } |