TrinityCore
Loading...
Searching...
No Matches
AuctionHouseBot.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef AUCTION_HOUSE_BOT_H
19#define AUCTION_HOUSE_BOT_H
20
21#include "Define.h"
22#include "SharedDefines.h"
23#include <string>
24#include <unordered_map>
25#include <vector>
26
28class AuctionBotBuyer;
29
30// shadow of ItemQualities with skipped ITEM_QUALITY_HEIRLOOM, anything after ITEM_QUALITY_ARTIFACT(6) in fact
31// EnumUtils: DESCRIBE THIS
42
43#define MAX_AUCTION_QUALITY 7
44
45// EnumUtils: DESCRIBE THIS
52
53#define MAX_AUCTION_HOUSE_TYPE 3
54
56{
164
198
206
207// All basic config data used by other AHBot classes for self-configure.
209{
210private:
211 AuctionBotConfig(): _itemsPerCycleBoost(1000), _itemsPerCycleNormal(20) {}
215
216public:
217 static AuctionBotConfig* instance();
218
219 bool Initialize();
220 std::string const& GetAHBotIncludes() const { return _AHBotIncludes; }
221 std::string const& GetAHBotExcludes() const { return _AHBotExcludes; }
222
223 uint32 GetConfig(AuctionBotConfigUInt32Values index) const { return _configUint32Values[index]; }
224 bool GetConfig(AuctionBotConfigBoolValues index) const { return _configBoolValues[index]; }
225 float GetConfig(AuctionBotConfigFloatValues index) const { return _configFloatValues[index]; }
226 void SetConfig(AuctionBotConfigBoolValues index, bool value) { _configBoolValues[index] = value; }
227 void SetConfig(AuctionBotConfigUInt32Values index, uint32 value) { _configUint32Values[index] = value; }
228 void SetConfig(AuctionBotConfigFloatValues index, float value) { _configFloatValues[index] = value; }
229
230 uint32 GetConfigItemAmountRatio(AuctionHouseType houseType) const;
231 uint32 GetConfigPriceRatio(AuctionHouseType houseType) const;
232 bool GetConfigBuyerEnabled(AuctionHouseType houseType) const;
233 uint32 GetConfigItemQualityAmount(AuctionQuality quality) const;
234
235 uint32 GetItemPerCycleBoost() const { return _itemsPerCycleBoost; }
236 uint32 GetItemPerCycleNormal() const { return _itemsPerCycleNormal; }
237 uint32 GetRandChar() const;
238 uint32 GetRandCharExclude(uint32 exclude) const;
239 bool IsBotChar(uint32 characterID) const;
240 void Reload() { GetConfigFromFile(); }
241
242 static char const* GetHouseTypeName(AuctionHouseType houseType);
243
244private:
245 std::string _AHBotIncludes;
246 std::string _AHBotExcludes;
247 std::vector<uint32> _AHBotCharacters;
250
252 bool _configBoolValues[CONFIG_UINT32_AHBOT_BOOL_COUNT];
253 float _configFloatValues[CONFIG_AHBOT_FLOAT_COUNT];
254
255 void SetAHBotIncludes(const std::string& AHBotIncludes) { _AHBotIncludes = AHBotIncludes; }
256 void SetAHBotExcludes(const std::string& AHBotExcludes) { _AHBotExcludes = AHBotExcludes; }
257
258 void SetConfig(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue);
259 void SetConfigMax(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue, uint32 maxvalue);
260 void SetConfigMinMax(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue, uint32 minvalue, uint32 maxvalue);
261 void SetConfig(AuctionBotConfigBoolValues index, char const* fieldname, bool defvalue);
262 void SetConfig(AuctionBotConfigFloatValues index, char const* fieldname, float defvalue);
263 void GetConfigFromFile();
264};
265
266#define sAuctionBotConfig AuctionBotConfig::instance()
267
269{
270public:
272 virtual ~AuctionBotAgent() {}
273 virtual bool Initialize() = 0;
274 virtual bool Update(AuctionHouseType houseType) = 0;
275};
276
278{
280 std::unordered_map<AuctionQuality, uint32> QualityInfo;
281};
282
283// This class handle both Selling and Buying method
284// (holder of AuctionBotBuyer and AuctionBotSeller objects)
286{
287private:
292
293public:
294 static AuctionHouseBot* instance();
295
296 void Update();
297 void Initialize();
298
299 // Followed method is mainly used by cs_ahbot.cpp for in-game/console command
300 void SetItemsRatio(uint32 al, uint32 ho, uint32 ne);
301 void SetItemsRatioForHouse(AuctionHouseType house, uint32 val);
302 void SetItemsAmount(std::array<uint32, MAX_AUCTION_QUALITY> const& amounts);
303 void SetItemsAmountForQuality(AuctionQuality quality, uint32 val);
304 void ReloadAllConfig();
305 void Rebuild(bool all);
306
307 void PrepareStatusInfos(std::unordered_map<AuctionHouseType, AuctionHouseBotStatusInfoPerType>& statusInfo);
308private:
309 void InitializeAgents();
310
313
314 uint32 _operationSelector; // 0..2*MAX_AUCTION_HOUSE_TYPE-1
315};
316
317#define sAuctionBot AuctionHouseBot::instance()
318
319#endif
AuctionBotConfigUInt32Values
@ CONFIG_AHBOT_BUYER_BASEPRICE_GRAY
@ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GRAY
@ CONFIG_AHBOT_NEUTRAL_PRICE_RATIO
@ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_ORANGE
@ CONFIG_AHBOT_BUYER_RECHECK_INTERVAL
@ CONFIG_AHBOT_ITEM_MIN_REQ_LEVEL
@ CONFIG_AHBOT_ITEM_GREEN_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC
@ CONFIG_AHBOT_ITEM_MAX_REQ_LEVEL
@ CONFIG_AHBOT_ITEMS_PER_CYCLE_NORMAL
@ CONFIG_AHBOT_CLASS_GLYPH_PRIORITY
@ CONFIG_AHBOT_BUYER_BASEPRICE_BLUE
@ CONFIG_AHBOT_HORDE_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_QUEST_PRIORITY
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER
@ CONFIG_AHBOT_CLASS_PROJECTILE_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_GEM_PRIORITY
@ CONFIG_AHBOT_CLASS_QUIVER_PRIORITY
@ CONFIG_AHBOT_CLASS_GLYPH_MIN_REQ_LEVEL
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GEM
@ CONFIG_AHBOT_CLASS_CONTAINER_PRICE_RATIO
@ CONFIG_AHBOT_BUYER_BASEPRICE_PURPLE
@ CONFIG_AHBOT_CLASS_MISC_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_PERMANENT_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_SKILL_RANK
@ CONFIG_AHBOT_CLASS_MISC_PRIORITY
@ CONFIG_AHBOT_CLASS_MISC_MOUNT_MAX_SKILL_RANK
@ CONFIG_AHBOT_ITEM_GRAY_PRICE_RATIO
@ CONFIG_AHBOT_ITEMS_PER_CYCLE_BOOST
@ CONFIG_AHBOT_CLASS_RECIPE_PRIORITY
@ CONFIG_AHBOT_CLASS_ARMOR_PRIORITY
@ CONFIG_AHBOT_BUYER_BASEPRICE_YELLOW
@ CONFIG_AHBOT_CLASS_GLYPH_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_TRADEGOOD_PRIORITY
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH
@ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_YELLOW
@ CONFIG_AHBOT_CLASS_TRADEGOOD_MIN_ITEM_LEVEL
@ CONFIG_AHBOT_CLASS_REAGENT_PRIORITY
@ CONFIG_AHBOT_MAXTIME
@ CONFIG_AHBOT_ITEM_ORANGE_AMOUNT
@ CONFIG_AHBOT_CLASS_GLYPH_MAX_ITEM_LEVEL
@ CONFIG_AHBOT_ITEM_WHITE_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_KEY_PRIORITY
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_MISC
@ CONFIG_AHBOT_BUYER_BASEPRICE_ORANGE
@ CONFIG_AHBOT_ITEM_BLUE_AMOUNT
@ CONFIG_AHBOT_HORDE_ITEM_AMOUNT_RATIO
@ CONFIG_AHBOT_CLASS_QUEST_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_REQ_LEVEL
@ CONFIG_AHBOT_CLASS_QUIVER_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_PROJECTILE_PRIORITY
@ CONFIG_AHBOT_CLASS_CONSUMABLE_PRIORITY
@ CONFIG_AHBOT_CLASS_GEM_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_GLYPH_MIN_ITEM_LEVEL
@ CONFIG_AHBOT_CLASS_MONEY_PRICE_RATIO
@ CONFIG_AHBOT_MINTIME
@ CONFIG_AHBOT_CLASS_CONTAINER_PRIORITY
@ CONFIG_AHBOT_CLASS_GENERIC_PRIORITY
@ CONFIG_AHBOT_ITEM_MAX_ITEM_LEVEL
@ CONFIG_AHBOT_CLASS_CONSUMABLE_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_GENERIC_PRICE_RATIO
@ CONFIG_AHBOT_ITEM_GREEN_AMOUNT
@ CONFIG_AHBOT_CLASS_KEY_PRICE_RATIO
@ CONFIG_AHBOT_ITEM_ORANGE_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD
@ CONFIG_AHBOT_CLASS_GLYPH_MAX_REQ_LEVEL
@ CONFIG_AHBOT_BUYER_BASEPRICE_GREEN
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT
@ CONFIG_AHBOT_ITEM_WHITE_AMOUNT
@ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_BLUE
@ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_PURPLE
@ CONFIG_AHBOT_ITEM_MIN_SKILL_RANK
@ CONFIG_UINT32_AHBOT_UINT32_COUNT
@ CONFIG_AHBOT_CLASS_TRADEGOOD_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_WEAPON_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_TRADEGOOD_MAX_ITEM_LEVEL
@ CONFIG_AHBOT_CLASS_ARMOR_PRICE_RATIO
@ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_WHITE
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_WEAPON
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONTAINER
@ CONFIG_AHBOT_ITEM_BLUE_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE
@ CONFIG_AHBOT_ALLIANCE_ITEM_AMOUNT_RATIO
@ CONFIG_AHBOT_CLASS_CONTAINER_MIN_ITEM_LEVEL
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_ARMOR
@ CONFIG_AHBOT_ITEM_GRAY_AMOUNT
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_KEY
@ CONFIG_AHBOT_ITEM_YELLOW_PRICE_RATIO
@ CONFIG_AHBOT_ITEM_MAX_SKILL_RANK
@ CONFIG_AHBOT_NEUTRAL_ITEM_AMOUNT_RATIO
@ CONFIG_AHBOT_ITEM_MIN_ITEM_LEVEL
@ CONFIG_AHBOT_CLASS_REAGENT_PRICE_RATIO
@ CONFIG_AHBOT_ITEM_PURPLE_PRICE_RATIO
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE
@ CONFIG_AHBOT_CLASS_RECIPE_PRICE_RATIO
@ CONFIG_AHBOT_ALLIANCE_PRICE_RATIO
@ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GREEN
@ CONFIG_AHBOT_ITEM_YELLOW_AMOUNT
@ CONFIG_AHBOT_CLASS_CONTAINER_MAX_ITEM_LEVEL
@ CONFIG_AHBOT_ACCOUNT_ID
@ CONFIG_AHBOT_ITEM_PURPLE_AMOUNT
@ CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE
@ CONFIG_AHBOT_CLASS_WEAPON_PRIORITY
@ CONFIG_AHBOT_BUYER_BASEPRICE_WHITE
@ CONFIG_AHBOT_CLASS_MISC_MOUNT_MAX_REQ_LEVEL
AuctionBotConfigFloatValues
@ CONFIG_AHBOT_BIDPRICE_MIN
@ CONFIG_AHBOT_FLOAT_COUNT
@ CONFIG_AHBOT_BUYER_CHANCE_FACTOR
@ CONFIG_AHBOT_BIDPRICE_MAX
AuctionQuality
@ AUCTION_QUALITY_ORANGE
@ AUCTION_QUALITY_WHITE
@ AUCTION_QUALITY_PURPLE
@ AUCTION_QUALITY_BLUE
@ AUCTION_QUALITY_YELLOW
@ AUCTION_QUALITY_GREEN
@ AUCTION_QUALITY_GRAY
AuctionHouseType
@ AUCTION_HOUSE_NEUTRAL
@ AUCTION_HOUSE_HORDE
@ AUCTION_HOUSE_ALLIANCE
AuctionBotConfigBoolValues
@ CONFIG_AHBOT_CLASS_QUIVER_ALLOW_ZERO
@ CONFIG_AHBOT_ITEMS_MISC
@ CONFIG_AHBOT_CLASS_CONSUMABLE_ALLOW_ZERO
@ CONFIG_AHBOT_CLASS_TRADEGOOD_ALLOW_ZERO
@ CONFIG_AHBOT_CLASS_GEM_ALLOW_ZERO
@ CONFIG_AHBOT_CLASS_RECIPE_ALLOW_ZERO
@ CONFIG_AHBOT_CLASS_CONTAINER_ALLOW_ZERO
@ CONFIG_UINT32_AHBOT_BOOL_COUNT
@ CONFIG_AHBOT_CLASS_KEY_ALLOW_ZERO
@ CONFIG_AHBOT_LOCKBOX_ENABLED
@ CONFIG_AHBOT_BUYER_ALLIANCE_ENABLED
@ CONFIG_AHBOT_BUYER_ENABLED
@ CONFIG_AHBOT_CLASS_REAGENT_ALLOW_ZERO
@ CONFIG_AHBOT_BUYER_HORDE_ENABLED
@ CONFIG_AHBOT_CLASS_PROJECTILE_ALLOW_ZERO
@ CONFIG_AHBOT_CLASS_QUEST_ALLOW_ZERO
@ CONFIG_AHBOT_CLASS_ARMOR_ALLOW_ZERO
@ CONFIG_AHBOT_BIND_QUEST
@ CONFIG_AHBOT_ITEMS_VENDOR
@ CONFIG_AHBOT_BIND_EQUIP
@ CONFIG_AHBOT_BIND_NO
@ CONFIG_AHBOT_CLASS_GLYPH_ALLOW_ZERO
@ CONFIG_AHBOT_BIND_PICKUP
@ CONFIG_AHBOT_CLASS_WEAPON_ALLOW_ZERO
@ CONFIG_AHBOT_ITEMS_LOOT
@ CONFIG_AHBOT_SELLER_ENABLED
@ CONFIG_AHBOT_CLASS_MISC_ALLOW_ZERO
@ CONFIG_AHBOT_BIND_USE
@ CONFIG_AHBOT_BUYER_NEUTRAL_ENABLED
@ CONFIG_AHBOT_BUYPRICE_SELLER
#define TC_GAME_API
Definition Define.h:114
uint32_t uint32
Definition Define.h:133
@ ITEM_QUALITY_UNCOMMON
@ ITEM_QUALITY_RARE
@ ITEM_QUALITY_NORMAL
@ ITEM_QUALITY_LEGENDARY
@ ITEM_QUALITY_POOR
@ ITEM_QUALITY_ARTIFACT
@ ITEM_QUALITY_EPIC
virtual ~AuctionBotAgent()
virtual bool Initialize()=0
virtual bool Update(AuctionHouseType houseType)=0
uint32 GetItemPerCycleNormal() const
AuctionBotConfig & operator=(AuctionBotConfig const &)=delete
std::string const & GetAHBotExcludes() const
AuctionBotConfig(AuctionBotConfig const &)=delete
uint32 GetItemPerCycleBoost() const
std::vector< uint32 > _AHBotCharacters
std::string const & GetAHBotIncludes() const
std::string _AHBotIncludes
float GetConfig(AuctionBotConfigFloatValues index) const
uint32 GetConfig(AuctionBotConfigUInt32Values index) const
bool GetConfig(AuctionBotConfigBoolValues index) const
void SetConfig(AuctionBotConfigFloatValues index, float value)
void SetConfig(AuctionBotConfigUInt32Values index, uint32 value)
void SetConfig(AuctionBotConfigBoolValues index, bool value)
void SetAHBotIncludes(const std::string &AHBotIncludes)
std::string _AHBotExcludes
void SetAHBotExcludes(const std::string &AHBotExcludes)
AuctionHouseBot & operator=(AuctionHouseBot const &)=delete
AuctionBotBuyer * _buyer
AuctionHouseBot(AuctionHouseBot const &)=delete
AuctionBotSeller * _seller
std::unordered_map< AuctionQuality, uint32 > QualityInfo