diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-12-07 21:49:32 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-12-07 21:49:32 +0100 |
| commit | 6da1679cbfdc56cd5f1cab7148f645916bccecc1 (patch) | |
| tree | c02ff993732bf62c24b8a64f3ac5afbe53329e10 /src/server/game/Achievements | |
| parent | 316ce0d73a139a7ffa0f7a4d301ca47ff2b896d6 (diff) | |
Core/Achievements: Reduce the list of criteria types updated on login
* Implemented CriteriaType::ReachMaxLevel
* Corrected implementations for CriteriaType::ReachRenownLevel and CriteriaType::LearnTaxiNode
Diffstat (limited to 'src/server/game/Achievements')
| -rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Achievements/AchievementMgr.h | 2 | ||||
| -rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 82 | ||||
| -rw-r--r-- | src/server/game/Achievements/CriteriaHandler.h | 2 |
4 files changed, 86 insertions, 4 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 406483da438..e626df0e749 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 a58b918aba3..783eb38daad 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -562,6 +562,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 @@ -1229,6 +1231,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: @@ -1247,6 +1251,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; @@ -1619,6 +1624,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; @@ -1676,6 +1682,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; } @@ -4504,6 +4514,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"; } @@ -4554,6 +4572,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; @@ -4924,3 +4944,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; |
