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 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; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 533f8afcd61..93c790259bb 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -1176,6 +1176,7 @@ struct CriteriaEntry // CriteriaType::CurrencyGained = 12 // CriteriaType::ObtainAnyItemWithCurrencyValue = 229 + // CriteriaType::ReachRenownLevel = 261 int32 CurrencyID; // CriteriaType::DieInInstance = 18 @@ -1332,6 +1333,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 cbdffa8d110..5afc37f2a38 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -627,7 +627,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 @@ -756,7 +756,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 c1e5da1041b..f71eba989dd 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2351,6 +2351,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() |
