aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Quests/QuestObjectiveCriteriaMgr.cpp22
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);
}