diff options
Diffstat (limited to 'src/net/eathena/vendinghandler.cpp')
-rw-r--r-- | src/net/eathena/vendinghandler.cpp | 123 |
1 files changed, 10 insertions, 113 deletions
diff --git a/src/net/eathena/vendinghandler.cpp b/src/net/eathena/vendinghandler.cpp index 1db5cd5fc..5d0724f12 100644 --- a/src/net/eathena/vendinghandler.cpp +++ b/src/net/eathena/vendinghandler.cpp @@ -38,6 +38,7 @@ #include "net/eathena/messageout.h" #include "net/eathena/protocol.h" +#include "net/eathena/vendingrecv.h" #include "debug.h" @@ -46,8 +47,6 @@ extern Net::VendingHandler *vendingHandler; namespace EAthena { -BuyDialog *VendingHandler::mBuyDialog = nullptr; - VendingHandler::VendingHandler() : MessageHandler() { @@ -65,7 +64,7 @@ VendingHandler::VendingHandler() : }; handledMessages = _messages; vendingHandler = this; - mBuyDialog = nullptr; + VendingRecv::mBuyDialog = nullptr; } void VendingHandler::handleMessage(Net::MessageIn &msg) @@ -73,35 +72,35 @@ void VendingHandler::handleMessage(Net::MessageIn &msg) switch (msg.getId()) { case SMSG_VENDING_OPEN_REQ: - processOpenReq(msg); + VendingRecv::processOpenReq(msg); break; case SMSG_VENDING_SHOW_BOARD: - processShowBoard(msg); + VendingRecv::processShowBoard(msg); break; case SMSG_VENDING_HIDE_BOARD: - processHideBoard(msg); + VendingRecv::processHideBoard(msg); break; case SMSG_VENDING_ITEMS_LIST: - processItemsList(msg); + VendingRecv::processItemsList(msg); break; case SMSG_VENDING_BUY_ACK: - processBuyAck(msg); + VendingRecv::processBuyAck(msg); break; case SMSG_VENDING_OPEN: - processOpen(msg); + VendingRecv::processOpen(msg); break; case SMSG_VENDING_REPORT: - processReport(msg); + VendingRecv::processReport(msg); break; case SMSG_VENDING_OPEN_STATUS: - processOpenStatus(msg); + VendingRecv::processOpenStatus(msg); break; default: @@ -109,108 +108,6 @@ void VendingHandler::handleMessage(Net::MessageIn &msg) } } -void VendingHandler::processOpenReq(Net::MessageIn &msg) -{ - VendingSlotsListener::distributeEvent(msg.readInt16("slots allowed")); -} - -void VendingHandler::processShowBoard(Net::MessageIn &msg) -{ - const BeingId id = msg.readBeingId("owner id"); - const std::string shopName = msg.readString(80, "shop name"); - Being *const dstBeing = actorManager->findBeing(id); - if (dstBeing) - dstBeing->setSellBoard(shopName); -} - -void VendingHandler::processHideBoard(Net::MessageIn &msg) -{ - const BeingId id = msg.readBeingId("owner id"); - Being *const dstBeing = actorManager->findBeing(id); - if (dstBeing) - dstBeing->setSellBoard(std::string()); - if (dstBeing == localPlayer) - { - PlayerInfo::enableVending(false); - VendingModeListener::distributeEvent(false); - } -} - -void VendingHandler::processItemsList(Net::MessageIn &msg) -{ - const int count = (msg.readInt16("len") - 12) / 22; - const BeingId id = msg.readBeingId("id"); - Being *const being = actorManager->findBeing(id); - if (!being) - return; - int cards[4]; - CREATEWIDGETV(mBuyDialog, BuyDialog, being->getName()); - mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); - msg.readInt32("vender id"); - for (int f = 0; f < count; f ++) - { - const int value = msg.readInt32("price"); - const int amount = msg.readInt16("amount"); - const int index = msg.readInt16("inv index"); - const int type = msg.readUInt8("item type"); - const int itemId = msg.readInt16("item id"); - msg.readUInt8("identify"); - msg.readUInt8("attribute"); - msg.readUInt8("refine"); - for (int d = 0; d < 4; d ++) - cards[d] = msg.readInt16("card"); - - const ItemColor color = ItemColorManager::getColorFromCards(&cards[0]); - ShopItem *const item = mBuyDialog->addItem(itemId, type, - color, amount, value); - if (item) - item->setInvIndex(index); - } - mBuyDialog->sort(); -} - -void VendingHandler::processBuyAck(Net::MessageIn &msg) -{ - UNIMPLIMENTEDPACKET; - msg.readInt16("inv index"); - msg.readInt16("amount"); - msg.readUInt8("flag"); -} - -void VendingHandler::processOpen(Net::MessageIn &msg) -{ - const int count = (msg.readInt16("len") - 8) / 22; - msg.readInt32("id"); - for (int f = 0; f < count; f ++) - { - msg.readInt32("price"); - msg.readInt16("inv index"); - msg.readInt16("amount"); - msg.readUInt8("item type"); - msg.readInt16("item id"); - msg.readUInt8("identify"); - msg.readUInt8("attribute"); - msg.readUInt8("refine"); - for (int d = 0; d < 4; d ++) - msg.readInt16("card"); - } - PlayerInfo::enableVending(true); - VendingModeListener::distributeEvent(true); -} - -void VendingHandler::processReport(Net::MessageIn &msg) -{ - UNIMPLIMENTEDPACKET; - msg.readInt16("inv index"); - msg.readInt16("amount"); -} - -void VendingHandler::processOpenStatus(Net::MessageIn &msg) -{ - UNIMPLIMENTEDPACKET; - msg.readUInt8("result"); -} - void VendingHandler::close() const { createOutPacket(CMSG_VENDING_CLOSE); |