From 1ad3e55c431b61e6fe6638ee0afc5e8f4c14496c Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 25 Aug 2016 02:55:51 +0300 Subject: Allow buy more than one item at vending shop at once. --- src/gui/windows/buydialog.cpp | 77 +++++++++++++++++++++++++++++-------------- src/gui/windows/buydialog.h | 17 +++++++--- 2 files changed, 66 insertions(+), 28 deletions(-) (limited to 'src/gui/windows') diff --git a/src/gui/windows/buydialog.cpp b/src/gui/windows/buydialog.cpp index eb01e0562..9dc2b8111 100644 --- a/src/gui/windows/buydialog.cpp +++ b/src/gui/windows/buydialog.cpp @@ -26,6 +26,8 @@ #include "configuration.h" #include "units.h" +#include "being/being.h" + #include "gui/windows/setupwindow.h" #include "gui/windows/tradewindow.h" @@ -226,6 +228,26 @@ BuyDialog::BuyDialog(std::string nick) : init(); } +BuyDialog::BuyDialog(const Being *const being) : + // TRANSLATORS: buy dialog name + Window(_("Buy"), Modal_false, nullptr, "buy.xml"), + ActionListener(), + SelectionListener(), + mSortModel(new SortListModelBuy), + mSortDropDown(new DropDown(this, mSortModel, false, + Modal_false, this, "sort")), + mFilterTextField(new TextField(this, "", true, this, "namefilter", true)), + mFilterLabel(nullptr), + mNick(being ? being->getName() : std::string()), + mNpcId(fromInt(Vending, BeingId)), + mMoney(0), + mAmountItems(0), + mMaxItems(0), + mAdvanced(true) +{ + init(); +} + void BuyDialog::init() { setWindowName("Buy"); @@ -446,6 +468,9 @@ void BuyDialog::close() case Cash: cashShopHandler->close(); break; + case Vending: + vendingHandler->close(); + break; default: buySellHandler->close(); break; @@ -523,6 +548,23 @@ void BuyDialog::action(const ActionEvent &event) item->getColor(), mAmountItems); } + else if (mNpcId == fromInt(Nick, BeingId)) + { + if (tradeWindow) + { + buySellHandler->sendBuyRequest(mNick, + item, mAmountItems); + tradeWindow->addAutoMoney(mNick, + item->getPrice() * mAmountItems); + } + } + else if (mNpcId == fromInt(Vending, BeingId)) + { + item->increaseUsedQuantity(mAmountItems); + item->update(); + if (mConfirmButton) + mConfirmButton->setEnabled(true); + } else if (mNpcId != fromInt(Nick, BeingId)) { if (mAdvanced) @@ -558,30 +600,6 @@ void BuyDialog::action(const ActionEvent &event) updateSlider(selectedItem); } - else if (mNpcId == fromInt(Nick, BeingId)) - { - if (serverFeatures->haveVending()) - { - const Being *const being = actorManager->findBeingByName( - mNick); - if (being) - { - vendingHandler->buy(being, - item->getInvIndex(), - mAmountItems); - item->increaseQuantity(-mAmountItems); - item->update(); - updateSlider(selectedItem); - } - } - else if (tradeWindow) - { - buySellHandler->sendBuyRequest(mNick, - item, mAmountItems); - tradeWindow->addAutoMoney(mNick, - item->getPrice() * mAmountItems); - } - } } else if (eventId == "confirm") { @@ -591,6 +609,17 @@ void BuyDialog::action(const ActionEvent &event) { marketHandler->buyItems(items); } + else if (mNpcId == fromInt(Vending, BeingId)) + { + const Being *const being = actorManager->findBeingByName( + mNick, + ActorType::Player); + if (being) + { + vendingHandler->buyItems(being, + items); + } + } else { npcHandler->buyItems(items); diff --git a/src/gui/windows/buydialog.h b/src/gui/windows/buydialog.h index 24e616152..fd346f53a 100644 --- a/src/gui/windows/buydialog.h +++ b/src/gui/windows/buydialog.h @@ -33,6 +33,7 @@ #include "listeners/actionlistener.h" #include "listeners/selectionlistener.h" +class Being; class Button; class DropDown; class ShopItem; @@ -76,6 +77,13 @@ class BuyDialog final : public Window, */ explicit BuyDialog(std::string nick); + /** + * Constructor. + * + * @see Window::Window + */ + explicit BuyDialog(const Being *const being); + A_DELETE_COPY(BuyDialog) /** @@ -85,10 +93,11 @@ class BuyDialog final : public Window, enum { - Nick = -1, - Items = -2, - Market = -3, - Cash = -4 + Nick = -1, + Items = -2, + Market = -3, + Cash = -4, + Vending = -5 }; void init(); -- cgit v1.2.3-60-g2f50