/* * Copyright (C) 2008-2016 TrinityCore * * 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 (at your * option) 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 AUCTION_HOUSE_BOT_SELLER_H #define AUCTION_HOUSE_BOT_SELLER_H #include "Define.h" #include "ItemTemplate.h" #include "AuctionHouseBot.h" struct ItemToSell { uint32 Color; uint32 Itemclass; }; typedef std::vector ItemsToSellArray; typedef std::vector> AllItemsArray; struct SellerItemClassInfo { SellerItemClassInfo(): AmountOfItems(0), MissItems(0), Quantity(0), PriceRatio(0) {} uint32 AmountOfItems; uint32 MissItems; uint32 Quantity; uint32 PriceRatio; }; struct SellerItemInfo { SellerItemInfo(): AmountOfItems(0), MissItems(0), PriceRatio(0) {} uint32 AmountOfItems; uint32 MissItems; uint32 PriceRatio; SellerItemClassInfo ItemClassInfos[MAX_ITEM_CLASS]; }; class SellerConfiguration { public: SellerConfiguration(): LastMissedItem(0), _houseType(AUCTION_HOUSE_NEUTRAL), _minTime(1), _maxTime(72) { } ~SellerConfiguration() {} void Initialize(AuctionHouseType houseType) { _houseType = houseType; } AuctionHouseType GetHouseType() const { return _houseType; } uint32 LastMissedItem; void SetMinTime(uint32 value) { _minTime = value; } uint32 GetMinTime() const { return std::min(1u, std::min(_minTime, _maxTime)); } void SetMaxTime(uint32 value) { _maxTime = value; } uint32 GetMaxTime() const { return _maxTime; } // Data access classified by item class and item quality void SetItemsAmountPerClass(AuctionQuality quality, ItemClass itemclass, uint32 amount) { _ItemInfo[quality].ItemClassInfos[itemclass].AmountOfItems = amount * _ItemInfo[quality].ItemClassInfos[itemclass].Quantity; } uint32 GetItemsAmountPerClass(AuctionQuality quality, ItemClass itemclass) const { return _ItemInfo[quality].ItemClassInfos[itemclass].AmountOfItems; } void SetItemsQuantityPerClass(AuctionQuality quality, ItemClass itemclass, uint32 qty) { _ItemInfo[quality].ItemClassInfos[itemclass].Quantity = qty; } uint32 GetItemsQuantityPerClass(AuctionQuality quality, ItemClass itemclass) const { return _ItemInfo[quality].ItemClassInfos[itemclass].Quantity; } void SetMissedItemsPerClass(AuctionQuality quality, ItemClass itemclass, uint32 found) { if (_ItemInfo[quality].ItemClassInfos[itemclass].AmountOfItems > found) _ItemInfo[quality].ItemClassInfos[itemclass].MissItems = _ItemInfo[quality].ItemClassInfos[itemclass].AmountOfItems - found; else _ItemInfo[quality].ItemClassInfos[itemclass].MissItems = 0; } uint32 GetMissedItemsPerClass(AuctionQuality quality, ItemClass itemclass) const { return _ItemInfo[quality].ItemClassInfos[itemclass].MissItems; } // Data for every quality of item void SetItemsAmountPerQuality(AuctionQuality quality, uint32 cnt) { _ItemInfo[quality].AmountOfItems = cnt; } uint32 GetItemsAmountPerQuality(AuctionQuality quality) const { return _ItemInfo[quality].AmountOfItems; } void SetPriceRatioPerQuality(AuctionQuality quality, uint32 value) { _ItemInfo[quality].PriceRatio = value; } uint32 GetPriceRatioPerQuality(AuctionQuality quality) const { return _ItemInfo[quality].PriceRatio; } void SetPriceRatioPerClass(ItemClass item, uint32 value) { _ItemInfo[0].ItemClassInfos[item].PriceRatio = value; } uint32 GetPriceRatioPerClass(ItemClass item) const { return _ItemInfo[0].ItemClassInfos[item].PriceRatio; } private: AuctionHouseType _houseType; uint32 _minTime; uint32 _maxTime; SellerItemInfo _ItemInfo[MAX_AUCTION_QUALITY]; }; // This class handle all Selling method // (holder of AHB_Seller_Config data for each auction house type) class AuctionBotSeller : public AuctionBotAgent { public: typedef std::vector ItemPool; AuctionBotSeller(); ~AuctionBotSeller(); bool Initialize() override; bool Update(AuctionHouseType houseType) override; void AddNewAuctions(SellerConfiguration& config); void SetItemsRatio(uint32 al, uint32 ho, uint32 ne); void SetItemsRatioForHouse(AuctionHouseType house, uint32 val); void SetItemsAmount(uint32(&vals)[MAX_AUCTION_QUALITY]); void SetItemsAmountForQuality(AuctionQuality quality, uint32 val); void LoadConfig(); private: SellerConfiguration _houseConfig[MAX_AUCTION_HOUSE_TYPE]; ItemPool _itemPool[MAX_AUCTION_QUALITY][MAX_ITEM_CLASS]; void LoadSellerValues(SellerConfiguration& config); uint32 SetStat(SellerConfiguration& config); bool GetItemsToSell(SellerConfiguration& config, ItemsToSellArray& itemsToSellArray, AllItemsArray const& addedItem); void SetPricesOfItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& buyp, uint32& bidp, uint32 stackcnt); void LoadItemsQuantity(SellerConfiguration& config); static uint32 GetBuyModifier(ItemTemplate const* prototype); static uint32 GetSellModifier(ItemTemplate const* itemProto); }; #endif