aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 54d36d7f24e..c74646f42c0 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -3690,11 +3690,17 @@ void Spell::EffectQuestComplete()
if (!quest)
return;
- uint16 logSlot = player->FindQuestSlot(questId);
- if (logSlot < MAX_QUEST_LOG_SIZE)
- player->AreaExploredOrEventHappens(questId);
- else if (quest->HasFlag(QUEST_FLAGS_TRACKING_EVENT)) // Check if the quest is used as a serverside flag.
- player->SetRewardedQuest(questId); // If so, set status to rewarded without broadcasting it to client.
+ QuestStatus questStatus = player->GetQuestStatus(questId);
+ if (questStatus == QUEST_STATUS_REWARDED)
+ return;
+
+ if (quest->HasFlag(QUEST_FLAGS_COMPLETION_EVENT) || quest->HasFlag(QUEST_FLAGS_COMPLETION_AREA_TRIGGER))
+ {
+ if (questStatus == QUEST_STATUS_INCOMPLETE)
+ player->AreaExploredOrEventHappens(questId);
+ }
+ else if (quest->HasFlag(QUEST_FLAGS_TRACKING_EVENT)) // Check if the quest is used as a serverside flag
+ player->CompleteQuest(questId);
}
}