summaryrefslogtreecommitdiff
path: root/src/progs
diff options
context:
space:
mode:
authorasuratva <asuratva@proton.me>2025-07-04 15:38:17 +0000
committerFedja Beader <fedja@protonmail.ch>2025-07-04 15:38:17 +0000
commitffe75331a1a61331778206b5943a9847aaa0376b (patch)
tree6acee67cb4ba7792a2a9eb71ebfa3bba755827d8 /src/progs
parentba796ccc028f78e36a6e07249698541d8cc411de (diff)
downloadplus-master.tar.gz
plus-master.tar.bz2
plus-master.tar.xz
plus-master.zip
Fix 'Switch' Button in Character Selection to automatically become 'World Selection' or 'Logout'HEADmaster
This is a suggested fix for !188 Squashed with: * Added new state SWITCH_WORLD. Now everything works correctly. * As a temporary fix, have 'Change Login' in World Selection Dialog do SWITCH_SERVER instead of SWITCH_LOGIN * Move 'Switch World' logic from charselectdialog to SWITCH_LOGIN state * reverting previous commit. State needs to be LOGIN_ATTEMPT, not LOGIN. * Have 'Switch World' set client state to LOGIN instead of LOGIN_ATTEMPT Not strictly necesssary, but LOGIN provides some extra sanity checks before switch to LOGIN_ATTEMPT * Got it working! Purely from client side, but horribly hacky solution! * fixing linter issue. Hopefully it works, otherwise might need to make an extra commit **** mana/verse!191 Reviewed-by: Fedja Beader <fedja@protonmail.ch>
Diffstat (limited to 'src/progs')
-rw-r--r--src/progs/manaverse/client.cpp28
1 files changed, 28 insertions, 0 deletions
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");