aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp4
-rw-r--r--src/server/game/Achievements/AchievementMgr.h2
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp82
-rw-r--r--src/server/game/Achievements/CriteriaHandler.h2
-rw-r--r--src/server/game/DataStores/DB2Structure.h4
-rw-r--r--src/server/game/DataStores/DBCEnums.h4
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp4
8 files changed, 96 insertions, 8 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index c272c97dbcc..5d7978ba4fd 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -61,8 +61,8 @@ AchievementMgr::~AchievementMgr() { }
void AchievementMgr::CheckAllAchievementCriteria(Player* referencePlayer)
{
// suppress sending packets
- for (uint32 i = 0; i < uint32(CriteriaType::Count); ++i)
- UpdateCriteria(CriteriaType(i), 0, 0, 0, nullptr, referencePlayer);
+ for (CriteriaType criteriaType : CriteriaMgr::GetRetroactivelyUpdateableCriteriaTypes())
+ UpdateCriteria(criteriaType, 0, 0, 0, nullptr, referencePlayer);
}
bool AchievementMgr::HasAchieved(uint32 achievementId) const
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index 1d1090128a4..f322e9cec83 100644
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -139,8 +139,6 @@ protected:
private:
Guild* _owner;
-
- friend class UnitTestDataLoader;
};
class TC_GAME_API AchievementGlobalMgr
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index a4eff377a86..9cadf11de30 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -560,6 +560,8 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
case CriteriaType::CompleteAnyReplayQuest:
case CriteriaType::BuyItemsFromVendors:
case CriteriaType::SellItemsToVendors:
+ case CriteriaType::ReachMaxLevel:
+ case CriteriaType::LearnTaxiNode:
SetCriteriaProgress(criteria, 1, referencePlayer, PROGRESS_ACCUMULATE);
break;
// std case: increment at miscValue1
@@ -1225,6 +1227,8 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CriteriaType::BuyItemsFromVendors:
case CriteriaType::SellItemsToVendors:
case CriteriaType::GainLevels:
+ case CriteriaType::ReachRenownLevel:
+ case CriteriaType::LearnTaxiNode:
return progress->Counter >= requiredAmount;
case CriteriaType::EarnAchievement:
case CriteriaType::CompleteQuest:
@@ -1243,6 +1247,7 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CriteriaType::PrestigeLevelIncrease:
case CriteriaType::ActivelyReachLevel:
case CriteriaType::CollectTransmogSetFromGroup:
+ case CriteriaType::ReachMaxLevel:
case CriteriaType::EnterTopLevelArea:
case CriteriaType::LeaveTopLevelArea:
return progress->Counter >= 1;
@@ -1615,6 +1620,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
return false;
break;
case CriteriaType::CurrencyGained:
+ case CriteriaType::ReachRenownLevel:
if (!miscValue1 || !miscValue2 || int64(miscValue2) < 0
|| miscValue1 != uint32(criteria->Entry->Asset.CurrencyID))
return false;
@@ -1672,6 +1678,10 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.AreaTriggerActionSetID))
return false;
break;
+ case CriteriaType::LearnTaxiNode:
+ if (miscValue1 != uint32(criteria->Entry->Asset.TaxiNodesID))
+ return false;
+ break;
default:
break;
}
@@ -3856,6 +3866,14 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaType type)
return "CompleteTrackingQuest";
case CriteriaType::GainLevels:
return "GainLevels";
+ case CriteriaType::CompleteQuestsCountOnAccount:
+ return "CompleteQuestsCountOnAccount";
+ case CriteriaType::WarbandBankTabPurchased:
+ return "WarbandBankTabPurchased";
+ case CriteriaType::ReachRenownLevel:
+ return "ReachRenownLevel";
+ case CriteriaType::LearnTaxiNode:
+ return "LearnTaxiNode";
default:
return "MissingType";
}
@@ -3906,6 +3924,8 @@ inline bool IsCriteriaTypeStoredByAsset(CriteriaType type)
case CriteriaType::LandTargetedSpellOnTarget:
case CriteriaType::LearnTradeskillSkillLine:
case CriteriaType::DefeatDungeonEncounter:
+ case CriteriaType::LearnToy:
+ case CriteriaType::LearnAnyTransmog:
return true;
default:
break;
@@ -4276,3 +4296,65 @@ ModifierTreeNode const* CriteriaMgr::GetModifierTree(uint32 modifierTreeId) cons
return nullptr;
}
+
+std::span<CriteriaType const> CriteriaMgr::GetRetroactivelyUpdateableCriteriaTypes()
+{
+ static constexpr CriteriaType Types[] =
+ {
+ CriteriaType::CompleteResearchProject,
+ CriteriaType::CompleteAnyResearchProject,
+ CriteriaType::ReachLevel,
+ CriteriaType::SkillRaised,
+ CriteriaType::CompleteQuestsCount,
+ CriteriaType::CompleteAnyDailyQuestPerDay,
+ CriteriaType::CompleteQuestsInZone,
+ CriteriaType::CompleteQuest,
+ CriteriaType::LearnOrKnowSpell,
+ CriteriaType::AcquireItem,
+ CriteriaType::EarnPersonalArenaRating,
+ CriteriaType::AchieveSkillStep,
+ CriteriaType::RevealWorldMapOverlay,
+ //CriteriaType::EarnTitle, /*NYI*/
+ CriteriaType::BankSlotsPurchased,
+ CriteriaType::ReputationGained,
+ CriteriaType::TotalExaltedFactions,
+ //CriteriaType::CompleteQuestsInSort, /*NYI*/
+ CriteriaType::LearnSpellFromSkillLine,
+ CriteriaType::MostMoneyOwned,
+ CriteriaType::TotalReveredFactions,
+ CriteriaType::TotalHonoredFactions,
+ CriteriaType::TotalFactionsEncountered,
+ //CriteriaType::AccountKnownPet, /*NYI*/
+ CriteriaType::LearnTradeskillSkillLine,
+ CriteriaType::HonorableKills,
+ //CriteriaType::GuildBankTabsPurchased, /*NYI*/
+ //CriteriaType::EarnGuildAchievementPoints, /*NYI*/
+ //CriteriaType::EarnBattlegroundRating, /*NYI*/
+ //CriteriaType::GuildTabardCreated, /*NYI*/
+ CriteriaType::LearnedNewPet,
+ CriteriaType::UniquePetsOwned,
+ //CriteriaType::UpgradeGarrison, /*NYI*/
+ //CriteriaType::AcquireGarrison, /*NYI*/
+ //CriteriaType::LearnGarrisonBlueprint, /*NYI*/
+ //CriteriaType::LearnGarrisonSpecialization, /*NYI*/
+ //CriteriaType::LearnToy, /*NYI*/ // Learn Toy "{Item}"
+ //CriteriaType::LearnAnyToy, /*NYI*/ // Learn Any Toy
+ //CriteriaType::LearnTransmog, /*NYI*/
+ CriteriaType::HonorLevelIncrease,
+ //CriteriaType::AccountHonorLevelReached, /*NYI*/
+ CriteriaType::ReachMaxLevel,
+ //CriteriaType::MemorizeSpell, /*NYI*/
+ //CriteriaType::LearnTransmogIllusion, /*NYI*/
+ //CriteriaType::MythicPlusRatingAttained, /*NYI*/
+ //CriteriaType::MythicPlusDisplaySeasonEnded, /*NYI*/
+ //CriteriaType::CompleteTrackingQuest, /*NYI*/
+ //CriteriaType::WarbandBankTabPurchased, /*NYI*/
+ CriteriaType::LearnTaxiNode,
+
+ CriteriaType::EarnAchievementPoints,
+ CriteriaType::BattlePetAchievementPointsEarned,
+ CriteriaType::EarnAchievement // criteria possibly completed by retroactive scan, must be last
+ };
+
+ return Types;
+}
diff --git a/src/server/game/Achievements/CriteriaHandler.h b/src/server/game/Achievements/CriteriaHandler.h
index cfcf8a614c1..82c8f2ac7d1 100644
--- a/src/server/game/Achievements/CriteriaHandler.h
+++ b/src/server/game/Achievements/CriteriaHandler.h
@@ -395,6 +395,8 @@ public:
Criteria const* GetCriteria(uint32 criteriaId) const;
ModifierTreeNode const* GetModifierTree(uint32 modifierTreeId) const;
+ static std::span<CriteriaType const> GetRetroactivelyUpdateableCriteriaTypes();
+
private:
std::unordered_map<uint32, CriteriaDataSet> _criteriaDataMap;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index 40072c93d63..73138b85eae 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -861,6 +861,7 @@ struct CriteriaEntry
// CriteriaType::CurrencyGained = 12
// CriteriaType::ObtainAnyItemWithCurrencyValue = 229
+ // CriteriaType::ReachRenownLevel = 261
int32 CurrencyID;
// CriteriaType::DieInInstance = 18
@@ -1017,6 +1018,9 @@ struct CriteriaEntry
// CriteriaType::MythicPlusRatingAttained = 230
int32 DungeonScore;
+
+ // CriteriaType::LearnTaxiNode = 262
+ int32 TaxiNodesID;
} Asset;
uint32 ModifierTreeId;
int32 StartEvent;
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 55d60d4ec5f..dbf1e05e4dd 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -526,7 +526,7 @@ enum class CriteriaType : int16
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)
+ AnyoneTriggerGameEventScenario = 92, // 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
@@ -655,7 +655,7 @@ enum class CriteriaType : int16
CompleteAnyReplayQuest = 218, // Complete Any Replay Quest
BuyItemsFromVendors = 219, // Buy items from vendors
SellItemsToVendors = 220, // Sell items to vendors
- ReachMaxLevel = 221, /*NYI*/ // Reach Max Level
+ ReachMaxLevel = 221, // Reach Max Level
MemorizeSpell = 222, /*NYI*/ // Memorize Spell "{Spell}"
LearnTransmogIllusion = 223, /*NYI*/ // Learn Transmog Illusion
LearnAnyTransmogIllusion = 224, /*NYI*/ // Learn Any Transmog Illusion
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 3906038c468..c690feecf52 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2135,6 +2135,8 @@ void Player::GiveLevel(uint8 level)
UpdateCriteria(CriteriaType::ActivelyReachLevel, level);
if (level > oldLevel)
UpdateCriteria(CriteriaType::GainLevels, level - oldLevel);
+ if (IsMaxLevel())
+ UpdateCriteria(CriteriaType::ReachMaxLevel);
PushQuests();
diff --git a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
index 42040cd0b09..09c29dbac4d 100644
--- a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
+++ b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp
@@ -38,8 +38,8 @@ QuestObjectiveCriteriaMgr::~QuestObjectiveCriteriaMgr()
void QuestObjectiveCriteriaMgr::CheckAllQuestObjectiveCriteria(Player* referencePlayer)
{
// suppress sending packets
- for (uint32 i = 0; i < uint32(CriteriaType::Count); ++i)
- UpdateCriteria(CriteriaType(i), 0, 0, 0, nullptr, referencePlayer);
+ for (CriteriaType criteriaType : CriteriaMgr::GetRetroactivelyUpdateableCriteriaTypes())
+ UpdateCriteria(criteriaType, 0, 0, 0, nullptr, referencePlayer);
}
void QuestObjectiveCriteriaMgr::Reset()