summaryrefslogtreecommitdiff
path: root/src/account-server
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2013-04-15 22:15:31 +0200
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2013-04-15 22:15:31 +0200
commitc53bc90dbaa876a86f762a3d864b1f920e2b8071 (patch)
tree1a8174f4d1745a4799210db970aa2230df622d34 /src/account-server
parentb89e404f85358f2e3ff87d7731376dbeacdf9778 (diff)
parent81be8dc99ba7558c8915310eed095df43e3bdbf7 (diff)
downloadmanaserv-c53bc90dbaa876a86f762a3d864b1f920e2b8071.tar.gz
manaserv-c53bc90dbaa876a86f762a3d864b1f920e2b8071.tar.bz2
manaserv-c53bc90dbaa876a86f762a3d864b1f920e2b8071.tar.xz
manaserv-c53bc90dbaa876a86f762a3d864b1f920e2b8071.zip
Merge branch 'master' into lpc2012
Conflicts: src/account-server/accounthandler.cpp src/game-server/character.cpp
Diffstat (limited to 'src/account-server')
-rw-r--r--src/account-server/account.cpp2
-rw-r--r--src/account-server/account.h2
-rw-r--r--src/account-server/accounthandler.cpp9
-rw-r--r--src/account-server/character.cpp6
-rw-r--r--src/account-server/character.h39
-rw-r--r--src/account-server/serverhandler.cpp20
-rw-r--r--src/account-server/serverhandler.h6
-rw-r--r--src/account-server/storage.cpp29
-rw-r--r--src/account-server/storage.h12
9 files changed, 71 insertions, 54 deletions
diff --git a/src/account-server/account.cpp b/src/account-server/account.cpp
index ed7c5df4..10869294 100644
--- a/src/account-server/account.cpp
+++ b/src/account-server/account.cpp
@@ -41,7 +41,7 @@ void Account::setCharacters(const Characters &characters)
mCharacters = characters;
}
-void Account::addCharacter(Character *character)
+void Account::addCharacter(CharacterData *character)
{
unsigned slot = (unsigned) character->getCharacterSlot();
assert(isSlotEmpty(slot));
diff --git a/src/account-server/account.h b/src/account-server/account.h
index 46693e80..0ee84768 100644
--- a/src/account-server/account.h
+++ b/src/account-server/account.h
@@ -151,7 +151,7 @@ class Account
*
* @param character the new character.
*/
- void addCharacter(Character *character);
+ void addCharacter(CharacterData *character);
/**
* Removes a character from the account.
diff --git a/src/account-server/accounthandler.cpp b/src/account-server/accounthandler.cpp
index a65d8240..41b2c034 100644
--- a/src/account-server/accounthandler.cpp
+++ b/src/account-server/accounthandler.cpp
@@ -76,7 +76,8 @@ public:
/**
* Send the character data to the client.
*/
- static void sendCharacterData(AccountClient &client, const Character &ch);
+ static void sendCharacterData(AccountClient &client,
+ const CharacterData &ch);
protected:
/**
@@ -271,7 +272,7 @@ void AccountHandler::computerDisconnected(NetComputer *comp)
}
void AccountHandler::sendCharacterData(AccountClient &client,
- const Character &ch)
+ const CharacterData &ch)
{
MessageOut charInfo(APMSG_CHAR_INFO);
charInfo.writeInt8(ch.getCharacterSlot());
@@ -760,7 +761,7 @@ void AccountHandler::handleCharacterCreateMessage(AccountClient &client,
for (unsigned i = 0; i < mModifiableAttributes.size(); ++i)
attributes[i] = 5;
- Character *newCharacter = new Character(name);
+ CharacterData *newCharacter = new CharacterData(name);
// Set the initial attributes provided by the client
for (unsigned i = 0; i < mModifiableAttributes.size(); ++i)
@@ -829,7 +830,7 @@ void AccountHandler::handleCharacterSelectMessage(AccountClient &client,
return;
}
- Character *selectedChar = chars[slot];
+ CharacterData *selectedChar = chars[slot];
std::string address;
int port;
diff --git a/src/account-server/character.cpp b/src/account-server/character.cpp
index 3219e3ce..eafae1c9 100644
--- a/src/account-server/character.cpp
+++ b/src/account-server/character.cpp
@@ -22,7 +22,7 @@
#include "account-server/account.h"
-Character::Character(const std::string &name, int id):
+CharacterData::CharacterData(const std::string &name, int id):
mName(name),
mDatabaseID(id),
mCharacterSlot(0),
@@ -39,14 +39,14 @@ Character::Character(const std::string &name, int id):
{
}
-void Character::setAccount(Account *acc)
+void CharacterData::setAccount(Account *acc)
{
mAccount = acc;
mAccountID = acc->getID();
mAccountLevel = acc->getLevel();
}
-void Character::giveSpecial(int id, int currentMana)
+void CharacterData::giveSpecial(int id, int currentMana)
{
if (mSpecials.find(id) == mSpecials.end())
{
diff --git a/src/account-server/character.h b/src/account-server/character.h
index 0b697392..a9aa810b 100644
--- a/src/account-server/character.h
+++ b/src/account-server/character.h
@@ -47,6 +47,12 @@ struct AttributeValue
double base; /**< Base value of the attribute. */
double modified; /**< Value after various modifiers have been applied. */
+
+ double getBase() const
+ { return base; }
+
+ double getModifiedAttribute() const
+ { return modified; }
};
struct SpecialValue
@@ -62,6 +68,15 @@ struct SpecialValue
unsigned currentMana;
};
+struct Status
+{
+ Status()
+ : time(0)
+ {}
+
+ unsigned time;
+};
+
/**
* Stores attributes by their id.
*/
@@ -72,11 +87,11 @@ typedef std::map<unsigned, AttributeValue> AttributeMap;
*/
typedef std::map<unsigned, SpecialValue> SpecialMap;
-class Character
+class CharacterData
{
public:
- Character(const std::string &name, int id = -1);
+ CharacterData(const std::string &name, int id = -1);
/**
* Gets the database id of the character.
@@ -154,6 +169,9 @@ class Character
void setModAttribute(unsigned id, double value)
{ mAttributes[id].modified = value; }
+ const AttributeMap &getAttributes() const
+ { return mAttributes; }
+
int getSkillSize() const
{ return mExperience.size(); }
@@ -176,15 +194,15 @@ class Character
* Get / Set a status effects
*/
void applyStatusEffect(int id, int time)
- { mStatusEffects[id] = time; }
+ { mStatusEffects[id].time = time; }
int getStatusEffectSize() const
{ return mStatusEffects.size(); }
- const std::map<int, int>::const_iterator getStatusEffectBegin() const
+ const std::map<int, Status>::const_iterator getStatusEffectBegin() const
{ return mStatusEffects.begin(); }
- const std::map<int, int>::const_iterator getStatusEffectEnd() const
+ const std::map<int, Status>::const_iterator getStatusEffectEnd() const
{ return mStatusEffects.end(); }
/**
@@ -266,8 +284,8 @@ class Character
private:
- Character(const Character &);
- Character &operator=(const Character &);
+ CharacterData(const CharacterData &);
+ CharacterData &operator=(const CharacterData &);
double getAttrBase(AttributeMap::const_iterator &it) const
{ return it->second.base; }
@@ -283,7 +301,7 @@ class Character
Point mPos; //!< Position the being is at.
AttributeMap mAttributes; //!< Attributes.
std::map<int, int> mExperience; //!< Skill Experience.
- std::map<int, int> mStatusEffects; //!< Status Effects
+ std::map<int, Status> mStatusEffects; //!< Status Effects
std::map<int, int> mKillCount; //!< Kill Count
SpecialMap mSpecials;
unsigned short mMapId; //!< Map the being is on.
@@ -299,14 +317,11 @@ class Character
//!< belongs to.
friend class AccountHandler;
friend class Storage;
- // Set as a friend, but still a lot of redundant accessors. FIXME.
- template< class T >
- friend void serializeCharacterData(const T &data, MessageOut &msg);
};
/**
* Type definition for a list of Characters.
*/
-typedef std::map<unsigned, Character* > Characters;
+typedef std::map<unsigned, CharacterData* > Characters;
#endif
diff --git a/src/account-server/serverhandler.cpp b/src/account-server/serverhandler.cpp
index 024266bb..9ed317eb 100644
--- a/src/account-server/serverhandler.cpp
+++ b/src/account-server/serverhandler.cpp
@@ -156,7 +156,7 @@ bool GameServerHandler::getGameServerFromMap(int mapId,
}
static void registerGameClient(GameServer *s, const std::string &token,
- Character *ptr)
+ CharacterData *ptr)
{
MessageOut msg(AGMSG_PLAYER_ENTER);
msg.writeString(token, MAGIC_TOKEN_LENGTH);
@@ -167,7 +167,7 @@ static void registerGameClient(GameServer *s, const std::string &token,
}
void GameServerHandler::registerClient(const std::string &token,
- Character *ptr)
+ CharacterData *ptr)
{
GameServer *s = ::getGameServerFromMap(ptr->getMapId());
assert(s);
@@ -292,7 +292,7 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
{
LOG_DEBUG("GAMSG_PLAYER_DATA");
int id = msg.readInt32();
- if (Character *ptr = storage->getCharacter(id, NULL))
+ if (CharacterData *ptr = storage->getCharacter(id, nullptr))
{
deserializeCharacterData(*ptr, msg);
if (!storage->updateCharacter(ptr))
@@ -320,7 +320,7 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
LOG_DEBUG("GAMSG_REDIRECT");
int id = msg.readInt32();
std::string magic_token(utils::getMagicToken());
- if (Character *ptr = storage->getCharacter(id, NULL))
+ if (CharacterData *ptr = storage->getCharacter(id, nullptr))
{
int mapId = ptr->getMapId();
if (GameServer *s = getGameServerFromMap(mapId))
@@ -353,7 +353,7 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
int id = msg.readInt32();
std::string magic_token = msg.readString(MAGIC_TOKEN_LENGTH);
- if (Character *ptr = storage->getCharacter(id, NULL))
+ if (CharacterData *ptr = storage->getCharacter(id, nullptr))
{
int accountID = ptr->getAccountID();
AccountClientHandler::prepareReconnect(magic_token, accountID);
@@ -432,7 +432,7 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
int level = msg.readInt16();
// get the character so we can get the account id
- Character *c = storage->getCharacter(id, NULL);
+ CharacterData *c = storage->getCharacter(id, NULL);
if (c)
{
storage->setAccountLevel(c->getAccountID(), level);
@@ -478,7 +478,7 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
result.writeInt32(characterId);
// get the character based on the id
- Character *ptr = storage->getCharacter(characterId, NULL);
+ CharacterData *ptr = storage->getCharacter(characterId, nullptr);
if (!ptr)
{
// Invalid character
@@ -528,8 +528,8 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
result.writeInt32(senderId);
// get their characters
- Character *sender = storage->getCharacter(senderId, NULL);
- Character *receiver = storage->getCharacter(receiverName);
+ CharacterData *sender = storage->getCharacter(senderId, NULL);
+ CharacterData *receiver = storage->getCharacter(receiverName);
if (!sender || !receiver)
{
// Invalid character
@@ -657,7 +657,7 @@ void GameServerHandler::dumpStatistics(std::ostream &os)
}
}
-void GameServerHandler::sendPartyChange(Character *ptr, int partyId)
+void GameServerHandler::sendPartyChange(CharacterData *ptr, int partyId)
{
GameServer *s = ::getGameServerFromMap(ptr->getMapId());
if (s)
diff --git a/src/account-server/serverhandler.h b/src/account-server/serverhandler.h
index f4499f1b..6f4c61fe 100644
--- a/src/account-server/serverhandler.h
+++ b/src/account-server/serverhandler.h
@@ -26,7 +26,7 @@
#include "net/messagein.h"
-class Character;
+class CharacterData;
namespace GameServerHandler
{
@@ -49,7 +49,7 @@ namespace GameServerHandler
/**
* Warns a game server about a soon-to-connect client.
*/
- void registerClient(const std::string &token, Character *);
+ void registerClient(const std::string &token, CharacterData *);
/**
* Dumps per-server statistics into given stream
@@ -64,7 +64,7 @@ namespace GameServerHandler
/**
* Sends chat party information
*/
- void sendPartyChange(Character *ptr, int partyId);
+ void sendPartyChange(CharacterData *ptr, int partyId);
/**
* Takes a GAMSG_PLAYER_SYNC from the gameserver and stores all changes in
diff --git a/src/account-server/storage.cpp b/src/account-server/storage.cpp
index 067967e1..dd8cf9ac 100644
--- a/src/account-server/storage.cpp
+++ b/src/account-server/storage.cpp
@@ -223,7 +223,8 @@ Account *Storage::getAccountBySQL()
for (int k = 0; k < size; ++k)
{
- if (Character *ptr = getCharacter(characterIDs[k], account))
+ if (CharacterData *ptr =
+ getCharacter(characterIDs[k], account))
{
characters[ptr->getCharacterSlot()] = ptr;
}
@@ -339,9 +340,9 @@ Account *Storage::getAccount(int accountID)
return 0;
}
-Character *Storage::getCharacterBySQL(Account *owner)
+CharacterData *Storage::getCharacterBySQL(Account *owner)
{
- Character *character = 0;
+ CharacterData *character = 0;
string_to< unsigned > toUint;
string_to< int > toInt;
@@ -358,7 +359,7 @@ Character *Storage::getCharacterBySQL(Account *owner)
string_to< unsigned short > toUshort;
string_to< double > toDouble;
- character = new Character(charInfo(0, 2), toUint(charInfo(0, 0)));
+ character = new CharacterData(charInfo(0, 2), toUint(charInfo(0, 0)));
character->setGender(toUshort(charInfo(0, 3)));
character->setHairStyle(toUshort(charInfo(0, 4)));
character->setHairColor(toUshort(charInfo(0, 5)));
@@ -559,7 +560,7 @@ Character *Storage::getCharacterBySQL(Account *owner)
return character;
}
-Character *Storage::getCharacter(int id, Account *owner)
+CharacterData *Storage::getCharacter(int id, Account *owner)
{
std::ostringstream sql;
sql << "SELECT * FROM " << CHARACTERS_TBL_NAME << " WHERE id = ?";
@@ -571,7 +572,7 @@ Character *Storage::getCharacter(int id, Account *owner)
return 0;
}
-Character *Storage::getCharacter(const std::string &name)
+CharacterData *Storage::getCharacter(const std::string &name)
{
std::ostringstream sql;
sql << "SELECT * FROM " << CHARACTERS_TBL_NAME << " WHERE name = ?";
@@ -708,7 +709,7 @@ bool Storage::doesCharacterNameExist(const std::string& name)
return true;
}
-bool Storage::updateCharacter(Character *character)
+bool Storage::updateCharacter(CharacterData *character)
{
dal::PerformTransaction transaction(mDb);
@@ -909,12 +910,12 @@ bool Storage::updateCharacter(Character *character)
}
try
{
- std::map<int, int>::const_iterator status_it;
+ std::map<int, Status>::const_iterator status_it;
for (status_it = character->getStatusEffectBegin();
status_it != character->getStatusEffectEnd(); status_it++)
{
insertStatusEffect(character->getDatabaseID(),
- status_it->first, status_it->second);
+ status_it->first, status_it->second.time);
}
}
catch (const dal::DbSqlQueryExecFailure& e)
@@ -1007,7 +1008,7 @@ void Storage::flush(Account *account)
for (Characters::const_iterator it = characters.begin(),
it_end = characters.end(); it != it_end; ++it)
{
- Character *character = (*it).second;
+ CharacterData *character = (*it).second;
if (character->getDatabaseID() >= 0)
{
updateCharacter(character);
@@ -1541,7 +1542,7 @@ std::map<int, Guild*> Storage::getGuildList()
std::list<std::pair<int, int> >::const_iterator i, i_end;
for (i = members.begin(), i_end = members.end(); i != i_end; ++i)
{
- Character *character = getCharacter((*i).first, 0);
+ CharacterData *character = getCharacter((*i).first, 0);
if (character)
{
character->addGuild(it->second->getName());
@@ -1844,7 +1845,7 @@ void Storage::delCharacter(int charId) const
}
}
-void Storage::delCharacter(Character *character) const
+void Storage::delCharacter(CharacterData *character) const
{
delCharacter(character->getDatabaseID());
}
@@ -1999,8 +2000,8 @@ Post *Storage::getStoredPost(int playerId)
for (unsigned i = 0; i < post.rows(); i++ )
{
// Load sender and receiver
- Character *sender = getCharacter(toUint(post(i, 1)), 0);
- Character *receiver = getCharacter(toUint(post(i, 2)), 0);
+ CharacterData *sender = getCharacter(toUint(post(i, 1)), 0);
+ CharacterData *receiver = getCharacter(toUint(post(i, 2)), 0);
Letter *letter = new Letter(toUint( post(0,3) ), sender, receiver);
diff --git a/src/account-server/storage.h b/src/account-server/storage.h
index 06645c69..fbc4cd8c 100644
--- a/src/account-server/storage.h
+++ b/src/account-server/storage.h
@@ -30,7 +30,7 @@
#include "common/transaction.h"
class Account;
-class Character;
+class CharacterData;
class ChatChannel;
class FloorItem;
class Guild;
@@ -83,7 +83,7 @@ class Storage
*
* @return the character associated to the Id.
*/
- Character *getCharacter(int id, Account *owner);
+ CharacterData *getCharacter(int id, Account *owner);
/**
* Gets a character by character name.
@@ -92,7 +92,7 @@ class Storage
*
* @return the character associated to the name
*/
- Character *getCharacter(const std::string &name);
+ CharacterData *getCharacter(const std::string &name);
/**
* Gets the id of a character by its name.
@@ -194,7 +194,7 @@ class Storage
*
* @param character character object.
*/
- void delCharacter(Character *character) const;
+ void delCharacter(CharacterData *character) const;
/**
* Removes expired bans from accounts
@@ -238,7 +238,7 @@ class Storage
*
* @return true on success
*/
- bool updateCharacter(Character *ptr);
+ bool updateCharacter(CharacterData *ptr);
/**
* Add a new guild.
@@ -475,7 +475,7 @@ class Storage
*
* @return the character found by the query.
*/
- Character *getCharacterBySQL(Account *owner);
+ CharacterData *getCharacterBySQL(Account *owner);
/**
* Fix improper character slots