diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5909e1f814c..d4888150eb1 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14748,11 +14748,6 @@ void Player::AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver) { AddQuest(quest, questGiver); - for (QuestObjective const& obj : quest->GetObjectives()) - if (obj.Type == QUEST_OBJECTIVE_CRITERIA_TREE) - if (m_questObjectiveCriteriaMgr->HasCompletedObjective(&obj)) - KillCreditCriteriaTreeObjective(obj); - if (CanCompleteQuest(quest->GetQuestId())) CompleteQuest(quest->GetQuestId()); @@ -16375,22 +16370,31 @@ uint16 Player::GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) const void Player::AdjustQuestObjectiveProgress(Quest const* quest) { // adjust progress of quest objectives that rely on external counters, like items - if (quest->HasQuestObjectiveType(QUEST_OBJECTIVE_ITEM)) + for (QuestObjective const& obj : quest->GetObjectives()) { - for (QuestObjective const& obj : quest->GetObjectives()) + switch (obj.Type) { - if (obj.Type == QUEST_OBJECTIVE_ITEM && !(obj.Flags2 & QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM)) - { - uint32 reqItemCount = obj.Amount; - uint32 curItemCount = GetItemCount(obj.ObjectID, true); - SetQuestObjectiveData(obj, std::min(curItemCount, reqItemCount)); - } - else if (obj.Type == QUEST_OBJECTIVE_HAVE_CURRENCY) + case QUEST_OBJECTIVE_ITEM: + if (!(obj.Flags2 & QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM)) + { + uint32 reqItemCount = obj.Amount; + uint32 curItemCount = GetItemCount(obj.ObjectID, true); + SetQuestObjectiveData(obj, std::min(curItemCount, reqItemCount)); + } + break; + case QUEST_OBJECTIVE_HAVE_CURRENCY: { uint32 reqCurrencyCount = obj.Amount; uint32 curCurrencyCount = GetCurrencyQuantity(obj.ObjectID); SetQuestObjectiveData(obj, std::min(reqCurrencyCount, curCurrencyCount)); + break; } + case QUEST_OBJECTIVE_CRITERIA_TREE: + if (m_questObjectiveCriteriaMgr->HasCompletedObjective(&obj)) + SetQuestObjectiveData(obj, 1); + break; + default: + break; } } } |