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