summaryrefslogtreecommitdiff
path: root/src/net/eathena/buysellhandler.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-06-24 19:34:08 +0300
committerAndrei Karas <akaras@inbox.ru>2012-06-24 21:41:20 +0300
commit3b537e109df901df3da4c706f827c8d3d39a7238 (patch)
treeae5a83f71954aaeb45ce3f8d609e6f4a8dc0678c /src/net/eathena/buysellhandler.cpp
parent4ef35e9ef757da1db724c5d784048601144c934c (diff)
downloadmanaverse-3b537e109df901df3da4c706f827c8d3d39a7238.tar.gz
manaverse-3b537e109df901df3da4c706f827c8d3d39a7238.tar.bz2
manaverse-3b537e109df901df3da4c706f827c8d3d39a7238.tar.xz
manaverse-3b537e109df901df3da4c706f827c8d3d39a7238.zip
Add basic support for eathena stable.
Can register, create char, connect to map server and get map info.
Diffstat (limited to 'src/net/eathena/buysellhandler.cpp')
-rw-r--r--src/net/eathena/buysellhandler.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/net/eathena/buysellhandler.cpp b/src/net/eathena/buysellhandler.cpp
new file mode 100644
index 000000000..4526f226d
--- /dev/null
+++ b/src/net/eathena/buysellhandler.cpp
@@ -0,0 +1,148 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2012 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 "net/eathena/buysellhandler.h"
+
+#include "actorspritemanager.h"
+#include "configuration.h"
+#include "depricatedevent.h"
+#include "inventory.h"
+#include "item.h"
+#include "localplayer.h"
+#include "playerinfo.h"
+#include "shopitem.h"
+
+#include "gui/buydialog.h"
+#include "gui/buyselldialog.h"
+#include "gui/selldialog.h"
+#include "gui/shopwindow.h"
+
+#include "gui/widgets/chattab.h"
+
+#include "net/chathandler.h"
+#include "net/messagein.h"
+#include "net/net.h"
+
+#include "net/ea/eaprotocol.h"
+
+#include "net/eathena/chathandler.h"
+#include "net/eathena/protocol.h"
+
+#include "utils/gettext.h"
+
+#include "debug.h"
+
+extern Net::BuySellHandler *buySellHandler;
+
+namespace EAthena
+{
+
+BuySellHandler::BuySellHandler()
+{
+ static const uint16_t _messages[] =
+ {
+ SMSG_NPC_BUY_SELL_CHOICE,
+ SMSG_NPC_BUY,
+ SMSG_NPC_SELL,
+ SMSG_NPC_BUY_RESPONSE,
+ SMSG_NPC_SELL_RESPONSE,
+ 0
+ };
+ handledMessages = _messages;
+ buySellHandler = this;
+ mBuyDialog = nullptr;
+}
+
+void BuySellHandler::handleMessage(Net::MessageIn &msg)
+{
+ switch (msg.getId())
+ {
+ case SMSG_NPC_BUY_SELL_CHOICE:
+ processNpcBuySellChoice(msg);
+ break;
+
+ case SMSG_NPC_BUY:
+ processNpcBuy(msg);
+ break;
+
+ case SMSG_NPC_SELL:
+ processNpcSell(msg, INVENTORY_OFFSET);
+ break;
+
+ case SMSG_NPC_BUY_RESPONSE:
+ processNpcBuyResponse(msg);
+ break;
+
+ case SMSG_NPC_SELL_RESPONSE:
+ processNpcSellResponse(msg);
+ break;
+
+ default:
+ break;
+ }
+
+}
+
+void BuySellHandler::processNpcBuy(Net::MessageIn &msg)
+{
+ msg.readInt16(); // length
+ int sz = 11;
+ if (serverVersion > 0)
+ sz += 1;
+ int n_items = (msg.getLength() - 4) / sz;
+ mBuyDialog = new BuyDialog(mNpcId);
+ mBuyDialog->setMoney(PlayerInfo::getAttribute(MONEY));
+
+ for (int k = 0; k < n_items; k++)
+ {
+ int value = msg.readInt32();
+ msg.readInt32(); // DCvalue
+ msg.readInt8(); // type
+ int itemId = msg.readInt16();
+ unsigned char color = 1;
+ if (serverVersion > 0)
+ color = msg.readInt8();
+ mBuyDialog->addItem(itemId, color, 0, value);
+ }
+}
+
+void BuySellHandler::processNpcSellResponse(Net::MessageIn &msg)
+{
+ switch (msg.readInt8())
+ {
+ case 0:
+ SERVER_NOTICE(_("Thanks for selling."))
+ break;
+ case 1:
+ default:
+ SERVER_NOTICE(_("Unable to sell."))
+ break;
+ case 2:
+ SERVER_NOTICE(_("Unable to sell while trading."))
+ break;
+ case 3:
+ SERVER_NOTICE(_("Unable to sell unsellable item."))
+ break;
+ }
+}
+
+} // namespace EAthena