Core/Achievements: Several criteria fixes (#26839)

This commit is contained in:
Meji
2021-08-20 09:41:13 +02:00
committed by GitHub
parent d0394f939a
commit bca465a569
5 changed files with 204 additions and 157 deletions

View File

@@ -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_RECRUIT_GARRISON_FOLLOWER:
if (miscValue1 != uint32(criteria->Entry->Asset.GarrFollowerID))
return false;
break;
case CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED:
if (miscValue1 != uint32(criteria->Entry->Asset.TransmogSetGroupID))
return false;
break;
case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT:
if (!miscValue2 /*login case*/ || miscValue1 != uint32(criteria->Entry->Asset.EquipmentSlot))
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:

View File

@@ -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
int32 SkillID;
// CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8
int32 AchievementID;
// CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11
int32 ZoneID;
// CRITERIA_TYPE_CURRENCY = 12
int32 CurrencyID;
// CRITERIA_TYPE_DEATH_IN_DUNGEON = 18
// CRITERIA_TYPE_COMPLETE_RAID = 19
int32 GroupSize;
// CRITERIA_TYPE_DEATHS_FROM = 26
int32 DamageType;
// 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
int32 SpellID;
// CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
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
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
int32 ItemID;
// CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38
// CRITERIA_TYPE_REACH_TEAM_RATING = 39
// CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39
int32 TeamType;
// CRITERIA_TYPE_EXPLORE_AREA = 43
int32 WorldMapOverlayID;
// CRITERIA_TYPE_GAIN_REPUTATION = 46
// CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206
int32 FactionID;
// CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49
int32 ItemSlot;
// CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50
// CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51
int32 RollValue;
// CRITERIA_TYPE_HK_CLASS = 52
int32 ClassID;
// CRITERIA_TYPE_HK_RACE = 53
int32 RaceID;
// CRITERIA_TYPE_DO_EMOTE = 54
int32 EmoteID;
// CRITERIA_TYPE_USE_GAMEOBJECT = 68
// CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72
// CRITERIA_TYPE_SURVEY_GAMEOBJECT = 4
// CRITERIA_TYPE_USE_GAMEOBJECT = 68
// CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72
int32 GameObjectID;
// CRITERIA_TYPE_HIGHEST_POWER = 96
int32 PowerType;
// 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_HIGHEST_STAT = 97
int32 StatType;
// CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8
int32 AchievementID;
// CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98
int32 SpellSchool;
// CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11
int32 ZoneID;
// CRITERIA_TYPE_LOOT_TYPE = 109
int32 LootType;
// CRITERIA_TYPE_CURRENCY = 12
// CRITERIA_TYPE_CONVERT_ITEMS_TO_CURRENCY = 229
int32 CurrencyID;
// CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165
int32 DungeonEncounterID;
// CRITERIA_TYPE_DEATH_IN_DUNGEON = 18
// CRITERIA_TYPE_COMPLETE_RAID = 19
int32 GroupSize;
// CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169
int32 GarrBuildingID;
// CRITERIA_TYPE_MANUAL_COMPLETE_CRITERIA = 21
int32 CriteriaID;
// CRITERIA_TYPE_UPGRADE_GARRISON = 170
int32 GarrisonLevel;
// CRITERIA_TYPE_DEATHS_FROM = 26
int32 DamageType;
// CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174
int32 GarrMissionID;
// CRITERIA_TYPE_COMPLETE_QUEST = 27
int32 QuestID;
// CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182
int32 CharShipmentContainerID;
// 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_APPEARANCE_UNLOCKED_BY_SLOT
// 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_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
int32 ItemID;
// CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38
// CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39
int32 TeamType;
// CRITERIA_TYPE_EXPLORE_AREA = 43
int32 WorldMapOverlayID;
// CRITERIA_TYPE_GAIN_REPUTATION = 46
// CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206
int32 FactionID;
// CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT = 49
// CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT = 199
int32 EquipmentSlot;
// CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205
// CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50
// CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51
int32 RollValue;
// CRITERIA_TYPE_HK_CLASS = 52
int32 ClassID;
// CRITERIA_TYPE_HK_RACE = 53
int32 RaceID;
// CRITERIA_TYPE_DO_EMOTE = 54
int32 EmoteID;
// CRITERIA_TYPE_SEND_EVENT = 73
// CRITERIA_TYPE_SEND_EVENT_SCENARIO = 92
int32 EventID;
// CRITERIA_TYPE_GARRISON_COMPLETE_DUNGEON_ENCOUNTER = 97
// CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165
int32 DungeonEncounterID;
// CRITERIA_TYPE_LOOT_TYPE = 109
int32 LootType;
// CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE_TYPE = 138
int32 GuildChallengeType;
// CRITERIA_TYPE_COMPLETE_SCENARIO = 152
int32 ScenarioID;
// 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_PLACE_GARRISON_BUILDING = 167
// CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169
int32 GarrBuildingID;
// CRITERIA_TYPE_UPGRADE_GARRISON = 170
int32 GarrisonLevel;
// 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_RECRUIT_GARRISON_FOLLOWER = 176
int32 GarrFollowerID;
// CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182
int32 CharShipmentContainerID;
// CRITERIA_TYPE_OWN_ITEM_MODIFIED_APPEARANCE = 192
int32 ItemModifiedAppearanceID;
// CRITERIA_TYPE_ACTIVELY_REACH_LEVEL = 196
int32 PlayerLevel;
// 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;

View File

@@ -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,

View File

@@ -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);

View File

@@ -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);
}
}