diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 37 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 12 |
2 files changed, 46 insertions, 3 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index e7944aa8e14..04c8ec200ef 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -1580,6 +1580,13 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr switch (CriteriaAdditionalCondition(reqType)) { + case CRITERIA_ADDITIONAL_CONDITION_SOURCE_PLAYER_CONDITION: // 2 + { + PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(reqValue); + if (!playerCondition || !ConditionMgr::IsPlayerMeetingCondition(referencePlayer, playerCondition)) + return false; + break; + } case CRITERIA_ADDITIONAL_CONDITION_ITEM_LEVEL: // 3 { // miscValue1 is itemid @@ -1608,6 +1615,10 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr if (!referencePlayer->HasAura(reqValue)) return false; break; + case CRITERIA_ADDITIONAL_CONDITION_SOURCE_HAS_AURA_TYPE: // 9 + if (!referencePlayer->HasAuraType(AuraType(reqValue))) + return false; + break; case CRITERIA_ADDITIONAL_CONDITION_TARGET_HAS_AURA: // 10 if (!unit || !unit->HasAura(reqValue)) return false; @@ -1616,6 +1627,14 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr if (!unit || !unit->HasAuraType(AuraType(reqValue))) return false; break; + case CRITERIA_ADDITIONAL_CONDITION_SOURCE_AURA_STATE: // 12 + if (!referencePlayer->HasAuraState(AuraStateType(reqValue))) + return false; + break; + case CRITERIA_ADDITIONAL_CONDITION_TARGET_AURA_STATE: // 13 + if (!unit || !unit->HasAuraState(AuraStateType(reqValue))) + return false; + break; case CRITERIA_ADDITIONAL_CONDITION_ITEM_QUALITY_MIN: // 14 { // miscValue1 is itemid @@ -1717,6 +1736,16 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr if (!unit || unit->GetHealthPct() >= reqValue) return false; break; + case CRITERIA_ADDITIONAL_CONDITION_TARGET_PLAYER_CONDITION: // 55 + { + if (!unit || !unit->IsPlayer()) + return false; + + PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(reqValue); + if (!playerCondition || !ConditionMgr::IsPlayerMeetingCondition(unit->ToPlayer(), playerCondition)) + return false; + break; + } case CRITERIA_ADDITIONAL_CONDITION_RATED_BATTLEGROUND_RATING: // 64 if (referencePlayer->GetRBGPersonalRating() < reqValue) return false; @@ -1732,6 +1761,14 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr if (miscValue1 != reqValue) return false; break; + case CRITERIA_ADDITIONAL_CONDITION_REWARDED_QUEST: // 110 + if (!referencePlayer->GetQuestRewardStatus(reqValue)) + return false; + break; + case CRITERIA_ADDITIONAL_CONDITION_COMPLETED_QUEST: // 111 + if (referencePlayer->GetQuestStatus(reqValue) != QUEST_STATUS_COMPLETE) + return false; + break; case CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ENTRY: // 144 { if (!referencePlayer) diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 894ea6a343a..805b59841e2 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -196,18 +196,21 @@ enum CriteriaCondition enum CriteriaAdditionalCondition { CRITERIA_ADDITIONAL_CONDITION_SOURCE_DRUNK_VALUE = 1, // NYI - CRITERIA_ADDITIONAL_CONDITION_UNK2 = 2, + CRITERIA_ADDITIONAL_CONDITION_SOURCE_PLAYER_CONDITION = 2, CRITERIA_ADDITIONAL_CONDITION_ITEM_LEVEL = 3, // NYI CRITERIA_ADDITIONAL_CONDITION_TARGET_CREATURE_ENTRY = 4, CRITERIA_ADDITIONAL_CONDITION_TARGET_MUST_BE_PLAYER = 5, CRITERIA_ADDITIONAL_CONDITION_TARGET_MUST_BE_DEAD = 6, CRITERIA_ADDITIONAL_CONDITION_TARGET_MUST_BE_ENEMY = 7, CRITERIA_ADDITIONAL_CONDITION_SOURCE_HAS_AURA = 8, + CRITERIA_ADDITIONAL_CONDITION_SOURCE_HAS_AURA_TYPE = 9, CRITERIA_ADDITIONAL_CONDITION_TARGET_HAS_AURA = 10, CRITERIA_ADDITIONAL_CONDITION_TARGET_HAS_AURA_TYPE = 11, + CRITERIA_ADDITIONAL_CONDITION_SOURCE_AURA_STATE = 12, + CRITERIA_ADDITIONAL_CONDITION_TARGET_AURA_STATE = 13, CRITERIA_ADDITIONAL_CONDITION_ITEM_QUALITY_MIN = 14, CRITERIA_ADDITIONAL_CONDITION_ITEM_QUALITY_EQUALS = 15, - CRITERIA_ADDITIONAL_CONDITION_UNK16 = 16, + CRITERIA_ADDITIONAL_CONDITION_SOURCE_IS_ALIVE = 16, CRITERIA_ADDITIONAL_CONDITION_SOURCE_AREA_OR_ZONE = 17, CRITERIA_ADDITIONAL_CONDITION_TARGET_AREA_OR_ZONE = 18, CRITERIA_ADDITIONAL_CONDITION_MAP_DIFFICULTY_OLD = 20, @@ -229,7 +232,7 @@ enum CriteriaAdditionalCondition CRITERIA_ADDITIONAL_CONDITION_TARGET_LEVEL = 40, CRITERIA_ADDITIONAL_CONDITION_TARGET_ZONE = 41, CRITERIA_ADDITIONAL_CONDITION_TARGET_HEALTH_PERCENT_BELOW = 46, - CRITERIA_ADDITIONAL_CONDITION_UNK55 = 55, + CRITERIA_ADDITIONAL_CONDITION_TARGET_PLAYER_CONDITION = 55, CRITERIA_ADDITIONAL_CONDITION_MIN_ACHIEVEMENT_POINTS = 56, // NYI CRITERIA_ADDITIONAL_CONDITION_REQUIRES_LFG_GROUP = 58, // NYI CRITERIA_ADDITIONAL_CONDITION_UNK60 = 60, @@ -257,6 +260,9 @@ enum CriteriaAdditionalCondition //CRITERIA_ADDITIONAL_CONDITION_UNK87 = 87, // Achievement id CRITERIA_ADDITIONAL_CONDITION_BATTLE_PET_SPECIES = 91, CRITERIA_ADDITIONAL_CONDITION_EXPANSION = 92, + CRITERIA_ADDITIONAL_CONDITION_REWARDED_QUEST = 110, + CRITERIA_ADDITIONAL_CONDITION_COMPLETED_QUEST = 111, + CRITERIA_ADDITIONAL_CONDITION_COMPLETED_QUEST_OBJECTIVE = 112, // NYI, QuestObjectiveID CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_ENTRY = 144, CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_QUALITY = 145, CRITERIA_ADDITIONAL_CONDITION_GARRISON_FOLLOWER_LEVEL = 146, |
