diff options
author | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2010-12-29 07:41:49 +0100 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2010-12-29 07:41:49 +0100 |
commit | 5f03e73484a50c9689956b32ef97630b56d2a00d (patch) | |
tree | ca6d3d7467d4582a2f64be4a45c056f55642fd17 /src/account-server/account.cpp | |
parent | 4ead8e0b6af924132a6fb227325a868db0df335c (diff) | |
download | manaserv-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.cpp | 29 |
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) |