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.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 2ddfd332b7c..6fa8c282630 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -601,6 +601,7 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
case CriteriaType::HighestHealReceived:
case CriteriaType::AnyArtifactPowerRankPurchased:
case CriteriaType::AzeriteLevelReached:
+ case CriteriaType::ReachRenownLevel:
SetCriteriaProgress(criteria, miscValue1, referencePlayer, PROGRESS_HIGHEST);
break;
case CriteriaType::ReachLevel:
@@ -3973,6 +3974,40 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return false;
break;
}
+ case ModifierTreeType::PlayerHasActiveTraitSubTree: // 385
+ {
+ int32 traitConfigWithSubtree = referencePlayer->m_activePlayerData->TraitConfigs.FindIndexIf([referencePlayer, reqValue](UF::TraitConfig const& traitConfig)
+ {
+ if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat
+ && (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID
+ || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)))
+ return false;
+
+ return traitConfig.SubTrees.FindIndexIf([reqValue](UF::TraitSubTreeCache const& traitSubTree)
+ {
+ return traitSubTree.TraitSubTreeID == int32(reqValue) && traitSubTree.Active;
+ }) >= 0;
+ });
+ if (traitConfigWithSubtree < 0)
+ return false;
+ break;
+ }
+ case ModifierTreeType::TargetCreatureClassificationEqual: // 389
+ {
+ Creature const* targetCreature = Object::ToCreature(ref);
+ if (!targetCreature)
+ return false;
+ if (targetCreature->GetCreatureClassification() != CreatureClassifications(reqValue))
+ return false;
+ break;
+ }
+ case ModifierTreeType::PlayerHasCompletedQuestOrIsReadyToTurnIn: // 392
+ {
+ QuestStatus status = referencePlayer->GetQuestStatus(reqValue);
+ if (status != QUEST_STATUS_COMPLETE && status != QUEST_STATUS_REWARDED)
+ return false;
+ break;
+ }
default:
return false;
}