aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-07-09 18:32:40 +0200
committerShauren <shauren.trinity@gmail.com>2018-07-09 18:32:40 +0200
commit8411ec7ed6366e3f9c0dc722671492ed091b8fbd (patch)
tree1c04022191f6f4c492e0169fd4635df06ca03d31
parent076c7a7b32c0804013f24f46596fe316258bde1a (diff)
Core/Players: Fixed saving quest item progress
-rw-r--r--sql/base/characters_database.sql2
-rw-r--r--sql/updates/characters/3.3.5/2018_07_09_00_characters.sql3
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.cpp24
4 files changed, 18 insertions, 15 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 85c59543cea..363449e4c44 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -962,6 +962,8 @@ CREATE TABLE `character_queststatus` (
`itemcount2` smallint(5) unsigned NOT NULL DEFAULT '0',
`itemcount3` smallint(5) unsigned NOT NULL DEFAULT '0',
`itemcount4` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `itemcount5` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `itemcount6` smallint(5) unsigned NOT NULL DEFAULT '0',
`playercount` smallint(5) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`,`quest`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System';
diff --git a/sql/updates/characters/3.3.5/2018_07_09_00_characters.sql b/sql/updates/characters/3.3.5/2018_07_09_00_characters.sql
new file mode 100644
index 00000000000..fb4e63537b5
--- /dev/null
+++ b/sql/updates/characters/3.3.5/2018_07_09_00_characters.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `character_queststatus`
+ ADD `itemcount5` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `itemcount4`,
+ ADD `itemcount6` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `itemcount5`;
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index a30e0f0c99b..2c373f2b005 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -74,7 +74,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
"base_amount0, base_amount1, base_amount2, maxDuration, remainTime, remainCharges, critChance, applyResilience FROM character_aura WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_SPELL, "SELECT spell, active, disabled FROM character_spell WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS, "SELECT quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, "
- "itemcount1, itemcount2, itemcount3, itemcount4, playercount FROM character_queststatus WHERE guid = ? AND status <> 0", CONNECTION_ASYNC);
+ "itemcount1, itemcount2, itemcount3, itemcount4, itemcount5, itemcount6, playercount FROM character_queststatus WHERE guid = ? AND status <> 0", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_DAILY, "SELECT quest, time FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_WEEKLY, "SELECT quest FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC);
@@ -521,7 +521,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM, "DELETE FROM character_inventory WHERE item = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_INVENTORY_BY_BAG_SLOT, "DELETE FROM character_inventory WHERE bag = ? AND slot = ? AND guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_MAIL, "UPDATE mail SET has_items = ?, expire_time = ?, deliver_time = ?, money = ?, cod = ?, checked = ? WHERE id = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_REP_CHAR_QUESTSTATUS, "REPLACE INTO character_queststatus (guid, quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, itemcount1, itemcount2, itemcount3, itemcount4, playercount) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_REP_CHAR_QUESTSTATUS, "REPLACE INTO character_queststatus (guid, quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, itemcount1, itemcount2, itemcount3, itemcount4, itemcount5, itemcount6, playercount) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_QUESTSTATUS_BY_QUEST, "DELETE FROM character_queststatus WHERE guid = ? AND quest = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_CHAR_QUESTSTATUS_REWARDED, "INSERT IGNORE INTO character_queststatus_rewarded (guid, quest, active) VALUES (?, ?, 1)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_QUESTSTATUS_REWARDED_BY_QUEST, "DELETE FROM character_queststatus_rewarded WHERE guid = ? AND quest = ?", CONNECTION_ASYNC);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9c04f2a4e6f..266adf32dd1 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -18311,8 +18311,8 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
//// 0 1 2 3 4 5 6 7 8 9 10
//QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, itemcount1, itemcount2, itemcount3,
- // 11 12
- // itemcount4, playercount FROM character_queststatus WHERE guid = '%u'", GetGUID().GetCounter());
+ // 11 12 13 14
+ // itemcount4, itemcount5, itemcount6, playercount FROM character_queststatus WHERE guid = '%u'", GetGUID().GetCounter());
if (result)
{
@@ -18354,15 +18354,13 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
else
quest_time = 0;
- questStatusData.CreatureOrGOCount[0] = fields[4].GetUInt16();
- questStatusData.CreatureOrGOCount[1] = fields[5].GetUInt16();
- questStatusData.CreatureOrGOCount[2] = fields[6].GetUInt16();
- questStatusData.CreatureOrGOCount[3] = fields[7].GetUInt16();
- questStatusData.ItemCount[0] = fields[8].GetUInt16();
- questStatusData.ItemCount[1] = fields[9].GetUInt16();
- questStatusData.ItemCount[2] = fields[10].GetUInt16();
- questStatusData.ItemCount[3] = fields[11].GetUInt16();
- questStatusData.PlayerCount = fields[12].GetUInt16();
+ for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
+ questStatusData.CreatureOrGOCount[i] = fields[4 + i].GetUInt16();
+
+ for (uint32 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
+ questStatusData.ItemCount[i] = fields[8 + i].GetUInt16();
+
+ questStatusData.PlayerCount = fields[14].GetUInt16();
// add to quest log
if (slot < MAX_QUEST_LOG_SIZE && questStatusData.Status != QUEST_STATUS_NONE)
@@ -19792,10 +19790,10 @@ void Player::_SaveQuestStatus(SQLTransaction& trans)
stmt->setBool(index++, statusItr->second.Explored);
stmt->setUInt32(index++, uint32(statusItr->second.Timer / IN_MILLISECONDS+ GameTime::GetGameTime()));
- for (uint8 i = 0; i < 4; i++)
+ for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; i++)
stmt->setUInt16(index++, statusItr->second.CreatureOrGOCount[i]);
- for (uint8 i = 0; i < 4; i++)
+ for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; i++)
stmt->setUInt16(index++, statusItr->second.ItemCount[i]);
stmt->setUInt16(index, statusItr->second.PlayerCount);