diff options
author | Yohann Ferreira <bertram@cegetel.net> | 2005-12-06 22:18:00 +0000 |
---|---|---|
committer | Yohann Ferreira <bertram@cegetel.net> | 2005-12-06 22:18:00 +0000 |
commit | 619d958712ac1f370225cd6e1381ad9c1c85a15f (patch) | |
tree | f60c6465908e3a39f7c83b2a98712dadaa0b5cf7 /src | |
parent | e33d204e20f8659999b85d6d0e66e4dc43555a56 (diff) | |
download | manaserv-619d958712ac1f370225cd6e1381ad9c1c85a15f.tar.gz manaserv-619d958712ac1f370225cd6e1381ad9c1c85a15f.tar.bz2 manaserv-619d958712ac1f370225cd6e1381ad9c1c85a15f.tar.xz manaserv-619d958712ac1f370225cd6e1381ad9c1c85a15f.zip |
Improved the getEmailList() function. Now the file used as db or the db name is shown in log. Added some missing messages and values for them. Login, pass min, max length can be changed there now. Added check and appropriate response when selecting, creating a character.
Diffstat (limited to 'src')
-rw-r--r-- | src/account.cpp | 1 | ||||
-rw-r--r-- | src/account.h | 1 | ||||
-rw-r--r-- | src/accounthandler.cpp | 42 | ||||
-rw-r--r-- | src/dalstorage.cpp | 15 | ||||
-rw-r--r-- | src/defines.h | 57 |
5 files changed, 96 insertions, 20 deletions
diff --git a/src/account.cpp b/src/account.cpp index c44af2d9..bf20ac34 100644 --- a/src/account.cpp +++ b/src/account.cpp @@ -26,7 +26,6 @@ #include "account.h" - namespace tmwserv { diff --git a/src/account.h b/src/account.h index 7e1322cc..f45ec7c4 100644 --- a/src/account.h +++ b/src/account.h @@ -185,7 +185,6 @@ class Account Beings& getCharacters(void); - /** * Get a character by name. * diff --git a/src/accounthandler.cpp b/src/accounthandler.cpp index 63b2d3d6..602f5845 100644 --- a/src/accounthandler.cpp +++ b/src/accounthandler.cpp @@ -121,11 +121,11 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) // looking the email address already exists. std::list<std::string> emailList = store.getEmailList(); std::string upcasedEmail, upcasedIt; + upcasedEmail = email; + std::transform(upcasedEmail.begin(), upcasedEmail.end(), upcasedEmail.begin(), (int(*)(int))std::toupper); for (std::list<std::string>::const_iterator it = emailList.begin(); it != emailList.end(); it++) { // Upcasing both mails for a good comparison - upcasedEmail = email; - std::transform(upcasedEmail.begin(), upcasedEmail.end(), upcasedEmail.begin(), (int(*)(int))std::toupper); upcasedIt = *it; std::transform(upcasedIt.begin(), upcasedIt.end(), upcasedIt.begin(), (int(*)(int))std::toupper); if ( upcasedEmail == upcasedIt ) @@ -161,13 +161,13 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) result.writeByte(REGISTER_EXISTS_USERNAME); std::cout << username << ": Username already exists." << std::endl; } - else if ((username.length() < 4) || (username.length() > 16)) // Username length + else if ((username.length() < MIN_LOGIN_LENGTH) || (username.length() > MAX_LOGIN_LENGTH)) // Username length { result.writeShort(SMSG_REGISTER_RESPONSE); result.writeByte(REGISTER_INVALID_USERNAME); std::cout << username << ": Username too short or too long." << std::endl; } - else if (password.length() < 4) + else if (password.length() < MIN_PASSWORD_LENGTH) { result.writeShort(SMSG_REGISTER_RESPONSE); result.writeByte(REGISTER_INVALID_PASSWORD); @@ -187,8 +187,8 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) result.writeShort(SMSG_REGISTER_RESPONSE); result.writeByte(REGISTER_OK); - std::cout << username << ": Account registered." << std::endl; store.flush(); // flush changes + std::cout << username << ": Account registered." << std::endl; } } break; @@ -202,23 +202,29 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) break; } + // A player shouldn't have more than 3 characters. + tmwserv::Beings &chars = computer.getAccount()->getCharacters(); + if (chars.size() >= MAX_OF_CHARACTERS) + { + result.writeShort(SMSG_CHAR_CREATE_RESPONSE); + result.writeByte(CREATE_TOO_MUCH_CHARACTERS); + std::cout << "Already has 3 characters. Can't create another Character." << std::endl; + break; + } + std::string name = message.readString(); //char hairStyle = message.readByte(); //char hairColor = message.readByte(); Genders sex = (Genders)message.readByte(); - // TODO: Finish this message type (should a player customize stats - // slightly?) - // A player shouldn't have more than 3 characters. - + // TODO: Customization of player's stats... tmwserv::RawStatistics stats = {10, 10, 10, 10, 10, 10}; tmwserv::BeingPtr newCharacter(new tmwserv::Being(name, sex, 1, 0, stats)); computer.getAccount()->addCharacter(newCharacter); + store.flush(); // flush changes result.writeShort(SMSG_CHAR_CREATE_RESPONSE); result.writeByte(CREATE_OK); - - store.flush(); // flush changes } break; @@ -235,11 +241,18 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) unsigned char charNum = message.readByte(); tmwserv::Beings &chars = computer.getAccount()->getCharacters(); - result.writeShort(SMSG_CHAR_SELECT_RESPONSE); + if ( chars.size() == 0 ) + { + result.writeByte(SELECT_NOT_YET_CHARACTERS); + std::cout << "Character Selection : Yet no characters created." << std::endl; + break; + } + // Character ID = 0 to Number of Characters - 1. if (charNum >= chars.size()) { // invalid char selection result.writeByte(SELECT_INVALID); + std::cout << "Character Selection : Selection out of ID range." << std::endl; break; } @@ -251,6 +264,11 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) state.addBeing(computer.getCharacter(), computer.getCharacter()->getMap()); result.writeByte(SELECT_OK); + std::cout << "Selected Character " << int(charNum) + << " : " << + computer.getCharacter()->getName() << std::endl; + + //TODO: Add the character in the database and flush. } break; diff --git a/src/dalstorage.cpp b/src/dalstorage.cpp index c62b0dc4..187a9a26 100644 --- a/src/dalstorage.cpp +++ b/src/dalstorage.cpp @@ -73,15 +73,26 @@ DALStorage::open(void) using namespace dal; + static bool dbFileShown = false; + std::string dbFile(getName()); try { // open a connection to the database. #if defined (MYSQL_SUPPORT) || defined (POSTGRESQL_SUPPORT) mDb->connect(getName(), getUser(), getPassword()); + if (!dbFileShown) + { + LOG_INFO("Using " << dbFile << " as Database Name.") + dbFileShown = true; + } #elif defined (SQLITE_SUPPORT) // create the database file name. - std::string dbFile(getName()); dbFile += ".db"; mDb->connect(dbFile, "", ""); + if (!dbFileShown) + { + LOG_INFO("SQLite uses ./" << dbFile << " as DB.") + dbFileShown = true; + } #endif // ensure that the required tables are created. @@ -340,7 +351,7 @@ DALStorage::delAccount(const std::string& userName) } /** - * Return the list of all Emails addresses + * Return the list of all Emails addresses. */ std::list<std::string> DALStorage::getEmailList() diff --git a/src/defines.h b/src/defines.h index 5762b14d..716ec65e 100644 --- a/src/defines.h +++ b/src/defines.h @@ -54,6 +54,26 @@ typedef enum { GENDER_UNKNOWN } Genders; +enum { + // Registering related + MIN_LOGIN_LENGTH = 4, + MAX_LOGIN_LENGTH = 16, + MIN_PASSWORD_LENGTH = 4, + + // Character related + MAX_OF_CHARACTERS = 3, +/** Tells the max difference between the + * less big stat and the biggest one. + * So that players haven't disproportionned + * Raw statistics. + */ + MAX_DIFF_BETWEEN_STATS = 5, +/** + * Points to give to a brand new character + */ + POINTS_TO_DISTRIBUTES_AT_LVL1 = 60 +}; + /** * Enumerated type for communicated messages */ @@ -62,15 +82,19 @@ enum { CMSG_REGISTER = 0x0000, CMSG_ENCRYPTED_REGISTER = 0x0001, SMSG_REGISTER_RESPONSE = 0x0002, + CMSG_UNREGISTER = 0x0003, + SMSG_UNREGISTER_RESPONSE = 0x0004, CMSG_LOGIN = 0x0010, CMSG_ENCRYPTED_LOGIN = 0x0011, SMSG_LOGIN_ERROR = 0x0012, SMSG_LOGIN_CONFIRM = 0x0013, CMSG_CHAR_CREATE = 0x0020, SMSG_CHAR_CREATE_RESPONSE = 0x0021, - CMSG_CHAR_LIST = 0x0022, // this is required after char creation - CMSG_CHAR_SELECT = 0x0023, - SMSG_CHAR_SELECT_RESPONSE = 0x0034, + CMSG_CHAR_DELETE = 0x0022, + SMSG_CHAR_DELETE_RESPONSE = 0x0023, + CMSG_CHAR_LIST = 0x0024, // this is required after char creation + CMSG_CHAR_SELECT = 0x0030, + SMSG_CHAR_SELECT_RESPONSE = 0x0031, // Objects SMSG_NEW_OBJECT = 0x0100, @@ -126,6 +150,13 @@ enum { LOGIN_UNKNOWN }; +// Logout return values +enum { + LOGOUT_OK = 0, + LOGOUT_UNSUCCESSFULL, + LOGOUT_UNKNOWN +}; + // Account register return values enum { REGISTER_OK = 0, @@ -136,6 +167,14 @@ enum { REGISTER_EXISTS_EMAIL }; +// Account deletion return values +enum { + UNREGISTER_OK = 0, + UNREGISTER_INVALID_USERNAME, + UNREGISTER_INVALID_PASSWORD, + UNREGISTER_INVALID_UNSUFFICIENT_RIGHTS +}; + // Character creation return values enum { CREATE_OK = 0, @@ -143,14 +182,24 @@ enum { CREATE_INVALID_HAIR, CREATE_INVALID_SEX, CREATE_EXISTS_USERNAME, - CREATE_EXISTS_EMAIL, + CREATE_TOO_MUCH_CHARACTERS, CREATE_NOLOGIN }; +// Character deletion return values +enum { + DELETE_OK = 0, + DELETE_INVALID_NAME, + DELETE_NO_MORE_CHARACTERS, + DELETE_NOLOGIN +}; + // Character selection return values +// (When selecting a new one, you deselect the previous.) enum { SELECT_OK = 0, SELECT_INVALID, + SELECT_NOT_YET_CHARACTERS, SELECT_NOLOGIN }; |