aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Achievements/CriteriaHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Achievements/CriteriaHandler.cpp')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 992b4e72393..812cddfe1d9 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -3858,6 +3858,10 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
if (GameTime::GetGameTime() - referencePlayer->m_playerData->LogoutTime < int64(reqValue) * DAY)
return false;
break;
+ case ModifierTreeType::PlayerHasPerksProgramPendingReward: // 350
+ if (!referencePlayer->m_activePlayerData->HasPerksProgramPendingReward)
+ return false;
+ break;
case ModifierTreeType::PlayerCanUseItem: // 351
{
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(reqValue);
@@ -3865,6 +3869,29 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return false;
break;
}
+ case ModifierTreeType::PlayerHasAtLeastProfPathRanks: // 355
+ {
+ auto traitNodeEntryRankCount = [referencePlayer, secondaryAsset]()
+ {
+ uint32 ranks = 0;
+ for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs)
+ {
+ if (TraitConfigType(*traitConfig.Type) != TraitConfigType::Profession)
+ continue;
+
+ if (*traitConfig.SkillLineID != int32(secondaryAsset))
+ continue;
+
+ for (UF::TraitEntry const& traitEntry : traitConfig.Entries)
+ if (sTraitNodeEntryStore.AssertEntry(traitEntry.TraitNodeEntryID)->GetNodeEntryType() == TraitNodeEntryType::ProfPath)
+ ranks += traitEntry.Rank + traitEntry.GrantedRanks;
+ }
+ return ranks;
+ }();
+ if (traitNodeEntryRankCount < reqValue)
+ return false;
+ break;
+ }
default:
return false;
}