diff options
-rw-r--r-- | src/commands.cpp | 30 | ||||
-rw-r--r-- | src/commands.h | 3 | ||||
-rw-r--r-- | src/gui/buydialog.cpp | 30 | ||||
-rw-r--r-- | src/gui/buydialog.h | 9 | ||||
-rw-r--r-- | src/gui/itemamountwindow.cpp | 2 | ||||
-rw-r--r-- | src/gui/textcommandeditor.cpp | 2 | ||||
-rw-r--r-- | src/net/adminhandler.h | 3 | ||||
-rw-r--r-- | src/net/ea/adminhandler.cpp | 16 | ||||
-rw-r--r-- | src/net/ea/adminhandler.h | 3 | ||||
-rw-r--r-- | src/resources/itemdb.cpp | 2 |
10 files changed, 92 insertions, 8 deletions
diff --git a/src/commands.cpp b/src/commands.cpp index c83001cc1..e0bb195d0 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -33,6 +33,7 @@ #include "nullopenglgraphics.h" #include "party.h" +#include "gui/buydialog.h" #include "gui/chatwindow.h" #include "gui/helpwindow.h" #include "gui/gui.h" @@ -64,6 +65,8 @@ #include "resources/subimage.h" #endif +#include "resources/itemdb.h" +#include "resources/iteminfo.h" #include "resources/resourcemanager.h" #include "utils/gettext.h" @@ -1198,6 +1201,33 @@ impHandler1(testParticle) player_node->setTestParticle(args); } +impHandler0(createItems) +{ + BuyDialog *const dialog = new BuyDialog(); + const ItemDB::ItemInfos &items = ItemDB::getItemInfos(); + FOR_EACH (ItemDB::ItemInfos::const_iterator, it, items) + { + const ItemInfo *const info = (*it).second; + const int id = info->getId(); + if (id <= 0) + continue; + + const int colors = info->getColorsSize(); + if (!colors || serverVersion < 1) + { + dialog->addItem(id, 1, 100, 0); + } + else + { + for (int f = 0; f < colors; f ++) + { + if (!info->getColor(f).empty()) + dialog->addItem(id, f, 100, 0); + } + } + } +} + impHandler0(testsdlfont) { #if defined USE_OPENGL && defined DEBUG_SDLFONT diff --git a/src/commands.h b/src/commands.h index 4b0e2a0f8..933b5a918 100644 --- a/src/commands.h +++ b/src/commands.h @@ -124,6 +124,7 @@ namespace Commands decHandler(disableAway); decHandler(enableAway); decHandler(testParticle); + decHandler(createItems); void replaceVars(std::string &str); } // namespace Commands @@ -215,6 +216,7 @@ enum COMMAND_SETHOME, COMMAND_MAGICATTACK, COMMAND_TEST_PARTICLE, + COMMAND_CREATEITEMS, COMMAND_HACK, END_COMMANDS }; @@ -306,6 +308,7 @@ static const CommandInfo commands[] = {"sethome", nullptr, Input::KEY_SET_HOME, false}, {"magicattack", nullptr, Input::KEY_MAGIC_ATTACK, false}, {"testparticle", &Commands::testParticle, -1, true}, + {"createitems", &Commands::createItems, -1, false}, {"hack", &Commands::hack, -1, true} }; diff --git a/src/gui/buydialog.cpp b/src/gui/buydialog.cpp index a6d56e220..6c9cc0bd7 100644 --- a/src/gui/buydialog.cpp +++ b/src/gui/buydialog.cpp @@ -37,6 +37,7 @@ #include "gui/widgets/shoplistbox.h" #include "gui/widgets/slider.h" +#include "net/adminhandler.h" #include "net/buysellhandler.h" #include "net/net.h" #include "net/npchandler.h" @@ -188,6 +189,18 @@ class SortItemTypeFunctor final BuyDialog::DialogList BuyDialog::instances; +BuyDialog::BuyDialog() : + // TRANSLATORS: buy dialog name + Window(_("Create items"), false, nullptr, "buy.xml"), + gcn::ActionListener(), + gcn::SelectionListener(), + mNpcId(0), mMoney(0), mAmountItems(0), mMaxItems(0), mNick(), + mSortModel(nullptr), + mSortDropDown(nullptr) +{ + init(); +} + BuyDialog::BuyDialog(const int npcId) : // TRANSLATORS: buy dialog name Window(_("Buy"), false, nullptr, "buy.xml"), @@ -210,7 +223,6 @@ BuyDialog::BuyDialog(std::string nick) : mSortDropDown(new DropDown(this, mSortModel, false, false, this, "sort")) { init(); - logger->log("BuyDialog::BuyDialog nick:" + mNick); } void BuyDialog::init() @@ -255,7 +267,8 @@ void BuyDialog::init() // You may change this symbol if your language uses another. mDecreaseButton = new Button(this, _("-"), "dec", this); // TRANSLATORS: buy dialog button - mBuyButton = new Button(this, _("Buy"), "buy", this); + mBuyButton = new Button(this, mNpcId == 0 + ? _("Create") :_("Buy"), "buy", this); // TRANSLATORS: buy dialog button mQuitButton = new Button(this, _("Quit"), "quit", this); // TRANSLATORS: buy dialog button @@ -420,7 +433,13 @@ void BuyDialog::action(const gcn::ActionEvent &event) } else if (eventId == "buy" && mAmountItems > 0 && mAmountItems <= mMaxItems) { - if (mNpcId != -1) + if (!mNpcId) + { + const ShopItem *const item = mShopItems->at(selectedItem); + Net::getAdminHandler()->createItems(item->getId(), + mAmountItems, item->getColor()); + } + else if (mNpcId != -1) { const ShopItem *const item = mShopItems->at(selectedItem); Net::getNpcHandler()->buyItem(mNpcId, item->getId(), @@ -444,7 +463,6 @@ void BuyDialog::action(const gcn::ActionEvent &event) { Net::getBuySellHandler()->sendBuyRequest(mNick, item, mAmountItems); -// logger->log("buy button mNick:" + mNick); if (tradeWindow) { tradeWindow->addAutoMoney(mNick, @@ -480,7 +498,9 @@ void BuyDialog::updateButtonsAndLabels() const int itemPrice = item->getPrice(); // Calculate how many the player can afford - if (itemPrice) + if (!mNpcId) + mMaxItems = 100; + else if (itemPrice) mMaxItems = mMoney / itemPrice; else mMaxItems = 1; diff --git a/src/gui/buydialog.h b/src/gui/buydialog.h index 35cc2d8db..875184851 100644 --- a/src/gui/buydialog.h +++ b/src/gui/buydialog.h @@ -54,10 +54,19 @@ class BuyDialog final : public Window, * * @see Window::Window */ + BuyDialog(); + + /** + * Constructor. + * + * @see Window::Window + */ explicit BuyDialog(const int npcId); /** * Constructor. + * + * @see Window::Window */ explicit BuyDialog(std::string nick); diff --git a/src/gui/itemamountwindow.cpp b/src/gui/itemamountwindow.cpp index 3df003bfb..61760f6d3 100644 --- a/src/gui/itemamountwindow.cpp +++ b/src/gui/itemamountwindow.cpp @@ -53,7 +53,7 @@ public: ItemsModal() : mStrings() { - std::map<int, ItemInfo*> items = ItemDB::getItemInfos(); + const std::map<int, ItemInfo*> &items = ItemDB::getItemInfos(); std::list<std::string> tempStrings; for (std::map<int, ItemInfo*>::const_iterator diff --git a/src/gui/textcommandeditor.cpp b/src/gui/textcommandeditor.cpp index 449196ed8..029089704 100644 --- a/src/gui/textcommandeditor.cpp +++ b/src/gui/textcommandeditor.cpp @@ -57,7 +57,7 @@ public: IconsModal() : mStrings() { - std::map<int, ItemInfo*> items = ItemDB::getItemInfos(); + const std::map<int, ItemInfo*> &items = ItemDB::getItemInfos(); std::list<std::string> tempStrings; for (std::map<int, ItemInfo*>::const_iterator diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h index eca8ef4d0..7178aacae 100644 --- a/src/net/adminhandler.h +++ b/src/net/adminhandler.h @@ -58,6 +58,9 @@ class AdminHandler virtual void warp(const std::string &map, const int x, const int y) const = 0; + + virtual void createItems(const int id, const int color, + const int amount) = 0; }; } // namespace Net diff --git a/src/net/ea/adminhandler.cpp b/src/net/ea/adminhandler.cpp index 0d2245330..9e1956edd 100644 --- a/src/net/ea/adminhandler.cpp +++ b/src/net/ea/adminhandler.cpp @@ -28,6 +28,8 @@ #include "debug.h" +extern int serverVersion; + namespace Ea { @@ -70,4 +72,18 @@ void AdminHandler::warp(const std::string &map, const int x, const int y) const "@warp %s %d %d", map.c_str(), x, y), GENERAL_CHANNEL); } +void AdminHandler::createItems(const int id, const int color, const int amount) +{ + if (serverVersion < 1) + { + Net::getChatHandler()->talk(strprintf("@item %d %d", + id, amount), GENERAL_CHANNEL); + } + else + { + Net::getChatHandler()->talk(strprintf("@item %d %d %d", + id, color, amount), GENERAL_CHANNEL); + } +} + } // namespace Ea diff --git a/src/net/ea/adminhandler.h b/src/net/ea/adminhandler.h index 7112bb75d..fb0ddfd0c 100644 --- a/src/net/ea/adminhandler.h +++ b/src/net/ea/adminhandler.h @@ -55,6 +55,9 @@ class AdminHandler : public Net::AdminHandler virtual void warp(const std::string &map, const int x, const int y) const override; + + void createItems(const int id, const int color, + const int amount); }; } // namespace Ea diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp index a7310036d..8e5551af3 100644 --- a/src/resources/itemdb.cpp +++ b/src/resources/itemdb.cpp @@ -568,7 +568,7 @@ const ItemInfo &ItemDB::get(const std::string &name) return *(i->second); } -const std::map<int, ItemInfo*> &ItemDB::getItemInfos() +const ItemDB::ItemInfos &ItemDB::getItemInfos() { return mItemInfos; } |