Core/Achievements: Reduce the list of criteria types updated on login

* Implemented CriteriaType::ReachMaxLevel
* Corrected implementations for CriteriaType::ReachRenownLevel and CriteriaType::LearnTaxiNode
Port From (https://github.com/TrinityCore/TrinityCore/commit/6da1679cbfdc56cd5f1cab7148f645916bccecc1)
This commit is contained in:
Hondacrx
2025-02-24 11:01:12 -05:00
parent 70998199c0
commit 0d5c0b572d
5 changed files with 676 additions and 606 deletions
@@ -613,7 +613,7 @@ namespace Framework.Constants
TotalFactionsEncountered = 89, // Total factions encountered TotalFactionsEncountered = 89, // Total factions encountered
LootAnyItem = 90, // Loot any item LootAnyItem = 90, // Loot any item
ObtainAnyItem = 91, // Obtain 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 RollAnyNeed = 93, // Roll any number on need
RollAnyGreed = 94, // Roll any number on greed RollAnyGreed = 94, // Roll any number on greed
ReleasedSpirit = 95, /*NYI*/ // Released Spirit ReleasedSpirit = 95, /*NYI*/ // Released Spirit
@@ -742,7 +742,7 @@ namespace Framework.Constants
CompleteAnyReplayQuest = 218, // Complete Any Replay Quest CompleteAnyReplayQuest = 218, // Complete Any Replay Quest
BuyItemsFromVendors = 219, // Buy items from vendors BuyItemsFromVendors = 219, // Buy items from vendors
SellItemsToVendors = 220, // Sell items to vendors SellItemsToVendors = 220, // Sell items to vendors
ReachMaxLevel = 221, /*NYI*/ // Reach Max Level ReachMaxLevel = 221, // Reach Max Level
MemorizeSpell = 222, /*NYI*/ // Memorize Spell "{Spell}" MemorizeSpell = 222, /*NYI*/ // Memorize Spell "{Spell}"
LearnTransmogIllusion = 223, /*NYI*/ // Learn Transmog Illusion LearnTransmogIllusion = 223, /*NYI*/ // Learn Transmog Illusion
LearnAnyTransmogIllusion = 224, /*NYI*/ // Learn Any Transmog Illusion LearnAnyTransmogIllusion = 224, /*NYI*/ // Learn Any Transmog Illusion
@@ -31,8 +31,8 @@ namespace Game.Achievements
public void CheckAllAchievementCriteria(Player referencePlayer) public void CheckAllAchievementCriteria(Player referencePlayer)
{ {
// suppress sending packets // suppress sending packets
for (CriteriaType i = 0; i < CriteriaType.Count; ++i) foreach (CriteriaType criteriaType in CriteriaManager.GetRetroactivelyUpdateableCriteriaTypes())
UpdateCriteria(i, 0, 0, 0, null, referencePlayer); UpdateCriteria(criteriaType, 0, 0, 0, null, referencePlayer);
} }
public bool HasAchieved(uint achievementId) public bool HasAchieved(uint achievementId)
@@ -144,6 +144,8 @@ namespace Game.Achievements
case CriteriaType.CompleteAnyReplayQuest: case CriteriaType.CompleteAnyReplayQuest:
case CriteriaType.BuyItemsFromVendors: case CriteriaType.BuyItemsFromVendors:
case CriteriaType.SellItemsToVendors: case CriteriaType.SellItemsToVendors:
case CriteriaType.ReachMaxLevel:
case CriteriaType.LearnTaxiNode:
SetCriteriaProgress(criteria, 1, referencePlayer, ProgressType.Accumulate); SetCriteriaProgress(criteria, 1, referencePlayer, ProgressType.Accumulate);
break; break;
// std case: increment at miscValue1 // std case: increment at miscValue1
@@ -815,6 +817,8 @@ namespace Game.Achievements
case CriteriaType.BuyItemsFromVendors: case CriteriaType.BuyItemsFromVendors:
case CriteriaType.SellItemsToVendors: case CriteriaType.SellItemsToVendors:
case CriteriaType.GainLevels: case CriteriaType.GainLevels:
case CriteriaType.ReachRenownLevel:
case CriteriaType.LearnTaxiNode:
return progress.Counter >= requiredAmount; return progress.Counter >= requiredAmount;
case CriteriaType.EarnAchievement: case CriteriaType.EarnAchievement:
case CriteriaType.CompleteQuest: case CriteriaType.CompleteQuest:
@@ -833,6 +837,7 @@ namespace Game.Achievements
case CriteriaType.PrestigeLevelIncrease: case CriteriaType.PrestigeLevelIncrease:
case CriteriaType.ActivelyReachLevel: case CriteriaType.ActivelyReachLevel:
case CriteriaType.CollectTransmogSetFromGroup: case CriteriaType.CollectTransmogSetFromGroup:
case CriteriaType.ReachMaxLevel:
case CriteriaType.EnterTopLevelArea: case CriteriaType.EnterTopLevelArea:
case CriteriaType.LeaveTopLevelArea: case CriteriaType.LeaveTopLevelArea:
return progress.Counter >= 1; return progress.Counter >= 1;
@@ -1173,6 +1178,7 @@ namespace Game.Achievements
return false; return false;
break; break;
case CriteriaType.CurrencyGained: case CriteriaType.CurrencyGained:
case CriteriaType.ReachRenownLevel:
if (miscValue1 == 0 || miscValue2 == 0 || (long)miscValue2 < 0 if (miscValue1 == 0 || miscValue2 == 0 || (long)miscValue2 < 0
|| miscValue1 != criteria.Entry.Asset) || miscValue1 != criteria.Entry.Asset)
return false; return false;
@@ -1229,6 +1235,10 @@ namespace Game.Achievements
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset) if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false; return false;
break; break;
case CriteriaType.LearnTaxiNode:
if (miscValue1 != criteria.Entry.Asset)
return false;
break;
default: default:
break; break;
} }
@@ -4086,6 +4096,62 @@ namespace Game.Achievements
return _criteriaModifiers.LookupByKey(modifierTreeId); return _criteriaModifiers.LookupByKey(modifierTreeId);
} }
public static CriteriaType[] GetRetroactivelyUpdateableCriteriaTypes() =>
[
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
];
bool IsCriteriaTypeStoredByAsset(CriteriaType type) bool IsCriteriaTypeStoredByAsset(CriteriaType type)
{ {
switch (type) switch (type)
@@ -4123,6 +4189,8 @@ namespace Game.Achievements
case CriteriaType.LandTargetedSpellOnTarget: case CriteriaType.LandTargetedSpellOnTarget:
case CriteriaType.LearnTradeskillSkillLine: case CriteriaType.LearnTradeskillSkillLine:
case CriteriaType.DefeatDungeonEncounter: case CriteriaType.DefeatDungeonEncounter:
case CriteriaType.LearnToy:
case CriteriaType.LearnAnyTransmog:
return true; return true;
default: default:
return false; return false;
+2
View File
@@ -5453,6 +5453,8 @@ namespace Game.Entities
UpdateCriteria(CriteriaType.ActivelyReachLevel, level); UpdateCriteria(CriteriaType.ActivelyReachLevel, level);
if (level > oldLevel) if (level > oldLevel)
UpdateCriteria(CriteriaType.GainLevels, level - oldLevel); UpdateCriteria(CriteriaType.GainLevels, level - oldLevel);
if (IsMaxLevel())
UpdateCriteria(CriteriaType.ReachMaxLevel);
PushQuests(); PushQuests();
@@ -22,8 +22,8 @@ namespace Game
public void CheckAllQuestObjectiveCriteria(Player referencePlayer) public void CheckAllQuestObjectiveCriteria(Player referencePlayer)
{ {
// suppress sending packets // suppress sending packets
for (CriteriaType i = 0; i < CriteriaType.Count; ++i) foreach (CriteriaType criteriaType in CriteriaManager.GetRetroactivelyUpdateableCriteriaTypes())
UpdateCriteria(i, 0, 0, 0, null, referencePlayer); UpdateCriteria(criteriaType, 0, 0, 0, null, referencePlayer);
} }
public override void Reset() public override void Reset()