diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/client.cpp | 1 | ||||
-rw-r--r-- | src/gui/windows/charselectdialog.cpp | 10 | ||||
-rw-r--r-- | src/listeners/pincodelistener.cpp | 37 | ||||
-rw-r--r-- | src/listeners/pincodelistener.h | 36 | ||||
-rw-r--r-- | src/net/charserverhandler.h | 2 | ||||
-rw-r--r-- | src/net/eathena/charserverhandler.cpp | 18 | ||||
-rw-r--r-- | src/net/eathena/charserverhandler.h | 7 | ||||
-rw-r--r-- | src/net/tmwa/charserverhandler.h | 3 |
10 files changed, 114 insertions, 4 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 16f20e6c3..e51b6b274 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1065,6 +1065,8 @@ SET(SRCS events/mouseeventtype.h listeners/mouselistener.h listeners/openurllistener.h + listeners/pincodelistener.cpp + listeners/pincodelistener.h listeners/playerdeathlistener.h listeners/playerlistener.cpp listeners/playerlistener.h diff --git a/src/Makefile.am b/src/Makefile.am index 0d93d6be8..b0e559a49 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -203,6 +203,8 @@ manaplus_SOURCES += events/actionevent.h \ events/mouseeventtype.h \ listeners/mouselistener.h \ listeners/openurllistener.h \ + listeners/pincodelistener.cpp \ + listeners/pincodelistener.h \ listeners/playerdeathlistener.h \ listeners/playerlistener.cpp \ listeners/playerlistener.h \ diff --git a/src/client.cpp b/src/client.cpp index a816c8f1c..53115528f 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -972,6 +972,7 @@ int Client::gameExec() // Get rid of the dialog of the previous state delete2(mCurrentDialog); + // State has changed, while the quitDialog was active, it might // not be correct anymore if (mQuitDialog) diff --git a/src/gui/windows/charselectdialog.cpp b/src/gui/windows/charselectdialog.cpp index 134aa2712..2d45e47ca 100644 --- a/src/gui/windows/charselectdialog.cpp +++ b/src/gui/windows/charselectdialog.cpp @@ -32,10 +32,13 @@ #include "being/attributes.h" +#include "listeners/pincodelistener.h" + #include "gui/dialogtype.h" #include "gui/windows/charcreatedialog.h" #include "gui/windows/chardeleteconfirm.h" +#include "gui/windows/editdialog.h" #include "gui/windows/logindialog.h" #include "gui/windows/okdialog.h" #include "gui/windows/textdialog.h" @@ -177,6 +180,13 @@ void CharSelectDialog::postInit() { setVisible(true); requestFocus(); + if (Net::getCharServerHandler()->isNeedCreatePin()) + { + EditDialog *const dialog = new EditDialog( + _("Please set new pincode"), "", "OK"); + dialog->postInit(); + dialog->addActionListener(&pincodeListener); + } } void CharSelectDialog::action(const ActionEvent &event) diff --git a/src/listeners/pincodelistener.cpp b/src/listeners/pincodelistener.cpp new file mode 100644 index 000000000..7c9c20b71 --- /dev/null +++ b/src/listeners/pincodelistener.cpp @@ -0,0 +1,37 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "listeners/pincodelistener.h" + +#include "gui/windows/editdialog.h" + +#include "debug.h" + +PincodeListener pincodeListener; + +void PincodeListener::action(const ActionEvent &event) +{ + EditDialog *const dialog = dynamic_cast<EditDialog*>(event.getSource()); + if (dialog) + { + const std::string pincode = dialog->getMsg(); + // here need send pin code to server + } +} diff --git a/src/listeners/pincodelistener.h b/src/listeners/pincodelistener.h new file mode 100644 index 000000000..3045db549 --- /dev/null +++ b/src/listeners/pincodelistener.h @@ -0,0 +1,36 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef LISTENERS_PINCODELISTENER_H +#define LISTENERS_PINCODELISTENER_H + +#include "listeners/actionlistener.h" + +#include "localconsts.h" + +class PincodeListener final : public ActionListener +{ + public: + void action(const ActionEvent &event) override final; +}; + +extern PincodeListener pincodeListener; + +#endif // LISTENERS_PINCODELISTENER_H diff --git a/src/net/charserverhandler.h b/src/net/charserverhandler.h index 8f78905c6..6a0125e1d 100644 --- a/src/net/charserverhandler.h +++ b/src/net/charserverhandler.h @@ -73,6 +73,8 @@ class CharServerHandler notfinal virtual void clear() = 0; + virtual bool isNeedCreatePin() const = 0; + protected: CharServerHandler() : mCharacters(), diff --git a/src/net/eathena/charserverhandler.cpp b/src/net/eathena/charserverhandler.cpp index af3c012dd..7d6e2e74c 100644 --- a/src/net/eathena/charserverhandler.cpp +++ b/src/net/eathena/charserverhandler.cpp @@ -28,6 +28,8 @@ #include "being/attributes.h" +#include "gui/windows/editdialog.h" + #include "net/character.h" #include "net/logindata.h" #include "net/net.h" @@ -45,6 +47,9 @@ #include "resources/db/itemdb.h" #include "utils/dtor.h" +#include "utils/gettext.h" + +#include "listeners/pincodelistener.h" #include "debug.h" @@ -58,7 +63,9 @@ extern ServerInfo mapServer; CharServerHandler::CharServerHandler() : MessageHandler(), - Ea::CharServerHandler() + Ea::CharServerHandler(), + mPinSeed(0), + mNeedCreatePin(false) { static const uint16_t _messages[] = { @@ -378,7 +385,7 @@ void CharServerHandler::processChangeMapServer(Net::MessageIn &msg) void CharServerHandler::processPincodeStatus(Net::MessageIn &msg) { - msg.readInt32("pincode seed"); + const uint32_t seed = msg.readInt32("pincode seed"); msg.readInt32("account id"); const uint16_t state = static_cast<uint16_t>(msg.readInt16("state")); switch (state) @@ -388,11 +395,14 @@ void CharServerHandler::processPincodeStatus(Net::MessageIn &msg) case 1: // ask for pin break; case 2: // create new pin + case 4: // create new pin? + { + mPinSeed = seed; + mNeedCreatePin = true; break; + } case 3: // pin must be changed break; - case 4: // create new pin? - break; case 5: // client show error? break; case 6: // Unable to use your KSSN number diff --git a/src/net/eathena/charserverhandler.h b/src/net/eathena/charserverhandler.h index 9a58a50e7..e647a6d60 100644 --- a/src/net/eathena/charserverhandler.h +++ b/src/net/eathena/charserverhandler.h @@ -63,12 +63,19 @@ class CharServerHandler final : public MessageHandler, void processChangeMapServer(Net::MessageIn &msg); + bool isNeedCreatePin() const A_WARN_UNUSED + { return mNeedCreatePin; } + protected: void readPlayerData(Net::MessageIn &msg, Net::Character *const character, const bool) const override final; void processPincodeStatus(Net::MessageIn &msg); + + private: + uint32_t mPinSeed; + bool mNeedCreatePin; }; } // namespace EAthena diff --git a/src/net/tmwa/charserverhandler.h b/src/net/tmwa/charserverhandler.h index 062360800..35a4585e3 100644 --- a/src/net/tmwa/charserverhandler.h +++ b/src/net/tmwa/charserverhandler.h @@ -63,6 +63,9 @@ class CharServerHandler final : public MessageHandler, void processChangeMapServer(Net::MessageIn &msg); + bool isNeedCreatePin() const + { return false; } + protected: void readPlayerData(Net::MessageIn &msg, Net::Character *const character, |