diff options
-rw-r--r-- | src/game.cpp | 9 | ||||
-rw-r--r-- | src/gui/trade.cpp | 60 | ||||
-rw-r--r-- | src/gui/trade.h | 9 |
3 files changed, 68 insertions, 10 deletions
diff --git a/src/game.cpp b/src/game.cpp index 6aad95fd..f41651e2 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -846,11 +846,14 @@ void do_parse() case 0x00e9: // TODO: // Maybe also handle identified, etc - // handle zeny as well - - tradeWindow->addItem( + if (RFIFOW(6) == 0) + { + tradeWindow->addMoney(RFIFOL(2)); + } else { + tradeWindow->addItem( tradeWindow->partnerItems->getFreeSlot(), RFIFOW(6), false, RFIFOL(2), false); + } break; // Trade: New Item add response case 0x01b1: diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp index ff68c402..494032cf 100644 --- a/src/gui/trade.cpp +++ b/src/gui/trade.cpp @@ -29,6 +29,7 @@ #include "../resources/image.h" #include "button.h" #include "scrollarea.h" +#include "textfield.h" #include "../being.h" #include "../engine.h" #include <sstream> @@ -54,12 +55,20 @@ TradeWindow::TradeWindow(): partnerScroll = new ScrollArea(partnerItems); partnerScroll->setPosition(8, 64); - + + moneyLabel = new gcn::Label("You get: 0z"); + moneyField = new TextField(); + addButton->setEventId("add"); okButton->setEventId("ok"); cancelButton->setEventId("cancel"); tradeButton->setEventId("trade"); + addButton->adjustSize(); + okButton->adjustSize(); + cancelButton->adjustSize(); + tradeButton->adjustSize(); + addButton->addActionListener(this); okButton->addActionListener(this); cancelButton->addActionListener(this); @@ -78,11 +87,21 @@ TradeWindow::TradeWindow(): add(tradeButton); add(itemNameLabel); add(itemDescriptionLabel); - - addButton->setPosition(8, getHeight() - 24); - okButton->setPosition(48 + 16, getHeight() - 24); - tradeButton->setPosition(getWidth() - 92, getHeight() - 24); - cancelButton->setPosition(getWidth() - 52, getHeight() - 24); + add(moneyField); + add(moneyLabel); + + moneyField->setPosition(8, getHeight() - 20); + moneyField->setWidth(50); + + moneyLabel->setPosition(8+ 50 + 6, getHeight() - 20); + + cancelButton->setPosition(getWidth() - 48, getHeight() - 24); + tradeButton->setPosition(cancelButton->getX() - 40 + , getHeight() - 24); + okButton->setPosition(tradeButton->getX() - 24, + getHeight() - 24); + addButton->setPosition(okButton->getX() - 32, + getHeight() - 24); myItems->setSize(getWidth() - 24 - 12 - 1, (INVENTORY_SIZE * 24) / (getWidth() / 24) - 1); @@ -112,6 +131,16 @@ TradeWindow::~TradeWindow() delete partnerScroll; delete itemNameLabel; delete itemDescriptionLabel; + delete moneyField; + delete moneyLabel; +} + +void TradeWindow::addMoney(int amount) +{ + std::stringstream tempMoney; + tempMoney << "You get: " << amount << "z"; + moneyLabel->setCaption(tempMoney.str()); + moneyLabel->adjustSize(); } void TradeWindow::addItem(int index, int id, bool own, int quantity, @@ -159,6 +188,8 @@ void TradeWindow::reset() okButton->setEnabled(true); ok_other = false; ok_me = false; + moneyLabel->setCaption("You get: 0z"); + moneyField->setText(""); } void TradeWindow::setTradeButton(bool enabled) @@ -279,6 +310,23 @@ void TradeWindow::action(const std::string &eventId) } else if (eventId == "ok") { + std::stringstream tempMoney[2]; + tempMoney[0] << moneyField->getText(); + int tempInt; + if (tempMoney[0] >> tempInt) + { + tempMoney[1] << tempInt; + moneyField->setText(tempMoney[1].str()); + + WFIFOW(0) = net_w_value(0x00e8); + WFIFOW(2) = net_w_value(0); + WFIFOL(4) = net_l_value(tempInt); + WFIFOSET(8); + while ((out_size > 0)) flush(); + } else { + moneyField->setText(""); + } + WFIFOW(0) = net_w_value(0x00eb); WFIFOSET(2); while ((out_size > 0)) flush(); diff --git a/src/gui/trade.h b/src/gui/trade.h index 90c688c3..5d82f875 100644 --- a/src/gui/trade.h +++ b/src/gui/trade.h @@ -51,7 +51,12 @@ class TradeWindow : public Window, gcn::ActionListener ~TradeWindow(); /** - * Add an item the trade window. + * Add money to the trade window. + */ + void addMoney(int quantity); + + /** + * Add an item to the trade window. */ void addItem(int index, int id, bool own, int quantity, bool equipment); @@ -106,8 +111,10 @@ class TradeWindow : public Window, gcn::ActionListener private: gcn::Label *itemNameLabel; gcn::Label *itemDescriptionLabel; + gcn::Label *moneyLabel; gcn::Button *addButton, *okButton, *cancelButton, *tradeButton; ScrollArea *myScroll, *partnerScroll; + gcn::TextField *moneyField; bool ok_other, ok_me; }; |