diff options
| author | SnapperRy <snapperryen@gmail.com> | 2016-09-30 13:17:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-09-30 13:17:04 +0200 |
| commit | 6d62f852acf3e1a3ee57cde2442832280aee8149 (patch) | |
| tree | d3b6f1711245d908924586f7a30a17b726f6c14c | |
| parent | f9ea646c82f8cf34f295a5db0be3d7a14c9ca608 (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.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 4 |
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. } } |
