aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MiscHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 2ffacd75ff9..0f8ad12a769 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -489,9 +489,10 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge
if (player->IsAlive())
{
+ // not using Player::UpdateQuestObjectiveProgress, ObjectID in quest_objectives can be set to -1, areatrigger_involvedrelation then holds correct id
if (std::unordered_set<uint32> const* quests = sObjectMgr->GetQuestsForAreaTrigger(packet.AreaTriggerID))
{
- bool completedObjectiveInSequencedQuest = false;
+ bool anyObjectiveChangedCompletionState = false;
for (uint32 questId : *quests)
{
Quest const* qInfo = sObjectMgr->GetQuestTemplate(questId);
@@ -500,14 +501,22 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge
{
for (QuestObjective const& obj : qInfo->Objectives)
{
- 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;
- }
+ if (obj.Type != QUEST_OBJECTIVE_AREATRIGGER)
+ continue;
+
+ if (!player->IsQuestObjectiveCompletable(slot, qInfo, obj))
+ continue;
+
+ if (player->IsQuestObjectiveComplete(slot, qInfo, obj))
+ continue;
+
+ if (obj.ObjectID != -1 && obj.ObjectID != packet.AreaTriggerID)
+ continue;
+
+ player->SetQuestObjectiveData(obj, 1);
+ player->SendQuestUpdateAddCreditSimple(obj);
+ anyObjectiveChangedCompletionState = true;
+ break;
}
if (player->CanCompleteQuest(questId))
@@ -515,7 +524,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge
}
}
- if (completedObjectiveInSequencedQuest)
+ if (anyObjectiveChangedCompletionState)
player->UpdateForQuestWorldObjects();
}
}