summaryrefslogtreecommitdiff
path: root/src/net/tmwa
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/tmwa')
-rw-r--r--src/net/tmwa/charserverhandler.cpp39
-rw-r--r--src/net/tmwa/charserverhandler.h2
2 files changed, 40 insertions, 1 deletions
diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp
index ba90556fa..b8bdf4842 100644
--- a/src/net/tmwa/charserverhandler.cpp
+++ b/src/net/tmwa/charserverhandler.cpp
@@ -24,6 +24,7 @@
#include "client.h"
#include "configuration.h"
+#include "settings.h"
#include "being/attributes.h"
@@ -32,6 +33,7 @@
#include "net/net.h"
#include "net/tmwa/attrs.h"
+#include "net/tmwa/gamehandler.h"
#include "net/tmwa/loginhandler.h"
#include "net/tmwa/messageout.h"
#include "net/tmwa/network.h"
@@ -107,7 +109,7 @@ void CharServerHandler::handleMessage(Net::MessageIn &msg)
break;
case SMSG_CHAR_MAP_INFO:
- processCharMapInfo(msg, mNetwork, mapServer);
+ processCharMapInfo(msg);
break;
case SMSG_CHANGE_MAP_SERVER:
@@ -350,4 +352,39 @@ void CharServerHandler::processCharLogin(Net::MessageIn &msg)
BLOCK_END("CharServerHandler::processCharLogin")
}
+void CharServerHandler::processCharMapInfo(Net::MessageIn &restrict msg)
+{
+ Network *const network = mNetwork;
+ ServerInfo &server = mapServer;
+ BLOCK_START("CharServerHandler::processCharMapInfo")
+// msg.skip(4); // CharID, must be the same as localPlayer->charID
+ PlayerInfo::setCharId(msg.readInt32());
+ GameHandler *const gh = static_cast<GameHandler*>(Net::getGameHandler());
+ gh->setMap(msg.readString(16));
+ if (config.getBoolValue("usePersistentIP") || settings.persistentIp)
+ {
+ msg.readInt32();
+ server.hostname = settings.serverName;
+ }
+ else
+ {
+ server.hostname = ipToString(msg.readInt32());
+ }
+ server.port = msg.readInt16();
+
+ // Prevent the selected local player from being deleted
+ localPlayer = mSelectedCharacter->dummy;
+ PlayerInfo::setBackend(mSelectedCharacter->data);
+
+ mSelectedCharacter->dummy = nullptr;
+
+ Net::getCharServerHandler()->clear();
+ updateCharSelectDialog();
+
+ if (network)
+ network->disconnect();
+ client->setState(STATE_CONNECT_GAME);
+ BLOCK_END("CharServerHandler::processCharMapInfo")
+}
+
} // namespace TmwAthena
diff --git a/src/net/tmwa/charserverhandler.h b/src/net/tmwa/charserverhandler.h
index c2f6596be..8910b784c 100644
--- a/src/net/tmwa/charserverhandler.h
+++ b/src/net/tmwa/charserverhandler.h
@@ -59,6 +59,8 @@ class CharServerHandler final : public MessageHandler,
void processCharLogin(Net::MessageIn &msg);
+ void processCharMapInfo(Net::MessageIn &restrict msg);
+
protected:
void readPlayerData(Net::MessageIn &msg,
Net::Character *const character,