summaryrefslogtreecommitdiff
path: root/src/net/eathena/tradehandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/eathena/tradehandler.cpp')
-rw-r--r--src/net/eathena/tradehandler.cpp139
1 files changed, 17 insertions, 122 deletions
diff --git a/src/net/eathena/tradehandler.cpp b/src/net/eathena/tradehandler.cpp
index 537e205f9..082b3bf60 100644
--- a/src/net/eathena/tradehandler.cpp
+++ b/src/net/eathena/tradehandler.cpp
@@ -33,8 +33,11 @@
#include "gui/windows/tradewindow.h"
+#include "net/ea/traderecv.h"
+
#include "net/eathena/messageout.h"
#include "net/eathena/protocol.h"
+#include "net/eathena/traderecv.h"
#include "net/ea/eaprotocol.h"
@@ -44,9 +47,6 @@ extern Net::TradeHandler *tradeHandler;
namespace EAthena
{
-int TradeHandler::mQuantity = 0;
-int TradeHandler::mItemIndex = -1;
-
TradeHandler::TradeHandler() :
MessageHandler(),
Ea::TradeHandler()
@@ -65,8 +65,8 @@ TradeHandler::TradeHandler() :
};
handledMessages = _messages;
tradeHandler = this;
- mItemIndex = -1;
- mQuantity = 0;
+ TradeRecv::mItemIndex = -1;
+ TradeRecv::mQuantity = 0;
}
@@ -75,35 +75,35 @@ void TradeHandler::handleMessage(Net::MessageIn &msg)
switch (msg.getId())
{
case SMSG_TRADE_REQUEST:
- processTradeRequest(msg);
+ TradeRecv::processTradeRequest(msg);
break;
case SMSG_TRADE_RESPONSE:
- processTradeResponse(msg);
+ TradeRecv::processTradeResponse(msg);
break;
case SMSG_TRADE_ITEM_ADD:
- processTradeItemAdd(msg);
+ TradeRecv::processTradeItemAdd(msg);
break;
case SMSG_TRADE_ITEM_ADD_RESPONSE:
- processTradeItemAddResponse(msg);
+ TradeRecv::processTradeItemAddResponse(msg);
break;
case SMSG_TRADE_OK:
- processTradeOk(msg);
+ Ea::TradeRecv::processTradeOk(msg);
break;
case SMSG_TRADE_CANCEL:
- processTradeCancel(msg);
+ Ea::TradeRecv::processTradeCancel(msg);
break;
case SMSG_TRADE_COMPLETE:
- processTradeComplete(msg);
+ Ea::TradeRecv::processTradeComplete(msg);
break;
case SMSG_TRADE_UNDO:
- processTradeUndo(msg);
+ TradeRecv::processTradeUndo(msg);
break;
default:
@@ -134,10 +134,11 @@ void TradeHandler::addItem(const Item *const item, const int amount) const
if (!item)
return;
- mItemIndex = item->getInvIndex();
- mQuantity = amount;
+ TradeRecv::mItemIndex = item->getInvIndex();
+ TradeRecv::mQuantity = amount;
createOutPacket(CMSG_TRADE_ITEM_ADD_REQUEST);
- outMsg.writeInt16(static_cast<int16_t>(mItemIndex + INVENTORY_OFFSET),
+ outMsg.writeInt16(static_cast<int16_t>(
+ TradeRecv::mItemIndex + INVENTORY_OFFSET),
"index");
outMsg.writeInt32(amount, "amount");
}
@@ -164,110 +165,4 @@ void TradeHandler::cancel() const
createOutPacket(CMSG_TRADE_CANCEL_REQUEST);
}
-void TradeHandler::processTradeRequest(Net::MessageIn &msg)
-{
- const std::string &partner = msg.readString(24, "name");
- msg.readInt32("char id");
- msg.readInt16("base level");
- processTradeRequestContinue(partner);
-}
-
-void TradeHandler::processTradeResponse(Net::MessageIn &msg)
-{
- const uint8_t type = msg.readUInt8("type");
- msg.readInt32("char id");
- msg.readInt16("base level");
- processTradeResponseContinue(type);
-}
-
-void TradeHandler::processTradeItemAdd(Net::MessageIn &msg)
-{
- const int type = msg.readInt16("type");
- const int itemType = msg.readUInt8("item type");
- const int amount = msg.readInt32("amount");
- const uint8_t identify = msg.readUInt8("identify");
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[4];
- for (int f = 0; f < 4; f++)
- cards[f] = msg.readInt16("card");
-
- if (tradeWindow)
- {
- if (type == 0)
- {
- tradeWindow->setMoney(amount);
- }
- else
- {
- tradeWindow->addItem2(type,
- itemType,
- cards,
- 4,
- false,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- fromBool(identify, Identified),
- damaged,
- Favorite_false,
- Equipm_false);
- }
- }
-}
-
-void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg)
-{
- msg.readInt16("index");
- const uint8_t res = msg.readUInt8("fail");
- switch (res)
- {
- case 0: // Successfully added item
- case 9: // silent added item
- {
- Item *const item = PlayerInfo::getInventory()->getItem(
- mItemIndex);
- if (!item)
- return;
- if (tradeWindow)
- {
- tradeWindow->addItem2(item->getId(),
- item->getType(),
- item->getCards(),
- 4,
- true,
- mQuantity,
- item->getRefine(),
- item->getColor(),
- item->getIdentified(),
- item->getDamaged(),
- item->getFavorite(),
- item->isEquipment());
- }
- item->increaseQuantity(-mQuantity);
- mItemIndex = -1;
- mQuantity = 0;
- break;
- }
- case 1:
- // Add item failed - player overweighted
- NotifyManager::notify(NotifyTypes::
- TRADE_ADD_PARTNER_OVER_WEIGHT);
- break;
- case 2:
- NotifyManager::notify(NotifyTypes::TRADE_ADD_ERROR);
- break;
- default:
- NotifyManager::notify(NotifyTypes::TRADE_ADD_ERROR);
- UNIMPLIMENTEDPACKET;
- break;
- }
-}
-
-void TradeHandler::processTradeUndo(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- // +++ here need clear trade window from partner side?
-}
-
} // namespace EAthena