diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5fa518a3eb4..a777e5f6ade 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15124,8 +15124,11 @@ 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 @@ -18517,7 +18520,8 @@ void Player::_LoadQuestStatusRewarded(PreparedQueryResult result) AddQuestRewardedTalentCount(talents); } - 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 0783d045aad..98d7c2d87be 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -416,3 +416,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 7d07e1d127c..696ec3017bc 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -302,6 +302,7 @@ class 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; // multiple values std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];