mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Achievements: Reduce the list of criteria types updated on login
* Implemented CriteriaType::ReachMaxLevel * Corrected implementations for CriteriaType::ReachRenownLevel and CriteriaType::LearnTaxiNode
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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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