/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* 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"
#include
struct ItemToSell
{
uint32 Color;
uint32 Itemclass;
};
typedef std::vector ItemsToSellArray;
typedef std::array, MAX_ITEM_QUALITY> AllItemsArray;
struct SellerItemInfo
{
uint32 AmountOfItems = 0;
uint32 MissItems = 0;
};
struct SellerItemClassSharedInfo
{
uint32 PriceRatio = 0;
uint32 RandomStackRatio = 100;
};
struct SellerItemQualitySharedInfo
{
uint32 AmountOfItems = 0;
uint32 PriceRatio = 0;
};
class SellerConfiguration
{
public:
SellerConfiguration() : LastMissedItem(0), _houseType(AUCTION_HOUSE_NEUTRAL), _minTime(1), _maxTime(72), _itemInfo(), _itemSharedQualityInfo(), _itemSharedClassInfo() { }
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][itemClass].AmountOfItems = amount; }
uint32 GetItemsAmountPerClass(AuctionQuality quality, ItemClass itemClass) const { return _itemInfo[quality][itemClass].AmountOfItems; }
void SetMissedItemsPerClass(AuctionQuality quality, ItemClass itemClass, uint32 found)
{
if (_itemInfo[quality][itemClass].AmountOfItems > found)
_itemInfo[quality][itemClass].MissItems = _itemInfo[quality][itemClass].AmountOfItems - found;
else
_itemInfo[quality][itemClass].MissItems = 0;
}
uint32 GetMissedItemsPerClass(AuctionQuality quality, ItemClass itemClass) const { return _itemInfo[quality][itemClass].MissItems; }
// Data for every quality of item
void SetItemsAmountPerQuality(AuctionQuality quality, uint32 cnt) { _itemSharedQualityInfo[quality].AmountOfItems = cnt; }
uint32 GetItemsAmountPerQuality(AuctionQuality quality) const { return _itemSharedQualityInfo[quality].AmountOfItems; }
void SetPriceRatioPerQuality(AuctionQuality quality, uint32 value) { _itemSharedQualityInfo[quality].PriceRatio = value; }
uint32 GetPriceRatioPerQuality(AuctionQuality quality) const { return _itemSharedQualityInfo[quality].PriceRatio; }
// data for every class of item
void SetPriceRatioPerClass(ItemClass itemClass, uint32 value) { _itemSharedClassInfo[itemClass].PriceRatio = value; }
uint32 GetPriceRatioPerClass(ItemClass itemClass) const { return _itemSharedClassInfo[itemClass].PriceRatio; }
void SetRandomStackRatioPerClass(ItemClass itemClass, uint32 value) { _itemSharedClassInfo[itemClass].RandomStackRatio = value; }
uint32 GetRandomStackRatioPerClass(ItemClass itemClass) const { return _itemSharedClassInfo[itemClass].RandomStackRatio; }
private:
AuctionHouseType _houseType;
uint32 _minTime;
uint32 _maxTime;
SellerItemInfo _itemInfo[MAX_AUCTION_QUALITY][MAX_ITEM_CLASS];
SellerItemQualitySharedInfo _itemSharedQualityInfo[MAX_ITEM_QUALITY];
SellerItemClassSharedInfo _itemSharedClassInfo[MAX_ITEM_CLASS];
};
// This class handle all Selling method
// (holder of AHB_Seller_Config data for each auction house type)
class TC_GAME_API 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(std::array const& amounts);
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& buyout, uint32& bid, uint32 stackcnt);
uint32 GetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config) const;
void LoadItemsQuantity(SellerConfiguration& config);
static uint32 GetBuyModifier(ItemTemplate const* prototype);
static uint32 GetSellModifier(ItemTemplate const* itemProto);
};
#endif