diff options
-rw-r--r-- | src/net/ea/tradehandler.cpp | 50 | ||||
-rw-r--r-- | src/net/ea/tradehandler.h | 2 | ||||
-rw-r--r-- | src/net/eathena/tradehandler.cpp | 56 | ||||
-rw-r--r-- | src/net/eathena/tradehandler.h | 2 | ||||
-rw-r--r-- | src/net/tmwa/tradehandler.cpp | 56 | ||||
-rw-r--r-- | src/net/tmwa/tradehandler.h | 2 |
6 files changed, 116 insertions, 52 deletions
diff --git a/src/net/ea/tradehandler.cpp b/src/net/ea/tradehandler.cpp index 2e9e5db56..16e0ca0ad 100644 --- a/src/net/ea/tradehandler.cpp +++ b/src/net/ea/tradehandler.cpp @@ -137,56 +137,6 @@ void TradeHandler::processTradeResponseContinue(const uint8_t type) const } } -void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg) -{ - // Trade: New Item add response (was 0x00ea, now 01b1) - const int index = msg.readInt16() - INVENTORY_OFFSET; - Item *item = nullptr; - if (PlayerInfo::getInventory()) - item = PlayerInfo::getInventory()->getItem(index); - - if (!item) - { - if (tradeWindow) - tradeWindow->receivedOk(true); - return; - } - const int quantity = msg.readInt16(); - - const uint8_t res = msg.readUInt8(); - switch (res) - { - case 0: - // Successfully added item - if (tradeWindow) - { - tradeWindow->addItem2(item->getId(), true, - quantity, item->getRefine(), item->getColor(), - item->isEquipment()); - } - item->increaseQuantity(-quantity); - break; - case 1: - // Add item failed - player overweighted - NotifyManager::notify(NotifyTypes:: - TRADE_ADD_PARTNER_OVER_WEIGHT); - break; - case 2: - // Add item failed - player has no free slot - NotifyManager::notify(NotifyTypes::TRADE_ADD_PARTNER_NO_SLOTS); - break; - case 3: - // Add item failed - non tradable item - NotifyManager::notify(NotifyTypes::TRADE_ADD_UNTRADABLE_ITEM); - break; - default: - NotifyManager::notify(NotifyTypes::TRADE_ADD_ERROR); - logger->log("QQQ SMSG_TRADE_ITEM_ADD_RESPONSE: " - + toString(res)); - break; - } -} - void TradeHandler::processTradeOk(Net::MessageIn &msg) { // 0 means ok from myself, 1 means ok from other; diff --git a/src/net/ea/tradehandler.h b/src/net/ea/tradehandler.h index 585e9f1bd..c7c1c0e72 100644 --- a/src/net/ea/tradehandler.h +++ b/src/net/ea/tradehandler.h @@ -46,8 +46,6 @@ class TradeHandler notfinal : public Net::TradeHandler protected: void processTradeResponse(Net::MessageIn &msg) const; - static void processTradeItemAddResponse(Net::MessageIn &msg); - static void processTradeOk(Net::MessageIn &msg); static void processTradeCancel(Net::MessageIn &msg); diff --git a/src/net/eathena/tradehandler.cpp b/src/net/eathena/tradehandler.cpp index 09378ea07..2b365e12f 100644 --- a/src/net/eathena/tradehandler.cpp +++ b/src/net/eathena/tradehandler.cpp @@ -22,7 +22,9 @@ #include "net/eathena/tradehandler.h" +#include "inventory.h" #include "item.h" +#include "notifymanager.h" #include "being/playerinfo.h" @@ -33,6 +35,10 @@ #include "net/ea/eaprotocol.h" +#include "resources/notifytypes.h" + +#include "utils/stringutils.h" + #include "debug.h" extern Net::TradeHandler *tradeHandler; @@ -196,4 +202,54 @@ void TradeHandler::processTradeItemAdd(Net::MessageIn &msg) } } +void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg) +{ + // Trade: New Item add response (was 0x00ea, now 01b1) + const int index = msg.readInt16() - INVENTORY_OFFSET; + Item *item = nullptr; + if (PlayerInfo::getInventory()) + item = PlayerInfo::getInventory()->getItem(index); + + if (!item) + { + if (tradeWindow) + tradeWindow->receivedOk(true); + return; + } + const int quantity = msg.readInt16(); + + const uint8_t res = msg.readUInt8(); + switch (res) + { + case 0: + // Successfully added item + if (tradeWindow) + { + tradeWindow->addItem2(item->getId(), true, + quantity, item->getRefine(), item->getColor(), + item->isEquipment()); + } + item->increaseQuantity(-quantity); + break; + case 1: + // Add item failed - player overweighted + NotifyManager::notify(NotifyTypes:: + TRADE_ADD_PARTNER_OVER_WEIGHT); + break; + case 2: + // Add item failed - player has no free slot + NotifyManager::notify(NotifyTypes::TRADE_ADD_PARTNER_NO_SLOTS); + break; + case 3: + // Add item failed - non tradable item + NotifyManager::notify(NotifyTypes::TRADE_ADD_UNTRADABLE_ITEM); + break; + default: + NotifyManager::notify(NotifyTypes::TRADE_ADD_ERROR); + logger->log("QQQ SMSG_TRADE_ITEM_ADD_RESPONSE: " + + toString(res)); + break; + } +} + } // namespace EAthena diff --git a/src/net/eathena/tradehandler.h b/src/net/eathena/tradehandler.h index 929b48ced..334366f7f 100644 --- a/src/net/eathena/tradehandler.h +++ b/src/net/eathena/tradehandler.h @@ -60,6 +60,8 @@ class TradeHandler final : public MessageHandler, public Ea::TradeHandler void processTradeResponse2(Net::MessageIn &msg) const; static void processTradeItemAdd(Net::MessageIn &msg); + + static void processTradeItemAddResponse(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/tmwa/tradehandler.cpp b/src/net/tmwa/tradehandler.cpp index a07b58c15..4ee77a7ec 100644 --- a/src/net/tmwa/tradehandler.cpp +++ b/src/net/tmwa/tradehandler.cpp @@ -22,7 +22,9 @@ #include "net/tmwa/tradehandler.h" +#include "inventory.h" #include "item.h" +#include "notifymanager.h" #include "being/playerinfo.h" @@ -33,6 +35,10 @@ #include "net/ea/eaprotocol.h" +#include "resources/notifytypes.h" + +#include "utils/stringutils.h" + #include "debug.h" extern Net::TradeHandler *tradeHandler; @@ -178,4 +184,54 @@ void TradeHandler::processTradeItemAdd(Net::MessageIn &msg) } } +void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg) +{ + // Trade: New Item add response (was 0x00ea, now 01b1) + const int index = msg.readInt16() - INVENTORY_OFFSET; + Item *item = nullptr; + if (PlayerInfo::getInventory()) + item = PlayerInfo::getInventory()->getItem(index); + + if (!item) + { + if (tradeWindow) + tradeWindow->receivedOk(true); + return; + } + const int quantity = msg.readInt16(); + + const uint8_t res = msg.readUInt8(); + switch (res) + { + case 0: + // Successfully added item + if (tradeWindow) + { + tradeWindow->addItem2(item->getId(), true, + quantity, item->getRefine(), item->getColor(), + item->isEquipment()); + } + item->increaseQuantity(-quantity); + break; + case 1: + // Add item failed - player overweighted + NotifyManager::notify(NotifyTypes:: + TRADE_ADD_PARTNER_OVER_WEIGHT); + break; + case 2: + // Add item failed - player has no free slot + NotifyManager::notify(NotifyTypes::TRADE_ADD_PARTNER_NO_SLOTS); + break; + case 3: + // Add item failed - non tradable item + NotifyManager::notify(NotifyTypes::TRADE_ADD_UNTRADABLE_ITEM); + break; + default: + NotifyManager::notify(NotifyTypes::TRADE_ADD_ERROR); + logger->log("QQQ SMSG_TRADE_ITEM_ADD_RESPONSE: " + + toString(res)); + break; + } +} + } // namespace TmwAthena diff --git a/src/net/tmwa/tradehandler.h b/src/net/tmwa/tradehandler.h index cdbc3e853..34b67cbd5 100644 --- a/src/net/tmwa/tradehandler.h +++ b/src/net/tmwa/tradehandler.h @@ -58,6 +58,8 @@ class TradeHandler final : public MessageHandler, public Ea::TradeHandler void processTradeRequest(Net::MessageIn &msg) const; static void processTradeItemAdd(Net::MessageIn &msg); + + static void processTradeItemAddResponse(Net::MessageIn &msg); }; } // namespace TmwAthena |