summaryrefslogtreecommitdiff
path: root/src/net/tradehandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/tradehandler.cpp')
-rw-r--r--src/net/tradehandler.cpp132
1 files changed, 5 insertions, 127 deletions
diff --git a/src/net/tradehandler.cpp b/src/net/tradehandler.cpp
index edf1dff7..52553e94 100644
--- a/src/net/tradehandler.cpp
+++ b/src/net/tradehandler.cpp
@@ -64,6 +64,7 @@ TradeHandler::TradeHandler()
GPMSG_TRADE_COMPLETE,
GPMSG_TRADE_ACCEPT,
GPMSG_TRADE_ADD_ITEM,
+ GPMSG_TRADE_SET_MONEY,
0
};
handledMessages = _messages;
@@ -73,133 +74,6 @@ void TradeHandler::handleMessage(MessageIn &msg)
{
switch (msg.getId())
{
-#if 0
- case SMSG_TRADE_REQUEST:
- // If a trade window or request window is already open, send a
- // trade cancel to any other trade request.
- //
- // Note that it would be nice if the server would prevent this
- // situation, and that the requesting player would get a
- // special message about the player being occupied.
- if (!player_node->tradeRequestOk())
- {
- player_node->tradeReply(false);
- break;
- }
-
- player_node->setTrading(true);
- tradePartnerName = msg.readString(24);
- ConfirmDialog *dlg;
- dlg = new ConfirmDialog("Request for trade",
- tradePartnerName +
- " wants to trade with you, do you accept?");
- dlg->addActionListener(&listener);
- break;
-
- case SMSG_TRADE_RESPONSE:
- switch (msg.readByte())
- {
- case 0: // Too far away
- chatWindow->chatLog("Trading isn't possible. "
- "Trade partner is too far away.",
- BY_SERVER);
- break;
- case 1: // Character doesn't exist
- chatWindow->chatLog("Trading isn't possible. "
- "Character doesn't exist.",
- BY_SERVER);
- break;
- case 2: // Invite request check failed...
- chatWindow->chatLog("Trade cancelled due to an "
- "unknown reason.", BY_SERVER);
- break;
- case 3: // Trade accepted
- tradeWindow->reset();
- tradeWindow->setCaption(
- "Trade: You and " + tradePartnerName);
- tradeWindow->setVisible(true);
- break;
- case 4: // Trade cancelled
- chatWindow->chatLog("Trade cancelled.", BY_SERVER);
- tradeWindow->setVisible(false);
- player_node->setTrading(false);
- break;
- default: // Shouldn't happen as well, but to be sure
- chatWindow->chatLog("Unhandled trade cancel packet",
- BY_SERVER);
- break;
- }
- break;
-
- case SMSG_TRADE_ITEM_ADD:
- {
- Sint32 amount = msg.readLong();
- Sint16 type = msg.readShort();
- msg.readByte(); // identified flag
- msg.readByte(); // attribute
- msg.readByte(); // refine
-
- // TODO: handle also identified, etc
- if (type == 0) {
- tradeWindow->addMoney(amount);
- } else {
- tradeWindow->addItem(type, false, amount, false);
- }
- }
- break;
-
- case SMSG_TRADE_ITEM_ADD_RESPONSE:
- // Trade: New Item add response (was 0x00ea, now 01b1)
- {
- Item *item = player_node->getInvItem(msg.readShort());
- Sint16 quantity = msg.readShort();
-
- switch (msg.readByte())
- {
- case 0:
- // Successfully added item
- if (item->isEquipment() && item->isEquipped())
- {
- player_node->unequipItem(item);
- }
- tradeWindow->addItem(item->getId(), true, quantity,
- item->isEquipment());
- item->increaseQuantity(-quantity);
- break;
- case 1:
- // Add item failed - player overweighted
- chatWindow->chatLog("Failed adding item. Trade "
- "partner is over weighted.",
- BY_SERVER);
- break;
- default:
- chatWindow->chatLog("Failed adding item for "
- "unknown reason.", BY_SERVER);
- break;
- }
- }
- break;
-
- case SMSG_TRADE_OK:
- // 0 means ok from myself, 1 means ok from other;
- tradeWindow->receivedOk(msg.readByte() == 0);
- break;
-
- case SMSG_TRADE_CANCEL:
- chatWindow->chatLog("Trade canceled.", BY_SERVER);
- tradeWindow->setVisible(false);
- tradeWindow->reset();
- player_node->setTrading(false);
- break;
-
- case SMSG_TRADE_COMPLETE:
- chatWindow->chatLog("Trade completed.", BY_SERVER);
- tradeWindow->setVisible(false);
- tradeWindow->reset();
- player_node->setTrading(false);
- break;
-#endif
-
case GPMSG_TRADE_REQUEST:
{
Being *being = beingManager->findBeing(msg.readShort());
@@ -223,6 +97,10 @@ void TradeHandler::handleMessage(MessageIn &msg)
tradeWindow->addItem(type, false, amount);
} break;
+ case GPMSG_TRADE_SET_MONEY:
+ tradeWindow->setMoney(msg.readLong());
+ break;
+
case GPMSG_TRADE_START:
tradeWindow->reset();
tradeWindow->setCaption("Trading with " + tradePartnerName);