diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-08-24 22:18:54 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-08-24 22:18:54 +0300 |
commit | 7ac081450de48581d6141c90f504130c42cb5341 (patch) | |
tree | f9d3f13e38621553ac72566405801db1744cd3bc /src | |
parent | 699835e4664fd4e22d7178b40897e0fd4b366a93 (diff) | |
download | manaverse-7ac081450de48581d6141c90f504130c42cb5341.tar.gz manaverse-7ac081450de48581d6141c90f504130c42cb5341.tar.bz2 manaverse-7ac081450de48581d6141c90f504130c42cb5341.tar.xz manaverse-7ac081450de48581d6141c90f504130c42cb5341.zip |
Move receive code from buysellhandler into separate file.
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/Makefile.am | 6 | ||||
-rw-r--r-- | src/net/ea/buysellhandler.cpp | 77 | ||||
-rw-r--r-- | src/net/ea/buysellhandler.h | 10 | ||||
-rw-r--r-- | src/net/ea/buysellrecv.cpp | 123 | ||||
-rw-r--r-- | src/net/ea/buysellrecv.h | 43 | ||||
-rw-r--r-- | src/net/eathena/buysellhandler.cpp | 55 | ||||
-rw-r--r-- | src/net/eathena/buysellhandler.h | 5 | ||||
-rw-r--r-- | src/net/eathena/buysellrecv.cpp | 87 | ||||
-rw-r--r-- | src/net/eathena/buysellrecv.h | 39 | ||||
-rw-r--r-- | src/net/tmwa/buysellhandler.cpp | 54 | ||||
-rw-r--r-- | src/net/tmwa/buysellhandler.h | 5 | ||||
-rw-r--r-- | src/net/tmwa/buysellrecv.cpp | 92 | ||||
-rw-r--r-- | src/net/tmwa/buysellrecv.h | 39 |
14 files changed, 456 insertions, 185 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f3619eaa9..3a4ae9271 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1349,6 +1349,8 @@ SET(SRCS_EVOL net/ea/beinghandler.h net/ea/buysellhandler.cpp net/ea/buysellhandler.h + net/ea/buysellrecv.cpp + net/ea/buysellrecv.h net/ea/charserverhandler.cpp net/ea/charserverhandler.h net/ea/chathandler.cpp @@ -1393,6 +1395,8 @@ SET(SRCS_TMWA net/tmwa/beinghandler.h net/tmwa/buysellhandler.cpp net/tmwa/buysellhandler.h + net/tmwa/buysellrecv.cpp + net/tmwa/buysellrecv.h net/tmwa/charserverhandler.cpp net/tmwa/charserverhandler.h net/tmwa/chathandler.cpp @@ -1547,6 +1551,8 @@ SET(SRCS_EATHENA net/eathena/beingtype.h net/eathena/buysellhandler.cpp net/eathena/buysellhandler.h + net/eathena/buysellrecv.cpp + net/eathena/buysellrecv.h net/eathena/charserverhandler.cpp net/eathena/charserverhandler.h net/eathena/chathandler.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 810e2529f..d4943398d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1191,6 +1191,8 @@ manaplus_SOURCES += main.cpp \ net/ea/beinghandler.h \ net/ea/buysellhandler.cpp \ net/ea/buysellhandler.h \ + net/ea/buysellrecv.cpp \ + net/ea/buysellrecv.h \ net/ea/charserverhandler.cpp \ net/ea/charserverhandler.h \ net/ea/chathandler.cpp \ @@ -1236,6 +1238,8 @@ manaplus_SOURCES += \ net/tmwa/beinghandler.h \ net/tmwa/buysellhandler.cpp \ net/tmwa/buysellhandler.h \ + net/tmwa/buysellrecv.cpp \ + net/tmwa/buysellrecv.h \ net/tmwa/charserverhandler.cpp \ net/tmwa/charserverhandler.h \ net/tmwa/chathandler.cpp \ @@ -1393,6 +1397,8 @@ manaplus_SOURCES += gui/windows/bankwindow.cpp \ net/eathena/beingtype.h \ net/eathena/buysellhandler.cpp \ net/eathena/buysellhandler.h \ + net/eathena/buysellrecv.cpp \ + net/eathena/buysellrecv.h \ net/eathena/charserverhandler.cpp \ net/eathena/charserverhandler.h \ net/eathena/chathandler.cpp \ diff --git a/src/net/ea/buysellhandler.cpp b/src/net/ea/buysellhandler.cpp index a69d04738..0b8734d49 100644 --- a/src/net/ea/buysellhandler.cpp +++ b/src/net/ea/buysellhandler.cpp @@ -35,6 +35,7 @@ #include "gui/widgets/createwidget.h" +#include "net/ea/buysellrecv.h" #include "net/ea/eaprotocol.h" #include "debug.h" @@ -42,82 +43,10 @@ namespace Ea { -BeingId BuySellHandler::mNpcId = BeingId_zero; -BuyDialog *BuySellHandler::mBuyDialog = nullptr; - BuySellHandler::BuySellHandler() { - mNpcId = BeingId_zero; - mBuyDialog = nullptr; -} - -void BuySellHandler::processNpcBuySellChoice(Net::MessageIn &msg) -{ - if (!BuySellDialog::isActive()) - { - mNpcId = msg.readBeingId("npc id"); - CREATEWIDGET(BuySellDialog, mNpcId); - } -} - -void BuySellHandler::processNpcSell(Net::MessageIn &msg) -{ - msg.readInt16("len"); - const int n_items = (msg.getLength() - 4) / 10; - if (n_items > 0) - { - SellDialog *const dialog = CREATEWIDGETR(NpcSellDialog, mNpcId); - dialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); - - for (int k = 0; k < n_items; k++) - { - const int index = msg.readInt16("index") - INVENTORY_OFFSET; - const int value = msg.readInt32("value"); - msg.readInt32("value?"); - - const Item *const item = PlayerInfo::getInventory() - ->getItem(index); - - if (item && item->isEquipped() == Equipped_false) - dialog->addItem(item, value); - } - } - else - { - NotifyManager::notify(NotifyTypes::SELL_LIST_EMPTY); - } -} - -void BuySellHandler::processNpcBuyResponse(Net::MessageIn &msg) -{ - const uint8_t response = msg.readUInt8("response"); - if (response == 0U) - { - NotifyManager::notify(NotifyTypes::BUY_DONE); - return; - } - // Reset player money since buy dialog already assumed purchase - // would go fine - if (mBuyDialog) - mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); - switch (response) - { - case 1: - NotifyManager::notify(NotifyTypes::BUY_FAILED_NO_MONEY); - break; - - case 2: - NotifyManager::notify(NotifyTypes::BUY_FAILED_OVERWEIGHT); - break; - - case 3: - NotifyManager::notify(NotifyTypes::BUY_FAILED_TOO_MANY_ITEMS); - break; - - default: - NotifyManager::notify(NotifyTypes::BUY_FAILED); - break; - }; + BuySellRecv::mNpcId = BeingId_zero; + BuySellRecv::mBuyDialog = nullptr; } } // namespace Ea diff --git a/src/net/ea/buysellhandler.h b/src/net/ea/buysellhandler.h index c308bebf3..2afc82ee0 100644 --- a/src/net/ea/buysellhandler.h +++ b/src/net/ea/buysellhandler.h @@ -36,16 +36,6 @@ class BuySellHandler notfinal : public Net::BuySellHandler BuySellHandler(); A_DELETE_COPY(BuySellHandler) - - protected: - static void processNpcBuySellChoice(Net::MessageIn &msg); - - static void processNpcSell(Net::MessageIn &msg); - - static void processNpcBuyResponse(Net::MessageIn &msg); - - static BeingId mNpcId; - static BuyDialog *mBuyDialog; }; } // namespace Ea diff --git a/src/net/ea/buysellrecv.cpp b/src/net/ea/buysellrecv.cpp new file mode 100644 index 000000000..14fa812f0 --- /dev/null +++ b/src/net/ea/buysellrecv.cpp @@ -0,0 +1,123 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 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/ea/buysellrecv.h" + +#include "inventory.h" +#include "notifymanager.h" + +#include "being/playerinfo.h" + +#include "enums/resources/notifytypes.h" + +#include "gui/windows/buydialog.h" +#include "gui/windows/buyselldialog.h" +#include "gui/windows/npcselldialog.h" + +#include "gui/widgets/createwidget.h" + +#include "net/ea/eaprotocol.h" + +#include "debug.h" + +namespace Ea +{ + +namespace BuySellRecv +{ + BeingId mNpcId = BeingId_zero; + BuyDialog *mBuyDialog = nullptr; +} + +void BuySellRecv::processNpcBuySellChoice(Net::MessageIn &msg) +{ + if (!BuySellDialog::isActive()) + { + mNpcId = msg.readBeingId("npc id"); + CREATEWIDGET(BuySellDialog, mNpcId); + } +} + +void BuySellRecv::processNpcSell(Net::MessageIn &msg) +{ + msg.readInt16("len"); + const int n_items = (msg.getLength() - 4) / 10; + if (n_items > 0) + { + SellDialog *const dialog = CREATEWIDGETR(NpcSellDialog, mNpcId); + dialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); + + for (int k = 0; k < n_items; k++) + { + const int index = msg.readInt16("index") - INVENTORY_OFFSET; + const int value = msg.readInt32("value"); + msg.readInt32("value?"); + + const Item *const item = PlayerInfo::getInventory() + ->getItem(index); + + if (item && item->isEquipped() == Equipped_false) + dialog->addItem(item, value); + } + } + else + { + NotifyManager::notify(NotifyTypes::SELL_LIST_EMPTY); + } +} + +void BuySellRecv::processNpcBuyResponse(Net::MessageIn &msg) +{ + const uint8_t response = msg.readUInt8("response"); + if (response == 0U) + { + NotifyManager::notify(NotifyTypes::BUY_DONE); + return; + } + // Reset player money since buy dialog already assumed purchase + // would go fine + if (Ea::BuySellRecv::mBuyDialog) + { + Ea::BuySellRecv::mBuyDialog->setMoney( + PlayerInfo::getAttribute(Attributes::MONEY)); + } + switch (response) + { + case 1: + NotifyManager::notify(NotifyTypes::BUY_FAILED_NO_MONEY); + break; + + case 2: + NotifyManager::notify(NotifyTypes::BUY_FAILED_OVERWEIGHT); + break; + + case 3: + NotifyManager::notify(NotifyTypes::BUY_FAILED_TOO_MANY_ITEMS); + break; + + default: + NotifyManager::notify(NotifyTypes::BUY_FAILED); + break; + }; +} + +} // namespace Ea diff --git a/src/net/ea/buysellrecv.h b/src/net/ea/buysellrecv.h new file mode 100644 index 000000000..1b6cd4518 --- /dev/null +++ b/src/net/ea/buysellrecv.h @@ -0,0 +1,43 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 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 NET_EA_BUYSELLRECV_H +#define NET_EA_BUYSELLRECV_H + +#include "net/buysellhandler.h" + +class BuyDialog; + +namespace Ea +{ + namespace BuySellRecv + { + extern BeingId mNpcId; + extern BuyDialog *mBuyDialog; + + void processNpcBuySellChoice(Net::MessageIn &msg); + void processNpcSell(Net::MessageIn &msg); + void processNpcBuyResponse(Net::MessageIn &msg); + } // namespace BuySellRecv +} // namespace Ea + +#endif // NET_EA_BUYSELLRECV_H diff --git a/src/net/eathena/buysellhandler.cpp b/src/net/eathena/buysellhandler.cpp index 6e145a171..d5027335a 100644 --- a/src/net/eathena/buysellhandler.cpp +++ b/src/net/eathena/buysellhandler.cpp @@ -32,6 +32,9 @@ #include "gui/widgets/createwidget.h" +#include "net/ea/buysellrecv.h" + +#include "net/eathena/buysellrecv.h" #include "net/eathena/messageout.h" #include "net/eathena/protocol.h" @@ -57,7 +60,7 @@ BuySellHandler::BuySellHandler() : }; handledMessages = _messages; buySellHandler = this; - mBuyDialog = nullptr; + Ea::BuySellRecv::mBuyDialog = nullptr; } void BuySellHandler::handleMessage(Net::MessageIn &msg) @@ -65,23 +68,23 @@ void BuySellHandler::handleMessage(Net::MessageIn &msg) switch (msg.getId()) { case SMSG_NPC_BUY_SELL_CHOICE: - processNpcBuySellChoice(msg); + Ea::BuySellRecv::processNpcBuySellChoice(msg); break; case SMSG_NPC_BUY: - processNpcBuy(msg); + BuySellRecv::processNpcBuy(msg); break; case SMSG_NPC_SELL: - processNpcSell(msg); + Ea::BuySellRecv::processNpcSell(msg); break; case SMSG_NPC_BUY_RESPONSE: - processNpcBuyResponse(msg); + Ea::BuySellRecv::processNpcBuyResponse(msg); break; case SMSG_NPC_SELL_RESPONSE: - processNpcSellResponse(msg); + BuySellRecv::processNpcSellResponse(msg); break; default: @@ -89,46 +92,6 @@ void BuySellHandler::handleMessage(Net::MessageIn &msg) } } -void BuySellHandler::processNpcBuy(Net::MessageIn &msg) -{ - msg.readInt16("len"); - const int sz = 11; - const int n_items = (msg.getLength() - 4) / sz; - CREATEWIDGETV(mBuyDialog, BuyDialog, mNpcId); - mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); - - for (int k = 0; k < n_items; k++) - { - const int value = msg.readInt32("price"); - msg.readInt32("dc value?"); - const int type = msg.readUInt8("type"); - const int itemId = msg.readInt16("item id"); - const ItemColor color = ItemColor_one; - mBuyDialog->addItem(itemId, type, color, 0, value); - } - mBuyDialog->sort(); -} - -void BuySellHandler::processNpcSellResponse(Net::MessageIn &msg) -{ - switch (msg.readUInt8("result")) - { - case 0: - NotifyManager::notify(NotifyTypes::SOLD); - break; - case 1: - default: - NotifyManager::notify(NotifyTypes::SELL_FAILED); - break; - case 2: - NotifyManager::notify(NotifyTypes::SELL_TRADE_FAILED); - break; - case 3: - NotifyManager::notify(NotifyTypes::SELL_UNSELLABLE_FAILED); - break; - } -} - void BuySellHandler::requestSellList(const std::string &nick A_UNUSED) const { } diff --git a/src/net/eathena/buysellhandler.h b/src/net/eathena/buysellhandler.h index 5a967a55f..c2a94d7a5 100644 --- a/src/net/eathena/buysellhandler.h +++ b/src/net/eathena/buysellhandler.h @@ -54,11 +54,6 @@ class BuySellHandler final : public MessageHandler, public Ea::BuySellHandler const int amount) const override final; void close() const override final; - - protected: - static void processNpcBuy(Net::MessageIn &msg); - - static void processNpcSellResponse(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/eathena/buysellrecv.cpp b/src/net/eathena/buysellrecv.cpp new file mode 100644 index 000000000..23786a435 --- /dev/null +++ b/src/net/eathena/buysellrecv.cpp @@ -0,0 +1,87 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 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/buysellrecv.h" + +#include "notifymanager.h" + +#include "being/playerinfo.h" + +#include "enums/resources/notifytypes.h" + +#include "gui/windows/buydialog.h" + +#include "gui/widgets/createwidget.h" + +#include "net/ea/buysellrecv.h" + +#include "net/eathena/messageout.h" +#include "net/eathena/protocol.h" + +#include "debug.h" + +namespace EAthena +{ + +void BuySellRecv::processNpcBuy(Net::MessageIn &msg) +{ + msg.readInt16("len"); + const int sz = 11; + const int n_items = (msg.getLength() - 4) / sz; + CREATEWIDGETV(Ea::BuySellRecv::mBuyDialog, BuyDialog, + Ea::BuySellRecv::mNpcId); + Ea::BuySellRecv::mBuyDialog->setMoney( + PlayerInfo::getAttribute(Attributes::MONEY)); + + for (int k = 0; k < n_items; k++) + { + const int value = msg.readInt32("price"); + msg.readInt32("dc value?"); + const int type = msg.readUInt8("type"); + const int itemId = msg.readInt16("item id"); + const ItemColor color = ItemColor_one; + Ea::BuySellRecv::mBuyDialog->addItem(itemId, type, color, 0, value); + } + Ea::BuySellRecv::mBuyDialog->sort(); +} + +void BuySellRecv::processNpcSellResponse(Net::MessageIn &msg) +{ + switch (msg.readUInt8("result")) + { + case 0: + NotifyManager::notify(NotifyTypes::SOLD); + break; + case 1: + default: + NotifyManager::notify(NotifyTypes::SELL_FAILED); + break; + case 2: + NotifyManager::notify(NotifyTypes::SELL_TRADE_FAILED); + break; + case 3: + NotifyManager::notify(NotifyTypes::SELL_UNSELLABLE_FAILED); + break; + } +} + +} // namespace EAthena diff --git a/src/net/eathena/buysellrecv.h b/src/net/eathena/buysellrecv.h new file mode 100644 index 000000000..6c524572f --- /dev/null +++ b/src/net/eathena/buysellrecv.h @@ -0,0 +1,39 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 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 NET_EATHENA_BUYSELLRECV_H +#define NET_EATHENA_BUYSELLRECV_H + +#include "net/ea/buysellhandler.h" + +#include "net/eathena/messagehandler.h" + +namespace EAthena +{ + namespace BuySellRecv + { + void processNpcBuy(Net::MessageIn &msg); + void processNpcSellResponse(Net::MessageIn &msg); + } // namespace BuySellRecv +} // namespace EAthena + +#endif // NET_EATHENA_BUYSELLRECV_H diff --git a/src/net/tmwa/buysellhandler.cpp b/src/net/tmwa/buysellhandler.cpp index e41b1580e..1d15f4ad7 100644 --- a/src/net/tmwa/buysellhandler.cpp +++ b/src/net/tmwa/buysellhandler.cpp @@ -37,6 +37,9 @@ #include "net/chathandler.h" +#include "net/ea/buysellrecv.h" + +#include "net/tmwa/buysellrecv.h" #include "net/tmwa/protocol.h" #include "utils/timer.h" @@ -63,7 +66,7 @@ BuySellHandler::BuySellHandler() : }; handledMessages = _messages; buySellHandler = this; - mBuyDialog = nullptr; + Ea::BuySellRecv::mBuyDialog = nullptr; } void BuySellHandler::handleMessage(Net::MessageIn &msg) @@ -72,23 +75,23 @@ void BuySellHandler::handleMessage(Net::MessageIn &msg) switch (msg.getId()) { case SMSG_NPC_BUY_SELL_CHOICE: - processNpcBuySellChoice(msg); + Ea::BuySellRecv::processNpcBuySellChoice(msg); break; case SMSG_NPC_BUY: - processNpcBuy(msg); + BuySellRecv::processNpcBuy(msg); break; case SMSG_NPC_SELL: - processNpcSell(msg); + Ea::BuySellRecv::processNpcSell(msg); break; case SMSG_NPC_BUY_RESPONSE: - processNpcBuyResponse(msg); + Ea::BuySellRecv::processNpcBuyResponse(msg); break; case SMSG_NPC_SELL_RESPONSE: - processNpcSellResponse(msg); + BuySellRecv::processNpcSellResponse(msg); break; default: @@ -97,45 +100,6 @@ void BuySellHandler::handleMessage(Net::MessageIn &msg) BLOCK_END("BuySellHandler::handleMessage") } -void BuySellHandler::processNpcBuy(Net::MessageIn &msg) -{ - msg.readInt16("len"); - const unsigned int n_items = (msg.getLength() - 4U) / 11; - CREATEWIDGETV(mBuyDialog, BuyDialog, mNpcId); - mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); - - for (unsigned int k = 0; k < n_items; k++) - { - const int value = msg.readInt32("price"); - msg.readInt32("dc value?"); - const int type = msg.readUInt8("type"); - const int itemId = msg.readInt16("item id"); - const ItemColor color = ItemColor_one; - mBuyDialog->addItem(itemId, type, color, 0, value); - } - mBuyDialog->sort(); -} - -void BuySellHandler::processNpcSellResponse(Net::MessageIn &msg) -{ - switch (msg.readUInt8("result")) - { - case 0: - NotifyManager::notify(NotifyTypes::SOLD); - break; - case 1: - default: - NotifyManager::notify(NotifyTypes::SELL_FAILED); - break; - case 2: - NotifyManager::notify(NotifyTypes::SELL_TRADE_FAILED); - break; - case 3: - NotifyManager::notify(NotifyTypes::SELL_UNSELLABLE_FAILED); - break; - } -} - void BuySellHandler::requestSellList(const std::string &nick) const { if (nick.empty() != 0 || !shopWindow) diff --git a/src/net/tmwa/buysellhandler.h b/src/net/tmwa/buysellhandler.h index 6547ef05b..d02497a1d 100644 --- a/src/net/tmwa/buysellhandler.h +++ b/src/net/tmwa/buysellhandler.h @@ -54,11 +54,6 @@ class BuySellHandler final : public MessageHandler, public Ea::BuySellHandler const int amount) const override final; void close() const override final; - - protected: - static void processNpcBuy(Net::MessageIn &msg); - - static void processNpcSellResponse(Net::MessageIn &msg); }; } // namespace TmwAthena diff --git a/src/net/tmwa/buysellrecv.cpp b/src/net/tmwa/buysellrecv.cpp new file mode 100644 index 000000000..78f55b378 --- /dev/null +++ b/src/net/tmwa/buysellrecv.cpp @@ -0,0 +1,92 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 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/tmwa/buysellrecv.h" + +#include "configuration.h" +#include "notifymanager.h" + +#include "being/playerinfo.h" + +#include "enums/resources/notifytypes.h" + +#include "gui/windows/buydialog.h" +#include "gui/windows/chatwindow.h" +#include "gui/windows/shopwindow.h" + +#include "gui/widgets/createwidget.h" + +#include "net/chathandler.h" + +#include "net/ea/buysellrecv.h" + +#include "net/tmwa/protocol.h" + +#include "utils/timer.h" + +#include "debug.h" + +namespace TmwAthena +{ + +void BuySellRecv::processNpcBuy(Net::MessageIn &msg) +{ + msg.readInt16("len"); + const unsigned int n_items = (msg.getLength() - 4U) / 11; + CREATEWIDGETV(Ea::BuySellRecv::mBuyDialog, BuyDialog, + Ea::BuySellRecv::mNpcId); + Ea::BuySellRecv::mBuyDialog->setMoney( + PlayerInfo::getAttribute(Attributes::MONEY)); + + for (unsigned int k = 0; k < n_items; k++) + { + const int value = msg.readInt32("price"); + msg.readInt32("dc value?"); + const int type = msg.readUInt8("type"); + const int itemId = msg.readInt16("item id"); + const ItemColor color = ItemColor_one; + Ea::BuySellRecv::mBuyDialog->addItem(itemId, type, color, 0, value); + } + Ea::BuySellRecv::mBuyDialog->sort(); +} + +void BuySellRecv::processNpcSellResponse(Net::MessageIn &msg) +{ + switch (msg.readUInt8("result")) + { + case 0: + NotifyManager::notify(NotifyTypes::SOLD); + break; + case 1: + default: + NotifyManager::notify(NotifyTypes::SELL_FAILED); + break; + case 2: + NotifyManager::notify(NotifyTypes::SELL_TRADE_FAILED); + break; + case 3: + NotifyManager::notify(NotifyTypes::SELL_UNSELLABLE_FAILED); + break; + } +} + +} // namespace TmwAthena diff --git a/src/net/tmwa/buysellrecv.h b/src/net/tmwa/buysellrecv.h new file mode 100644 index 000000000..577f481e8 --- /dev/null +++ b/src/net/tmwa/buysellrecv.h @@ -0,0 +1,39 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 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 NET_TMWA_BUYSELLRECV_H +#define NET_TMWA_BUYSELLRECV_H + +#include "net/ea/buysellhandler.h" + +#include "net/tmwa/messagehandler.h" + +namespace TmwAthena +{ + namespace BuySellRecv + { + void processNpcBuy(Net::MessageIn &msg); + void processNpcSellResponse(Net::MessageIn &msg); + } // namespace BuySellRecv +} // namespace TmwAthena + +#endif // NET_TMWA_BUYSELLRECV_H |