aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MiscHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-05-09 20:21:32 +0200
committerShauren <shauren.trinity@gmail.com>2021-05-09 20:21:32 +0200
commit91b91b502f30f781c8dea77dec4ce2f469b89744 (patch)
treeec4b30e134e7390c833d5a9612eea036263beec6 /src/server/game/Handlers/MiscHandler.cpp
parentdd8aed421a48225b0e60c677969d1fc133954279 (diff)
Core/Quests: Quest improvements
* Add quest log slot argument to functions dealing with objective progress * Implemented QUEST_OBJECTIVE_FLAG_SEQUENCED (prevent progressing hidden objectives)
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 0c72ec7aad4..2ffacd75ff9 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -491,17 +491,21 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge
{
if (std::unordered_set<uint32> const* quests = sObjectMgr->GetQuestsForAreaTrigger(packet.AreaTriggerID))
{
+ bool completedObjectiveInSequencedQuest = false;
for (uint32 questId : *quests)
{
Quest const* qInfo = sObjectMgr->GetQuestTemplate(questId);
- if (qInfo && player->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
+ uint16 slot = player->FindQuestSlot(questId);
+ if (qInfo && slot < MAX_QUEST_LOG_SIZE && player->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
{
for (QuestObjective const& obj : qInfo->Objectives)
{
- if (obj.Type == QUEST_OBJECTIVE_AREATRIGGER && !player->IsQuestObjectiveComplete(obj))
+ if (obj.Type == QUEST_OBJECTIVE_AREATRIGGER && !player->IsQuestObjectiveComplete(slot, qInfo, obj))
{
player->SetQuestObjectiveData(obj, 1);
player->SendQuestUpdateAddCreditSimple(obj);
+ if (qInfo->HasSpecialFlag(QUEST_SPECIAL_FLAGS_SEQUENCED_OBJECTIVES))
+ completedObjectiveInSequencedQuest = true;
break;
}
}
@@ -510,6 +514,9 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge
player->CompleteQuest(questId);
}
}
+
+ if (completedObjectiveInSequencedQuest)
+ player->UpdateForQuestWorldObjects();
}
}