diff options
author | linencloth <none@none> | 2010-12-28 05:08:57 +0100 |
---|---|---|
committer | linencloth <none@none> | 2010-12-28 05:08:57 +0100 |
commit | e739d26eac1ce521cb91890b959ebfa66cdeb438 (patch) | |
tree | c8a3a4121ae9079b24ded34fc7e929a53f37b6bb | |
parent | 14b3a0b5c32aeac54062d380555588c8a4d6c99a (diff) |
Core/Player: Keep and store abandoned quests in the DB if CLEANING_FLAG_QUESTSTATUS is not set
Core/QuestStatus: Prevent inactive quest from being added into the questlog
--HG--
branch : trunk
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3a42653815d..4dd0efbeaa6 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -67,6 +67,7 @@ #include "DisableMgr.h" #include "WeatherMgr.h" #include "LFGMgr.h" +#include "CharacterDatabaseCleaner.h" #include <cmath> #define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS) @@ -17301,7 +17302,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result) questStatusData.m_itemcount[3] = fields[11].GetUInt16(); // add to quest log - if (slot < MAX_QUEST_LOG_SIZE) + if (slot < MAX_QUEST_LOG_SIZE && questStatusData.m_status != QUEST_STATUS_NONE) { SetQuestSlot(slot, quest_id, uint32(quest_time)); // cast can't be helped @@ -18335,12 +18336,14 @@ void Player::_SaveQuestStatus(SQLTransaction& trans) QuestStatusSaveMap::iterator saveItr; QuestStatusMap::iterator statusItr; + bool keepAbandoned = !(sWorld->GetCleaningFlags() & CharacterDatabaseCleaner::CLEANING_FLAG_QUESTSTATUS); + for (saveItr = m_QuestStatusSave.begin(); saveItr != m_QuestStatusSave.end(); ++saveItr) { if (saveItr->second) { statusItr = m_QuestStatus.find(saveItr->first); - if (statusItr != m_QuestStatus.end() && statusItr->second.m_status != QUEST_STATUS_NONE) + if (statusItr != m_QuestStatus.end() && (keepAbandoned || statusItr->second.m_status != QUEST_STATUS_NONE)) { trans->PAppend("REPLACE INTO character_queststatus (guid,quest,status,explored,timer,mobcount1,mobcount2,mobcount3,mobcount4,itemcount1,itemcount2,itemcount3,itemcount4) " "VALUES ('%u', '%u', '%u', '%u', '" UI64FMTD "', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u')", @@ -18357,7 +18360,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans) { if (saveItr->second) trans->PAppend("INSERT IGNORE INTO character_queststatus_rewarded (guid, quest) VALUES (%u, %u)", GetGUIDLow(), saveItr->first); - else + else if (!keepAbandoned) trans->PAppend("DELETE FROM character_queststatus_rewarded WHERE guid = %u AND quest = %u", GetGUIDLow(), saveItr->first); } |