aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-09-30 13:17:04 +0200
committerGitHub <noreply@github.com>2016-09-30 13:17:04 +0200
commit6d62f852acf3e1a3ee57cde2442832280aee8149 (patch)
treed3b6f1711245d908924586f7a30a17b726f6c14c
parentf9ea646c82f8cf34f295a5db0be3d7a14c9ca608 (diff)
Core/Spell: set quest to rewarded instead of complete when targeted by SPELL_EFFECT_QUEST_COMPLETE. (#18021)
Prevents people from ending up with strange quests in their quest logs.
-rw-r--r--src/server/game/Entities/Player/Player.cpp11
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
3 files changed, 10 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index dd500de5ace..5a9707fec75 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -15055,10 +15055,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
RemoveActiveQuest(quest_id, false);
if (quest->CanIncreaseRewardedQuestCounters())
- {
- m_RewardedQuests.insert(quest_id);
- m_RewardedQuestsSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
- }
+ SetRewardedQuest(quest_id);
// StoreNewItem, mail reward, etc. save data directly to the database
// to prevent exploitable data desynchronisation we save the quest status to the database too
@@ -15114,6 +15111,12 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
sScriptMgr->OnQuestStatusChange(this, quest_id);
}
+void Player::SetRewardedQuest(uint32 quest_id)
+{
+ m_RewardedQuests.insert(quest_id);
+ m_RewardedQuestsSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
+}
+
void Player::FailQuest(uint32 questId)
{
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 5a572d9caa9..f9acbe22c10 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1339,6 +1339,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void CompleteQuest(uint32 quest_id);
void IncompleteQuest(uint32 quest_id);
void RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, bool announce = true);
+ void SetRewardedQuest(uint32 quest_id);
void FailQuest(uint32 quest_id);
bool SatisfyQuestSkill(Quest const* qInfo, bool msg) const;
bool SatisfyQuestLevel(Quest const* qInfo, bool msg) const;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index d8feaf22c6f..3e4117afef7 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -4578,8 +4578,8 @@ void Spell::EffectQuestComplete(SpellEffIndex effIndex)
uint16 logSlot = player->FindQuestSlot(questId);
if (logSlot < MAX_QUEST_LOG_SIZE)
player->AreaExploredOrEventHappens(questId);
- else if (player->CanTakeQuest(quest, false)) // never rewarded before
- player->CompleteQuest(questId); // quest not in log - for internal use
+ else if (player->CanTakeQuest(quest, false)) // Check if the quest has already been turned in.
+ player->SetRewardedQuest(questId); // If not, set status to rewarded without broadcasting it to client.
}
}