summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-08-14 12:48:59 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-08-14 12:48:59 +0000
commit1a68e441ec6d7d529b5c64bfafac56ae45d3f2fb (patch)
tree4289eb20d77c7975fef9f64898b8cdd4d3318193 /src/net
parentf048a4dd4add4a710bb15f77eaedad93f625b0c4 (diff)
downloadmana-1a68e441ec6d7d529b5c64bfafac56ae45d3f2fb.tar.gz
mana-1a68e441ec6d7d529b5c64bfafac56ae45d3f2fb.tar.bz2
mana-1a68e441ec6d7d529b5c64bfafac56ae45d3f2fb.tar.xz
mana-1a68e441ec6d7d529b5c64bfafac56ae45d3f2fb.zip
Removed obsolete code. Added support for money received while trading.
Diffstat (limited to 'src/net')
-rw-r--r--src/net/protocol.h2
-rw-r--r--src/net/tradehandler.cpp132
2 files changed, 7 insertions, 127 deletions
diff --git a/src/net/protocol.h b/src/net/protocol.h
index 1dde518e..3e67e647 100644
--- a/src/net/protocol.h
+++ b/src/net/protocol.h
@@ -117,6 +117,8 @@ enum {
GPMSG_TRADE_ACCEPT = 0x02C7, // -
PGMSG_TRADE_ADD_ITEM = 0x02C8, // B slot, B amount
GPMSG_TRADE_ADD_ITEM = 0x02C9, // W item id, B amount
+ PGMSG_TRADE_SET_MONEY = 0x02CA, // L amount
+ GPMSG_TRADE_SET_MONEY = 0x02CB, // L amount
PGMSG_USE_ITEM = 0x0300, // B slot
GPMSG_USE_RESPONSE = 0x0301, // B error
GPMSG_BEINGS_DAMAGE = 0x0310, // { W being id, W amount }*
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);