From 945cfce1f63f2d629d32da8be2e696900e81d835 Mon Sep 17 00:00:00 2001 From: funjoker Date: Mon, 20 Mar 2017 08:54:29 +0100 Subject: Core/Conditions: Implemented new condition type CONDITION_QUEST_OBJECTIVE_COMPLETE (#18235) Closes #17863 --- src/server/game/Conditions/ConditionMgr.cpp | 30 ++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/server/game/Conditions/ConditionMgr.cpp') diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 917e61bb8d7..667b8b14889 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -110,7 +110,8 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND { "Charmed", false, false, false }, { "Pet type", true, false, false }, { "On Taxi", false, false, false }, - { "Quest state mask", true, true, false } + { "Quest state mask", true, true, false }, + { "Objective Complete", true, false, false } }; // Checks if object meets the condition @@ -500,6 +501,20 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const } break; } + case CONDITION_QUEST_OBJECTIVE_COMPLETE: + { + if (Player* player = object->ToPlayer()) + { + QuestObjective const* obj = sObjectMgr->GetQuestObjective(ConditionValue1); + if (!obj) + break; + Quest const* qInfo = sObjectMgr->GetQuestTemplate(obj->QuestID); + ASSERT(qInfo); + + condMeets = (!player->GetQuestRewardStatus(obj->QuestID) && player->IsQuestObjectiveComplete(qInfo, *obj)); + } + break; + } default: condMeets = false; break; @@ -696,6 +711,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition() const case CONDITION_QUESTSTATE: mask |= GRID_MAP_TYPE_MASK_PLAYER; break; + case CONDITION_QUEST_OBJECTIVE_COMPLETE: + mask |= GRID_MAP_TYPE_MASK_PLAYER; + break; default: ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!"); break; @@ -2314,6 +2332,16 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const } break; } + case CONDITION_QUEST_OBJECTIVE_COMPLETE: + { + QuestObjective const* obj = sObjectMgr->GetQuestObjective(cond->ConditionValue1); + if (!obj) + { + TC_LOG_ERROR("sql.sql", "%s points to non-existing quest objective (%u), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1); + return false; + } + break; + } case CONDITION_PET_TYPE: if (cond->ConditionValue1 >= (1 << MAX_PET_TYPE)) { -- cgit v1.2.3