diff options
Diffstat (limited to 'src/server')
| -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()  | 
