aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-07-05 09:53:08 +0200
committerjackpoz <giacomopoz@gmail.com>2016-07-05 09:53:08 +0200
commit7905651b0793d47b4ba040ad6ac47231ad3ec9d2 (patch)
tree879b73be33edc7c5fa849cd99803abef994afc67
parentb20912c8f6972360596c8b52360f6dd1d584c93e (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
-rw-r--r--src/server/game/Entities/Player/Player.cpp10
-rw-r--r--src/server/game/Quests/QuestDef.cpp7
-rw-r--r--src/server/game/Quests/QuestDef.h1
3 files changed, 15 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index dfa9190efeb..708ae9299a9 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -15008,8 +15008,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
@@ -18276,7 +18279,8 @@ void Player::_LoadQuestStatusRewarded(PreparedQueryResult result)
m_questRewardTalentCount += quest->GetBonusTalents();
}
- 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 ca1a0950c7e..cb3a6d6d012 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -308,3 +308,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 5e3bb4889ab..ee803a2beef 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -276,6 +276,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;
// multiple values
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];