diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-07-01 19:41:59 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-07-01 19:41:59 +0000 |
commit | d4edf76ec16c63ad126712ffbe86d8ed63ab70eb (patch) | |
tree | 7cf7d0d2354aa5468a5cb37699a61918e98a6ed5 /src/account-server | |
parent | f07dbf97c27aef7630782052ba6021359294cd86 (diff) | |
download | manaserv-d4edf76ec16c63ad126712ffbe86d8ed63ab70eb.tar.gz manaserv-d4edf76ec16c63ad126712ffbe86d8ed63ab70eb.tar.bz2 manaserv-d4edf76ec16c63ad126712ffbe86d8ed63ab70eb.tar.xz manaserv-d4edf76ec16c63ad126712ffbe86d8ed63ab70eb.zip |
Made character data persistent across logout/login.
Diffstat (limited to 'src/account-server')
-rw-r--r-- | src/account-server/characterdata.cpp | 13 | ||||
-rw-r--r-- | src/account-server/characterdata.hpp | 5 | ||||
-rw-r--r-- | src/account-server/serverhandler.cpp | 24 |
3 files changed, 16 insertions, 26 deletions
diff --git a/src/account-server/characterdata.cpp b/src/account-server/characterdata.cpp index 5dab4c08..79fcce34 100644 --- a/src/account-server/characterdata.cpp +++ b/src/account-server/characterdata.cpp @@ -21,8 +21,6 @@ */ #include "account-server/characterdata.hpp" -#include "net/messagein.hpp" -#include "serialize/characterdata.hpp" CharacterData::CharacterData(std::string const &name, int id): mDatabaseID(id), mAccountID(-1), mName(name), mGender(0), mHairStyle(0), @@ -34,14 +32,3 @@ CharacterData::CharacterData(std::string const &name, int id): } } -CharacterData::CharacterData(MessageIn & msg): - mDatabaseID(-1), mAccountID(-1), mName(""), mGender(0), mHairStyle(0), - mHairColor(0), mLevel(0), mMoney(0), mMapId(0), mPos(0,0) -{ - for (int i = 0; i < NB_BASE_ATTRIBUTES; ++i) - { - mBaseAttributes[i] = 0; - } - deserializeCharacterData(*this, msg); -} - diff --git a/src/account-server/characterdata.hpp b/src/account-server/characterdata.hpp index 76b43da0..0dc53ba3 100644 --- a/src/account-server/characterdata.hpp +++ b/src/account-server/characterdata.hpp @@ -40,11 +40,6 @@ class CharacterData CharacterData(std::string const &name, int id = -1); /** - * Constructor used for creating a character from a serialised message. - */ - CharacterData(MessageIn & msg); - - /** * Get and set methods */ diff --git a/src/account-server/serverhandler.cpp b/src/account-server/serverhandler.cpp index 3adb7173..db7b903e 100644 --- a/src/account-server/serverhandler.cpp +++ b/src/account-server/serverhandler.cpp @@ -84,6 +84,8 @@ void ServerHandler::registerGameClient(std::string const &token, CharacterPtr pt MessageOut msg(AGMSG_PLAYER_ENTER); msg.writeString(token, MAGIC_TOKEN_LENGTH); + msg.writeLong(ptr->getDatabaseID()); + msg.writeString(ptr->getName()); serializeCharacterData(*ptr, msg); Servers::const_iterator i = servers.find(mapId); @@ -128,15 +130,21 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg) case GAMSG_PLAYER_DATA: { LOG_DEBUG("GAMSG_PLAYER_DATA"); - // TODO: Store it in memory, only update the database when needed. - // That should get rid of the - // no_update_on_switch_character_bug as well. Storage &store = Storage::instance("tmw"); - CharacterPtr ptr(new CharacterData(msg)); - - if (!store.updateCharacter(ptr)) - LOG_ERROR("Received character data for non-existing" << - " character " << ptr->getDatabaseID() << "."); + int id = msg.readLong(); + CharacterPtr ptr = store.getCharacter(id); + if (ptr.get()) + { + deserializeCharacterData(*ptr, msg); + if (!store.updateCharacter(ptr)) + LOG_ERROR("Failed to update character " << + ptr->getDatabaseID() << '.'); + } + else + { + LOG_ERROR("Received data for non-existing character " << + ptr->getDatabaseID() << '.'); + } } break; |