/* * The Mana Client * Copyright (C) 2004-2009 The Mana World Development Team * Copyright (C) 2009-2012 The Mana Developers * * This file is part of The Mana Client. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef SHOPITEM_H #define SHOPITEM_H #include "item.h" #include /** * Represents an item in a shop inventory. It can store quantity and inventory * indices of duplicate entries in the shop as well. */ class ShopItem : public Item { public: /** * Constructor. Creates a new ShopItem. * * @param inventoryIndex the inventory index of the item * @param id the id of the item * @param quantity number of available copies of the item * @param price price of the item */ ShopItem(int inventoryIndex, int id, int quantity, int price); ~ShopItem() override; /** * Add a duplicate. Id and price will be taken from this item. * * @param inventoryIndex the inventory index of the item * @param quantity number of available copies of the item */ void addDuplicate(int inventoryIndex, int quantity); /** * Gets the quantity of the currently topmost duplicate. * * @return the quantity of the currently topmost duplicate */ int getCurrentQuantity() const { return mDuplicates.empty() ? 0 : mDuplicates.top().quantity; } /** * Gets the inventory index of the currently topmost duplicate. * * @return the inventory index of the currently topmost duplicate */ int getCurrentInvIndex() const { return mDuplicates.empty() ? mInvIndex : mDuplicates.top().inventoryIndex; } /** * Reduces the quantity of the topmost duplicate by the specified * amount. Also reduces the total quantity of this DuplicateItem. * Empty duplicates are automatically removed. * * If the amount is bigger than the quantity of the current topmost, * only sell as much as possible. Returns the amount actually sold (do * not ignore the return value!) * * @return the amount, that actually was sold. */ int sellCurrentDuplicate(int quantity); /** * Gets the price of the item. * * @return the price of the item */ int getPrice() const { return mPrice; } /** * Gets the display name for the item in the shop list. * * @return the display name for the item in the shop list */ const std::string &getDisplayName() const { return mDisplayName; } protected: int mPrice; std::string mDisplayName; /** * Struct to keep track of duplicates. */ struct DuplicateItem { int inventoryIndex; int quantity; }; std::stack mDuplicates; /** <-- Stores duplicates */ }; #endif