diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-05-09 20:21:32 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-05-09 20:21:32 +0200 |
commit | 91b91b502f30f781c8dea77dec4ce2f469b89744 (patch) | |
tree | ec4b30e134e7390c833d5a9612eea036263beec6 /src/server/game/Handlers/MiscHandler.cpp | |
parent | dd8aed421a48225b0e60c677969d1fc133954279 (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.cpp | 11 |
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(); } } |