diff options
Diffstat (limited to 'src/server/game/Achievements/CriteriaHandler.cpp')
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 27 |
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; } |