diff options
-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 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 4 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp | 4 |
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() |