aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeji <alvaromegias_46@hotmail.com>2021-08-20 09:41:13 +0200
committerGitHub <noreply@github.com>2021-08-20 09:41:13 +0200
commitbca465a5694101c476dc01aeafa95dfb3531e427 (patch)
tree2b7bc7619b7b9f2ec6dc3dcc3331a15c0d5d7057 /src
parentd0394f939a829e385242ab936c30555afafd0616 (diff)
Core/Achievements: Several criteria fixes (#26839)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp82
-rw-r--r--src/server/game/DataStores/DB2Structure.h174
-rw-r--r--src/server/game/DataStores/DBCEnums.h10
-rw-r--r--src/server/game/Entities/Player/Player.cpp13
-rw-r--r--src/server/game/Handlers/LootHandler.cpp4
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);
}
}