diff options
Diffstat (limited to 'src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp')
-rw-r--r-- | src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp index 7a9cb99ba4c..3960a619892 100644 --- a/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp +++ b/src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp @@ -19,6 +19,7 @@ #include "AchievementPackets.h" #include "DatabaseEnv.h" #include "DB2Structure.h" +#include "Group.h" #include "Log.h" #include "ObjectMgr.h" #include "Player.h" @@ -225,14 +226,10 @@ void QuestObjectiveCriteriaMgr::SendAllData(Player const* /*receiver*/) const void QuestObjectiveCriteriaMgr::CompletedObjective(QuestObjective const* questObjective, Player* referencePlayer) { - // disable for gamemasters with GM-mode enabled - if (_owner->IsGameMaster()) - return; - if (HasCompletedObjective(questObjective)) return; - referencePlayer->KillCreditCriteriaTreeObjective(*questObjective); + _owner->KillCreditCriteriaTreeObjective(*questObjective); TC_LOG_INFO("criteria.quest", "QuestObjectiveCriteriaMgr::CompletedObjective(%u). %s", questObjective->ID, GetOwnerInfo().c_str()); @@ -282,6 +279,21 @@ bool QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree(Criteria const* criteria, return false; } + if (_owner->GetQuestStatus(objective->QuestID) != QUEST_STATUS_INCOMPLETE) + { + TC_LOG_TRACE("criteria.quest", "QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: %u Type %s Quest Objective %u) Not on quest", + criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), objective->ID); + return false; + } + + Quest const* quest = ASSERT_NOTNULL(sObjectMgr->GetQuestTemplate(objective->QuestID)); + if (_owner->GetGroup() && _owner->GetGroup()->isRaidGroup() && !quest->IsAllowedInRaid(referencePlayer->GetMap()->GetDifficultyID())) + { + TC_LOG_TRACE("criteria.quest", "QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: %u Type %s Quest Objective %u) Quest cannot be completed in raid group", + criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), objective->ID); + return false; + } + return CriteriaHandler::CanUpdateCriteriaTree(criteria, tree, referencePlayer); } |