diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 85c59543ce..363449e4c4 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 0000000000..fb4e63537b --- /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 a30e0f0c99..2c373f2b00 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 9c04f2a4e6..266adf32dd 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);