diff options
author | SnapperRy <snapperryen@gmail.com> | 2016-07-05 09:53:08 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-04 23:21:27 +0100 |
commit | 752c789aaf3be7afaf76dc1464296d553f35528a (patch) | |
tree | 302aa4f89c2c3b25214931c14a94d4739df68e0e /src | |
parent | 8ee0a14c27cd481ab62117639ed28b00c0248699 (diff) |
Core/Quest: do not save/load Dungeon Finder/daily/repeatable quests as completed (#17458)
* Core/Quest: do not save/load Dungeon Finder/daily/repeatable quests as completed
(cherry picked from commit 7905651b0793d47b4ba040ad6ac47231ad3ec9d2)
# Conflicts:
# src/server/game/Entities/Player/Player.cpp
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.h | 1 |
3 files changed, 16 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index efe4becc9bc..31e777e8b63 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15125,8 +15125,12 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, SetSeasonalQuestStatus(quest_id); RemoveActiveQuest(quest_id, false); - m_RewardedQuests.insert(quest_id); - m_RewardedQuestsSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE; + if (quest->CanIncreaseRewardedQuestCounters()) + { + m_RewardedQuests.insert(quest_id); + m_RewardedQuestsSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE; + } + // StoreNewItem, mail reward, etc. save data directly to the database // to prevent exploitable data desynchronisation we save the quest status to the database too // (to prevent rewarding this quest another time while rewards were already given out) @@ -18759,7 +18763,8 @@ void Player::_LoadQuestStatusRewarded(PreparedQueryResult result) GetSession()->GetCollectionMgr()->AddItemAppearance(questPackageItem->ItemID); } - m_RewardedQuests.insert(quest_id); + if (quest->CanIncreaseRewardedQuestCounters()) + m_RewardedQuests.insert(quest_id); } while (result->NextRow()); } diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 06d0bda9443..1a636eac3bd 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -397,3 +397,10 @@ uint32 Quest::CalculateHonorGain(uint8 /*level*/) const return honor; } + +bool Quest::CanIncreaseRewardedQuestCounters() const +{ + // Dungeon Finder/Daily/Repeatable (if not weekly, monthly or seasonal) quests are never considered rewarded serverside. + // This affects counters and client requests for completed quests. + return (!IsDFQuest() && !IsDaily() && (!IsRepeatable() || IsWeekly() || IsMonthly() || IsSeasonal())); +} diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index d313c9afae9..0c239cbd608 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -390,6 +390,7 @@ class TC_GAME_API Quest bool IsAllowedInRaid(Difficulty difficulty) const; bool IsDFQuest() const { return (SpecialFlags & QUEST_SPECIAL_FLAGS_DF_QUEST) != 0; } uint32 CalculateHonorGain(uint8 level) const; + bool CanIncreaseRewardedQuestCounters() const; uint32 GetRewChoiceItemsCount() const { return _rewChoiceItemsCount; } uint32 GetRewItemsCount() const { return _rewItemsCount; } |