diff options
author | Krudor <erikstrandberg93@hotmail.com> | 2017-01-22 11:35:46 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-01-22 11:35:46 +0100 |
commit | 08eaaad8b97f8fa4118934a53727f06800344c75 (patch) | |
tree | a7a4f37ee45e76cf94911180a844170b44beb902 /src | |
parent | d3ee5a2d324bf5e7d8c27727264d66fd62ba9a76 (diff) |
Core/Criteria: Implement new criteria tree operator for Legion (#18912)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 11 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 3 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 0cad619922e..1f303358a86 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -991,6 +991,17 @@ bool CriteriaHandler::IsCompletedCriteriaTree(CriteriaTree const* tree) return false; } + case CRITERIA_TREE_OPERATOR_SUM_CHILDREN_WEIGHT: + { + uint64 progress = 0; + CriteriaMgr::WalkCriteriaTree(tree, [this, &progress](CriteriaTree const* criteriaTree) + { + if (criteriaTree->Criteria) + if (CriteriaProgress const* criteriaProgress = GetCriteriaProgress(criteriaTree->Criteria)) + progress += criteriaProgress->Counter * criteriaTree->Entry->Amount; + }); + return progress >= requiredCount; + } default: break; } diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index f47282c5bd9..ed382fa4806 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -437,7 +437,8 @@ enum CriteriaTreeOperator : uint8 CRITERIA_TREE_OPERAROR_SUM_CHILDREN = 5, CRITERIA_TREE_OPERATOR_MAX_CHILD = 6, CRITERIA_TREE_OPERATOR_COUNT_DIRECT_CHILDREN = 7, - CRITERIA_TREE_OPERATOR_ANY = 8 + CRITERIA_TREE_OPERATOR_ANY = 8, + CRITERIA_TREE_OPERATOR_SUM_CHILDREN_WEIGHT = 9 }; enum CharSectionFlags |