From 3bea3e2804fbec4c7697d29af46c6330b1ca9b92 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 30 Aug 2014 01:46:52 +0300 Subject: Remove additional parameters from processCharMapInfo function. --- src/net/tmwa/charserverhandler.cpp | 39 +++++++++++++++++++++++++++++++++++++- src/net/tmwa/charserverhandler.h | 2 ++ 2 files changed, 40 insertions(+), 1 deletion(-) (limited to 'src/net/tmwa') 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(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, -- cgit v1.2.3-70-g09d2