diff options
author | Carbenium <keresztesschmidt@gmail.com> | 2014-08-08 21:37:16 +0200 |
---|---|---|
committer | Carbenium <keresztesschmidt@gmail.com> | 2014-08-09 01:54:22 +0200 |
commit | dbaf0557e8b26f8e37c659537c0625e9c78d12f0 (patch) | |
tree | 99146c6b22f94f4fbe9c0c8db6d1dabbb8038913 /src | |
parent | 6f52115e61fcf62420710a7c919ca3197e33376e (diff) |
Core/Player: Fix an issue with Player::RemoveRewardedQuest not deleting the queststatus_rewarded form database
Needed for SPELL_EFFECT_CLEAR_QUEST
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 34 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 12 |
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 { |