diff options
-rw-r--r-- | src/enums/state.h | 1 | ||||
-rw-r--r-- | src/gui/windows/charselectdialog.cpp | 13 | ||||
-rw-r--r-- | src/net/ea/loginhandler.cpp | 2 | ||||
-rw-r--r-- | src/progs/manaverse/client.cpp | 28 |
4 files changed, 39 insertions, 5 deletions
diff --git a/src/enums/state.h b/src/enums/state.h index b24d40f8a..5471897c8 100644 --- a/src/enums/state.h +++ b/src/enums/state.h @@ -61,6 +61,7 @@ enumStart(State) CHANGEEMAIL_SUCCESS, SWITCH_SERVER, SWITCH_LOGIN, + SWITCH_WORLD, // Technically 'Switch World or Logout' SWITCH_CHARACTER, // 30 LOGOUT_ATTEMPT, WAIT, diff --git a/src/gui/windows/charselectdialog.cpp b/src/gui/windows/charselectdialog.cpp index 3ee5e5218..c7a2e0eef 100644 --- a/src/gui/windows/charselectdialog.cpp +++ b/src/gui/windows/charselectdialog.cpp @@ -47,6 +47,7 @@ #include "net/character.h" #include "net/charserverhandler.h" #include "net/logindata.h" +#include "net/loginhandler.h" #ifdef TMWA_SUPPORT #include "net/net.h" #endif // TMWA_SUPPORT @@ -71,9 +72,13 @@ CharSelectDialog::CharSelectDialog(LoginData &data) : ActionListener(), KeyListener(), mLoginData(&data), - // TRANSLATORS: char select dialog. button. - mSwitchLoginButton(new Button(this, _("Switch"), "switch", - BUTTON_SKIN, this)), + mSwitchLoginButton(new Button(this, + (loginHandler != nullptr && loginHandler->getWorlds().size() > 1) + // TRANSLATORS: char select dialog. button. + ? _("Switch World") : _("Logout"), + "switch", + BUTTON_SKIN, + this)), // TRANSLATORS: char select dialog. button. mChangePasswordButton(new Button(this, _("Password"), "change_password", BUTTON_SKIN, this)), @@ -620,7 +625,7 @@ bool CharSelectDialog::selectByName(const std::string &name, void CharSelectDialog::close() { - client->setState(State::SWITCH_LOGIN); + client->setState(State::SWITCH_WORLD); Window::close(); } diff --git a/src/net/ea/loginhandler.cpp b/src/net/ea/loginhandler.cpp index f6fb6cc9f..67df55f64 100644 --- a/src/net/ea/loginhandler.cpp +++ b/src/net/ea/loginhandler.cpp @@ -170,7 +170,7 @@ void LoginHandler::loginOrRegister(LoginData *const data) const serverConfig.setValue("remember", remember); // Clear the password, avoids auto login when returning to login - data->password.clear(); + //data->password.clear(); } void LoginHandler::logout() const diff --git a/src/progs/manaverse/client.cpp b/src/progs/manaverse/client.cpp index eb299dcbe..980ffdc91 100644 --- a/src/progs/manaverse/client.cpp +++ b/src/progs/manaverse/client.cpp @@ -1580,6 +1580,34 @@ int Client::gameExec() BLOCK_END("Client::gameExec State::SWITCH_SERVER") break; + case State::SWITCH_WORLD: + BLOCK_START("Client::gameExec State::SWITCH_WORLD") + logger->log1("State: SWITCH WORLD"); + + if (loginHandler != nullptr) + { + loginHandler->logout(); + loginHandler->disconnect(); + } + if (gameHandler != nullptr) + gameHandler->disconnect(); + if (loginHandler != nullptr) + loginHandler->connect(); + + if (loginHandler != nullptr && + loginHandler->getWorlds().size() > 1) + { + mState = State::LOGIN_ATTEMPT; + } + else + { + settings.login.clear(); + WindowManager::updateTitle(); + mState = State::LOGIN; + } + BLOCK_END("Client::gameExec State::SWITCH_WORLD") + break; + case State::SWITCH_LOGIN: BLOCK_START("Client::gameExec State::SWITCH_LOGIN") logger->log1("State: SWITCH LOGIN"); |