TrinityCore
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 "ObjectGuid.h"
23#include "SharedDefines.h"
24#include <string>
25#include <unordered_map>
26#include <vector>
27
29class AuctionBotBuyer;
30
31// shadow of ItemQualities with skipped ITEM_QUALITY_HEIRLOOM, anything after ITEM_QUALITY_ARTIFACT(6) in fact
32// EnumUtils: DESCRIBE THIS
34{
42};
43
44#define MAX_AUCTION_QUALITY 7
45
46// EnumUtils: DESCRIBE THIS
48{
52};
53
54#define MAX_AUCTION_HOUSE_TYPE 3
55
57{
165
167{
199
201{
207
208// All basic config data used by other AHBot classes for self-configure.
210{
211private:
212 AuctionBotConfig(): _itemsPerCycleBoost(1000), _itemsPerCycleNormal(20), _configUint32Values(), _configBoolValues(), _configFloatValues() { }
216
217public:
218 static AuctionBotConfig* instance();
219
220 bool Initialize();
221 std::string const& GetAHBotIncludes() const { return _AHBotIncludes; }
222 std::string const& GetAHBotExcludes() const { return _AHBotExcludes; }
223
224 uint32 GetConfig(AuctionBotConfigUInt32Values index) const { return _configUint32Values[index]; }
225 bool GetConfig(AuctionBotConfigBoolValues index) const { return _configBoolValues[index]; }
226 float GetConfig(AuctionBotConfigFloatValues index) const { return _configFloatValues[index]; }
227 void SetConfig(AuctionBotConfigBoolValues index, bool value) { _configBoolValues[index] = value; }
228 void SetConfig(AuctionBotConfigUInt32Values index, uint32 value) { _configUint32Values[index] = value; }
229 void SetConfig(AuctionBotConfigFloatValues index, float value) { _configFloatValues[index] = value; }
230
231 uint32 GetConfigItemAmountRatio(AuctionHouseType houseType) const;
232 uint32 GetConfigPriceRatio(AuctionHouseType houseType) const;
233 bool GetConfigBuyerEnabled(AuctionHouseType houseType) const;
234 uint32 GetConfigItemQualityAmount(AuctionQuality quality) const;
235
236 uint32 GetItemPerCycleBoost() const { return _itemsPerCycleBoost; }
237 uint32 GetItemPerCycleNormal() const { return _itemsPerCycleNormal; }
238 ObjectGuid GetRandChar() const;
239 ObjectGuid GetRandCharExclude(ObjectGuid exclude) const;
240 bool IsBotChar(ObjectGuid characterID) const;
241 void Reload() { GetConfigFromFile(); }
242
243 uint32 GetAuctionHouseId(AuctionHouseType houseType) const;
244 static char const* GetHouseTypeName(AuctionHouseType houseType);
245
246private:
247 std::string _AHBotIncludes;
248 std::string _AHBotExcludes;
249 std::vector<ObjectGuid> _AHBotCharacters;
252
254 bool _configBoolValues[CONFIG_UINT32_AHBOT_BOOL_COUNT];
255 float _configFloatValues[CONFIG_AHBOT_FLOAT_COUNT];
256
257 void SetAHBotIncludes(const std::string& AHBotIncludes) { _AHBotIncludes = AHBotIncludes; }
258 void SetAHBotExcludes(const std::string& AHBotExcludes) { _AHBotExcludes = AHBotExcludes; }
259
260 void SetConfig(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue);
261 void SetConfigMax(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue, uint32 maxvalue);
262 void SetConfigMinMax(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue, uint32 minvalue, uint32 maxvalue);
263 void SetConfig(AuctionBotConfigBoolValues index, char const* fieldname, bool defvalue);
264 void SetConfig(AuctionBotConfigFloatValues index, char const* fieldname, float defvalue);
265 void GetConfigFromFile();
266};
267
268#define sAuctionBotConfig AuctionBotConfig::instance()
269
271{
272public:
274 virtual ~AuctionBotAgent() {}
275 virtual bool Initialize() = 0;
276 virtual bool Update(AuctionHouseType houseType) = 0;
277};
278
280{
282 std::unordered_map<AuctionQuality, uint32> QualityInfo;
283};
284
285// This class handle both Selling and Buying method
286// (holder of AuctionBotBuyer and AuctionBotSeller objects)
288{
289private:
294
295public:
296 static AuctionHouseBot* instance();
297
298 void Update();
299 void Initialize();
300
301 // Followed method is mainly used by cs_ahbot.cpp for in-game/console command
302 void SetItemsRatio(uint32 al, uint32 ho, uint32 ne);
303 void SetItemsRatioForHouse(AuctionHouseType house, uint32 val);
304 void SetItemsAmount(std::array<uint32, MAX_AUCTION_QUALITY> const& amounts);
305 void SetItemsAmountForQuality(AuctionQuality quality, uint32 val);
306 void ReloadAllConfig();
307 void Rebuild(bool all);
308
309 void PrepareStatusInfos(std::unordered_map<AuctionHouseType, AuctionHouseBotStatusInfoPerType>& statusInfo);
310private:
311 void InitializeAgents();
312
315
316 uint32 _operationSelector; // 0..2*MAX_AUCTION_HOUSE_TYPE-1
317};
318
319#define sAuctionBot AuctionHouseBot::instance()
320
321#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:123
uint32_t uint32
Definition: Define.h:142
@ 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::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)
std::vector< ObjectGuid > _AHBotCharacters
AuctionHouseBot & operator=(AuctionHouseBot const &)=delete
AuctionBotBuyer * _buyer
AuctionHouseBot(AuctionHouseBot const &)=delete
AuctionBotSeller * _seller
void Update(VignetteData &vignette, WorldObject const *owner)
Definition: Vignette.cpp:90
std::unordered_map< AuctionQuality, uint32 > QualityInfo