summaryrefslogtreecommitdiff
path: root/src/account-server/account.cpp
diff options
context:
space:
mode:
authorYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2010-12-29 07:41:49 +0100
committerYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2010-12-29 07:41:49 +0100
commit5f03e73484a50c9689956b32ef97630b56d2a00d (patch)
treeca6d3d7467d4582a2f64be4a45c056f55642fd17 /src/account-server/account.cpp
parent4ead8e0b6af924132a6fb227325a868db0df335c (diff)
downloadmanaserv-5f03e73484a50c9689956b32ef97630b56d2a00d.tar.gz
manaserv-5f03e73484a50c9689956b32ef97630b56d2a00d.tar.bz2
manaserv-5f03e73484a50c9689956b32ef97630b56d2a00d.tar.xz
manaserv-5f03e73484a50c9689956b32ef97630b56d2a00d.zip
Made the server handle properly the characters slots.
I turned the vector storing character data into a map, keeping the character's slot. Fixed a memleak along the way. Reviewed-by: Crush.
Diffstat (limited to 'src/account-server/account.cpp')
-rw-r--r--src/account-server/account.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/account-server/account.cpp b/src/account-server/account.cpp
index 58c1f6ac..7f630590 100644
--- a/src/account-server/account.cpp
+++ b/src/account-server/account.cpp
@@ -27,10 +27,19 @@ Account::~Account()
for (Characters::iterator i = mCharacters.begin(),
i_end = mCharacters.end(); i != i_end; ++i)
{
- delete *i;
+ delete (*i).second;
}
}
+bool Account::isSlotEmpty(unsigned int slot)
+{
+ Characters::iterator i = mCharacters.find(slot);
+ if (i != mCharacters.end())
+ return false;
+ else
+ return true;
+}
+
void Account::setCharacters(const Characters& characters)
{
mCharacters = characters;
@@ -38,12 +47,24 @@ void Account::setCharacters(const Characters& characters)
void Account::addCharacter(Character *character)
{
- mCharacters.push_back(character);
+ unsigned int slot = (unsigned int) character->getCharacterSlot();
+ assert(isSlotEmpty(slot));
+
+ mCharacters[slot] = character;
}
-void Account::delCharacter(int i)
+void Account::delCharacter(unsigned int slot)
{
- mCharacters.erase(mCharacters.begin() + i);
+ for (Characters::iterator iter = mCharacters.begin(),
+ iter_end = mCharacters.end(); iter != iter_end; ++iter)
+ {
+ if ((*iter).second->getCharacterSlot() == slot)
+ {
+ delete (*iter).second;
+ (*iter).second = 0;
+ mCharacters.erase(iter);
+ }
+ }
}
void Account::setID(int id)