diff options
-rw-r--r-- | src/engine.cpp | 2 | ||||
-rw-r--r-- | src/game.cpp | 5 | ||||
-rw-r--r-- | src/gui/inventory.cpp | 4 | ||||
-rw-r--r-- | src/gui/item_amount.cpp | 53 | ||||
-rw-r--r-- | src/gui/item_amount.h | 10 | ||||
-rw-r--r-- | src/gui/trade.cpp | 47 | ||||
-rw-r--r-- | src/gui/trade.h | 5 |
7 files changed, 76 insertions, 50 deletions
diff --git a/src/engine.cpp b/src/engine.cpp index fc88aff4..52f1d11e 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -200,7 +200,7 @@ Engine::Engine() screen->h - chargeDialog->getHeight() - 15); tradeWindow->setPosition(screen->w - statusWindow->getWidth() - tradeWindow->getWidth() - 10, - chatWindow->getHeight() + 15); + inventoryWindow->getY() + inventoryWindow->getHeight()); buddyWindow->setPosition(10, minimap->getHeight() + 30); requestTradeDialog->setPosition(screen->w - statusWindow->getWidth() - diff --git a/src/game.cpp b/src/game.cpp index 18ef46a0..1ec08e0c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -289,6 +289,7 @@ void do_input() if (event.key.keysym.sym == SDLK_ESCAPE) { quitDialog->setVisible(true); + quitDialog->requestMoveToTop(); } if (keysym.sym == SDLK_g && !chatWindow->isFocused()) @@ -815,7 +816,7 @@ void do_parse() break; // Trade: Item added on trade partner's side case 0x00e9: - // todo: + // TODO: // Maybe also handle identified, etc // handle zeny as well @@ -835,7 +836,7 @@ void do_parse() inventoryWindow->unequipItem(RFIFOW(2)); } } - + //TODO: Fix this lines (to handle correct quantity) tradeWindow->addItem( tradeWindow->myItems->getFreeSlot(), inventoryWindow->items->getId(RFIFOW(2)), diff --git a/src/gui/inventory.cpp b/src/gui/inventory.cpp index 38537eb7..088cb81c 100644 --- a/src/gui/inventory.cpp +++ b/src/gui/inventory.cpp @@ -160,8 +160,9 @@ void InventoryWindow::action(const std::string &eventId) } } else if (eventId == "drop") { - itemAmountWindow->resetAmount(); + itemAmountWindow->setUsage(AMOUNT_ITEM_DROP); itemAmountWindow->setVisible(true); + itemAmountWindow->requestMoveToTop(); } } } @@ -214,4 +215,3 @@ void InventoryWindow::updateWidgets() setContentSize(getWidth(), getHeight()); } - diff --git a/src/gui/item_amount.cpp b/src/gui/item_amount.cpp index a63d5a8e..7f609a6c 100644 --- a/src/gui/item_amount.cpp +++ b/src/gui/item_amount.cpp @@ -80,9 +80,28 @@ ItemAmountWindow::~ItemAmountWindow() { void ItemAmountWindow::resetAmount() { amount = 1; - itemAmountLabel->setCaption("1"); + itemAmountLabel->setCaption("1"); } +void ItemAmountWindow::setUsage(int usage) { + resetAmount(); + switch (usage) { + case AMOUNT_TRADE_ADD: + setCaption("Select amount of items to trade."); + itemAmountOkButton->setEventId("AddTrade"); + break; + case AMOUNT_ITEM_DROP: + setCaption("Select amount of items to drop."); + itemAmountOkButton->setEventId("Drop"); + break; + default: + + break; + } + +} + + void ItemAmountWindow::action(const std::string& eventId) { if (eventId == "Cancel") { @@ -93,6 +112,11 @@ void ItemAmountWindow::action(const std::string& eventId) { inventoryWindow->dropItem(inventoryWindow->items->getIndex(), amount); resetAmount(); setVisible(false); + } else if (eventId == "AddTrade") + { + tradeWindow->tradeItem(inventoryWindow->items->getIndex(), amount); + resetAmount(); + setVisible(false); } else if (eventId == "Plus") { if (amount < inventoryWindow->items->getQuantity()) @@ -108,35 +132,10 @@ void ItemAmountWindow::action(const std::string& eventId) { if (amount > 1) { char tmpminus[128]; - amount = amount - 1; + amount--; sprintf(tmpminus, "%i", amount); itemAmountLabel->setCaption(tmpminus); itemAmountLabel->adjustSize(); } } - - /*WFIFOW(0) = net_w_value(0x00bb); - - if (eventId == "STR") { - WFIFOW(2) = net_w_value(0x000d); - } - if (eventId == "AGI") { - WFIFOW(2) = net_w_value(0x000e); - } - if (eventId == "VIT") { - WFIFOW(2) = net_w_value(0x000f); - } - if (eventId == "INT") { - WFIFOW(2) = net_w_value(0x0010); - } - if (eventId == "DEX") { - WFIFOW(2) = net_w_value(0x0011); - } - if (eventId == "LUK") { - WFIFOW(2) = net_w_value(0x0012); - } - - flush(); - WFIFOW(4) = net_b_value(1); - WFIFOSET(5); */ } diff --git a/src/gui/item_amount.h b/src/gui/item_amount.h index c3a06ef1..e0faf5de 100644 --- a/src/gui/item_amount.h +++ b/src/gui/item_amount.h @@ -28,6 +28,9 @@ #include <string> #include <sstream> +#define AMOUNT_TRADE_ADD 1 +#define AMOUNT_ITEM_DROP 2 + class ItemAmountWindow : public Window, public gcn::ActionListener { public: /** @@ -46,13 +49,18 @@ class ItemAmountWindow : public Window, public gcn::ActionListener { void action(const std::string& eventId); /** + * Has to be called before setVisible(true). + */ + void ItemAmountWindow::setUsage(int usage); + + /** * Sets default amount value. */ void resetAmount(); private: /** - * Amount of items to be dropped + * Amount of items to be dropped. */ int amount; diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp index 859731a3..78d15e3d 100644 --- a/src/gui/trade.cpp +++ b/src/gui/trade.cpp @@ -24,6 +24,7 @@ #include "../main.h" #include "../graphics.h" #include "trade.h" +#include "item_amount.h" #include "../resources/resourcemanager.h" #include "../resources/image.h" #include "button.h" @@ -50,7 +51,7 @@ TradeWindow::TradeWindow(): partnerItems = new ItemContainer(); partnerItems->setPosition(2, 58); - + partnerScroll = new ScrollArea(partnerItems); partnerScroll->setPosition(8, 64); @@ -83,14 +84,18 @@ TradeWindow::TradeWindow(): tradeButton->setPosition(getWidth() - 92, getHeight() - 24); cancelButton->setPosition(getWidth() - 52, getHeight() - 24); - myItems->setSize(getWidth() - 24 - 12 - 1, (INVENTORY_SIZE * 24) / (getWidth() / 24) - 1); + myItems->setSize(getWidth() - 24 - 12 - 1, + (INVENTORY_SIZE * 24) / (getWidth() / 24) - 1); myScroll->setSize(getWidth() - 16, (getHeight() - 76) / 2); - partnerItems->setSize(getWidth() - 24 - 12 - 1, (INVENTORY_SIZE * 24) / (getWidth() / 24) - 1); + partnerItems->setSize(getWidth() - 24 - 12 - 1, + (INVENTORY_SIZE * 24) / (getWidth() / 24) - 1); partnerScroll->setSize(getWidth() - 16, (getHeight() - 76) / 2); - itemNameLabel->setPosition(8, partnerScroll->getY() + partnerScroll->getHeight() + 4); - itemDescriptionLabel->setPosition(8, itemNameLabel->getY() + itemNameLabel->getHeight() + 4); + itemNameLabel->setPosition(8, + partnerScroll->getY() + partnerScroll->getHeight() + 4); + itemDescriptionLabel->setPosition(8, + itemNameLabel->getY() + itemNameLabel->getHeight() + 4); setContentSize(getWidth(), getHeight()); } @@ -180,6 +185,15 @@ void TradeWindow::receivedOk(bool own) { } } +void TradeWindow::tradeItem(int index, int quantity) +{ + WFIFOW(0) = net_w_value(0x00e8); + WFIFOW(2) = net_w_value(index); + WFIFOL(4) = net_l_value(quantity); + WFIFOSET(8); + while ((out_size > 0)) flush(); +} + void TradeWindow::mouseClick(int x, int y, int button, int count) { @@ -197,10 +211,12 @@ void TradeWindow::mouseClick(int x, int y, int button, int count) // Show Name and Description std::string SomeText; - SomeText = "Name: " + itemDb->getItemInfo(myItems->getId())->getName(); + SomeText = "Name: " + + itemDb->getItemInfo(myItems->getId())->getName(); itemNameLabel->setCaption(SomeText); itemNameLabel->adjustSize(); - SomeText = "Description: " + itemDb->getItemInfo(myItems->getId())->getDescription(); + SomeText = "Description: " + + itemDb->getItemInfo(myItems->getId())->getDescription(); itemDescriptionLabel->setCaption(SomeText); itemDescriptionLabel->adjustSize(); } @@ -216,10 +232,12 @@ void TradeWindow::mouseClick(int x, int y, int button, int count) // Show Name and Description std::string SomeText; - SomeText = "Name: " + itemDb->getItemInfo(partnerItems->getId())->getName(); + SomeText = "Name: " + + itemDb->getItemInfo(partnerItems->getId())->getName(); itemNameLabel->setCaption(SomeText); itemNameLabel->adjustSize(); - SomeText = "Description: " + itemDb->getItemInfo(partnerItems->getId())->getDescription(); + SomeText = "Description: " + + itemDb->getItemInfo(partnerItems->getId())->getDescription(); itemDescriptionLabel->setCaption(SomeText); itemDescriptionLabel->adjustSize(); } @@ -233,14 +251,9 @@ void TradeWindow::action(const std::string &eventId) if (inventoryWindow->items->getIndex() >= 0 && inventoryWindow->items->getIndex() <= INVENTORY_SIZE) { if (tradeWindow->myItems->getFreeSlot() >= 0) { - - WFIFOW(0) = net_w_value(0x00e8); - WFIFOW(2) = net_w_value(inventoryWindow->items->getIndex()); - WFIFOL(4) = net_l_value(inventoryWindow->items->getQuantity()); - WFIFOSET(8); - //chatWindow->chat_log("add packet sent", BY_SERVER); - while ((out_size > 0)) flush(); - + itemAmountWindow->setUsage(AMOUNT_TRADE_ADD); + itemAmountWindow->setVisible(true); + itemAmountWindow->requestMoveToTop(); } } } else if (eventId == "cancel") { diff --git a/src/gui/trade.h b/src/gui/trade.h index d977efb4..d1b293cf 100644 --- a/src/gui/trade.h +++ b/src/gui/trade.h @@ -90,6 +90,11 @@ class TradeWindow : public Window, gcn::ActionListener { void receivedOk(bool own); /** + * Send trade packet. + */ + void TradeWindow::tradeItem(int index, int quantity); + + /** * Called on mouse click. */ void mouseClick(int x, int y, int button, int count); |