diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-07-01 21:04:14 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-07-01 21:04:14 +0000 |
commit | 59791ea1fd5a93b758be40df2322ac0070deed5b (patch) | |
tree | 650c8d1f9f7fb879e454339ec29f47232b639d1c | |
parent | d4edf76ec16c63ad126712ffbe86d8ed63ab70eb (diff) | |
download | manaserv-59791ea1fd5a93b758be40df2322ac0070deed5b.tar.gz manaserv-59791ea1fd5a93b758be40df2322ac0070deed5b.tar.bz2 manaserv-59791ea1fd5a93b758be40df2322ac0070deed5b.tar.xz manaserv-59791ea1fd5a93b758be40df2322ac0070deed5b.zip |
Added support for storing inventory in database.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/account-server/dalstorage.cpp | 72 | ||||
-rw-r--r-- | src/account-server/dalstoragesql.hpp | 6 |
3 files changed, 48 insertions, 33 deletions
@@ -23,6 +23,9 @@ used, and of name, so that it does not waste bandwidth. * src/account-server/serverhandler.cpp: Reverted to the scheme based on character ID, so that runtime character data are persistent again. + * src/account-server/dalstoragesql.hpp, + src/account-server/dalstorage.cpp: Added support for storing inventory + in database. 2007-06-28 Philipp Sehmisch <tmw@crushnet.org> diff --git a/src/account-server/dalstorage.cpp b/src/account-server/dalstorage.cpp index ff5684dc..72a61821 100644 --- a/src/account-server/dalstorage.cpp +++ b/src/account-server/dalstorage.cpp @@ -681,7 +681,6 @@ DALStorage::updateCharacter(CharacterPtr character) * Character's inventory */ - /* // Delete the old inventory first try { @@ -699,44 +698,57 @@ DALStorage::updateCharacter(CharacterPtr character) } // Insert the new inventory data - if (character->getNumberOfInventoryItems()) + try { - try - { - std::ostringstream sqlInsertCharacterInventory; + std::ostringstream sqlInsertCharacterInventory; + + sqlInsertCharacterInventory + << "insert into " << INVENTORIES_TBL_NAME + << " (owner_id, slot, class_id, amount) " + << "values "; + int id = character->getDatabaseID(); + bool first = true; + Possessions const &poss = character->getPossessions(); + + for (int j = 0; j < EQUIPMENT_SLOTS; ++j) + { + int v = poss.equipment[j]; + if (!v) continue; + if (first) first = false; + else sqlInsertCharacterInventory << ", "; sqlInsertCharacterInventory - << "insert into " << INVENTORIES_TBL_NAME - << " (owner_id, class_id, amount, equipped) " - << "values "; + << '(' << id << ", " << j << ", " << v << ", " << 1 << ')'; + } - for (int j = 0; j < character->getNumberOfInventoryItems(); j++) + int slot = 32; + for (std::vector< InventoryItem >::const_iterator j = poss.inventory.begin(), + j_end = poss.inventory.end(); j != j_end; ++j) + { + int v = j->itemId; + if (!v) { - sqlInsertCharacterInventory - << "(" << character->getDatabaseID() << ", " - << character->getInventoryItem(j).itemClassId << ", " - << character->getInventoryItem(j).numberOfItemsInSlot - << ", " - << (unsigned short) - character->getInventoryItem(j).isEquiped - << ")"; - - // Adding the comma only if it's needed - if (j < (character->getNumberOfInventoryItems() - 1)) - sqlInsertCharacterInventory << ", "; + slot += j->amount; + continue; } - sqlInsertCharacterInventory << ";"; + if (first) first = false; + else sqlInsertCharacterInventory << ", "; + sqlInsertCharacterInventory + << '(' << id << ", " << slot << ", " << v << ", " << unsigned(j->amount) << ')'; + ++slot; + } + sqlInsertCharacterInventory << ';'; + + if (!first) mDb->execSql(sqlInsertCharacterInventory.str()); - } - catch (const dal::DbSqlQueryExecFailure& e) - { - // TODO: throw an exception. - LOG_ERROR("(DALStorage::updateCharacter #3) SQL query failure: " << e.what()); - return false; - } } - */ + catch (const dal::DbSqlQueryExecFailure& e) + { + // TODO: throw an exception. + LOG_ERROR("(DALStorage::updateCharacter #3) SQL query failure: " << e.what()); + return false; + } return true; } diff --git a/src/account-server/dalstoragesql.hpp b/src/account-server/dalstoragesql.hpp index df141f69..b129b797 100644 --- a/src/account-server/dalstoragesql.hpp +++ b/src/account-server/dalstoragesql.hpp @@ -282,24 +282,24 @@ const std::string SQL_INVENTORIES_TABLE( #if defined (MYSQL_SUPPORT) "id INTEGER PRIMARY KEY AUTO_INCREMENT," "owner_id INTEGER NOT NULL," + "slot SMALLINT NOT NULL," "class_id INTEGER NOT NULL," "amount SMALLINT NOT NULL," - "equipped TINYINT NOT NULL," "FOREIGN KEY (owner_id) REFERENCES tmw_characters(id)" "INDEX (id)" #elif defined (SQLITE_SUPPORT) "id INTEGER PRIMARY KEY," "owner_id INTEGER NOT NULL," + "slot INTEGER NOT NULL," "class_id INTEGER NOT NULL," "amount INTEGER NOT NULL," - "equipped INTEGER NOT NULL," "FOREIGN KEY (owner_id) REFERENCES tmw_characters(id)" #elif defined (POSTGRESQL_SUPPORT) "id SERIAL PRIMARY KEY," "owner_id INTEGER NOT NULL," + "slot INTEGER NOT NULL," "class_id INTEGER NOT NULL," "amount INTEGER NOT NULL," - "equipped INTEGER NOT NULL," "FOREIGN KEY (owner_id) REFERENCES tmw_characters(id)" #endif ");" |