From f8e816d9185c09d1c17d921b775e483d132982e5 Mon Sep 17 00:00:00 2001 From: Erik Schilling Date: Tue, 3 Apr 2012 13:29:05 +0200 Subject: Enhanced special support - Made the current charge being saved. - Added script binds: - chr_set_special_recharge_speed - chr_get_special_recharge_speed - chr_set_special_mana - chr_get_special_mana - get_special_info - Added special info lua class. Functions: - name - needed_mana - rechargeable - on_use - on_recharged - category Further the engine no longer sets charge to 0 after using of specials this allows more flexbilillity (like failing specials). Changes on the xml database: - recharge renamed to rechargeable (needed by client and server) - needed - the needed mana to trigger a special (server only) - rechargespeed - the defailt recharge speed in mana per tick (server only) - target - the type of target (either being or point) (server and client) I also made the lua engine pushing nil instead of a 0 light userdata when the pointer was 0. Database update needed. Change is tested. Mana-Mantis: #167, #156 Reviewed-by: bjorn. --- src/account-server/storage.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src/account-server/storage.cpp') diff --git a/src/account-server/storage.cpp b/src/account-server/storage.cpp index 9a19a673..8876cd4b 100644 --- a/src/account-server/storage.cpp +++ b/src/account-server/storage.cpp @@ -24,6 +24,7 @@ #include "account-server/storage.h" #include "account-server/account.h" +#include "account-server/character.h" #include "account-server/flooritem.h" #include "chat-server/chatchannel.h" #include "chat-server/guild.h" @@ -483,14 +484,18 @@ Character *Storage::getCharacterBySQL(Account *owner) // Load the special status s.clear(); s.str(""); - s << "select special_id FROM " << CHAR_SPECIALS_TBL_NAME + s << "SELECT special_id, special_current_mana FROM " + << CHAR_SPECIALS_TBL_NAME << " WHERE char_id = " << character->getDatabaseID(); const dal::RecordSet &specialsInfo = mDb->execSql(s.str()); if (!specialsInfo.isEmpty()) { const unsigned int nRows = specialsInfo.rows(); for (unsigned int row = 0; row < nRows; row++) - character->giveSpecial(toUint(specialsInfo(row, 0))); + { + character->giveSpecial(toUint(specialsInfo(row, 0)), + toUint(specialsInfo(row, 1))); + } } } catch (const dal::DbSqlQueryExecFailure &e) @@ -777,15 +782,19 @@ bool Storage::updateCharacter(Character *character) << character->getDatabaseID() << "';"; mDb->execSql(deleteSql.str()); // In with the new - std::map::const_iterator special_it; - for (special_it = character->getSpecialBegin(); - special_it != character->getSpecialEnd(); special_it++) + SpecialMap::const_iterator special_it, special_it_end; + for (special_it = character->getSpecialBegin(), + special_it_end = character->getSpecialEnd(); + special_it != special_it_end; ++special_it) { insertSql.str(""); insertSql << "INSERT INTO " << CHAR_SPECIALS_TBL_NAME - << " (char_id, special_id) VALUES (" + << " (char_id, special_id, special_current_mana)" + << " VALUES (" << " '" << character->getDatabaseID() << "'," - << " '" << special_it->first << "');"; + << " '" << special_it->first << "'," + << " '" << special_it->second.currentMana + << "');"; mDb->execSql(insertSql.str()); } } -- cgit v1.2.3-60-g2f50