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
This commit is contained in:
SnapperRy
2016-07-05 09:53:08 +02:00
committed by jackpoz
parent b20912c8f6
commit 7905651b07
3 changed files with 15 additions and 3 deletions
+7 -3
View File
@@ -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());
}
+7
View File
@@ -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()));
}
+1
View File
@@ -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];