From 717ebd24d5419ad79ec215c2d28256268a3fa315 Mon Sep 17 00:00:00 2001 From: Stefan Dombrowski Date: Wed, 30 Mar 2011 00:37:05 +0200 Subject: Fixing zombies in char select dialog How to reproduce the bug: * Delete a character. * Create a new character in another slot. * Now the deleted character reappears. Also fixing handling of error messages from character select response. This resolves http://bugs.manasource.org/view.php?id=322 Reviewed-by: Jaxad0127, VUT --- src/net/manaserv/charhandler.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src/net') diff --git a/src/net/manaserv/charhandler.cpp b/src/net/manaserv/charhandler.cpp index 961b364a..79f3b35a 100644 --- a/src/net/manaserv/charhandler.cpp +++ b/src/net/manaserv/charhandler.cpp @@ -196,6 +196,14 @@ void CharHandler::handleCharacterDeleteResponse(Net::MessageIn &msg) if (errMsg == ERRMSG_OK) { // Character deletion successful + for (unsigned i = 0; i < mCachedCharacterInfos.size(); ++i) + { + if (mCachedCharacterInfos[i].slot == mSelectedCharacter->slot) + { + mCachedCharacterInfos.erase(mCachedCharacterInfos.begin() + i); + break; + } + } delete mSelectedCharacter; mCharacters.remove(mSelectedCharacter); updateCharSelectDialog(); @@ -248,9 +256,20 @@ void CharHandler::handleCharacterSelectResponse(Net::MessageIn &msg) Client::setState(STATE_CONNECT_GAME); } - else if (errMsg == ERRMSG_FAILURE) + else { - errorMessage = _("No gameservers are available."); + switch (errMsg) + { + case ERRMSG_FAILURE: + errorMessage = _("No gameservers are available."); + break; + case ERRMSG_INVALID_ARGUMENT: + errorMessage = _("Invalid character slot selected."); + break; + default: + errorMessage = strprintf(_("Unhandled character select " + "error message %i."), errMsg); + } delete_all(mCharacters); mCharacters.clear(); Client::setState(STATE_ERROR); -- cgit v1.2.3-70-g09d2