diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-10-09 17:41:22 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-10-09 17:41:22 +0300 |
commit | 88d251067ab061177df644dd1acb5c6d74a5e79f (patch) | |
tree | 7da6c0c5ef97385470ee1ab06c557444e5d5763a /src/net/eathena/tradehandler.cpp | |
parent | ebd2dfb76cb92bbae9e5a22e1ec6869fba4961c2 (diff) | |
download | manaplus-88d251067ab061177df644dd1acb5c6d74a5e79f.tar.gz manaplus-88d251067ab061177df644dd1acb5c6d74a5e79f.tar.bz2 manaplus-88d251067ab061177df644dd1acb5c6d74a5e79f.tar.xz manaplus-88d251067ab061177df644dd1acb5c6d74a5e79f.zip |
Move processTradeItemAddResponse from ea namespace into eathena and tmwa.
Diffstat (limited to 'src/net/eathena/tradehandler.cpp')
-rw-r--r-- | src/net/eathena/tradehandler.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
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 |