aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKrudor <erikstrandberg93@hotmail.com>2017-01-22 11:35:46 +0100
committerShauren <shauren.trinity@gmail.com>2017-01-22 11:35:46 +0100
commit08eaaad8b97f8fa4118934a53727f06800344c75 (patch)
treea7a4f37ee45e76cf94911180a844170b44beb902 /src
parentd3ee5a2d324bf5e7d8c27727264d66fd62ba9a76 (diff)
Core/Criteria: Implement new criteria tree operator for Legion (#18912)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp11
-rw-r--r--src/server/game/DataStores/DBCEnums.h3
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