summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/net/eathena/buyingstorehandler.cpp192
-rw-r--r--src/net/eathena/buyingstorehandler.h21
-rw-r--r--src/net/eathena/buyingstorerecv.cpp222
-rw-r--r--src/net/eathena/buyingstorerecv.h57
6 files changed, 294 insertions, 202 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4439abada..f3619eaa9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1542,6 +1542,8 @@ SET(SRCS_EATHENA
net/eathena/beinghandler.h
net/eathena/buyingstorehandler.cpp
net/eathena/buyingstorehandler.h
+ net/eathena/buyingstorerecv.cpp
+ net/eathena/buyingstorerecv.h
net/eathena/beingtype.h
net/eathena/buysellhandler.cpp
net/eathena/buysellhandler.h
diff --git a/src/Makefile.am b/src/Makefile.am
index 66217fd05..810e2529f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1388,6 +1388,8 @@ manaplus_SOURCES += gui/windows/bankwindow.cpp \
net/eathena/beinghandler.h \
net/eathena/buyingstorehandler.cpp \
net/eathena/buyingstorehandler.h \
+ net/eathena/buyingstorerecv.cpp \
+ net/eathena/buyingstorerecv.h \
net/eathena/beingtype.h \
net/eathena/buysellhandler.cpp \
net/eathena/buysellhandler.h \
diff --git a/src/net/eathena/buyingstorehandler.cpp b/src/net/eathena/buyingstorehandler.cpp
index 4fcad8637..9b990fe7e 100644
--- a/src/net/eathena/buyingstorehandler.cpp
+++ b/src/net/eathena/buyingstorehandler.cpp
@@ -40,6 +40,7 @@
#include "net/ea/eaprotocol.h"
+#include "net/eathena/buyingstorerecv.h"
#include "net/eathena/messageout.h"
#include "net/eathena/protocol.h"
@@ -76,43 +77,43 @@ void BuyingStoreHandler::handleMessage(Net::MessageIn &msg)
switch (msg.getId())
{
case SMSG_BUYINGSTORE_OPEN:
- processBuyingStoreOpen(msg);
+ BuyingStoreRecv::processBuyingStoreOpen(msg);
break;
case SMSG_BUYINGSTORE_CREATE_FAILED:
- processBuyingStoreCreateFailed(msg);
+ BuyingStoreRecv::processBuyingStoreCreateFailed(msg);
break;
case SMSG_BUYINGSTORE_OWN_ITEMS:
- processBuyingStoreOwnItems(msg);
+ BuyingStoreRecv::processBuyingStoreOwnItems(msg);
break;
case SMSG_BUYINGSTORE_SHOW_BOARD:
- processBuyingStoreShowBoard(msg);
+ BuyingStoreRecv::processBuyingStoreShowBoard(msg);
break;
case SMSG_BUYINGSTORE_HIDE_BOARD:
- processBuyingStoreHideBoard(msg);
+ BuyingStoreRecv::processBuyingStoreHideBoard(msg);
break;
case SMSG_BUYINGSTORE_ITEMS_LIST:
- processBuyingStoreItemsList(msg);
+ BuyingStoreRecv::processBuyingStoreItemsList(msg);
break;
case SMSG_BUYINGSTORE_SELL_FAILED:
- processBuyingStoreSellFailed(msg);
+ BuyingStoreRecv::processBuyingStoreSellFailed(msg);
break;
case SMSG_BUYINGSTORE_REPORT:
- processBuyingStoreReport(msg);
+ BuyingStoreRecv::processBuyingStoreReport(msg);
break;
case SMSG_BUYINGSTORE_DELETE_ITEM:
- processBuyingStoreDeleteItem(msg);
+ BuyingStoreRecv::processBuyingStoreDeleteItem(msg);
break;
case SMSG_BUYINGSTORE_SELLER_SELL_FAILED:
- processBuyingStoreSellerSellFailed(msg);
+ BuyingStoreRecv::processBuyingStoreSellerSellFailed(msg);
break;
default:
@@ -120,177 +121,6 @@ void BuyingStoreHandler::handleMessage(Net::MessageIn &msg)
}
}
-void BuyingStoreHandler::processBuyingStoreOpen(Net::MessageIn &msg)
-{
- BuyingStoreSlotsListener::distributeEvent(msg.readUInt8("slots"));
-}
-
-void BuyingStoreHandler::processBuyingStoreCreateFailed(Net::MessageIn &msg)
-{
- const int16_t result = msg.readInt16("result");
- const int weight = msg.readInt32("weight");
- switch (result)
- {
- case 1:
- default:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_CREATE_FAILED);
- break;
- case 2:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_CREATE_FAILED_WEIGHT,
- weight);
- break;
- case 8:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_CREATE_EMPTY);
- break;
- }
-}
-
-void BuyingStoreHandler::processBuyingStoreOwnItems(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 12) / 9;
- msg.readBeingId("account id");
- msg.readInt32("money limit");
- for (int f = 0; f < count; f ++)
- {
- msg.readInt32("price");
- msg.readInt16("amount");
- msg.readUInt8("item type");
- msg.readInt16("item id");
- }
- PlayerInfo::enableVending(true);
- BuyingStoreModeListener::distributeEvent(true);
-}
-
-void BuyingStoreHandler::processBuyingStoreShowBoard(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->setBuyBoard(shopName);
-}
-
-void BuyingStoreHandler::processBuyingStoreHideBoard(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("owner id");
- Being *const dstBeing = actorManager->findBeing(id);
- if (dstBeing)
- dstBeing->setBuyBoard(std::string());
- if (dstBeing == localPlayer)
- {
- PlayerInfo::enableVending(false);
- BuyingStoreModeListener::distributeEvent(false);
- }
-}
-
-void BuyingStoreHandler::processBuyingStoreItemsList(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 16) / 9;
- const BeingId id = msg.readBeingId("account id");
- const int storeId = msg.readInt32("store id");
- // +++ in future need use it too
- msg.readInt32("money limit");
-
- Being *const dstBeing = actorManager->findBeing(id);
- if (!dstBeing)
- return;
-
- SellDialog *const dialog = CREATEWIDGETR(BuyingStoreSellDialog,
- dstBeing->getId(),
- storeId);
- dialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY));
- Inventory *const inv = PlayerInfo::getInventory();
- for (int f = 0; f < count; f ++)
- {
- const int price = msg.readInt32("price");
- const int amount = msg.readInt16("amount");
- const int itemType = msg.readUInt8("item type");
- const int itemId = msg.readInt16("item id");
-
- if (!inv)
- continue;
- const Item *const item = inv->findItem(itemId, ItemColor_one);
- if (!item)
- continue;
- // +++ need add colors support
- dialog->addItem(itemId, itemType, ItemColor_one, amount, price);
- }
-}
-
-void BuyingStoreHandler::processBuyingStoreSellFailed(Net::MessageIn &msg)
-{
- const int16_t result = msg.readInt16("result");
- switch (result)
- {
- case 3:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELL_FAILED_MONEY_LIMIT);
- break;
- case 4:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_SELL_FAILED_EMPTY);
- break;
- default:
- NotifyManager::notify(NotifyTypes::BUYING_STORE_SELL_FAILED);
- break;
- }
-}
-
-void BuyingStoreHandler::processBuyingStoreSellerSellFailed(Net::MessageIn
- &msg)
-{
- const int16_t result = msg.readInt16("result");
- msg.readInt16("item id");
- switch (result)
- {
- case 5:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_DEAL);
- break;
- case 6:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_AMOUNT);
- break;
- case 7:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_BALANCE);
- break;
- default:
- NotifyManager::notify(
- NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED);
- break;
- }
-}
-
-void BuyingStoreHandler::processBuyingStoreReport(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt16("item id");
- msg.readInt16("amount");
- msg.readInt32("money limit");
-}
-
-void BuyingStoreHandler::processBuyingStoreDeleteItem(Net::MessageIn &msg)
-{
- Inventory *const inventory = localPlayer
- ? PlayerInfo::getInventory() : nullptr;
-
- const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- const int amount = msg.readInt16("amount");
- msg.readInt32("price");
-
- if (inventory)
- {
- if (Item *const item = inventory->getItem(index))
- {
- item->increaseQuantity(-amount);
- if (item->getQuantity() == 0)
- inventory->removeItemAt(index);
- ArrowsListener::distributeEvent();
- }
- }
-}
-
void BuyingStoreHandler::create(const std::string &name,
const int maxMoney,
const bool flag,
diff --git a/src/net/eathena/buyingstorehandler.h b/src/net/eathena/buyingstorehandler.h
index 53cc6fcef..3fc1dd603 100644
--- a/src/net/eathena/buyingstorehandler.h
+++ b/src/net/eathena/buyingstorehandler.h
@@ -52,27 +52,6 @@ class BuyingStoreHandler final : public MessageHandler,
const int storeId,
const Item *const item,
const int amount) const override final;
-
- protected:
- static void processBuyingStoreOpen(Net::MessageIn &msg);
-
- static void processBuyingStoreCreateFailed(Net::MessageIn &msg);
-
- static void processBuyingStoreOwnItems(Net::MessageIn &msg);
-
- static void processBuyingStoreShowBoard(Net::MessageIn &msg);
-
- static void processBuyingStoreHideBoard(Net::MessageIn &msg);
-
- static void processBuyingStoreItemsList(Net::MessageIn &msg);
-
- static void processBuyingStoreSellFailed(Net::MessageIn &msg);
-
- static void processBuyingStoreReport(Net::MessageIn &msg);
-
- static void processBuyingStoreDeleteItem(Net::MessageIn &msg);
-
- static void processBuyingStoreSellerSellFailed(Net::MessageIn &msg);
};
} // namespace EAthena
diff --git a/src/net/eathena/buyingstorerecv.cpp b/src/net/eathena/buyingstorerecv.cpp
new file mode 100644
index 000000000..1a9d3897d
--- /dev/null
+++ b/src/net/eathena/buyingstorerecv.cpp
@@ -0,0 +1,222 @@
+/*
+ * The ManaPlus Client
+ * 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/buyingstorerecv.h"
+
+#include "actormanager.h"
+#include "inventory.h"
+#include "notifymanager.h"
+#include "shopitem.h"
+
+#include "being/localplayer.h"
+#include "being/playerinfo.h"
+
+#include "enums/resources/notifytypes.h"
+
+#include "gui/windows/buyingstoreselldialog.h"
+
+#include "gui/widgets/createwidget.h"
+
+#include "listeners/arrowslistener.h"
+#include "listeners/buyingstoremodelistener.h"
+#include "listeners/buyingstoreslotslistener.h"
+
+#include "net/ea/eaprotocol.h"
+
+#include "net/eathena/messageout.h"
+#include "net/eathena/protocol.h"
+
+#include "debug.h"
+
+namespace EAthena
+{
+
+void BuyingStoreRecv::processBuyingStoreOpen(Net::MessageIn &msg)
+{
+ BuyingStoreSlotsListener::distributeEvent(msg.readUInt8("slots"));
+}
+
+void BuyingStoreRecv::processBuyingStoreCreateFailed(Net::MessageIn &msg)
+{
+ const int16_t result = msg.readInt16("result");
+ const int weight = msg.readInt32("weight");
+ switch (result)
+ {
+ case 1:
+ default:
+ NotifyManager::notify(NotifyTypes::BUYING_STORE_CREATE_FAILED);
+ break;
+ case 2:
+ NotifyManager::notify(
+ NotifyTypes::BUYING_STORE_CREATE_FAILED_WEIGHT,
+ weight);
+ break;
+ case 8:
+ NotifyManager::notify(NotifyTypes::BUYING_STORE_CREATE_EMPTY);
+ break;
+ }
+}
+
+void BuyingStoreRecv::processBuyingStoreOwnItems(Net::MessageIn &msg)
+{
+ const int count = (msg.readInt16("len") - 12) / 9;
+ msg.readBeingId("account id");
+ msg.readInt32("money limit");
+ for (int f = 0; f < count; f ++)
+ {
+ msg.readInt32("price");
+ msg.readInt16("amount");
+ msg.readUInt8("item type");
+ msg.readInt16("item id");
+ }
+ PlayerInfo::enableVending(true);
+ BuyingStoreModeListener::distributeEvent(true);
+}
+
+void BuyingStoreRecv::processBuyingStoreShowBoard(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->setBuyBoard(shopName);
+}
+
+void BuyingStoreRecv::processBuyingStoreHideBoard(Net::MessageIn &msg)
+{
+ const BeingId id = msg.readBeingId("owner id");
+ Being *const dstBeing = actorManager->findBeing(id);
+ if (dstBeing)
+ dstBeing->setBuyBoard(std::string());
+ if (dstBeing == localPlayer)
+ {
+ PlayerInfo::enableVending(false);
+ BuyingStoreModeListener::distributeEvent(false);
+ }
+}
+
+void BuyingStoreRecv::processBuyingStoreItemsList(Net::MessageIn &msg)
+{
+ const int count = (msg.readInt16("len") - 16) / 9;
+ const BeingId id = msg.readBeingId("account id");
+ const int storeId = msg.readInt32("store id");
+ // +++ in future need use it too
+ msg.readInt32("money limit");
+
+ Being *const dstBeing = actorManager->findBeing(id);
+ if (!dstBeing)
+ return;
+
+ SellDialog *const dialog = CREATEWIDGETR(BuyingStoreSellDialog,
+ dstBeing->getId(),
+ storeId);
+ dialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY));
+ Inventory *const inv = PlayerInfo::getInventory();
+ for (int f = 0; f < count; f ++)
+ {
+ const int price = msg.readInt32("price");
+ const int amount = msg.readInt16("amount");
+ const int itemType = msg.readUInt8("item type");
+ const int itemId = msg.readInt16("item id");
+
+ if (!inv)
+ continue;
+ const Item *const item = inv->findItem(itemId, ItemColor_one);
+ if (!item)
+ continue;
+ // +++ need add colors support
+ dialog->addItem(itemId, itemType, ItemColor_one, amount, price);
+ }
+}
+
+void BuyingStoreRecv::processBuyingStoreSellFailed(Net::MessageIn &msg)
+{
+ const int16_t result = msg.readInt16("result");
+ switch (result)
+ {
+ case 3:
+ NotifyManager::notify(
+ NotifyTypes::BUYING_STORE_SELL_FAILED_MONEY_LIMIT);
+ break;
+ case 4:
+ NotifyManager::notify(NotifyTypes::BUYING_STORE_SELL_FAILED_EMPTY);
+ break;
+ default:
+ NotifyManager::notify(NotifyTypes::BUYING_STORE_SELL_FAILED);
+ break;
+ }
+}
+
+void BuyingStoreRecv::processBuyingStoreSellerSellFailed(Net::MessageIn
+ &msg)
+{
+ const int16_t result = msg.readInt16("result");
+ msg.readInt16("item id");
+ switch (result)
+ {
+ case 5:
+ NotifyManager::notify(
+ NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_DEAL);
+ break;
+ case 6:
+ NotifyManager::notify(
+ NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_AMOUNT);
+ break;
+ case 7:
+ NotifyManager::notify(
+ NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED_BALANCE);
+ break;
+ default:
+ NotifyManager::notify(
+ NotifyTypes::BUYING_STORE_SELLER_SELL_FAILED);
+ break;
+ }
+}
+
+void BuyingStoreRecv::processBuyingStoreReport(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt16("item id");
+ msg.readInt16("amount");
+ msg.readInt32("money limit");
+}
+
+void BuyingStoreRecv::processBuyingStoreDeleteItem(Net::MessageIn &msg)
+{
+ Inventory *const inventory = localPlayer
+ ? PlayerInfo::getInventory() : nullptr;
+
+ const int index = msg.readInt16("index") - INVENTORY_OFFSET;
+ const int amount = msg.readInt16("amount");
+ msg.readInt32("price");
+
+ if (inventory)
+ {
+ if (Item *const item = inventory->getItem(index))
+ {
+ item->increaseQuantity(-amount);
+ if (item->getQuantity() == 0)
+ inventory->removeItemAt(index);
+ ArrowsListener::distributeEvent();
+ }
+ }
+}
+
+} // namespace EAthena
diff --git a/src/net/eathena/buyingstorerecv.h b/src/net/eathena/buyingstorerecv.h
new file mode 100644
index 000000000..da4e338e8
--- /dev/null
+++ b/src/net/eathena/buyingstorerecv.h
@@ -0,0 +1,57 @@
+/*
+ * The ManaPlus Client
+ * 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_BUYINGSTORERECV_H
+#define NET_EATHENA_BUYINGSTORERECV_H
+
+#ifdef EATHENA_SUPPORT
+
+#include "net/buyingstorehandler.h"
+
+#include "net/eathena/messagehandler.h"
+
+namespace EAthena
+{
+ namespace BuyingStoreRecv
+ {
+ void processBuyingStoreOpen(Net::MessageIn &msg);
+
+ void processBuyingStoreCreateFailed(Net::MessageIn &msg);
+
+ void processBuyingStoreOwnItems(Net::MessageIn &msg);
+
+ void processBuyingStoreShowBoard(Net::MessageIn &msg);
+
+ void processBuyingStoreHideBoard(Net::MessageIn &msg);
+
+ void processBuyingStoreItemsList(Net::MessageIn &msg);
+
+ void processBuyingStoreSellFailed(Net::MessageIn &msg);
+
+ void processBuyingStoreReport(Net::MessageIn &msg);
+
+ void processBuyingStoreDeleteItem(Net::MessageIn &msg);
+
+ void processBuyingStoreSellerSellFailed(Net::MessageIn &msg);
+ } // namespace BuyingStoreRecv
+} // namespace EAthena
+
+#endif // EATHENA_SUPPORT
+#endif // NET_EATHENA_BUYINGSTORERECV_H