Core/Achievements: Update CriteriaType enum (#26856)

This commit is contained in:
Meji
2021-09-08 22:07:01 +02:00
committed by GitHub
parent f57cf66dac
commit 0a83f74876
52 changed files with 1486 additions and 1381 deletions
@@ -57,8 +57,8 @@ AchievementMgr::~AchievementMgr() { }
void AchievementMgr::CheckAllAchievementCriteria(Player* referencePlayer)
{
// suppress sending packets
for (uint32 i = 0; i < CRITERIA_TYPE_TOTAL; ++i)
UpdateCriteria(CriteriaTypes(i), 0, 0, 0, nullptr, referencePlayer);
for (uint32 i = 0; i < uint32(CriteriaType::Count); ++i)
UpdateCriteria(CriteriaType(i), 0, 0, 0, nullptr, referencePlayer);
}
bool AchievementMgr::HasAchieved(uint32 achievementId) const
@@ -525,8 +525,8 @@ void PlayerAchievementMgr::CompletedAchievement(AchievementEntry const* achievem
if (!(achievement->Flags & ACHIEVEMENT_FLAG_TRACKING_FLAG))
_achievementPoints += achievement->Points;
UpdateCriteria(CRITERIA_TYPE_COMPLETE_ACHIEVEMENT, achievement->ID, 0, 0, nullptr, referencePlayer);
UpdateCriteria(CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS, achievement->Points, 0, 0, nullptr, referencePlayer);
UpdateCriteria(CriteriaType::EarnAchievement, achievement->ID, 0, 0, nullptr, referencePlayer);
UpdateCriteria(CriteriaType::EarnAchievementPoints, achievement->Points, 0, 0, nullptr, referencePlayer);
// reward items and titles if any
AchievementReward const* reward = sAchievementMgr->GetAchievementReward(achievement);
@@ -691,7 +691,7 @@ void PlayerAchievementMgr::SendPacket(WorldPacket const* data) const
_owner->SendDirectMessage(data);
}
CriteriaList const& PlayerAchievementMgr::GetCriteriaByType(CriteriaTypes type, uint32 asset) const
CriteriaList const& PlayerAchievementMgr::GetCriteriaByType(CriteriaType type, uint32 asset) const
{
return sCriteriaMgr->GetPlayerCriteriaByType(type, asset);
}
@@ -972,8 +972,8 @@ void GuildAchievementMgr::CompletedAchievement(AchievementEntry const* achieveme
if (!(achievement->Flags & ACHIEVEMENT_FLAG_TRACKING_FLAG))
_achievementPoints += achievement->Points;
UpdateCriteria(CRITERIA_TYPE_COMPLETE_ACHIEVEMENT, achievement->ID, 0, 0, nullptr, referencePlayer);
UpdateCriteria(CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS, achievement->Points, 0, 0, nullptr, referencePlayer);
UpdateCriteria(CriteriaType::EarnAchievement, achievement->ID, 0, 0, nullptr, referencePlayer);
UpdateCriteria(CriteriaType::EarnAchievementPoints, achievement->Points, 0, 0, nullptr, referencePlayer);
}
void GuildAchievementMgr::SendCriteriaUpdate(Criteria const* entry, CriteriaProgress const* progress, Seconds /*timeElapsed*/, bool /*timedCompleted*/) const
@@ -1026,7 +1026,7 @@ void GuildAchievementMgr::SendPacket(WorldPacket const* data) const
_owner->BroadcastPacket(data);
}
CriteriaList const& GuildAchievementMgr::GetCriteriaByType(CriteriaTypes type, uint32 /*asset*/) const
CriteriaList const& GuildAchievementMgr::GetCriteriaByType(CriteriaType type, uint32 /*asset*/) const
{
return sCriteriaMgr->GetGuildCriteriaByType(type);
}
@@ -103,7 +103,7 @@ protected:
void SendPacket(WorldPacket const* data) const override;
std::string GetOwnerInfo() const override;
CriteriaList const& GetCriteriaByType(CriteriaTypes type, uint32 asset) const override;
CriteriaList const& GetCriteriaByType(CriteriaType type, uint32 asset) const override;
private:
Player* _owner;
@@ -136,7 +136,7 @@ protected:
void SendPacket(WorldPacket const* data) const override;
std::string GetOwnerInfo() const override;
CriteriaList const& GetCriteriaByType(CriteriaTypes type, uint32 asset) const override;
CriteriaList const& GetCriteriaByType(CriteriaType type, uint32 asset) const override;
private:
Guild* _owner;
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -271,7 +271,7 @@ public:
virtual void Reset();
void UpdateCriteria(CriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, WorldObject const* ref = nullptr, Player* referencePlayer = nullptr);
void UpdateCriteria(CriteriaType type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, WorldObject const* ref = nullptr, Player* referencePlayer = nullptr);
virtual void SendAllData(Player const* receiver) const = 0;
@@ -305,7 +305,7 @@ protected:
bool ModifierSatisfied(ModifierTreeEntry const* modifier, uint64 miscValue1, uint64 miscValue2, WorldObject const* ref, Player* referencePlayer) const;
virtual std::string GetOwnerInfo() const = 0;
virtual CriteriaList const& GetCriteriaByType(CriteriaTypes type, uint32 asset) const = 0;
virtual CriteriaList const& GetCriteriaByType(CriteriaType type, uint32 asset) const = 0;
CriteriaProgressMap _criteriaProgress;
std::map<uint32, uint32 /*ms time left*/> _timeCriteriaTrees;
@@ -317,26 +317,26 @@ class TC_GAME_API CriteriaMgr
~CriteriaMgr();
public:
static char const* GetCriteriaTypeString(CriteriaTypes type);
static char const* GetCriteriaTypeString(CriteriaType type);
static char const* GetCriteriaTypeString(uint32 type);
static CriteriaMgr* Instance();
CriteriaList const& GetPlayerCriteriaByType(CriteriaTypes type, uint32 asset) const;
CriteriaList const& GetPlayerCriteriaByType(CriteriaType type, uint32 asset) const;
CriteriaList const& GetGuildCriteriaByType(CriteriaTypes type) const
CriteriaList const& GetGuildCriteriaByType(CriteriaType type) const
{
return _guildCriteriasByType[type];
return _guildCriteriasByType[size_t(type)];
}
CriteriaList const& GetScenarioCriteriaByType(CriteriaTypes type) const
CriteriaList const& GetScenarioCriteriaByType(CriteriaType type) const
{
return _scenarioCriteriasByType[type];
return _scenarioCriteriasByType[size_t(type)];
}
CriteriaList const& GetQuestObjectiveCriteriaByType(CriteriaTypes type) const
CriteriaList const& GetQuestObjectiveCriteriaByType(CriteriaType type) const
{
return _questObjectiveCriteriasByType[type];
return _questObjectiveCriteriasByType[size_t(type)];
}
CriteriaTreeList const* GetCriteriaTreesByCriteria(uint32 criteriaId) const
@@ -362,16 +362,16 @@ public:
return iter != _criteriaDataMap.end() ? &iter->second : nullptr;
}
static bool IsGroupCriteriaType(CriteriaTypes type)
static bool IsGroupCriteriaType(CriteriaType type)
{
switch (type)
{
case CRITERIA_TYPE_KILL_CREATURE:
case CRITERIA_TYPE_WIN_BG:
case CRITERIA_TYPE_BE_SPELL_TARGET: // NYI
case CRITERIA_TYPE_WIN_RATED_ARENA:
case CRITERIA_TYPE_BE_SPELL_TARGET2: // NYI
case CRITERIA_TYPE_WIN_RATED_BATTLEGROUND: // NYI
case CriteriaType::KillCreature:
case CriteriaType::WinBattleground:
case CriteriaType::BeSpellTarget: // NYI
case CriteriaType::WinAnyRankedArena:
case CriteriaType::GainAura: // NYI
case CriteriaType::WinAnyBattleground: // NYI
return true;
default:
break;
@@ -406,11 +406,11 @@ private:
std::unordered_map<uint32, CriteriaTreeList> _criteriaTreeByCriteria;
// store criterias by type to speed up lookup
CriteriaList _criteriasByType[CRITERIA_TYPE_TOTAL];
CriteriaListByAsset _criteriasByAsset[CRITERIA_TYPE_TOTAL];
CriteriaList _guildCriteriasByType[CRITERIA_TYPE_TOTAL];
CriteriaList _scenarioCriteriasByType[CRITERIA_TYPE_TOTAL];
CriteriaList _questObjectiveCriteriasByType[CRITERIA_TYPE_TOTAL];
CriteriaList _criteriasByType[size_t(CriteriaType::Count)];
CriteriaListByAsset _criteriasByAsset[size_t(CriteriaType::Count)];
CriteriaList _guildCriteriasByType[size_t(CriteriaType::Count)];
CriteriaList _scenarioCriteriasByType[size_t(CriteriaType::Count)];
CriteriaList _questObjectiveCriteriasByType[size_t(CriteriaType::Count)];
CriteriaList _criteriasByTimedType[size_t(CriteriaStartEvent::Count)];
std::unordered_map<int32, CriteriaList> _criteriasByFailEvent[size_t(CriteriaFailEvent::Count)];
@@ -1767,8 +1767,8 @@ bool AuctionHouseObject::BuyCommodity(CharacterDatabaseTransaction trans, Player
if (Player* owner = ObjectAccessor::FindConnectedPlayer(auction->Owner))
{
owner->UpdateCriteria(CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS, profit);
owner->UpdateCriteria(CRITERIA_TYPE_HIGHEST_AUCTION_SOLD, profit);
owner->UpdateCriteria(CriteriaType::MoneyEarnedFromAuctions, profit);
owner->UpdateCriteria(CriteriaType::HighestAuctionSale, profit);
owner->GetSession()->SendAuctionClosedNotification(auction, (float)sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY), true);
}
@@ -1909,7 +1909,7 @@ void AuctionHouseObject::SendAuctionWon(AuctionPosting const* auction, Player* b
bidder->SendDirectMessage(packet.Write());
// FIXME: for offline player need also
bidder->UpdateCriteria(CRITERIA_TYPE_WON_AUCTIONS, 1);
bidder->UpdateCriteria(CriteriaType::AuctionsWon, 1);
}
mail.SendMailTo(trans, MailReceiver(bidder, auction->Bidder), this, MAIL_CHECK_MASK_COPIED);
@@ -1937,8 +1937,8 @@ void AuctionHouseObject::SendAuctionSold(AuctionPosting const* auction, Player*
//FIXME: what do if owner offline
if (owner)
{
owner->UpdateCriteria(CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS, profit);
owner->UpdateCriteria(CRITERIA_TYPE_HIGHEST_AUCTION_SOLD, auction->BidAmount);
owner->UpdateCriteria(CriteriaType::MoneyEarnedFromAuctions, profit);
owner->UpdateCriteria(CriteriaType::HighestAuctionSale, auction->BidAmount);
//send auction owner notification, bidder must be current!
owner->GetSession()->SendAuctionClosedNotification(auction, (float)sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY), true);
}
+1 -1
View File
@@ -334,7 +334,7 @@ void BattlePetMgr::AddPet(uint32 species, uint32 creatureId, uint16 breed, uint8
updates.push_back(std::ref(pet));
SendUpdates(std::move(updates), true);
_owner->GetPlayer()->UpdateCriteria(CRITERIA_TYPE_OWN_BATTLE_PET, species);
_owner->GetPlayer()->UpdateCriteria(CriteriaType::LearnedNewPet, species);
}
void BattlePetMgr::RemovePet(ObjectGuid guid)
+3 -3
View File
@@ -249,8 +249,8 @@ void Arena::EndBattleground(uint32 winner)
{
// update achievement BEFORE personal rating update
uint32 rating = player->GetArenaPersonalRating(winnerArenaTeam->GetSlot());
player->UpdateCriteria(CRITERIA_TYPE_WIN_RATED_ARENA, rating ? rating : 1);
player->UpdateCriteria(CRITERIA_TYPE_WIN_ARENA, GetMapId());
player->UpdateCriteria(CriteriaType::WinAnyRankedArena, rating ? rating : 1);
player->UpdateCriteria(CriteriaType::WinArena, GetMapId());
// Last standing - Rated 5v5 arena & be solely alive player
if (GetArenaType() == ARENA_TYPE_5v5 && aliveWinners == 1 && player->IsAlive())
@@ -261,7 +261,7 @@ void Arena::EndBattleground(uint32 winner)
guildAwarded = true;
if (ObjectGuid::LowType guildId = GetBgMap()->GetOwnerGuildId(player->GetBGTeam()))
if (Guild* guild = sGuildMgr->GetGuildById(guildId))
guild->UpdateCriteria(CRITERIA_TYPE_WIN_RATED_ARENA, std::max<uint32>(winnerArenaTeam->GetRating(), 1), 0, 0, nullptr, player);
guild->UpdateCriteria(CriteriaType::WinAnyRankedArena, std::max<uint32>(winnerArenaTeam->GetRating(), 1), 0, 0, nullptr, player);
}
winnerArenaTeam->MemberWon(player, loserMatchmakerRating, winnerMatchmakerChange);
+2 -2
View File
@@ -444,7 +444,7 @@ void ArenaTeamMember::ModifyPersonalRating(Player* player, int32 mod, uint32 typ
if (player)
{
player->SetArenaTeamInfoField(ArenaTeam::GetSlotByType(type), ARENA_TEAM_PERSONAL_RATING, PersonalRating);
player->UpdateCriteria(CRITERIA_TYPE_HIGHEST_PERSONAL_RATING, PersonalRating, type);
player->UpdateCriteria(CriteriaType::EarnPersonalArenaRating, PersonalRating, type);
}
}
@@ -605,7 +605,7 @@ void ArenaTeam::FinishGame(int32 mod)
// Check if rating related achivements are met
for (MemberList::iterator itr = Members.begin(); itr != Members.end(); ++itr)
if (Player* member = ObjectAccessor::FindConnectedPlayer(itr->Guid))
member->UpdateCriteria(CRITERIA_TYPE_HIGHEST_TEAM_RATING, Stats.Rating, Type);
member->UpdateCriteria(CriteriaType::EarnTeamArenaRating, Stats.Rating, Type);
}
// Update number of games played per season or week
@@ -818,14 +818,14 @@ void Battleground::EndBattleground(uint32 winner)
// TODO: loss honor xp
}
player->UpdateCriteria(CRITERIA_TYPE_WIN_BG, player->GetMapId());
player->UpdateCriteria(CriteriaType::WinBattleground, player->GetMapId());
if (!guildAwarded)
{
guildAwarded = true;
if (ObjectGuid::LowType guildId = GetBgMap()->GetOwnerGuildId(player->GetBGTeam()))
{
if (Guild* guild = sGuildMgr->GetGuildById(guildId))
guild->UpdateCriteria(CRITERIA_TYPE_WIN_BG, player->GetMapId(), 0, 0, nullptr, player);
guild->UpdateCriteria(CriteriaType::WinBattleground, player->GetMapId(), 0, 0, nullptr, player);
}
}
}
@@ -842,7 +842,7 @@ void Battleground::EndBattleground(uint32 winner)
player->SendDirectMessage(pvpMatchComplete.GetRawPacket());
player->UpdateCriteria(CRITERIA_TYPE_COMPLETE_BATTLEGROUND, player->GetMapId());
player->UpdateCriteria(CriteriaType::ParticipateInBattleground, player->GetMapId());
}
}
@@ -683,10 +683,10 @@ bool BattlegroundAB::UpdatePlayerScore(Player* player, uint32 type, uint32 value
switch (type)
{
case SCORE_BASES_ASSAULTED:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_ASSAULT_BASE);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, AB_OBJECTIVE_ASSAULT_BASE);
break;
case SCORE_BASES_DEFENDED:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_DEFEND_BASE);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, AB_OBJECTIVE_DEFEND_BASE);
break;
default:
break;
@@ -537,16 +537,16 @@ bool BattlegroundAV::UpdatePlayerScore(Player* player, uint32 type, uint32 value
switch (type)
{
case SCORE_GRAVEYARDS_ASSAULTED:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_GRAVEYARD);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, AV_OBJECTIVE_ASSAULT_GRAVEYARD);
break;
case SCORE_GRAVEYARDS_DEFENDED:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_GRAVEYARD);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, AV_OBJECTIVE_DEFEND_GRAVEYARD);
break;
case SCORE_TOWERS_ASSAULTED:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_TOWER);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, AV_OBJECTIVE_ASSAULT_TOWER);
break;
case SCORE_TOWERS_DEFENDED:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_TOWER);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, AV_OBJECTIVE_DEFEND_TOWER);
break;
default:
break;
@@ -847,7 +847,7 @@ bool BattlegroundEY::UpdatePlayerScore(Player* player, uint32 type, uint32 value
switch (type)
{
case SCORE_FLAG_CAPTURES:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, EY_OBJECTIVE_CAPTURE_FLAG);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, EY_OBJECTIVE_CAPTURE_FLAG);
break;
default:
break;
@@ -909,7 +909,7 @@ void BattlegroundSA::TitanRelicActivated(Player* clicker)
{
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
if (player->GetTeamId() == Attackers)
player->UpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
player->UpdateCriteria(CriteriaType::BeSpellTarget, 65246);
}
Attackers = (Attackers == TEAM_ALLIANCE) ? TEAM_HORDE : TEAM_ALLIANCE;
@@ -939,7 +939,7 @@ void BattlegroundSA::TitanRelicActivated(Player* clicker)
{
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
if (player->GetTeamId() == Attackers && RoundScores[1].winner == Attackers)
player->UpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
player->UpdateCriteria(CriteriaType::BeSpellTarget, 65246);
}
if (RoundScores[0].time == RoundScores[1].time)
@@ -1074,10 +1074,10 @@ bool BattlegroundSA::UpdatePlayerScore(Player* player, uint32 type, uint32 value
switch (type)
{
case SCORE_DESTROYED_DEMOLISHER:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, BG_SA_DEMOLISHERS_DESTROYED);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, BG_SA_DEMOLISHERS_DESTROYED);
break;
case SCORE_DESTROYED_WALL:
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, BG_SA_GATES_DESTROYED);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, BG_SA_GATES_DESTROYED);
break;
default:
break;
@@ -780,10 +780,10 @@ bool BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value
switch (type)
{
case SCORE_FLAG_CAPTURES: // flags captured
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_CAPTURE_FLAG);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, WS_OBJECTIVE_CAPTURE_FLAG);
break;
case SCORE_FLAG_RETURNS: // flags returned
player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_RETURN_FLAG);
player->UpdateCriteria(CriteriaType::TrackedWorldStateUIModified, WS_OBJECTIVE_RETURN_FLAG);
break;
default:
break;
+110 -84
View File
@@ -1007,174 +1007,200 @@ struct CriteriaEntry
union AssetNameAlias
{
int32 ID;
// CRITERIA_TYPE_KILL_CREATURE = 0
// CRITERIA_TYPE_KILLED_BY_CREATURE = 20
// CRITERIA_TYPE_OWN_PET = 96
// CRITERIA_TYPE_208 = 208
// CriteriaType::KillCreature = 0
// CriteriaType::KilledByCreature = 20
// CriteriaType::AccountKnownPet = 96
// CriteriaType::KillCreatureScenario = 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_COMPLETE_CHALLENGE_MODE = 71
// CriteriaType::WinBattleground = 1
// CriteriaType::ParticipateInBattleground = 15
// CriteriaType::DieOnMap = 16
// CriteriaType::WinArena = 32
// CriteriaType::ParticipateInArena = 33
// CriteriaType::CompleteChallengeMode = 71
int32 MapID;
// CRITERIA_TYPE_SURVEY_GAMEOBJECT = 4
// CRITERIA_TYPE_USE_GAMEOBJECT = 68
// CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72
// CriteriaType::CompleteResearchProject = 2
int32 ResearchProjectID;
// CriteriaType::FindResearchObject = 4
// CriteriaType::UseGameobject = 68
// CriteriaType::CatchFishInFishingHole = 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
// CriteriaType::SkillRaised = 7
// CriteriaType::AchieveSkillStep = 40
// CriteriaType::LearnSpellFromSkillLine = 75
// CriteriaType::LearnTradeskillSkillLine = 112
int32 SkillID;
// CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8
// CriteriaType::EarnAchievement = 8
int32 AchievementID;
// CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11
// CriteriaType::CompleteQuestsInZone = 11
int32 ZoneID;
// CRITERIA_TYPE_CURRENCY = 12
// CRITERIA_TYPE_CONVERT_ITEMS_TO_CURRENCY = 229
// CriteriaType::CurrencyGained = 12
// CriteriaType::ObtainAnyItemWithCurrencyValue = 229
int32 CurrencyID;
// CRITERIA_TYPE_DEATH_IN_DUNGEON = 18
// CRITERIA_TYPE_COMPLETE_RAID = 19
// CriteriaType::DieInInstance = 18
// CriteriaType::RunInstance = 19
int32 GroupSize;
// CRITERIA_TYPE_MANUAL_COMPLETE_CRITERIA = 21
// CriteriaType::CompleteInternalCriteria = 21
int32 CriteriaID;
// CRITERIA_TYPE_DEATHS_FROM = 26
int32 DamageType;
// CriteriaType::DieFromEnviromentalDamage = 26
int32 EnviromentalDamageType;
// CRITERIA_TYPE_COMPLETE_QUEST = 27
// CriteriaType::CompleteQuest = 27
int32 QuestID;
// 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
// CriteriaType::BeSpellTarget = 28
// CriteriaType::CastSpell = 29
// CriteriaType::LearnOrKnowSpell = 34
// CriteriaType::GainAura = 69
// CriteriaType::LandTargetedSpellOnTarget = 110
// CriteriaType::MemorizeSpell = 222
int32 SpellID;
// CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE = 30
int32 ObjectiveId;
// CriteriaType::TrackedWorldStateUIModified = 30
int32 WorldStateUIID;
// CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31
// CRITERIA_TYPE_ENTER_AREA = 163
// CRITERIA_TYPE_LEAVE_AREA = 164
// CRITERIA_TYPE_TRAVELLED_TO_AREA = 225
// CriteriaType::PVPKillInArea = 31
// CriteriaType::EnterArea = 163
// CriteriaType::LeaveArea = 164
// CriteriaType::EnterTopLevelArea = 225
// CriteriaType::LeaveTopLevelArea = 226
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
// CriteriaType::AcquireItem = 36
// CriteriaType::UseItem = 41
// CriteriaType::LootItem = 42
// CriteriaType::EquipItem = 57
// CriteriaType::LearnToy = 185
// CriteriaType::LearnHeirloom = 188
int32 ItemID;
// CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38
// CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39
// CriteriaType::EarnTeamArenaRating = 38
// CriteriaType::EarnPersonalArenaRating = 39
int32 TeamType;
// CRITERIA_TYPE_EXPLORE_AREA = 43
// CriteriaType::RevealWorldMapOverlay = 43
int32 WorldMapOverlayID;
// CRITERIA_TYPE_GAIN_REPUTATION = 46
// CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206
// CriteriaType::ReputationGained = 46
// CriteriaType::ParagonLevelIncreaseWithFaction = 206
int32 FactionID;
// CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT = 49
// CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT = 199
// CriteriaType::EquipItemInSlot = 49
// CriteriaType::LearnAnyTransmogInSlot = 199
int32 EquipmentSlot;
// CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50
// CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51
// CriteriaType::RollNeed = 50
// CriteriaType::RollGreed = 51
// CriteriaType::RollDisenchant = 116
int32 RollValue;
// CRITERIA_TYPE_HK_CLASS = 52
// CriteriaType::DeliverKillingBlowToClass = 52
int32 ClassID;
// CRITERIA_TYPE_HK_RACE = 53
// CriteriaType::DeliverKillingBlowToRace = 53
int32 RaceID;
// CRITERIA_TYPE_DO_EMOTE = 54
// CriteriaType::DoEmote = 54
int32 EmoteID;
// CRITERIA_TYPE_SEND_EVENT = 73
// CRITERIA_TYPE_SEND_EVENT_SCENARIO = 92
// CriteriaType::CompleteQuestsInSort = 58
int32 QuestSortID;
// CriteriaType::KilledAllUnitsInSpawnRegion = 64
int32 SpawnRegionID;
// CriteriaType::PlayerTriggerGameEvent = 73
// CriteriaType::AnyoneTriggerGameEventScenario = 92
int32 EventID;
// CRITERIA_TYPE_GARRISON_COMPLETE_DUNGEON_ENCOUNTER = 97
// CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165
// CriteriaType::DefeatDungeonEncounterWhileElegibleForLoot = 97
// CriteriaType::DefeatDungeonEncounter = 165
int32 DungeonEncounterID;
// CRITERIA_TYPE_LOOT_TYPE = 109
// CriteriaType::GetLootByType = 109
int32 LootType;
// CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE_TYPE = 138
// CriteriaType::CompleteGuildChallenge = 138
int32 GuildChallengeType;
// CRITERIA_TYPE_COMPLETE_SCENARIO = 152
// CriteriaType::CompleteScenario = 152
int32 ScenarioID;
// CRITERIA_TYPE_REACH_AREATRIGGER_WITH_ACTIONSET = 153
// CriteriaType::EnterAreaTriggerWithActionSet = 153
// CriteriaType::LeaveAreaTriggerWithActionSet = 154
int32 AreaTriggerActionSetID;
// CRITERIA_TYPE_LEVEL_BATTLE_PET = 160
// CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT = 162
// CriteriaType::BattlePetReachLevel = 160
// CriteriaType::ActivelyEarnPetLevel = 162
int32 PetLevel;
// CRITERIA_TYPE_PLACE_GARRISON_BUILDING = 167
// CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169
// CriteriaType::PlaceGarrisonBuilding = 167
// CriteriaType::ActivateGarrisonBuilding = 169
// CriteriaType::LearnGarrisonBlueprint = 179
int32 GarrBuildingID;
// CRITERIA_TYPE_UPGRADE_GARRISON = 170
// CriteriaType::UpgradeGarrison = 170
int32 GarrisonLevel;
// CRITERIA_TYPE_START_GARRISON_MISSION = 171
// CRITERIA_TYPE_COMPLETE_GARRISON_MISSION_COUNT = 173
// CriteriaType::StartAnyGarrisonMissionWithFollowerType = 171
// CriteriaType::SucceedAnyGarrisonMissionWithFollowerType = 173
int32 GarrFollowerTypeID;
// CRITERIA_TYPE_START_ORDER_HALL_MISSION = 172
// CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174
// CriteriaType::StartGarrisonMission = 172
// CriteriaType::SucceedGarrisonMission = 174
int32 GarrMissionID;
// CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER = 176
// CriteriaType::RecruitGarrisonFollower = 176
int32 GarrFollowerID;
// CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182
// CriteriaType::LearnGarrisonSpecialization = 181
int32 GarrSpecializationID;
// CriteriaType::CollectGarrisonShipment = 182
int32 CharShipmentContainerID;
// CRITERIA_TYPE_OWN_ITEM_MODIFIED_APPEARANCE = 192
// CriteriaType::LearnTransmog = 192
int32 ItemModifiedAppearanceID;
// CRITERIA_TYPE_ACTIVELY_REACH_LEVEL = 196
// CriteriaType::ActivelyReachLevel = 196
int32 PlayerLevel;
// CRITERIA_TYPE_ORDER_HALL_TALENT_LEARNED = 198
// CRITERIA_TYPE_202 = 202
// CriteriaType::CompleteResearchGarrisonTalent = 198
// CriteriaType::StartResearchGarrisonTalent = 202
// CriteriaType::SocketGarrisonTalent = 227
int32 GarrTalentID;
// CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205
// CriteriaType::EarnLicense = 204
int32 BattlePayDeliverableID;
// CriteriaType::CollectTransmogSetFromGroup = 205
int32 TransmogSetGroupID;
// CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211
// CriteriaType::ArtifactPowerRankPurchased = 209
// CriteriaType::ChooseRelicTalent = 211
int32 ArtifactPowerID;
// CRITERIA_TYPE_EXPANSION_LEVEL = 212
// CriteriaType::EarnExpansionLevel = 212
int32 ExpansionLevel;
// CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213
// CriteriaType::AccountHonorLevelReached = 213
int32 AccountHonorLevel;
// CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215
int32 HeartOfAzerothLevel;
// CriteriaType::AzeriteLevelReached = 215
int32 AzeriteLevel;
// CriteriaType::MythicPlusRatingAttained = 230
int32 DungeonScore;
} Asset;
uint32 ModifierTreeId;
uint8 StartEvent;
+235 -229
View File
@@ -303,237 +303,243 @@ enum class CriteriaFlags : uint8
DEFINE_ENUM_FLAG(CriteriaFlags);
enum CriteriaTypes : uint8
enum class CriteriaType : uint8
{
CRITERIA_TYPE_KILL_CREATURE = 0,
CRITERIA_TYPE_WIN_BG = 1,
// 2 - unused (Legion - 23420)
CRITERIA_TYPE_COMPLETE_ARCHAEOLOGY_PROJECTS = 3, // struct { uint32 itemCount; }
CRITERIA_TYPE_SURVEY_GAMEOBJECT = 4,
CRITERIA_TYPE_REACH_LEVEL = 5,
CRITERIA_TYPE_CLEAR_DIGSITE = 6,
CRITERIA_TYPE_REACH_SKILL_LEVEL = 7,
CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8,
CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9,
CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY = 10, // you have to complete a daily quest x times in a row
CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11,
CRITERIA_TYPE_CURRENCY = 12,
CRITERIA_TYPE_DAMAGE_DONE = 13,
CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14,
CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15,
CRITERIA_TYPE_DEATH_AT_MAP = 16,
CRITERIA_TYPE_DEATH = 17,
CRITERIA_TYPE_DEATH_IN_DUNGEON = 18,
CRITERIA_TYPE_COMPLETE_RAID = 19,
CRITERIA_TYPE_KILLED_BY_CREATURE = 20,
CRITERIA_TYPE_MANUAL_COMPLETE_CRITERIA = 21,
CRITERIA_TYPE_COMPLETE_CHALLENGE_MODE_GUILD = 22,
CRITERIA_TYPE_KILLED_BY_PLAYER = 23,
CRITERIA_TYPE_FALL_WITHOUT_DYING = 24,
// 25 - unused (Legion - 23420)
CRITERIA_TYPE_DEATHS_FROM = 26,
CRITERIA_TYPE_COMPLETE_QUEST = 27,
CRITERIA_TYPE_BE_SPELL_TARGET = 28,
CRITERIA_TYPE_CAST_SPELL = 29,
CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE = 30,
CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31,
CRITERIA_TYPE_WIN_ARENA = 32,
CRITERIA_TYPE_PLAY_ARENA = 33,
CRITERIA_TYPE_LEARN_SPELL = 34,
CRITERIA_TYPE_HONORABLE_KILL = 35,
CRITERIA_TYPE_OWN_ITEM = 36,
CRITERIA_TYPE_WIN_RATED_ARENA = 37,
CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38,
CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39,
CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40,
CRITERIA_TYPE_USE_ITEM = 41,
CRITERIA_TYPE_LOOT_ITEM = 42,
CRITERIA_TYPE_EXPLORE_AREA = 43,
CRITERIA_TYPE_OWN_RANK = 44,
CRITERIA_TYPE_BUY_BANK_SLOT = 45,
CRITERIA_TYPE_GAIN_REPUTATION = 46,
CRITERIA_TYPE_GAIN_EXALTED_REPUTATION = 47,
CRITERIA_TYPE_VISIT_BARBER_SHOP = 48,
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,
CRITERIA_TYPE_HK_RACE = 53,
CRITERIA_TYPE_DO_EMOTE = 54,
CRITERIA_TYPE_HEALING_DONE = 55,
CRITERIA_TYPE_GET_KILLING_BLOWS = 56, /// @todo in some cases map not present, and in some cases need do without die
CRITERIA_TYPE_EQUIP_ITEM = 57,
// 58 - unused (Legion - 23420)
CRITERIA_TYPE_MONEY_FROM_VENDORS = 59,
CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS = 60,
CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS = 61,
CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD = 62,
CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING = 63,
CRITERIA_TYPE_DEFEAT_CREATURE_GROUP = 64,
CRITERIA_TYPE_GOLD_SPENT_AT_BARBER = 65,
CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL = 66,
CRITERIA_TYPE_LOOT_MONEY = 67,
CRITERIA_TYPE_USE_GAMEOBJECT = 68,
CRITERIA_TYPE_BE_SPELL_TARGET2 = 69,
CRITERIA_TYPE_SPECIAL_PVP_KILL = 70,
CRITERIA_TYPE_COMPLETE_CHALLENGE_MODE = 71,
CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72,
CRITERIA_TYPE_SEND_EVENT = 73,
CRITERIA_TYPE_ON_LOGIN = 74,
CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75,
CRITERIA_TYPE_WIN_DUEL = 76,
CRITERIA_TYPE_LOSE_DUEL = 77,
CRITERIA_TYPE_KILL_CREATURE_TYPE = 78,
CRITERIA_TYPE_COOK_RECIPES_GUILD = 79,
CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS = 80,
CRITERIA_TYPE_EARN_PET_BATTLE_ACHIEVEMENT_POINTS = 81,
CRITERIA_TYPE_CREATE_AUCTION = 82,
CRITERIA_TYPE_HIGHEST_AUCTION_BID = 83,
CRITERIA_TYPE_WON_AUCTIONS = 84,
CRITERIA_TYPE_HIGHEST_AUCTION_SOLD = 85,
CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED = 86,
CRITERIA_TYPE_GAIN_REVERED_REPUTATION = 87,
CRITERIA_TYPE_GAIN_HONORED_REPUTATION = 88,
CRITERIA_TYPE_KNOWN_FACTIONS = 89,
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,
CRITERIA_TYPE_RELEASE_SPIRIT = 95,
CRITERIA_TYPE_OWN_PET = 96,
CRITERIA_TYPE_GARRISON_COMPLETE_DUNGEON_ENCOUNTER = 97,
// 98 - unused (Legion - 23420)
// 99 - unused (Legion - 23420)
// 100 - unused (Legion - 23420)
CRITERIA_TYPE_HIGHEST_HIT_DEALT = 101,
CRITERIA_TYPE_HIGHEST_HIT_RECEIVED = 102,
CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED = 103,
CRITERIA_TYPE_HIGHEST_HEAL_CAST = 104,
CRITERIA_TYPE_TOTAL_HEALING_RECEIVED = 105,
CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED = 106,
CRITERIA_TYPE_QUEST_ABANDONED = 107,
CRITERIA_TYPE_FLIGHT_PATHS_TAKEN = 108,
CRITERIA_TYPE_LOOT_TYPE = 109,
CRITERIA_TYPE_CAST_SPELL2 = 110, /// @todo target entry is missing
// 111 - unused (Legion - 23420)
CRITERIA_TYPE_LEARN_SKILL_LINE = 112,
CRITERIA_TYPE_EARN_HONORABLE_KILL = 113,
CRITERIA_TYPE_ACCEPTED_SUMMONINGS = 114,
CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS = 115,
// 116 - unused (Legion - 23420)
// 117 - unused (Legion - 23420)
CRITERIA_TYPE_COMPLETE_LFG_DUNGEON = 118,
CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS = 119,
CRITERIA_TYPE_LFG_VOTE_KICKS_INITIATED_BY_PLAYER = 120,
CRITERIA_TYPE_LFG_VOTE_KICKS_NOT_INIT_BY_PLAYER = 121,
CRITERIA_TYPE_BE_KICKED_FROM_LFG = 122,
CRITERIA_TYPE_LFG_LEAVES = 123,
CRITERIA_TYPE_SPENT_GOLD_GUILD_REPAIRS = 124,
CRITERIA_TYPE_REACH_GUILD_LEVEL = 125,
CRITERIA_TYPE_CRAFT_ITEMS_GUILD = 126,
CRITERIA_TYPE_CATCH_FROM_POOL = 127,
CRITERIA_TYPE_BUY_GUILD_BANK_SLOTS = 128,
CRITERIA_TYPE_EARN_GUILD_ACHIEVEMENT_POINTS = 129,
CRITERIA_TYPE_WIN_RATED_BATTLEGROUND = 130,
// 131 - unused (Legion - 23420)
CRITERIA_TYPE_REACH_BG_RATING = 132,
CRITERIA_TYPE_BUY_GUILD_TABARD = 133,
CRITERIA_TYPE_COMPLETE_QUESTS_GUILD = 134,
CRITERIA_TYPE_HONORABLE_KILLS_GUILD = 135,
CRITERIA_TYPE_KILL_CREATURE_TYPE_GUILD = 136,
CRITERIA_TYPE_COUNT_OF_LFG_QUEUE_BOOSTS_BY_TANK = 137,
CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE_TYPE = 138, //struct { Flag flag; uint32 count; } 1: Guild Dungeon, 2:Guild Challenge, 3:Guild battlefield
CRITERIA_TYPE_COMPLETE_GUILD_CHALLENGE = 139, //struct { uint32 count; } Guild Challenge
// 140 - 1 criteria (16883), unused (Legion - 23420)
// 141 - 1 criteria (16884), unused (Legion - 23420)
// 142 - 1 criteria (16881), unused (Legion - 23420)
// 143 - 1 criteria (16882), unused (Legion - 23420)
// 144 - 1 criteria (17386), unused (Legion - 23420)
CRITERIA_TYPE_LFR_DUNGEONS_COMPLETED = 145,
CRITERIA_TYPE_LFR_LEAVES = 146,
CRITERIA_TYPE_LFR_VOTE_KICKS_INITIATED_BY_PLAYER = 147,
CRITERIA_TYPE_LFR_VOTE_KICKS_NOT_INIT_BY_PLAYER = 148,
CRITERIA_TYPE_BE_KICKED_FROM_LFR = 149,
CRITERIA_TYPE_COUNT_OF_LFR_QUEUE_BOOSTS_BY_TANK = 150,
CRITERIA_TYPE_COMPLETE_SCENARIO_COUNT = 151,
CRITERIA_TYPE_COMPLETE_SCENARIO = 152,
CRITERIA_TYPE_REACH_AREATRIGGER_WITH_ACTIONSET = 153,
// 154 - unused (Legion - 23420)
CRITERIA_TYPE_OWN_BATTLE_PET = 155,
CRITERIA_TYPE_OWN_BATTLE_PET_COUNT = 156,
CRITERIA_TYPE_CAPTURE_BATTLE_PET = 157,
CRITERIA_TYPE_WIN_PET_BATTLE = 158,
// 159 - 2 criterias (22312,22314), unused (Legion - 23420)
CRITERIA_TYPE_LEVEL_BATTLE_PET = 160,
CRITERIA_TYPE_CAPTURE_BATTLE_PET_CREDIT = 161, // triggers a quest credit
CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT = 162, // triggers a quest credit
CRITERIA_TYPE_ENTER_AREA = 163, // triggers a quest credit
CRITERIA_TYPE_LEAVE_AREA = 164, // triggers a quest credit
CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165,
// 166 - unused (Legion - 23420)
CRITERIA_TYPE_PLACE_GARRISON_BUILDING = 167,
CRITERIA_TYPE_UPGRADE_GARRISON_BUILDING = 168,
CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169,
CRITERIA_TYPE_UPGRADE_GARRISON = 170,
CRITERIA_TYPE_START_GARRISON_MISSION = 171,
CRITERIA_TYPE_START_ORDER_HALL_MISSION = 172,
CRITERIA_TYPE_COMPLETE_GARRISON_MISSION_COUNT = 173,
CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174,
CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER_COUNT = 175,
CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER = 176,
// 177 - 0 criterias (Legion - 23420)
CRITERIA_TYPE_LEARN_GARRISON_BLUEPRINT_COUNT = 178,
// 179 - 0 criterias (Legion - 23420)
// 180 - 0 criterias (Legion - 23420)
// 181 - 0 criterias (Legion - 23420)
CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182,
CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_ITEM_LEVEL = 183,
CRITERIA_TYPE_RAISE_GARRISON_FOLLOWER_LEVEL = 184,
CRITERIA_TYPE_OWN_TOY = 185,
CRITERIA_TYPE_OWN_TOY_COUNT = 186,
CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER_WITH_QUALITY= 187,
// 188 - 0 criterias (Legion - 23420)
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,
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,
CRITERIA_TYPE_ORDER_HALL_RECRUIT_TROOP = 200,
// 201 - 0 criterias (Legion - 23420)
// 202 - 0 criterias (Legion - 23420)
CRITERIA_TYPE_COMPLETE_WORLD_QUEST = 203,
// 204 - Special criteria type to award players for some external events? Comes with what looks like an identifier, so guessing it's not unique.
CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205,
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,
CRITERIA_TYPE_MYTHIC_KEYSTONE_COMPLETED = 216, // NYI
// 217 - 0 criterias
CRITERIA_TYPE_COMPLETE_QUEST_ACCUMULATE = 218,
CRITERIA_TYPE_BOUGHT_ITEM_FROM_VENDOR = 219,
CRITERIA_TYPE_SOLD_ITEM_TO_VENDOR = 220,
// 221 - 0 criterias
// 222 - 0 criterias
// 223 - 0 criterias
// 224 - 0 criterias
CRITERIA_TYPE_TRAVELLED_TO_AREA = 225,
// 226 - 0 criterias
// 227 - 0 criterias
CRITERIA_TYPE_APPLY_CONDUIT = 228,
CRITERIA_TYPE_CONVERT_ITEMS_TO_CURRENCY = 229,
};
KillCreature = 0, // Kill NPC "{Creature}"
WinBattleground = 1, // Win battleground "{Map}"
CompleteResearchProject = 2, /*NYI*/ // Complete research project "{ResearchProject}"
CompleteAnyResearchProject = 3, /*NYI*/ // Complete any research project
FindResearchObject = 4, /*NYI*/ // Find research object "{GameObjects}"
ReachLevel = 5, // Reach level
ExhaustAnyResearchSite = 6, /*NYI*/ // Exhaust any research site
SkillRaised = 7, // Skill "{SkillLine}" raised
EarnAchievement = 8, // Earn achievement "{Achievement}"
CompleteQuestsCount = 9, // Count of complete quests (quest count)
CompleteAnyDailyQuestPerDay = 10, // Complete any daily quest (per day)
CompleteQuestsInZone = 11, // Complete quests in "{AreaTable}"
CurrencyGained = 12, // Currency "{CurrencyTypes}" gained
DamageDealt = 13, // Damage dealt
CompleteDailyQuest = 14, // Complete daily quest
ParticipateInBattleground = 15, // Participate in battleground "{Map}"
DieOnMap = 16, // Die on map "{Map}"
DieAnywhere = 17, // Die anywhere
DieInInstance = 18, // Die in an instance which handles at most {#Max Players} players
RunInstance = 19, /*NYI*/ // Run an instance which handles at most {#Max Players} players
KilledByCreature = 20, // Get killed by "{Creature}"
CompleteInternalCriteria = 21, /*NYI*/ // Designer Value{`Uses Record ID}
CompleteAnyChallengeMode = 22, /*NYI*/ // Complete any challenge mode
KilledByPlayer = 23, // Die to a player
MaxDistFallenWithoutDying = 24, // Maximum distance fallen without dying
EarnChallengeModeMedal = 25, /*NYI*/ // Earn a challenge mode medal of "{#Challenge Mode Medal (OBSOLETE)}" (OBSOLETE)
DieFromEnviromentalDamage = 26, // Die to "{$Env Damage}" environmental damage
CompleteQuest = 27, // Complete quest "{QuestV2}"
BeSpellTarget = 28, // Have the spell "{Spell}" cast on you
CastSpell = 29, // Cast the spell "{Spell}"
TrackedWorldStateUIModified = 30, // Tracked WorldStateUI value "{WorldStateUI}" is modified
PVPKillInArea = 31, // Kill someone in PVP in "{AreaTable}"
WinArena = 32, // Win arena "{Map}"
ParticipateInArena = 33, /*NYI*/ // Participate in arena "{Map}"
LearnOrKnowSpell = 34, // Learn or Know spell "{Spell}"
EarnHonorableKill = 35, // Earn an honorable kill
AcquireItem = 36, // Acquire item "{Item}"
WinAnyRankedArena = 37, // Win a ranked arena match (any arena)
EarnTeamArenaRating = 38, /*NYI*/ // Earn a team arena rating of {#Arena Rating}
EarnPersonalArenaRating = 39, // Earn a personal arena rating of {#Arena Rating}
AchieveSkillStep = 40, // Achieve a skill step in "{SkillLine}"
UseItem = 41, // Use item "{Item}"
LootItem = 42, // Loot "{Item}" via corpse, pickpocket, fishing, disenchanting, etc.
RevealWorldMapOverlay = 43, // Reveal world map overlay "{WorldMapOverlay}"
EarnTitle = 44, /*NYI*/ // Deprecated PVP Titles
BankSlotsPurchased = 45, // Bank slots purchased
ReputationGained = 46, // Reputation gained with faction "{Faction}"
TotalExaltedFactions = 47, // Total exalted factions
GotHaircut = 48, // Got a haircut
EquipItemInSlot = 49, // Equip item in slot "{$Equip Slot}"
RollNeed = 50, // Roll need and get {#Need Roll}
RollGreed = 51, // Roll greed and get {#Greed Roll}
DeliverKillingBlowToClass = 52, // Deliver a killing blow to a {ChrClasses}
DeliverKillingBlowToRace = 53, // Deliver a killing blow to a {ChrRaces}
DoEmote = 54, // Do a "{EmotesText}" emote
HealingDone = 55, // Healing done
DeliveredKillingBlow = 56, // Delivered a killing blow
EquipItem = 57, // Equip item "{Item}"
CompleteQuestsInSort = 58, /*NYI*/ // Complete quests in "{QuestSort}"
MoneyEarnedFromSales = 59, // Sell items to vendors
MoneySpentOnRespecs = 60, // Money spent on respecs
TotalRespecs = 61, // Total respecs
MoneyEarnedFromQuesting = 62, // Money earned from questing
MoneySpentOnTaxis = 63, // Money spent on taxis
KilledAllUnitsInSpawnRegion = 64, /*NYI*/ // Killed all units in spawn region "{SpawnRegion}"
MoneySpentAtBarberShop = 65, // Money spent at the barber shop
MoneySpentOnPostage = 66, // Money spent on postage
MoneyLootedFromCreatures = 67, // Money looted from creatures
UseGameobject = 68, // Use Game Object "{GameObjects}"
GainAura = 69, // Gain aura "{Spell}"
KillPlayer = 70, // Kill a player (no honor check)
CompleteChallengeMode = 71, /*NYI*/ // Complete a challenge mode on map "{Map}"
CatchFishInFishingHole = 72, // Catch fish in the "{GameObjects}" fishing hole
PlayerTriggerGameEvent = 73, /*NYI*/ // Player will Trigger game event "{GameEvents}"
Login = 74, // Login (USE SPARINGLY!)
LearnSpellFromSkillLine = 75, // Learn spell from the "{SkillLine}" skill line
WinDuel = 76, // Win a duel
LoseDuel = 77, // Lose a duel
KillAnyCreature = 78, // Kill any NPC
CreatedItemsByCastingSpellWithLimit = 79, /*NYI*/ // Created items by casting a spell (limit 1 per create...)
MoneyEarnedFromAuctions = 80, // Money earned from auctions
BattlePetAchievementPointsEarned = 81, /*NYI*/ // Battle pet achievement points earned
ItemsPostedAtAuction = 82, // Number of items posted at auction
HighestAuctionBid = 83, // Highest auction bid
AuctionsWon = 84, // Auctions won
HighestAuctionSale = 85, // Highest coin value of item sold
MostMoneyOwned = 86, // Most money owned
TotalReveredFactions = 87, // Total revered factions
TotalHonoredFactions = 88, // Total honored factions
TotalFactionsEncountered = 89, // Total factions encountered
LootAnyItem = 90, // Loot any item
ObtainAnyItem = 91, // Obtain any item
AnyoneTriggerGameEventScenario = 92, /*NYI*/ // Anyone will Trigger game event "{GameEvents}" (Scenario Only)
RollAnyNeed = 93, // Roll any number on need
RollAnyGreed = 94, // Roll any number on greed
ReleasedSpirit = 95, /*NYI*/ // Released Spirit
AccountKnownPet = 96, /*NYI*/ // Account knows pet "{Creature}" (Backtracked)
DefeatDungeonEncounterWhileElegibleForLoot = 97, /*NYI*/ // Defeat Encounter "{DungeonEncounter}" While Eligible For Loot
// UNUSED 18{} = 98, // Unused
// UNUSED 19{} = 99, // Unused
// UNUSED 20{} = 100, // Unused
HighestDamageDone = 101, // Highest damage done in 1 single ability
HighestDamageTaken = 102, // Most damage taken in 1 single hit
TotalDamageTaken = 103, // Total damage taken
HighestHealCast = 104, // Largest heal cast
TotalHealReceived = 105, // Total healing received
HighestHealReceived = 106, // Largest heal received
AbandonAnyQuest = 107, // Abandon any quest
BuyTaxi = 108, // Buy a taxi
GetLootByType = 109, // Get loot via "{$Loot Acquisition}"
LandTargetedSpellOnTarget = 110, // Land targeted spell "{Spell}" on a target
// UNUSED 21{} = 111, // Unused
LearnTradeskillSkillLine = 112, // Learn tradeskill skill line "{SkillLine}"
HonorableKills = 113, // Honorable kills (number in interface, won't update except for login)
AcceptSummon = 114, // Accept a summon
EarnAchievementPoints = 115, // Earn achievement points
RollDisenchant = 116, /*NYI*/ // Roll disenchant and get {#Disenchant Roll}
RollAnyDisenchant = 117, /*NYI*/ // Roll any number on disenchant
CompletedLFGDungeon = 118, /*NYI*/ // Completed an LFG dungeon
CompletedLFGDungeonWithStrangers = 119, // Completed an LFG dungeon with strangers
KickInitiatorInLFGDungeon = 120, /*NYI*/ // Kicked in an LFG dungeon (initiator)
KickVoterInLFGDungeon = 121, /*NYI*/ // Kicked in an LFG dungeon (voter)
KickTargetInLFGDungeon = 122, /*NYI*/ // Kicked in an LFG dungeon (target)
AbandonedLFGDungeon = 123, /*NYI*/ // Abandoned an LFG dungeon
MoneySpentOnGuildRepair = 124, /*NYI*/ // Guild repair amount spent
GuildAttainedLevel = 125, /*NYI*/ // Guild attained level
CreatedItemsByCastingSpell = 126, /*NYI*/ // Created items by casting a spell
FishInAnyPool = 127, /*NYI*/ // Fish in any pool
GuildBankTabsPurchased = 128, /*NYI*/ // Guild bank tabs purchased
EarnGuildAchievementPoints = 129, /*NYI*/ // Earn guild achievement points
WinAnyBattleground = 130, /*NYI*/ // Win any battleground
ParticipateInAnyBattleground = 131, /*NYI*/ // Participate in any battleground
EarnBattlegroundRating = 132, /*NYI*/ // Earn a battleground rating
GuildTabardCreated = 133, /*NYI*/ // Guild tabard created
CompleteQuestsCountForGuild = 134, /*NYI*/ // Count of complete quests for guild (Quest count)
HonorableKillsForGuild = 135, /*NYI*/ // Honorable kills for Guild
KillAnyCreatureForGuild = 136, /*NYI*/ // Kill any NPC for Guild
GroupedTankLeftEarlyInLFGDungeon = 137, /*NYI*/ // Grouped tank left early in an LFG dungeon
CompleteGuildChallenge = 138, /*NYI*/ // Complete a "{$Guild Challenge}" guild challenge
CompleteAnyGuildChallenge = 139, /*NYI*/ // Complete any guild challenge
MarkedAFKInBattleground = 140, /*NYI*/ // Marked AFK in a battleground
RemovedAFKInBattleground = 141, /*NYI*/ // Removed for being AFK in a battleground
StartAnyBattleground = 142, /*NYI*/ // Start any battleground (AFK tracking)
CompleteAnyBattleground = 143, /*NYI*/ // Complete any battleground (AFK tracking)
MarkedSomeoneAFKInBattleground = 144, /*NYI*/ // Marked someone for being AFK in a battleground
CompletedLFRDungeon = 145, /*NYI*/ // Completed an LFR dungeon
AbandonedLFRDungeon = 146, /*NYI*/ // Abandoned an LFR dungeon
KickInitiatorInLFRDungeon = 147, /*NYI*/ // Kicked in an LFR dungeon (initiator)
KickVoterInLFRDungeon = 148, /*NYI*/ // Kicked in an LFR dungeon (voter)
KickTargetInLFRDungeon = 149, /*NYI*/ // Kicked in an LFR dungeon (target)
GroupedTankLeftEarlyInLFRDungeon = 150, /*NYI*/ // Grouped tank left early in an LFR dungeon
CompleteAnyScenario = 151, /*NYI*/ // Complete a Scenario
CompleteScenario = 152, /*NYI*/ // Complete scenario "{Scenario}"
EnterAreaTriggerWithActionSet = 153, /*NYI*/ // Enter area trigger "{AreaTriggerActionSet}"
LeaveAreaTriggerWithActionSet = 154, /*NYI*/ // Leave area trigger "{AreaTriggerActionSet}"
LearnedNewPet = 155, // (Account Only) Learned a new pet
UniquePetsOwned = 156, // (Account Only) Unique pets owned
AccountObtainPetThroughBattle = 157, /*NYI*/ // (Account Only) Obtain a pet through battle
WinPetBattle = 158, /*NYI*/ // Win a pet battle
LosePetBattle = 159, /*NYI*/ // Lose a pet battle
BattlePetReachLevel = 160, /*NYI*/ // (Account Only) Battle pet has reached level {#Level}
PlayerObtainPetThroughBattle = 161, /*NYI*/ // (Player) Obtain a pet through battle
ActivelyEarnPetLevel = 162, /*NYI*/ // (Player) Actively earn level {#Level} with a pet by a player
EnterArea = 163, /*NYI*/ // Enter Map Area "{AreaTable}"
LeaveArea = 164, /*NYI*/ // Leave Map Area "{AreaTable}"
DefeatDungeonEncounter = 165, /*NYI*/ // Defeat Encounter "{DungeonEncounter}"
PlaceAnyGarrisonBuilding = 166, /*NYI*/ // Garrison Building: Place any
PlaceGarrisonBuilding = 167, // Garrison Building: Place "{GarrBuilding}"
ActivateAnyGarrisonBuilding = 168, // Garrison Building: Activate any
ActivateGarrisonBuilding = 169, /*NYI*/ // Garrison Building: Activate "{GarrBuilding}"
UpgradeGarrison = 170, /*NYI*/ // Garrison: Upgrade Garrison to Tier "{#Tier:2,3}"
StartAnyGarrisonMissionWithFollowerType = 171, /*NYI*/ // Garrison Mission: Start any with FollowerType "{GarrFollowerType}"
StartGarrisonMission = 172, /*NYI*/ // Garrison Mission: Start "{GarrMission}"
SucceedAnyGarrisonMissionWithFollowerType = 173, /*NYI*/ // Garrison Mission: Succeed any with FollowerType "{GarrFollowerType}"
SucceedGarrisonMission = 174, /*NYI*/ // Garrison Mission: Succeed "{GarrMission}"
RecruitAnyGarrisonFollower = 175, /*NYI*/ // Garrison Follower: Recruit any
RecruitGarrisonFollower = 176, // Garrison Follower: Recruit "{GarrFollower}"
AcquireGarrison = 177, /*NYI*/ // Garrison: Acquire a Garrison
LearnAnyGarrisonBlueprint = 178, /*NYI*/ // Garrison Blueprint: Learn any
LearnGarrisonBlueprint = 179, /*NYI*/ // Garrison Blueprint: Learn "{GarrBuilding}"
LearnAnyGarrisonSpecialization = 180, /*NYI*/ // Garrison Specialization: Learn any
LearnGarrisonSpecialization = 181, /*NYI*/ // Garrison Specialization: Learn "{GarrSpecialization}"
CollectGarrisonShipment = 182, /*NYI*/ // Garrison Shipment of type "{CharShipmentContainer}" collected
ItemLevelChangedForGarrisonFollower = 183, /*NYI*/ // Garrison Follower: Item Level Changed
LevelChangedForGarrisonFollower = 184, /*NYI*/ // Garrison Follower: Level Changed
LearnToy = 185, /*NYI*/ // Learn Toy "{Item}"
LearnAnyToy = 186, /*NYI*/ // Learn Any Toy
QualityUpgradedForGarrisonFollower = 187, /*NYI*/ // Garrison Follower: Quality Upgraded
LearnHeirloom = 188, /*NYI*/ // Learn Heirloom "{Item}"
LearnAnyHeirloom = 189, /*NYI*/ // Learn Any Heirloom
EarnArtifactXP = 190, /*NYI*/ // Earn Artifact XP
AnyArtifactPowerRankPurchased = 191, /*NYI*/ // Artifact Power Ranks Purchased
LearnTransmog = 192, /*NYI*/ // Learn Transmog "{ItemModifiedAppearance}"
LearnAnyTransmog = 193, /*NYI*/ // Learn Any Transmog
HonorLevelIncrease = 194, // (Player) honor level increase
PrestigeLevelIncrease = 195, /*NYI*/ // (Player) prestige level increase
ActivelyReachLevel = 196, // Actively level to level {#Level}
CompleteResearchAnyGarrisonTalent = 197, /*NYI*/ // Garrison Talent: Complete Research Any
CompleteResearchGarrisonTalent = 198, /*NYI*/ // Garrison Talent: Complete Research "{GarrTalent}"
LearnAnyTransmogInSlot = 199, // Learn Any Transmog in Slot "{$Equip Slot}"
RecruitAnyGarrisonTroop = 200, /*NYI*/ // Recruit any Garrison Troop
StartResearchAnyGarrisonTalent = 201, /*NYI*/ // Garrison Talent: Start Research Any
StartResearchGarrisonTalent = 202, /*NYI*/ // Garrison Talent: Start Research "{GarrTalent}"
CompleteAnyWorldQuest = 203, /*NYI*/ // Complete Any Quest
EarnLicense = 204, /*NYI*/ // Earn License "{BattlePayDeliverable}" (does NOT work for box level)
CollectTransmogSetFromGroup = 205, // (Account Only) Collect a Transmog Set from Group "{TransmogSetGroup}"
ParagonLevelIncreaseWithFaction = 206, /*NYI*/ // (Player) paragon level increase with faction "{Faction}"
PlayerHasEarnedHonor = 207, /*NYI*/ // Player has earned honor
KillCreatureScenario = 208, /*NYI*/ // Kill NPC "{Creature}" (scenario criteria only, do not use for player)
ArtifactPowerRankPurchased = 209, /*NYI*/ // Artifact Power Rank of "{ArtifactPower}" Purchased
ChooseAnyRelicTalent = 210, /*NYI*/ // Choose any Relic Talent
ChooseRelicTalent = 211, /*NYI*/ // Choose Relic Talent "{ArtifactPower}"
EarnExpansionLevel = 212, /*NYI*/ // Earn Expansion Level "{$Expansion Level}"
AccountHonorLevelReached = 213, /*NYI*/ // (Account Only) honor level {#Level} reached
EarnArtifactXPForAzeriteItem = 214, // Earn Artifact experience for Azerite Item
AzeriteLevelReached = 215, // Azerite Level {#Azerite Level} reached
MythicPlusCompleted = 216, /*NYI*/ // Mythic Plus Completed
ScenarioGroupCompleted = 217, /*NYI*/ // Scenario Group Completed
CompleteAnyReplayQuest = 218, // Complete Any Replay Quest
BuyItemsFromVendors = 219, // Buy items from vendors
SellItemsToVendors = 220, // Sell items to vendors
ReachMaxLevel = 221, /*NYI*/ // Reach Max Level
MemorizeSpell = 222, /*NYI*/ // Memorize Spell "{Spell}"
LearnTransmogIllusion = 223, /*NYI*/ // Learn Transmog Illusion
LearnAnyTransmogIllusion = 224, /*NYI*/ // Learn Any Transmog Illusion
EnterTopLevelArea = 225, // Enter Top Level Map Area "{AreaTable}"
LeaveTopLevelArea = 226, /*NYI*/ // Leave Top Level Map Area "{AreaTable}"
SocketGarrisonTalent = 227, /*NYI*/ // Socket Garrison Talent {GarrTalent}
SocketAnySoulbindConduit = 228, /*NYI*/ // Socket Any Soulbind Conduit
ObtainAnyItemWithCurrencyValue = 229, /*NYI*/ // Obtain Any Item With Currency Value "{CurrencyTypes}"
MythicPlusRatingAttained = 230, /*NYI*/ // (Player) Mythic+ Rating "{#DungeonScore}" attained
SpentTalentPoint = 231, /*NYI*/ // (Player) spent talent point
#define CRITERIA_TYPE_TOTAL 232
Count
};
enum class CriteriaTreeFlags : uint16
{
+1 -1
View File
@@ -1450,7 +1450,7 @@ void LFGMgr::FinishDungeon(ObjectGuid gguid, const uint32 dungeonId, Map const*
// Update achievements
if (dungeon->difficulty == DIFFICULTY_HEROIC)
player->UpdateCriteria(CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS, 1);
player->UpdateCriteria(CriteriaType::CompletedLFGDungeonWithStrangers, 1);
LfgReward const* reward = GetRandomDungeonReward(rDungeonId, player->getLevel());
if (!reward)
@@ -2046,7 +2046,7 @@ void GameObject::Use(Unit* user)
Player* player = user->ToPlayer();
player->SendLoot(GetGUID(), LOOT_FISHINGHOLE);
player->UpdateCriteria(CRITERIA_TYPE_FISH_IN_GAMEOBJECT, GetGOInfo()->entry);
player->UpdateCriteria(CriteriaType::CatchFishInFishingHole, GetGOInfo()->entry);
return;
}
@@ -258,7 +258,7 @@ void AzeriteItem::GiveXP(uint64 xp)
SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::Xp), currentXP);
owner->UpdateCriteria(CRITERIA_TYPE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED, xp);
owner->UpdateCriteria(CriteriaType::EarnArtifactXPForAzeriteItem, xp);
// changing azerite level changes item level, need to update stats
if (m_azeriteItemData->Level != level)
@@ -268,7 +268,7 @@ void AzeriteItem::GiveXP(uint64 xp)
SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::Level), level);
UnlockDefaultMilestones();
owner->UpdateCriteria(CRITERIA_TYPE_HEART_OF_AZEROTH_LEVEL_REACHED, level);
owner->UpdateCriteria(CriteriaType::AzeriteLevelReached, level);
if (IsEquipped())
owner->_ApplyItemBonuses(this, GetSlot(), true);
@@ -799,13 +799,13 @@ void CollectionMgr::AddItemAppearance(ItemModifiedAppearanceEntry const* itemMod
{
int32 transmogSlot = ItemTransmogrificationSlots[item->InventoryType];
if (transmogSlot >= 0)
_owner->GetPlayer()->UpdateCriteria(CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT, transmogSlot, itemModifiedAppearance->ID);
_owner->GetPlayer()->UpdateCriteria(CriteriaType::LearnAnyTransmogInSlot, transmogSlot, itemModifiedAppearance->ID);
}
if (std::vector<TransmogSetEntry const*> const* sets = sDB2Manager.GetTransmogSetsForItemModifiedAppearance(itemModifiedAppearance->ID))
for (TransmogSetEntry const* set : *sets)
if (IsSetCompleted(set->ID))
_owner->GetPlayer()->UpdateCriteria(CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED, set->TransmogSetGroupID);
_owner->GetPlayer()->UpdateCriteria(CriteriaType::CollectTransmogSetFromGroup, set->TransmogSetGroupID);
}
void CollectionMgr::AddTemporaryAppearance(ObjectGuid const& itemGuid, ItemModifiedAppearanceEntry const* itemModifiedAppearance)
@@ -180,7 +180,7 @@ inline void KillRewarder::_RewardKillCredit(Player* player)
if (Creature* target = _victim->ToCreature())
{
player->KilledMonster(target->GetCreatureTemplate(), target->GetGUID());
player->UpdateCriteria(CRITERIA_TYPE_KILL_CREATURE_TYPE, target->GetCreatureType(), 1, 0, target);
player->UpdateCriteria(CriteriaType::KillAnyCreature, target->GetCreatureType(), 1, 0, target);
}
}
@@ -244,7 +244,7 @@ void KillRewarder::_RewardGroup()
if (_killer == member || member->IsAtGroupRewardDistance(_victim))
{
_RewardPlayer(member, isDungeon);
member->UpdateCriteria(CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, 0, _victim);
member->UpdateCriteria(CriteriaType::KillPlayer, 1, 0, 0, _victim);
}
}
}
@@ -282,9 +282,9 @@ void KillRewarder::Reward()
if (ObjectGuid::LowType guildId = victim->GetMap()->GetOwnerGuildId())
if (Guild* guild = sGuildMgr->GetGuildById(guildId))
guild->UpdateCriteria(CRITERIA_TYPE_KILL_CREATURE, victim->GetEntry(), 1, 0, victim, _killer);
guild->UpdateCriteria(CriteriaType::KillCreature, victim->GetEntry(), 1, 0, victim, _killer);
if (Scenario* scenario = victim->GetScenario())
scenario->UpdateCriteria(CRITERIA_TYPE_KILL_CREATURE, victim->GetEntry(), 1, 0, victim, _killer);
scenario->UpdateCriteria(CriteriaType::KillCreature, victim->GetEntry(), 1, 0, victim, _killer);
}
}
+55 -55
View File
@@ -683,7 +683,7 @@ uint32 Player::EnvironmentalDamage(EnviromentalDamage type, uint32 damage)
SendDurabilityLoss(this, 10);
}
UpdateCriteria(CRITERIA_TYPE_DEATHS_FROM, 1, type);
UpdateCriteria(CriteriaType::DieFromEnviromentalDamage, 1, type);
}
return final_damage;
@@ -1259,9 +1259,9 @@ void Player::setDeathState(DeathState s)
InitializeSelfResurrectionSpells();
UpdateCriteria(CRITERIA_TYPE_DEATH_AT_MAP, 1);
UpdateCriteria(CRITERIA_TYPE_DEATH, 1);
UpdateCriteria(CRITERIA_TYPE_DEATH_IN_DUNGEON, 1);
UpdateCriteria(CriteriaType::DieOnMap, 1);
UpdateCriteria(CriteriaType::DieAnywhere, 1);
UpdateCriteria(CriteriaType::DieInInstance, 1);
// reset all death criterias
ResetCriteria(CriteriaFailEvent::Death, 0);
@@ -2377,8 +2377,8 @@ void Player::GiveLevel(uint8 level)
CharacterDatabase.CommitTransaction(trans);
}
UpdateCriteria(CRITERIA_TYPE_REACH_LEVEL);
UpdateCriteria(CRITERIA_TYPE_ACTIVELY_REACH_LEVEL, level);
UpdateCriteria(CriteriaType::ReachLevel);
UpdateCriteria(CriteriaType::ActivelyReachLevel, level);
PushQuests();
@@ -3051,11 +3051,11 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent
// not ranked skills
for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx)
{
UpdateCriteria(CRITERIA_TYPE_LEARN_SKILL_LINE, _spell_idx->second->SkillLine);
UpdateCriteria(CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS, _spell_idx->second->SkillLine);
UpdateCriteria(CriteriaType::LearnTradeskillSkillLine, _spell_idx->second->SkillLine);
UpdateCriteria(CriteriaType::LearnSpellFromSkillLine, _spell_idx->second->SkillLine);
}
UpdateCriteria(CRITERIA_TYPE_LEARN_SPELL, spellId);
UpdateCriteria(CriteriaType::LearnOrKnowSpell, spellId);
}
// needs to be when spell is already learned, to prevent infinite recursion crashes
@@ -3068,7 +3068,7 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent
if (entry->SummonSpellID == int32(spellId) && GetSession()->GetBattlePetMgr()->GetPetCount(entry->ID) == 0)
{
GetSession()->GetBattlePetMgr()->AddPet(entry->ID, entry->CreatureID, BattlePetMgr::RollPetBreed(entry->ID), BattlePetMgr::GetDefaultPetQuality(entry->ID));
UpdateCriteria(CRITERIA_TYPE_OWN_BATTLE_PET_COUNT);
UpdateCriteria(CriteriaType::UniquePetsOwned);
break;
}
}
@@ -3453,8 +3453,8 @@ bool Player::ResetTalents(bool noCost)
if (!noCost)
{
ModifyMoney(-(int64)cost);
UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS, cost);
UpdateCriteria(CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS, 1);
UpdateCriteria(CriteriaType::MoneySpentOnRespecs, cost);
UpdateCriteria(CriteriaType::TotalRespecs, 1);
SetTalentResetCost(cost);
SetTalentResetTime(GameTime::GetGameTime());
@@ -5588,7 +5588,7 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step)
}
UpdateSkillEnchantments(skillId, value, new_value);
UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, skillId);
UpdateCriteria(CriteriaType::SkillRaised, skillId);
TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '%s' (%s), SkillID: %u, Chance: %3.1f%% taken",
GetName().c_str(), GetGUID().ToString().c_str(), skillId, chance / 10.0f);
return true;
@@ -5684,8 +5684,8 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
if (newVal > currVal)
UpdateSkillEnchantments(id, currVal, newVal);
UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
UpdateCriteria(CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
UpdateCriteria(CriteriaType::SkillRaised, id);
UpdateCriteria(CriteriaType::AchieveSkillStep, id);
// update skill state
if (itr->second.uState == SKILL_UNCHANGED)
@@ -5807,8 +5807,8 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)
if (newVal)
{
UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
UpdateCriteria(CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
UpdateCriteria(CriteriaType::SkillRaised, id);
UpdateCriteria(CriteriaType::AchieveSkillStep, id);
// temporary bonuses
for (AuraEffect* effect : GetAuraEffectsByType(SPELL_AURA_MOD_SKILL))
@@ -6178,7 +6178,7 @@ void Player::CheckAreaExploreAndOutdoor()
{
SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, offset), val);
UpdateCriteria(CRITERIA_TYPE_EXPLORE_AREA, GetAreaId());
UpdateCriteria(CriteriaType::RevealWorldMapOverlay, GetAreaId());
if (Optional<ContentTuningLevels> areaLevels = sDB2Manager.GetContentTuningData(areaEntry->ContentTuningID, m_playerData->CtrOptions->ContentTuningConditionMask))
{
@@ -6563,11 +6563,11 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto
ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), 1, true);
// and those in a lifetime
ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LifetimeHonorableKills), 1, true);
UpdateCriteria(CRITERIA_TYPE_EARN_HONORABLE_KILL);
UpdateCriteria(CRITERIA_TYPE_HK_CLASS, victim->getClass());
UpdateCriteria(CRITERIA_TYPE_HK_RACE, victim->getRace());
UpdateCriteria(CRITERIA_TYPE_HONORABLE_KILL_AT_AREA, GetAreaId());
UpdateCriteria(CRITERIA_TYPE_HONORABLE_KILL, 1, 0, 0, victim);
UpdateCriteria(CriteriaType::HonorableKills);
UpdateCriteria(CriteriaType::DeliverKillingBlowToClass, victim->getClass());
UpdateCriteria(CriteriaType::DeliverKillingBlowToRace, victim->getRace());
UpdateCriteria(CriteriaType::PVPKillInArea, GetAreaId());
UpdateCriteria(CriteriaType::EarnHonorableKill, 1, 0, 0, victim);
}
else
{
@@ -6712,7 +6712,7 @@ void Player::SetHonorLevel(uint8 level)
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HonorLevel), level);
UpdateHonorNextLevel();
UpdateCriteria(CRITERIA_TYPE_HONOR_LEVEL_REACHED);
UpdateCriteria(CriteriaType::HonorLevelIncrease);
}
void Player::UpdateHonorNextLevel()
@@ -6979,7 +6979,7 @@ void Player::ModifyCurrency(uint32 id, int32 count, bool printLog/* = true*/, bo
itr->second.TrackedQuantity = newTrackedCount;
if (count > 0)
UpdateCriteria(CRITERIA_TYPE_CURRENCY, id, count);
UpdateCriteria(CriteriaType::CurrencyGained, id, count);
WorldPackets::Misc::SetCurrency packet;
packet.Type = id;
@@ -7186,7 +7186,7 @@ void Player::UpdateArea(uint32 newArea)
PushQuests();
UpdateCriteria(CRITERIA_TYPE_TRAVELLED_TO_AREA, newArea);
UpdateCriteria(CriteriaType::EnterTopLevelArea, newArea);
}
void Player::UpdateZone(uint32 newZone, uint32 newArea)
@@ -7417,8 +7417,8 @@ void Player::DuelComplete(DuelCompleteType type)
}
break;
case DUEL_WON:
UpdateCriteria(CRITERIA_TYPE_LOSE_DUEL, 1);
duel->opponent->UpdateCriteria(CRITERIA_TYPE_WIN_DUEL, 1);
UpdateCriteria(CriteriaType::LoseDuel, 1);
duel->opponent->UpdateCriteria(CriteriaType::WinDuel, 1);
// Credit for quest Death's Challenge
if (getClass() == CLASS_DEATH_KNIGHT && duel->opponent->GetQuestStatus(12733) == QUEST_STATUS_INCOMPLETE)
@@ -12043,8 +12043,8 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat
if (item)
{
ItemAddedQuestCheck(itemId, count);
UpdateCriteria(CRITERIA_TYPE_OBTAIN_ANY_ITEM, itemId, count);
UpdateCriteria(CRITERIA_TYPE_OWN_ITEM, itemId, 1);
UpdateCriteria(CriteriaType::ObtainAnyItem, itemId, count);
UpdateCriteria(CriteriaType::AcquireItem, itemId, 1);
item->AddItemFlag(ITEM_FIELD_FLAG_NEW_ITEM);
@@ -12233,7 +12233,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_OBTAIN_ANY_ITEM, item, 1);
UpdateCriteria(CriteriaType::ObtainAnyItem, item, 1);
return EquipItem(pos, pItem, update);
}
@@ -12347,8 +12347,8 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update)
CheckTitanGripPenalty();
// only for full equip instead adding to stack
UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM, pItem->GetEntry());
UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT, slot, pItem->GetEntry());
UpdateCriteria(CriteriaType::EquipItem, pItem->GetEntry());
UpdateCriteria(CriteriaType::EquipItemInSlot, slot, pItem->GetEntry());
UpdateAverageItemLevelEquipped();
@@ -12475,8 +12475,8 @@ void Player::QuickEquipItem(uint16 pos, Item* pItem)
if (slot == EQUIPMENT_SLOT_MAINHAND || slot == EQUIPMENT_SLOT_OFFHAND)
CheckTitanGripPenalty();
UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM, pItem->GetEntry());
UpdateCriteria(CRITERIA_TYPE_EQUIP_ITEM_IN_SLOT, slot, pItem->GetEntry());
UpdateCriteria(CriteriaType::EquipItem, pItem->GetEntry());
UpdateCriteria(CriteriaType::EquipItemInSlot, slot, pItem->GetEntry());
}
}
@@ -12635,7 +12635,7 @@ void Player::MoveItemToInventory(ItemPosCountVec const& dest, Item* pItem, bool
{
// update quest counters
ItemAddedQuestCheck(pItem->GetEntry(), pItem->GetCount());
UpdateCriteria(CRITERIA_TYPE_OBTAIN_ANY_ITEM, pItem->GetEntry(), pItem->GetCount());
UpdateCriteria(CriteriaType::ObtainAnyItem, pItem->GetEntry(), pItem->GetCount());
// store item
Item* pLastItem = StoreItem(dest, pItem, update);
@@ -15702,7 +15702,7 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew
ModifyMoney(moneyRew);
if (moneyRew > 0)
UpdateCriteria(CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD, uint32(moneyRew));
UpdateCriteria(CriteriaType::MoneyEarnedFromQuesting, uint32(moneyRew));
}
// honor reward
@@ -15733,8 +15733,8 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew
SetDailyQuestStatus(quest_id);
if (quest->IsDaily())
{
UpdateCriteria(CRITERIA_TYPE_COMPLETE_DAILY_QUEST, quest_id);
UpdateCriteria(CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY, quest_id);
UpdateCriteria(CriteriaType::CompleteDailyQuest, quest_id);
UpdateCriteria(CriteriaType::CompleteAnyDailyQuestPerDay, quest_id);
}
}
else if (quest->IsWeekly())
@@ -15782,10 +15782,10 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew
}
if (quest->GetZoneOrSort() > 0)
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE, quest->GetQuestId());
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUEST_COUNT);
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUEST, quest->GetQuestId());
UpdateCriteria(CRITERIA_TYPE_COMPLETE_QUEST_ACCUMULATE, 1);
UpdateCriteria(CriteriaType::CompleteQuestsInZone, quest->GetQuestId());
UpdateCriteria(CriteriaType::CompleteQuestsCount);
UpdateCriteria(CriteriaType::CompleteQuest, quest->GetQuestId());
UpdateCriteria(CriteriaType::CompleteAnyReplayQuest, 1);
// make full db save
SaveToDB(false);
@@ -16870,7 +16870,7 @@ void Player::KilledMonsterCredit(uint32 entry, ObjectGuid guid /*= ObjectGuid::E
}
StartCriteriaTimer(CriteriaStartEvent::KillNPC, real_entry); // MUST BE CALLED FIRST
UpdateCriteria(CRITERIA_TYPE_KILL_CREATURE, real_entry, addKillCount, 0, killed);
UpdateCriteria(CriteriaType::KillCreature, real_entry, addKillCount, 0, killed);
UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_MONSTER, entry, 1, guid);
}
@@ -22695,7 +22695,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
}
//Checks and preparations done, DO FLIGHT
UpdateCriteria(CRITERIA_TYPE_FLIGHT_PATHS_TAKEN, 1);
UpdateCriteria(CriteriaType::BuyTaxi, 1);
// prevent stealth flight
//RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::Interacting);
@@ -22706,14 +22706,14 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
ASSERT(lastPathNode);
m_taxi.ClearTaxiDestinations();
ModifyMoney(-int64(totalcost));
UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, totalcost);
UpdateCriteria(CriteriaType::MoneySpentOnTaxis, totalcost);
TeleportTo(lastPathNode->ContinentID, lastPathNode->Pos.X, lastPathNode->Pos.Y, lastPathNode->Pos.Z, GetOrientation());
return false;
}
else
{
ModifyMoney(-int64(firstcost));
UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, firstcost);
UpdateCriteria(CriteriaType::MoneySpentOnTaxis, firstcost);
GetSession()->SendActivateTaxiReply(ERR_TAXIOK);
GetSession()->SendDoFlight(mount_display_id, sourcepath);
}
@@ -23290,7 +23290,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
if (Guild* guild = GetGuild())
guild->AddGuildNews(GUILD_NEWS_ITEM_PURCHASED, GetGUID(), 0, item);
UpdateCriteria(CRITERIA_TYPE_BOUGHT_ITEM_FROM_VENDOR, 1);
UpdateCriteria(CriteriaType::BuyItemsFromVendors, 1);
return true;
}
@@ -24062,7 +24062,7 @@ void Player::SetMoney(uint64 value)
{
MoneyChanged(value);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Coinage), value);
UpdateCriteria(CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED);
UpdateCriteria(CriteriaType::MostMoneyOwned);
}
bool Player::IsQuestRewarded(uint32 quest_id) const
@@ -25165,7 +25165,7 @@ void Player::SummonIfPossible(bool agree)
m_summon_expire = 0;
UpdateCriteria(CRITERIA_TYPE_ACCEPTED_SUMMONINGS, 1);
UpdateCriteria(CriteriaType::AcceptSummon, 1);
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::Summon);
TeleportTo(m_summon_location);
@@ -26302,9 +26302,9 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot, AELootResult* aeResult/*
if (!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_ANY_ITEM, item->itemid, item->count);
UpdateCriteria(CriteriaType::LootItem, item->itemid, item->count);
UpdateCriteria(CriteriaType::GetLootByType, item->itemid, item->count, loot->loot_type);
UpdateCriteria(CriteriaType::LootAnyItem, item->itemid, item->count);
}
else
aeResult->Add(newitem, item->count, loot->loot_type);
@@ -26539,7 +26539,7 @@ void Player::HandleFall(MovementInfo const& movementInfo)
// recheck alive, might have died of EnvironmentalDamage, avoid cases when player die in fact like Spirit of Redemption case
if (IsAlive() && final_damage < original_health)
UpdateCriteria(CRITERIA_TYPE_FALL_WITHOUT_DYING, uint32(z_diff*100));
UpdateCriteria(CriteriaType::MaxDistFallenWithoutDying, uint32(z_diff*100));
}
//Z given by moveinfo, LastZ, FallTime, WaterZ, MapZ, Damage, Safefall reduction
@@ -26589,7 +26589,7 @@ void Player::ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool ev
m_questObjectiveCriteriaMgr->ResetCriteria(condition, failAsset, evenIfCriteriaComplete);
}
void Player::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0*/, uint64 miscValue2 /*= 0*/, uint64 miscValue3 /*= 0*/, WorldObject* ref /*= nullptr*/)
void Player::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*/, uint64 miscValue2 /*= 0*/, uint64 miscValue3 /*= 0*/, WorldObject* ref /*= nullptr*/)
{
m_achievementMgr->UpdateCriteria(type, miscValue1, miscValue2, miscValue3, ref, this);
m_questObjectiveCriteriaMgr->UpdateCriteria(type, miscValue1, miscValue2, miscValue3, ref, this);
+1 -1
View File
@@ -2494,7 +2494,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool HasAchieved(uint32 achievementId) const;
void ResetAchievements();
void ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool evenIfCriteriaComplete = false);
void UpdateCriteria(CriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, WorldObject* ref = nullptr);
void UpdateCriteria(CriteriaType type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, WorldObject* ref = nullptr);
void StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry, uint32 timeLost = 0);
void RemoveCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry);
void CompletedAchievement(AchievementEntry const* entry);
+12 -12
View File
@@ -807,13 +807,13 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons
if (Battleground* bg = killer->GetBattleground())
bg->UpdatePlayerScore(killer, SCORE_DAMAGE_DONE, damage);
killer->UpdateCriteria(CRITERIA_TYPE_DAMAGE_DONE, health > damage ? damage : health, 0, 0, victim);
killer->UpdateCriteria(CRITERIA_TYPE_HIGHEST_HIT_DEALT, damage);
killer->UpdateCriteria(CriteriaType::DamageDealt, health > damage ? damage : health, 0, 0, victim);
killer->UpdateCriteria(CriteriaType::HighestDamageDone, damage);
}
}
if (victim->GetTypeId() == TYPEID_PLAYER)
victim->ToPlayer()->UpdateCriteria(CRITERIA_TYPE_HIGHEST_HIT_RECEIVED, damage);
victim->ToPlayer()->UpdateCriteria(CriteriaType::HighestDamageTaken, damage);
if (attacker)
damage /= victim->GetHealthMultiplierForTarget(attacker);
@@ -835,7 +835,7 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons
killed = true;
if (victim->GetTypeId() == TYPEID_PLAYER && victim != attacker)
victim->ToPlayer()->UpdateCriteria(CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED, health);
victim->ToPlayer()->UpdateCriteria(CriteriaType::TotalDamageTaken, health);
if (damagetype != NODAMAGE && damagetype != SELF_DAMAGE && victim->HasAuraType(SPELL_AURA_SCHOOL_ABSORB_OVERKILL))
{
@@ -904,7 +904,7 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons
else
{
if (victim->GetTypeId() == TYPEID_PLAYER)
victim->ToPlayer()->UpdateCriteria(CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED, damage);
victim->ToPlayer()->UpdateCriteria(CriteriaType::TotalDamageTaken, damage);
victim->ModifyHealth(-(int32)damage);
@@ -6089,16 +6089,16 @@ void Unit::SetCharm(Unit* charm, bool apply)
// use the actual gain, as the overheal shall not be counted, skip gain 0 (it ignored anyway in to criteria)
if (gain)
player->UpdateCriteria(CRITERIA_TYPE_HEALING_DONE, gain, 0, 0, victim);
player->UpdateCriteria(CriteriaType::HealingDone, gain, 0, 0, victim);
player->UpdateCriteria(CRITERIA_TYPE_HIGHEST_HEAL_CAST, addhealth);
player->UpdateCriteria(CriteriaType::HighestHealCast, addhealth);
}
}
if (Player* player = victim->ToPlayer())
{
player->UpdateCriteria(CRITERIA_TYPE_TOTAL_HEALING_RECEIVED, gain);
player->UpdateCriteria(CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED, addhealth);
player->UpdateCriteria(CriteriaType::TotalHealReceived, gain);
player->UpdateCriteria(CriteriaType::HighestHealReceived, addhealth);
}
if (gain)
@@ -10445,7 +10445,7 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
// and before Spirit of Redemption as it also removes auras
if (attacker)
if (Player* killerPlayer = attacker->GetCharmerOrOwnerPlayerOrPlayerItself())
killerPlayer->UpdateCriteria(CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, 0, victim);
killerPlayer->UpdateCriteria(CriteriaType::DeliveredKillingBlow, 1, 0, 0, victim);
if (!skipSettingDeathState)
{
@@ -10578,9 +10578,9 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
if (attacker && victim->GetTypeId() == TYPEID_PLAYER)
{
if (attacker->GetTypeId() == TYPEID_UNIT)
victim->ToPlayer()->UpdateCriteria(CRITERIA_TYPE_KILLED_BY_CREATURE, attacker->GetEntry());
victim->ToPlayer()->UpdateCriteria(CriteriaType::KilledByCreature, attacker->GetEntry());
else if (attacker->GetTypeId() == TYPEID_PLAYER && victim != attacker)
victim->ToPlayer()->UpdateCriteria(CRITERIA_TYPE_KILLED_BY_PLAYER, 1, attacker->ToPlayer()->GetTeam());
victim->ToPlayer()->UpdateCriteria(CriteriaType::KilledByPlayer, 1, attacker->ToPlayer()->GetTeam());
}
// Hook for OnPVPKill Event
+3 -3
View File
@@ -421,7 +421,7 @@ void Garrison::PlaceBuilding(uint32 garrPlotInstanceId, uint32 garrBuildingId)
_owner->SendDirectMessage(buildingRemoved.Write());
}
_owner->UpdateCriteria(CRITERIA_TYPE_PLACE_GARRISON_BUILDING, garrBuildingId);
_owner->UpdateCriteria(CriteriaType::PlaceGarrisonBuilding, garrBuildingId);
}
_owner->SendDirectMessage(placeBuildingResult.Write());
@@ -495,7 +495,7 @@ void Garrison::ActivateBuilding(uint32 garrPlotInstanceId)
buildingActivated.GarrPlotInstanceID = garrPlotInstanceId;
_owner->SendDirectMessage(buildingActivated.Write());
_owner->UpdateCriteria(CRITERIA_TYPE_UPGRADE_GARRISON_BUILDING, plot->BuildingInfo.PacketInfo->GarrBuildingID);
_owner->UpdateCriteria(CriteriaType::ActivateAnyGarrisonBuilding, plot->BuildingInfo.PacketInfo->GarrBuildingID);
}
}
}
@@ -530,7 +530,7 @@ void Garrison::AddFollower(uint32 garrFollowerId)
addFollowerResult.Follower = follower.PacketInfo;
_owner->SendDirectMessage(addFollowerResult.Write());
_owner->UpdateCriteria(CRITERIA_TYPE_RECRUIT_GARRISON_FOLLOWER, follower.PacketInfo.DbID);
_owner->UpdateCriteria(CriteriaType::RecruitGarrisonFollower, follower.PacketInfo.DbID);
}
Garrison::Follower const* Garrison::GetFollower(uint64 dbId) const
+3 -3
View File
@@ -1258,7 +1258,7 @@ void Group::CountTheRoll(Rolls::iterator rollI, Map* allowedMap)
if (player && player->GetSession())
{
player->UpdateCriteria(CRITERIA_TYPE_ROLL_NEED_ON_LOOT, roll->itemid, maxresul);
player->UpdateCriteria(CriteriaType::RollNeed, roll->itemid, maxresul);
ItemPosCountVec dest;
LootItem* item = &(roll->itemSlot >= roll->getLoot()->items.size() ? roll->getLoot()->quest_items[roll->itemSlot - roll->getLoot()->items.size()] : roll->getLoot()->items[roll->itemSlot]);
@@ -1322,7 +1322,7 @@ void Group::CountTheRoll(Rolls::iterator rollI, Map* allowedMap)
if (player && player->GetSession())
{
player->UpdateCriteria(CRITERIA_TYPE_ROLL_GREED_ON_LOOT, roll->itemid, maxresul);
player->UpdateCriteria(CriteriaType::RollGreed, roll->itemid, maxresul);
LootItem* item = &(roll->itemSlot >= roll->getLoot()->items.size() ? roll->getLoot()->quest_items[roll->itemSlot - roll->getLoot()->items.size()] : roll->getLoot()->items[roll->itemSlot]);
@@ -1349,7 +1349,7 @@ void Group::CountTheRoll(Rolls::iterator rollI, Map* allowedMap)
item->is_looted = true;
roll->getLoot()->NotifyItemRemoved(roll->itemSlot);
roll->getLoot()->unlootedCount--;
player->UpdateCriteria(CRITERIA_TYPE_CAST_SPELL, 13262); // Disenchant
player->UpdateCriteria(CriteriaType::CastSpell, 13262); // Disenchant
ItemDisenchantLootEntry const* disenchant = ASSERT_NOTNULL(roll->GetItemDisenchantLoot(player));
+1 -1
View File
@@ -3521,7 +3521,7 @@ bool Guild::HasAchieved(uint32 achievementId) const
return m_achievementMgr.HasAchieved(achievementId);
}
void Guild::UpdateCriteria(CriteriaTypes type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject* ref, Player* player)
void Guild::UpdateCriteria(CriteriaType type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject* ref, Player* player)
{
m_achievementMgr.UpdateCriteria(type, miscValue1, miscValue2, miscValue3, ref, player);
}
+1 -1
View File
@@ -841,7 +841,7 @@ class TC_GAME_API Guild
void ResetTimes(bool weekly);
bool HasAchieved(uint32 achievementId) const;
void UpdateCriteria(CriteriaTypes type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject* ref, Player* player);
void UpdateCriteria(CriteriaType type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject* ref, Player* player);
protected:
ObjectGuid::LowType m_id;
@@ -146,7 +146,7 @@ void WorldSession::HandleAuctionConfirmCommoditiesPurchase(WorldPackets::Auction
{
if (success)
{
GetPlayer()->UpdateCriteria(CRITERIA_TYPE_WON_AUCTIONS, 1);
GetPlayer()->UpdateCriteria(CriteriaType::AuctionsWon, 1);
SendAuctionCommandResult(0, AuctionCommand::PlaceBid, AuctionResult::Ok, throttle.DelayUntilNext);
}
else
@@ -475,7 +475,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlac
{
if (success)
{
GetPlayer()->UpdateCriteria(CRITERIA_TYPE_HIGHEST_AUCTION_BID, bidAmount);
GetPlayer()->UpdateCriteria(CriteriaType::HighestAuctionBid, bidAmount);
SendAuctionCommandResult(auctionId, AuctionCommand::PlaceBid, AuctionResult::Ok, throttle.DelayUntilNext);
}
else
@@ -778,7 +778,7 @@ void WorldSession::HandleAuctionSellCommodity(WorldPackets::AuctionHouse::Auctio
{
if (success)
{
GetPlayer()->UpdateCriteria(CRITERIA_TYPE_CREATE_AUCTION, 1);
GetPlayer()->UpdateCriteria(CriteriaType::ItemsPostedAtAuction, 1);
SendAuctionCommandResult(auctionId, AuctionCommand::SellItem, AuctionResult::Ok, throttle.DelayUntilNext);
}
else
@@ -926,7 +926,7 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell
{
if (success)
{
GetPlayer()->UpdateCriteria(CRITERIA_TYPE_CREATE_AUCTION, 1);
GetPlayer()->UpdateCriteria(CriteriaType::ItemsPostedAtAuction, 1);
SendAuctionCommandResult(auctionId, AuctionCommand::SellItem, AuctionResult::Ok, throttle.DelayUntilNext);
}
else
+1 -1
View File
@@ -147,7 +147,7 @@ void WorldSession::HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& pack
_player->SetBankBagSlotCount(slot);
_player->ModifyMoney(-int64(price));
_player->UpdateCriteria(CRITERIA_TYPE_BUY_BANK_SLOT);
_player->UpdateCriteria(CriteriaType::BankSlotsPurchased);
}
void WorldSession::SendShowBank(ObjectGuid guid)
@@ -1370,7 +1370,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
m_playerLoading.Clear();
// Handle Login-Achievements (should be handled after loading)
_player->UpdateCriteria(CRITERIA_TYPE_ON_LOGIN, 1);
_player->UpdateCriteria(CriteriaType::Login, 1);
sScriptMgr->OnPlayerLogin(pCurrChar, firstLogin);
@@ -1698,7 +1698,7 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance
SendPacket(WorldPackets::Character::BarberShopResult(WorldPackets::Character::BarberShopResult::ResultEnum::Success).Write());
_player->ModifyMoney(-cost); // it isn't free
_player->UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_AT_BARBER, cost);
_player->UpdateCriteria(CriteriaType::MoneySpentAtBarberShop, cost);
if (_player->GetNativeSex() != packet.NewSex)
{
@@ -1709,7 +1709,7 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance
_player->SetCustomizations(Trinity::Containers::MakeIteratorPair(packet.Customizations.begin(), packet.Customizations.end()));
_player->UpdateCriteria(CRITERIA_TYPE_VISIT_BARBER_SHOP, 1);
_player->UpdateCriteria(CriteriaType::GotHaircut, 1);
_player->SetStandState(UNIT_STAND_STATE_STAND);
+1 -1
View File
@@ -629,7 +629,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet)
Unit* unit = ObjectAccessor::GetUnit(*_player, packet.Target);
_player->UpdateCriteria(CRITERIA_TYPE_DO_EMOTE, packet.SoundIndex, 0, 0, unit);
_player->UpdateCriteria(CriteriaType::DoEmote, packet.SoundIndex, 0, 0, unit);
// Send scripted event call
if (unit)
+2 -2
View File
@@ -408,10 +408,10 @@ void WorldSession::HandleLootRoll(WorldPackets::Loot::LootRoll& packet)
switch (packet.RollType)
{
case ROLL_NEED:
GetPlayer()->UpdateCriteria(CRITERIA_TYPE_ROLL_NEED, 1);
GetPlayer()->UpdateCriteria(CriteriaType::RollAnyNeed, 1);
break;
case ROLL_GREED:
GetPlayer()->UpdateCriteria(CRITERIA_TYPE_ROLL_GREED, 1);
GetPlayer()->UpdateCriteria(CriteriaType::RollAnyGreed, 1);
break;
}
}
+3 -3
View File
@@ -458,8 +458,8 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet)
return;
}
_player->UpdateCriteria(CRITERIA_TYPE_MONEY_FROM_VENDORS, money);
_player->UpdateCriteria(CRITERIA_TYPE_SOLD_ITEM_TO_VENDOR, 1);
_player->UpdateCriteria(CriteriaType::MoneyEarnedFromSales, money);
_player->UpdateCriteria(CriteriaType::SellItemsToVendors, 1);
if (packet.Amount < pItem->GetCount()) // need split items
{
@@ -1201,7 +1201,7 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC
if (BattlePetSpeciesEntry const* entry = sSpellMgr->GetBattlePetSpecies(uint32(spellToLearn)))
{
GetBattlePetMgr()->AddPet(entry->ID, entry->CreatureID, BattlePetMgr::RollPetBreed(entry->ID), BattlePetMgr::GetDefaultPetQuality(entry->ID));
_player->UpdateCriteria(CRITERIA_TYPE_OWN_BATTLE_PET_COUNT);
_player->UpdateCriteria(CriteriaType::UniquePetsOwned);
}
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
+8 -8
View File
@@ -135,9 +135,9 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem& p
for (AELootResult::ResultValue const& resultValue : aeResult)
{
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_ANY_ITEM, resultValue.item->GetEntry(), resultValue.count);
player->UpdateCriteria(CriteriaType::LootItem, resultValue.item->GetEntry(), resultValue.count);
player->UpdateCriteria(CriteriaType::GetLootByType, resultValue.item->GetEntry(), resultValue.count, resultValue.lootType);
player->UpdateCriteria(CriteriaType::LootAnyItem, resultValue.item->GetEntry(), resultValue.count);
}
}
}
@@ -229,7 +229,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet
uint64 goldMod = CalculatePct(goldPerPlayer, (*i)->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_MONEY_GAIN, 1));
(*i)->ModifyMoney(goldPerPlayer + goldMod);
(*i)->UpdateCriteria(CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer);
(*i)->UpdateCriteria(CriteriaType::MoneyLootedFromCreatures, goldPerPlayer);
WorldPackets::Loot::LootMoneyNotify packet;
packet.Money = goldPerPlayer;
@@ -243,7 +243,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet
uint64 goldMod = CalculatePct(loot->gold, player->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_MONEY_GAIN, 1));
player->ModifyMoney(loot->gold + goldMod);
player->UpdateCriteria(CRITERIA_TYPE_LOOT_MONEY, loot->gold);
player->UpdateCriteria(CriteriaType::MoneyLootedFromCreatures, loot->gold);
WorldPackets::Loot::LootMoneyNotify packet;
packet.Money = loot->gold;
@@ -546,9 +546,9 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPackets::Loot::MasterLootItem
for (AELootResult::ResultValue const& resultValue : aeResult)
{
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_ANY_ITEM, resultValue.item->GetEntry(), resultValue.count);
target->UpdateCriteria(CriteriaType::LootItem, resultValue.item->GetEntry(), resultValue.count);
target->UpdateCriteria(CriteriaType::GetLootByType, resultValue.item->GetEntry(), resultValue.count, resultValue.lootType);
target->UpdateCriteria(CriteriaType::LootAnyItem, resultValue.item->GetEntry(), resultValue.count);
}
}
+1 -1
View File
@@ -273,7 +273,7 @@ void WorldSession::HandleSendMail(WorldPackets::Mail::SendMail& packet)
player->SendMailResult(0, MAIL_SEND, MAIL_OK);
player->ModifyMoney(-reqmoney);
player->UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);
player->UpdateCriteria(CriteriaType::MoneySpentOnPostage, cost);
bool needItemDelay = false;
+1 -1
View File
@@ -508,7 +508,7 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemove
_player->SetQuestSlot(packet.Entry, 0);
_player->UpdateCriteria(CRITERIA_TYPE_QUEST_ABANDONED, 1);
_player->UpdateCriteria(CriteriaType::AbandonAnyQuest, 1);
}
}
+1 -1
View File
@@ -267,7 +267,7 @@ void WorldSession::HandleGameobjectReportUse(WorldPackets::GameObject::GameObjRe
if (go->AI()->OnReportUse(_player))
return;
_player->UpdateCriteria(CRITERIA_TYPE_USE_GAMEOBJECT, go->GetEntry());
_player->UpdateCriteria(CriteriaType::UseGameobject, go->GetEntry());
}
}
+1 -1
View File
@@ -616,7 +616,7 @@ void InstanceScript::DoSendNotifyToInstance(char const* format, ...)
}
// Update Achievement Criteria for all players in instance
void InstanceScript::DoUpdateCriteria(CriteriaTypes type, uint32 miscValue1 /*= 0*/, uint32 miscValue2 /*= 0*/, Unit* unit /*= nullptr*/)
void InstanceScript::DoUpdateCriteria(CriteriaType type, uint32 miscValue1 /*= 0*/, uint32 miscValue2 /*= 0*/, Unit* unit /*= nullptr*/)
{
Map::PlayerList const& PlayerList = instance->GetPlayers();
+2 -2
View File
@@ -39,7 +39,7 @@ class ModuleReference;
class Player;
class Unit;
struct InstanceSpawnGroupInfo;
enum CriteriaTypes : uint8;
enum class CriteriaType : uint8;
enum class CriteriaStartEvent : uint8;
enum EncounterCreditType : uint8;
namespace WorldPackets
@@ -220,7 +220,7 @@ class TC_GAME_API InstanceScript : public ZoneScript
void DoSendNotifyToInstance(char const* format, ...);
// Update Achievement Criteria for all players in instance
void DoUpdateCriteria(CriteriaTypes type, uint32 miscValue1 = 0, uint32 miscValue2 = 0, Unit* unit = nullptr);
void DoUpdateCriteria(CriteriaType type, uint32 miscValue1 = 0, uint32 miscValue2 = 0, Unit* unit = nullptr);
// Start/Stop Timed Achievement Criteria for all players in instance
void DoStartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry);
@@ -165,7 +165,7 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/)
player->m_taxi.NextTaxiDestination();
if (!_pointsForPathSwitch.empty())
{
player->UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, _pointsForPathSwitch.front().Cost);
player->UpdateCriteria(CriteriaType::MoneySpentOnTaxis, _pointsForPathSwitch.front().Cost);
player->ModifyMoney(-_pointsForPathSwitch.front().Cost);
}
}
@@ -37,8 +37,8 @@ QuestObjectiveCriteriaMgr::~QuestObjectiveCriteriaMgr()
void QuestObjectiveCriteriaMgr::CheckAllQuestObjectiveCriteria(Player* referencePlayer)
{
// suppress sending packets
for (uint32 i = 0; i < CRITERIA_TYPE_TOTAL; ++i)
UpdateCriteria(CriteriaTypes(i), 0, 0, 0, nullptr, referencePlayer);
for (uint32 i = 0; i < uint32(CriteriaType::Count); ++i)
UpdateCriteria(CriteriaType(i), 0, 0, 0, nullptr, referencePlayer);
}
void QuestObjectiveCriteriaMgr::Reset()
@@ -335,7 +335,7 @@ std::string QuestObjectiveCriteriaMgr::GetOwnerInfo() const
return Trinity::StringFormat("%s %s", _owner->GetGUID().ToString().c_str(), _owner->GetName().c_str());
}
CriteriaList const& QuestObjectiveCriteriaMgr::GetCriteriaByType(CriteriaTypes type, uint32 /*asset*/) const
CriteriaList const& QuestObjectiveCriteriaMgr::GetCriteriaByType(CriteriaType type, uint32 /*asset*/) const
{
return sCriteriaMgr->GetQuestObjectiveCriteriaByType(type);
}
@@ -54,7 +54,7 @@ protected:
void SendPacket(WorldPacket const* data) const override;
std::string GetOwnerInfo() const override;
CriteriaList const& GetCriteriaByType(CriteriaTypes type, uint32 asset) const override;
CriteriaList const& GetCriteriaByType(CriteriaType type, uint32 asset) const override;
private:
Player* _owner;
+5 -5
View File
@@ -495,11 +495,11 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, in
if (!factionEntry->FriendshipRepID && !paragonReputation)
UpdateRankCounters(old_rank, new_rank);
_player->UpdateCriteria(CRITERIA_TYPE_KNOWN_FACTIONS, factionEntry->ID);
_player->UpdateCriteria(CRITERIA_TYPE_GAIN_REPUTATION, factionEntry->ID);
_player->UpdateCriteria(CRITERIA_TYPE_GAIN_EXALTED_REPUTATION, factionEntry->ID);
_player->UpdateCriteria(CRITERIA_TYPE_GAIN_REVERED_REPUTATION, factionEntry->ID);
_player->UpdateCriteria(CRITERIA_TYPE_GAIN_HONORED_REPUTATION, factionEntry->ID);
_player->UpdateCriteria(CriteriaType::TotalFactionsEncountered, factionEntry->ID);
_player->UpdateCriteria(CriteriaType::ReputationGained, factionEntry->ID);
_player->UpdateCriteria(CriteriaType::TotalExaltedFactions, factionEntry->ID);
_player->UpdateCriteria(CriteriaType::TotalReveredFactions, factionEntry->ID);
_player->UpdateCriteria(CriteriaType::TotalHonoredFactions, factionEntry->ID);
return true;
}
@@ -59,10 +59,10 @@ void InstanceScenario::SaveToDB()
continue;
Criteria const* criteria = sCriteriaMgr->GetCriteria(iter->first);
switch (CriteriaTypes(criteria->Entry->Type))
switch (CriteriaType(criteria->Entry->Type))
{
// Blizzard only appears to store creature kills
case CRITERIA_TYPE_KILL_CREATURE:
case CriteriaType::KillCreature:
break;
default:
continue;
@@ -124,10 +124,10 @@ void InstanceScenario::LoadInstanceData(uint32 instanceId)
if (criteria->Entry->StartTimer && time_t(date + criteria->Entry->StartTimer) < now)
continue;
switch (CriteriaTypes(criteria->Entry->Type))
switch (CriteriaType(criteria->Entry->Type))
{
// Blizzard appears to only stores creatures killed progress for unknown reasons. Either technical shortcoming or intentional
case CRITERIA_TYPE_KILL_CREATURE:
case CriteriaType::KillCreature:
break;
default:
continue;
+1 -1
View File
@@ -321,7 +321,7 @@ std::vector<WorldPackets::Achievement::CriteriaProgress> Scenario::GetCriteriasP
return criteriasProgress;
}
CriteriaList const& Scenario::GetCriteriaByType(CriteriaTypes type, uint32 /*asset*/) const
CriteriaList const& Scenario::GetCriteriaByType(CriteriaType type, uint32 /*asset*/) const
{
return sCriteriaMgr->GetScenarioCriteriaByType(type);
}
+1 -1
View File
@@ -94,7 +94,7 @@ class TC_GAME_API Scenario : public CriteriaHandler
std::vector<WorldPackets::Scenario::BonusObjectiveData> GetBonusObjectivesData();
std::vector<WorldPackets::Achievement::CriteriaProgress> GetCriteriasProgress();
CriteriaList const& GetCriteriaByType(CriteriaTypes type, uint32 asset) const override;
CriteriaList const& GetCriteriaByType(CriteriaType type, uint32 asset) const override;
ScenarioData const* _data;
private:
+5 -5
View File
@@ -2728,14 +2728,14 @@ SpellMissInfo Spell::PreprocessSpellHit(Unit* unit, TargetInfo& hitInfo)
if (Player* player = unit->ToPlayer())
{
player->StartCriteriaTimer(CriteriaStartEvent::BeSpellTarget, m_spellInfo->Id);
player->UpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, m_spellInfo->Id, 0, 0, m_caster);
player->UpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET2, m_spellInfo->Id);
player->UpdateCriteria(CriteriaType::BeSpellTarget, m_spellInfo->Id, 0, 0, m_caster);
player->UpdateCriteria(CriteriaType::GainAura, m_spellInfo->Id);
}
if (Player* player = m_caster->ToPlayer())
{
player->StartCriteriaTimer(CriteriaStartEvent::CastSpell, m_spellInfo->Id);
player->UpdateCriteria(CRITERIA_TYPE_CAST_SPELL2, m_spellInfo->Id, 0, 0, unit);
player->UpdateCriteria(CriteriaType::LandTargetedSpellOnTarget, m_spellInfo->Id, 0, 0, unit);
}
if (m_caster != unit)
@@ -3435,10 +3435,10 @@ void Spell::_cast(bool skipCheck)
if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CAST_ITEM) && m_CastItem)
{
player->StartCriteriaTimer(CriteriaStartEvent::UseItem, m_CastItem->GetEntry());
player->UpdateCriteria(CRITERIA_TYPE_USE_ITEM, m_CastItem->GetEntry());
player->UpdateCriteria(CriteriaType::UseItem, m_CastItem->GetEntry());
}
player->UpdateCriteria(CRITERIA_TYPE_CAST_SPELL, m_spellInfo->Id);
player->UpdateCriteria(CriteriaType::CastSpell, m_spellInfo->Id);
}
if (!(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_AND_REAGENT_COST))
+1 -1
View File
@@ -84,7 +84,7 @@ public:
return false;
target->ResetHonorStats();
target->UpdateCriteria(CRITERIA_TYPE_EARN_HONORABLE_KILL);
target->UpdateCriteria(CriteriaType::HonorableKills);
return true;
}
@@ -206,9 +206,9 @@ class instance_trial_of_the_crusader : public InstanceMapScript
state = IN_PROGRESS;
break;
case DONE:
DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_DEFEAT_FACTION_CHAMPIONS);
DoUpdateCriteria(CriteriaType::BeSpellTarget, SPELL_DEFEAT_FACTION_CHAMPIONS);
if (ResilienceWillFixItTimer > 0)
DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_CHAMPIONS_KILLED_IN_MINUTE);
DoUpdateCriteria(CriteriaType::BeSpellTarget, SPELL_CHAMPIONS_KILLED_IN_MINUTE);
DoRespawnGameObject(GetGuidData(DATA_CRUSADERS_CHEST), 7 * DAY);
if (GameObject* cache = GetGameObject(DATA_CRUSADERS_CHEST))
cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
@@ -397,7 +397,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
break;
case SNAKES_DONE:
if (NotOneButTwoJormungarsTimer > 0)
DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_WORMS_KILLED_IN_10_SECONDS);
DoUpdateCriteria(CriteriaType::BeSpellTarget, SPELL_WORMS_KILLED_IN_10_SECONDS);
if (Creature* tirion = GetCreature(DATA_FORDRING))
tirion->AI()->DoAction(ACTION_START_ICEHOWL);
HandleNorthrendBeastsDone();
@@ -352,7 +352,7 @@ public:
instance->SetData(DATA_CAVERN_ACTIVE, 0);
if (!instance->GetData(DATA_ICE_SHARDS_HIT))
instance->DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_DONT_LOOK_UP_ACHIEV_CREDIT, 0, player);
instance->DoUpdateCriteria(CriteriaType::BeSpellTarget, SPELL_DONT_LOOK_UP_ACHIEV_CREDIT, 0, player);
}
return true;
@@ -355,7 +355,7 @@ class boss_lady_deathwhisper : public CreatureScript
livingAddEntries.insert(unit->GetEntry());
if (livingAddEntries.size() >= 5)
instance->DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_FULL_HOUSE, 0, me);
instance->DoUpdateCriteria(CriteriaType::BeSpellTarget, SPELL_FULL_HOUSE, 0, me);
if (Creature* darnavan = ObjectAccessor::GetCreature(*me, _darnavanGUID))
{