summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/enums/state.h1
-rw-r--r--src/gui/windows/charselectdialog.cpp13
-rw-r--r--src/net/ea/loginhandler.cpp2
-rw-r--r--src/progs/manaverse/client.cpp28
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");