From c674793a8657aa099c9637c92f8696f230c327ca Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 10 Jan 2011 00:07:12 +0200 Subject: Add persistent ip as connection option. Usefull is player using some kind of port mapping. --- src/defaults.cpp | 1 + src/gui/serverdialog.cpp | 18 ++++++++++++------ src/gui/serverdialog.h | 2 ++ src/net/tmwa/charserverhandler.cpp | 10 +++++++++- src/net/tmwa/loginhandler.cpp | 5 ++++- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/defaults.cpp b/src/defaults.cpp index 190c1816c..da5aa4e84 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -190,6 +190,7 @@ DefaultsData* getConfigDefaults() AddDEF(configData, "showBattleEvents", false); AddDEF(configData, "showMobHP", true); AddDEF(configData, "showOwnHP", true); + AddDEF(configData, "usePersistentIP", false); return configData; } diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp index c7e1d0f94..3556efc35 100644 --- a/src/gui/serverdialog.cpp +++ b/src/gui/serverdialog.cpp @@ -211,7 +211,8 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): mDownload(0), mDownloadProgress(-1.0f), mServers(ServerInfos()), - mServerInfo(serverInfo) + mServerInfo(serverInfo), + mPersistentIPCheckBox(false) { if (isSafeMode) setCaption("Choose Your Server *** SAFE MODE ***"); @@ -223,6 +224,9 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): Label *typeLabel = new Label(_("Server type:")); mServerNameField = new TextField(mServerInfo->hostname); mPortField = new TextField(toString(mServerInfo->port)); + mPersistentIPCheckBox = new CheckBox(_("Use same ip for game sub servers"), + config.getBoolValue("usePersistentIP"), + this, "persitent ip"); loadCustomServers(); @@ -264,11 +268,12 @@ ServerDialog::ServerDialog(ServerInfo *serverInfo, const std::string &dir): place(1, 2, mTypeField, 5).setPadding(3); place(0, 3, usedScroll, 6, 5).setPadding(3); place(0, 8, mDescription, 6); - place(0, 9, mManualEntryButton); - place(1, 9, mDeleteButton); - place(2, 9, mLoadButton); - place(4, 9, mQuitButton); - place(5, 9, mConnectButton); + place(0, 9, mPersistentIPCheckBox, 6); + place(0, 10, mManualEntryButton); + place(1, 10, mDeleteButton); + place(2, 10, mLoadButton); + place(4, 10, mQuitButton); + place(5, 10, mConnectButton); // Make sure the list has enough height getLayout().setRowHeight(3, 80); @@ -390,6 +395,7 @@ void ServerDialog::action(const gcn::ActionEvent &event) LoginDialog::savedPassword = ""; } + config.setValue("usePersistentIP", mPersistentIPCheckBox->isSelected()); Client::setState(STATE_CONNECT_SERVER); } } diff --git a/src/gui/serverdialog.h b/src/gui/serverdialog.h index b9a67e246..e16dd09b5 100644 --- a/src/gui/serverdialog.h +++ b/src/gui/serverdialog.h @@ -23,6 +23,7 @@ #define SERVERDIALOG_H #include "gui/widgets/window.h" +#include "gui/widgets/checkbox.h" #include "net/download.h" #include "net/serverinfo.h" @@ -199,6 +200,7 @@ class ServerDialog : public Window, ServerInfos mServers; ServerInfo *mServerInfo; + CheckBox *mPersistentIPCheckBox; }; #endif diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp index e500f667b..4bf9df8b3 100644 --- a/src/net/tmwa/charserverhandler.cpp +++ b/src/net/tmwa/charserverhandler.cpp @@ -160,7 +160,15 @@ void CharServerHandler::handleMessage(Net::MessageIn &msg) PlayerInfo::setCharId(msg.readInt32()); GameHandler *gh = static_cast(Net::getGameHandler()); gh->setMap(msg.readString(16)); - mapServer.hostname = ipToString(msg.readInt32()); + if (config.getBoolValue("usePersistentIP")) + { + msg.readInt32(); + mapServer.hostname = Client::getServerName(); + } + else + { + mapServer.hostname = ipToString(msg.readInt32()); + } mapServer.port = msg.readInt16(); // Prevent the selected local player from being deleted diff --git a/src/net/tmwa/loginhandler.cpp b/src/net/tmwa/loginhandler.cpp index 73fec1322..05a28513c 100644 --- a/src/net/tmwa/loginhandler.cpp +++ b/src/net/tmwa/loginhandler.cpp @@ -288,7 +288,10 @@ void LoginHandler::chooseServer(unsigned int server) return; charServer.clear(); - charServer.hostname = ipToString(mWorlds[server]->address); + if (config.getBoolValue("usePersistentIP")) + charServer.hostname = Client::getServerName(); + else + charServer.hostname = ipToString(mWorlds[server]->address); charServer.port = mWorlds[server]->port; Client::setState(STATE_UPDATE); -- cgit v1.2.3-70-g09d2