aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp34
-rw-r--r--src/server/game/Entities/Player/Player.h12
2 files changed, 27 insertions, 19 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index e05553aa454..cde93292b62 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1635,7 +1635,7 @@ void Player::Update(uint32 p_time)
else
{
q_status.Timer -= p_time;
- m_QuestStatusSave[*iter] = true;
+ m_QuestStatusSave[*iter] = QUEST_DEFAULT_SAVE_TYPE;
++iter;
}
}
@@ -15220,7 +15220,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
SetQuestSlot(log_slot, quest_id, qtime);
- m_QuestStatusSave[quest_id] = true;
+ m_QuestStatusSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, quest_id);
@@ -15392,7 +15392,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
RemoveActiveQuest(quest_id, false);
m_RewardedQuests.insert(quest_id);
- m_RewardedQuestsSave[quest_id] = true;
+ 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
@@ -16040,7 +16040,7 @@ void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*=
if (sObjectMgr->GetQuestTemplate(questId))
{
m_QuestStatus[questId].Status = status;
- m_QuestStatusSave[questId] = true;
+ m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE;
}
if (update)
@@ -16053,7 +16053,7 @@ void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/)
if (itr != m_QuestStatus.end())
{
m_QuestStatus.erase(itr);
- m_QuestStatusSave[questId] = false;
+ m_QuestStatusSave[questId] = QUEST_DELETE_SAVE_TYPE;
}
if (update)
@@ -16066,7 +16066,7 @@ void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/)
if (rewItr != m_RewardedQuests.end())
{
m_RewardedQuests.erase(rewItr);
- m_RewardedQuestsSave[questId] = false;
+ m_RewardedQuestsSave[questId] = QUEST_FORCE_DELETE_SAVE_TYPE;
}
if (update)
@@ -16232,7 +16232,7 @@ void Player::AdjustQuestReqItemCount(Quest const* quest, QuestStatusData& questS
uint32 curitemcount = GetItemCount(quest->RequiredItemId[i], true);
questStatusData.ItemCount[i] = std::min(curitemcount, reqitemcount);
- m_QuestStatusSave[quest->GetQuestId()] = true;
+ m_QuestStatusSave[quest->GetQuestId()] = QUEST_DEFAULT_SAVE_TYPE;
}
}
}
@@ -16323,7 +16323,7 @@ void Player::AreaExploredOrEventHappens(uint32 questId)
if (!q_status.Explored)
{
q_status.Explored = true;
- m_QuestStatusSave[questId] = true;
+ m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE;
}
}
if (CanCompleteQuest(questId))
@@ -16376,7 +16376,7 @@ void Player::ItemAddedQuestCheck(uint32 entry, uint32 count)
if (curitemcount < reqitemcount)
{
q_status.ItemCount[j] = std::min<uint16>(q_status.ItemCount[j] + count, reqitemcount);
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
}
if (CanCompleteQuest(questid))
CompleteQuest(questid);
@@ -16420,7 +16420,7 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count)
if (newItemCount != q_status.ItemCount[j])
{
q_status.ItemCount[j] = newItemCount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
IncompleteQuest(questid);
}
return;
@@ -16488,7 +16488,7 @@ void Player::KilledMonsterCredit(uint32 entry, uint64 guid /*= 0*/)
{
q_status.CreatureOrGOCount[j] = curkillcount + addkillcount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddCreatureOrGo(qInfo, guid, j, curkillcount, addkillcount);
}
@@ -16530,7 +16530,7 @@ void Player::KilledPlayerCredit()
{
q_status.PlayerCount = curkill + addkillcount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddPlayer(qInfo, curkill, addkillcount);
}
@@ -16582,7 +16582,7 @@ void Player::KillCreditGO(uint32 entry, uint64 guid)
{
q_status.CreatureOrGOCount[j] = curCastCount + addCastCount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddCreatureOrGo(qInfo, guid, j, curCastCount, addCastCount);
}
@@ -16639,7 +16639,7 @@ void Player::TalkedToCreature(uint32 entry, uint64 guid)
{
q_status.CreatureOrGOCount[j] = curTalkCount + addTalkCount;
- m_QuestStatusSave[questid] = true;
+ m_QuestStatusSave[questid] = QUEST_DEFAULT_SAVE_TYPE;
SendQuestUpdateAddCreatureOrGo(qInfo, guid, j, curTalkCount, addTalkCount);
}
@@ -19778,7 +19778,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
for (saveItr = m_QuestStatusSave.begin(); saveItr != m_QuestStatusSave.end(); ++saveItr)
{
- if (saveItr->second)
+ if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE)
{
statusItr = m_QuestStatus.find(saveItr->first);
if (statusItr != m_QuestStatus.end() && (keepAbandoned || statusItr->second.Status != QUEST_STATUS_NONE))
@@ -19815,7 +19815,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
for (saveItr = m_RewardedQuestsSave.begin(); saveItr != m_RewardedQuestsSave.end(); ++saveItr)
{
- if (saveItr->second)
+ if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_QUESTSTATUS_REWARDED);
stmt->setUInt32(0, GetGUIDLow());
@@ -19823,7 +19823,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
trans->Append(stmt);
}
- else if (!keepAbandoned)
+ else if (saveItr->second == QUEST_FORCE_DELETE_SAVE_TYPE || !keepAbandoned)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS_REWARDED_BY_QUEST);
stmt->setUInt32(0, GetGUIDLow());
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 0c1ddcd69d9..508be730a18 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -524,8 +524,16 @@ enum AtLoginFlags
typedef std::map<uint32, QuestStatusData> QuestStatusMap;
typedef std::set<uint32> RewardedQuestSet;
-// quest, keep
-typedef std::map<uint32, bool> QuestStatusSaveMap;
+enum QuestSaveType
+{
+ QUEST_DEFAULT_SAVE_TYPE = 0,
+ QUEST_DELETE_SAVE_TYPE,
+ QUEST_FORCE_DELETE_SAVE_TYPE
+};
+
+// quest
+typedef std::map<uint32, QuestSaveType> QuestStatusSaveMap;
+
enum QuestSlotOffsets
{