mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 08:28:32 +01:00
Core/Achievements: Reduce the list of criteria types updated on login
* Implemented CriteriaType::ReachMaxLevel
* Corrected implementations for CriteriaType::ReachRenownLevel and CriteriaType::LearnTaxiNode
(cherry picked from commit 6da1679cbf)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -139,8 +139,6 @@ protected:
|
||||
|
||||
private:
|
||||
Guild* _owner;
|
||||
|
||||
friend class UnitTestDataLoader;
|
||||
};
|
||||
|
||||
class TC_GAME_API AchievementGlobalMgr
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user