summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--src/gui/trade.cpp2
-rw-r--r--src/gui/trade.h6
-rw-r--r--src/net/protocol.h2
-rw-r--r--src/net/tradehandler.cpp132
5 files changed, 14 insertions, 131 deletions
diff --git a/ChangeLog b/ChangeLog
index 5633a7aa..f7c396ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@
* src/net/inventoryhandler.cpp: Handled money as an inventory part.
* src/gui/sell.cpp, src/gui/buy.cpp, src/net/gameserver/player.h,
src/net/gameserver/player.cpp: Enabled buying and selling from NPCs.
+ * src/gui/trade.cpp, src/gui/trade.h, src/net/tradehandler.cpp,
+ src/net/protocol.h: Removed old code. Added support for money received
+ while trading.
2007-08-14 Josh Langley <joshlangley[at]optusnet.com.au>
diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp
index 78204120..cf3ad1a5 100644
--- a/src/gui/trade.cpp
+++ b/src/gui/trade.cpp
@@ -131,7 +131,7 @@ TradeWindow::~TradeWindow()
{
}
-void TradeWindow::addMoney(int amount)
+void TradeWindow::setMoney(int amount)
{
mMoneyLabel->setCaption("You get: " + toString(amount) + "z");
mMoneyLabel->adjustSize();
diff --git a/src/gui/trade.h b/src/gui/trade.h
index bffda13f..478d2876 100644
--- a/src/gui/trade.h
+++ b/src/gui/trade.h
@@ -18,7 +18,7 @@
* along with The Mana World; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * $Id $
+ * $Id$
*/
#ifndef _TMW_TRADE_H
@@ -57,9 +57,9 @@ class TradeWindow : public Window, gcn::ActionListener, SelectionListener
~TradeWindow();
/**
- * Add money to the trade window.
+ * Displays expected money in the trade window.
*/
- void addMoney(int quantity);
+ void setMoney(int quantity);
/**
* Add an item to the trade window.
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);