mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/AHBot: Refactor of AuctionHouseBotSeller:
- Use AuctionHouseBot.Class.* for what they really are, priorities, factor them when calculating item amount per class, changed enums to CONFIG_AHBOT_CLASS_*_PRIORITY to reflect this change
- Don't factor in the priority calc empty item lists:
* Let's say you had AuctionHouseBot.Class.Glyph set to 10, sum of AuctionHouseBot.Class.* is 20, and AuctionHouseBot.Items.Amount.White is 5000
* If there were no glyphs on the item list, you automatically lost 50% of the total item amount, meaning only 2500 of original 5000 were alloted to fill
- Fixed AuctionHouseBot.AH.Price.Ratio to be an actual percentage factor
- Separated containers in SellerConfiguration, each one better reflects what kind of data is stored there, now we won't use magic index 0 from _ItemInfo :P
- General cleanup, removal of bad voodoo and magical numbers
- Use unordered_sets for loading item lists, as they were only used to check for item presence
(cherry picked from commit 7f8bfe68d0)
This commit is contained in:
@@ -179,21 +179,21 @@ void AuctionBotConfig::GetConfigFromFile()
|
||||
SetConfig(CONFIG_AHBOT_ITEM_ORANGE_AMOUNT, "AuctionHouseBot.Items.Amount.Orange", 0);
|
||||
SetConfig(CONFIG_AHBOT_ITEM_YELLOW_AMOUNT, "AuctionHouseBot.Items.Amount.Yellow", 0);
|
||||
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT, "AuctionHouseBot.Class.Consumable", 6, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT, "AuctionHouseBot.Class.Container", 4, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT, "AuctionHouseBot.Class.Weapon", 8, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_GEM_AMOUNT, "AuctionHouseBot.Class.Gem", 3, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT, "AuctionHouseBot.Class.Armor", 8, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_REAGENT_AMOUNT, "AuctionHouseBot.Class.Reagent", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT, "AuctionHouseBot.Class.Projectile", 2, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT, "AuctionHouseBot.Class.TradeGood", 10, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_GENERIC_AMOUNT, "AuctionHouseBot.Class.Generic", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT, "AuctionHouseBot.Class.Recipe", 6, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT, "AuctionHouseBot.Class.Quiver", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_QUEST_AMOUNT, "AuctionHouseBot.Class.Quest", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_KEY_AMOUNT, "AuctionHouseBot.Class.Key", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_MISC_AMOUNT, "AuctionHouseBot.Class.Misc", 5, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_GLYPH_AMOUNT, "AuctionHouseBot.Class.Glyph", 3, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_CONSUMABLE_PRIORITY, "AuctionHouseBot.Class.Consumable", 6, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_CONTAINER_PRIORITY, "AuctionHouseBot.Class.Container", 4, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_WEAPON_PRIORITY, "AuctionHouseBot.Class.Weapon", 8, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_GEM_PRIORITY, "AuctionHouseBot.Class.Gem", 3, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_ARMOR_PRIORITY, "AuctionHouseBot.Class.Armor", 8, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_REAGENT_PRIORITY, "AuctionHouseBot.Class.Reagent", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_PROJECTILE_PRIORITY, "AuctionHouseBot.Class.Projectile", 2, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_TRADEGOOD_PRIORITY, "AuctionHouseBot.Class.TradeGood", 10, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_GENERIC_PRIORITY, "AuctionHouseBot.Class.Generic", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_RECIPE_PRIORITY, "AuctionHouseBot.Class.Recipe", 6, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_QUIVER_PRIORITY, "AuctionHouseBot.Class.Quiver", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_QUEST_PRIORITY, "AuctionHouseBot.Class.Quest", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_KEY_PRIORITY, "AuctionHouseBot.Class.Key", 1, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_MISC_PRIORITY, "AuctionHouseBot.Class.Misc", 5, 10);
|
||||
SetConfigMax(CONFIG_AHBOT_CLASS_GLYPH_PRIORITY, "AuctionHouseBot.Class.Glyph", 3, 10);
|
||||
|
||||
SetConfig(CONFIG_AHBOT_ALLIANCE_PRICE_RATIO, "AuctionHouseBot.Alliance.Price.Ratio", 100);
|
||||
SetConfig(CONFIG_AHBOT_HORDE_PRICE_RATIO, "AuctionHouseBot.Horde.Price.Ratio", 100);
|
||||
@@ -351,6 +351,19 @@ uint32 AuctionBotConfig::GetConfigItemAmountRatio(AuctionHouseType houseType) co
|
||||
}
|
||||
}
|
||||
|
||||
uint32 AuctionBotConfig::GetConfigPriceRatio(AuctionHouseType houseType) const
|
||||
{
|
||||
switch (houseType)
|
||||
{
|
||||
case AUCTION_HOUSE_ALLIANCE:
|
||||
return GetConfig(CONFIG_AHBOT_ALLIANCE_PRICE_RATIO);
|
||||
case AUCTIONHOUSE_HORDE:
|
||||
return GetConfig(CONFIG_AHBOT_HORDE_PRICE_RATIO);
|
||||
default:
|
||||
return GetConfig(CONFIG_AHBOT_NEUTRAL_PRICE_RATIO);
|
||||
}
|
||||
}
|
||||
|
||||
bool AuctionBotConfig::GetConfigBuyerEnabled(AuctionHouseType houseType) const
|
||||
{
|
||||
switch (houseType)
|
||||
|
||||
@@ -71,21 +71,21 @@ enum AuctionBotConfigUInt32Values
|
||||
CONFIG_AHBOT_ITEM_PURPLE_AMOUNT,
|
||||
CONFIG_AHBOT_ITEM_ORANGE_AMOUNT,
|
||||
CONFIG_AHBOT_ITEM_YELLOW_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_WEAPON_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_GEM_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_ARMOR_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_REAGENT_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_GENERIC_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_RECIPE_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_QUIVER_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_QUEST_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_KEY_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_MISC_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_GLYPH_AMOUNT,
|
||||
CONFIG_AHBOT_CLASS_CONSUMABLE_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_CONTAINER_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_WEAPON_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_GEM_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_ARMOR_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_REAGENT_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_PROJECTILE_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_TRADEGOOD_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_GENERIC_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_RECIPE_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_QUIVER_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_QUEST_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_KEY_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_MISC_PRIORITY,
|
||||
CONFIG_AHBOT_CLASS_GLYPH_PRIORITY,
|
||||
CONFIG_AHBOT_ALLIANCE_PRICE_RATIO,
|
||||
CONFIG_AHBOT_HORDE_PRICE_RATIO,
|
||||
CONFIG_AHBOT_NEUTRAL_PRICE_RATIO,
|
||||
@@ -205,8 +205,8 @@ enum AuctionBotConfigFloatValues
|
||||
class TC_GAME_API AuctionBotConfig
|
||||
{
|
||||
private:
|
||||
AuctionBotConfig(): _itemsPerCycleBoost(1000), _itemsPerCycleNormal(20) { }
|
||||
~AuctionBotConfig() { }
|
||||
AuctionBotConfig(): _itemsPerCycleBoost(1000), _itemsPerCycleNormal(20) {}
|
||||
~AuctionBotConfig() {}
|
||||
AuctionBotConfig(AuctionBotConfig const&) = delete;
|
||||
AuctionBotConfig& operator=(AuctionBotConfig const&) = delete;
|
||||
|
||||
@@ -225,6 +225,7 @@ public:
|
||||
void SetConfig(AuctionBotConfigFloatValues index, float value) { _configFloatValues[index] = value; }
|
||||
|
||||
uint32 GetConfigItemAmountRatio(AuctionHouseType houseType) const;
|
||||
uint32 GetConfigPriceRatio(AuctionHouseType houseType) const;
|
||||
bool GetConfigBuyerEnabled(AuctionHouseType houseType) const;
|
||||
uint32 GetConfigItemQualityAmount(AuctionQuality quality) const;
|
||||
|
||||
@@ -286,8 +287,8 @@ class TC_GAME_API AuctionHouseBot
|
||||
private:
|
||||
AuctionHouseBot();
|
||||
~AuctionHouseBot();
|
||||
AuctionHouseBot(const AuctionHouseBot&);
|
||||
AuctionHouseBot& operator=(const AuctionHouseBot&);
|
||||
AuctionHouseBot(AuctionHouseBot const&) = delete;
|
||||
AuctionHouseBot& operator=(AuctionHouseBot const&) = delete;
|
||||
|
||||
public:
|
||||
static AuctionHouseBot* instance();
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "GameTime.h"
|
||||
#include "Item.h"
|
||||
#include "Log.h"
|
||||
#include "Containers.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Random.h"
|
||||
#include <sstream>
|
||||
@@ -29,7 +30,7 @@
|
||||
AuctionBotSeller::AuctionBotSeller()
|
||||
{
|
||||
// Define faction for our main data class.
|
||||
for (int i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i)
|
||||
for (uint8 i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i)
|
||||
_houseConfig[i].Initialize(AuctionHouseType(i));
|
||||
}
|
||||
|
||||
@@ -117,11 +118,11 @@ bool AuctionBotSeller::Initialize()
|
||||
continue;
|
||||
|
||||
// forced exclude filter
|
||||
if (excludeItems.find(itemId) != excludeItems.end())
|
||||
if (excludeItems.count(itemId))
|
||||
continue;
|
||||
|
||||
// forced include filter
|
||||
if (includeItems.find(itemId) != includeItems.end())
|
||||
if (includeItems.count(itemId))
|
||||
{
|
||||
_itemPool[prototype->GetQuality()][prototype->GetClass()].push_back(itemId);
|
||||
++itemsAdded;
|
||||
@@ -207,19 +208,20 @@ bool AuctionBotSeller::Initialize()
|
||||
|
||||
// vendor filter
|
||||
if (!sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEMS_VENDOR))
|
||||
if (npcItems.find(itemId) != npcItems.end())
|
||||
if (npcItems.count(itemId))
|
||||
continue;
|
||||
|
||||
// loot filter
|
||||
if (!sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEMS_LOOT))
|
||||
if (lootItems.find(itemId) != lootItems.end())
|
||||
if (lootItems.count(itemId))
|
||||
continue;
|
||||
|
||||
// not vendor/loot filter
|
||||
if (!sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEMS_MISC))
|
||||
{
|
||||
bool isVendorItem = npcItems.find(itemId) != npcItems.end();
|
||||
bool isLootItem = lootItems.find(itemId) != lootItems.end();
|
||||
bool const isVendorItem = npcItems.count(itemId) > 0;
|
||||
bool const isLootItem = lootItems.count(itemId) > 0;
|
||||
|
||||
if (!isLootItem && !isVendorItem)
|
||||
continue;
|
||||
}
|
||||
@@ -368,7 +370,7 @@ bool AuctionBotSeller::Initialize()
|
||||
|
||||
void AuctionBotSeller::LoadConfig()
|
||||
{
|
||||
for (int i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i)
|
||||
for (uint8 i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i)
|
||||
if (sAuctionBotConfig->GetConfigItemAmountRatio(AuctionHouseType(i)))
|
||||
LoadSellerValues(_houseConfig[i]);
|
||||
}
|
||||
@@ -377,129 +379,11 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
|
||||
{
|
||||
uint32 ratio = sAuctionBotConfig->GetConfigItemAmountRatio(config.GetHouseType());
|
||||
|
||||
config.SetItemsAmountPerQuality(AUCTION_QUALITY_GRAY, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_GRAY_AMOUNT) * ratio / 100);
|
||||
config.SetItemsAmountPerQuality(AUCTION_QUALITY_WHITE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_WHITE_AMOUNT) * ratio / 100);
|
||||
config.SetItemsAmountPerQuality(AUCTION_QUALITY_GREEN, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_GREEN_AMOUNT) * ratio / 100);
|
||||
config.SetItemsAmountPerQuality(AUCTION_QUALITY_BLUE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_BLUE_AMOUNT) * ratio / 100);
|
||||
config.SetItemsAmountPerQuality(AUCTION_QUALITY_PURPLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_PURPLE_AMOUNT) * ratio / 100);
|
||||
config.SetItemsAmountPerQuality(AUCTION_QUALITY_ORANGE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_ORANGE_AMOUNT) * ratio / 100);
|
||||
config.SetItemsAmountPerQuality(AUCTION_QUALITY_YELLOW, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_YELLOW_AMOUNT) * ratio / 100);
|
||||
|
||||
// Set quantity wanted but only on possible item color
|
||||
// This avoid any no-exist class-color items selection by random items create function
|
||||
// ============================================================================================
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_CONSUMABLE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_CONTAINER, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_GEM, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_REAGENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_PROJECTILE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_RECIPE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_QUIVER, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_KEY, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_MISCELLANEOUS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MISC_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_GLYPH, 0);
|
||||
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_CONTAINER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_GEM, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GEM_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_REAGENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_REAGENT_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_ITEM_ENHANCEMENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GENERIC_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_KEY, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_KEY_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_MISCELLANEOUS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MISC_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_GLYPH, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GLYPH_AMOUNT));
|
||||
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_CONTAINER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_GEM, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GEM_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_REAGENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_KEY, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_KEY_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_MISCELLANEOUS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MISC_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_GLYPH, 0);
|
||||
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_CONTAINER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_GEM, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GEM_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_REAGENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_KEY, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_MISCELLANEOUS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MISC_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_GLYPH, 0);
|
||||
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_CONTAINER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_GEM, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GEM_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_REAGENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_QUIVER, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_KEY, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_MISCELLANEOUS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MISC_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_GLYPH, 0);
|
||||
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_CONSUMABLE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_CONTAINER, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_GEM, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_REAGENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_PROJECTILE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_RECIPE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_QUIVER, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_QUEST, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_KEY, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_MISCELLANEOUS, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_GLYPH, 0);
|
||||
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_CONSUMABLE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_CONTAINER, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_GEM, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT));
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_REAGENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_PROJECTILE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_TRADE_GOODS, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_RECIPE, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_QUIVER, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_QUEST, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_KEY, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_MISCELLANEOUS, 0);
|
||||
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_GLYPH, 0);
|
||||
// ============================================================================================
|
||||
for (uint32 i = 0; i < MAX_AUCTION_QUALITY; ++i)
|
||||
{
|
||||
uint32 amount = sAuctionBotConfig->GetConfig(AuctionBotConfigUInt32Values(CONFIG_AHBOT_ITEM_GRAY_AMOUNT + i));
|
||||
config.SetItemsAmountPerQuality(AuctionQuality(i), std::lroundf(amount * ratio / 100.f));
|
||||
}
|
||||
|
||||
// Set Stack Quantities
|
||||
config.SetRandomStackRatioPerClass(ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE));
|
||||
@@ -519,44 +403,94 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
|
||||
config.SetRandomStackRatioPerClass(ITEM_CLASS_GLYPH, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH));
|
||||
|
||||
// Set the best value to get nearest amount of items wanted
|
||||
auto getPriorityForClass = [](uint32 itemClass) -> uint32
|
||||
{
|
||||
AuctionBotConfigUInt32Values index;
|
||||
switch (itemClass)
|
||||
{
|
||||
case ITEM_CLASS_CONSUMABLE:
|
||||
index = CONFIG_AHBOT_CLASS_CONSUMABLE_PRIORITY; break;
|
||||
case ITEM_CLASS_CONTAINER:
|
||||
index = CONFIG_AHBOT_CLASS_CONTAINER_PRIORITY; break;
|
||||
case ITEM_CLASS_WEAPON:
|
||||
index = CONFIG_AHBOT_CLASS_WEAPON_PRIORITY; break;
|
||||
case ITEM_CLASS_GEM:
|
||||
index = CONFIG_AHBOT_CLASS_GEM_PRIORITY; break;
|
||||
case ITEM_CLASS_ARMOR:
|
||||
index = CONFIG_AHBOT_CLASS_ARMOR_PRIORITY; break;
|
||||
case ITEM_CLASS_REAGENT:
|
||||
index = CONFIG_AHBOT_CLASS_REAGENT_PRIORITY; break;
|
||||
case ITEM_CLASS_PROJECTILE:
|
||||
index = CONFIG_AHBOT_CLASS_PROJECTILE_PRIORITY; break;
|
||||
case ITEM_CLASS_TRADE_GOODS:
|
||||
index = CONFIG_AHBOT_CLASS_TRADEGOOD_PRIORITY; break;
|
||||
case ITEM_CLASS_ITEM_ENHANCEMENT:
|
||||
index = CONFIG_AHBOT_CLASS_GENERIC_PRIORITY; break;
|
||||
case ITEM_CLASS_RECIPE:
|
||||
index = CONFIG_AHBOT_CLASS_RECIPE_PRIORITY; break;
|
||||
case ITEM_CLASS_QUIVER:
|
||||
index = CONFIG_AHBOT_CLASS_QUIVER_PRIORITY; break;
|
||||
case ITEM_CLASS_QUEST:
|
||||
index = CONFIG_AHBOT_CLASS_QUEST_PRIORITY; break;
|
||||
case ITEM_CLASS_KEY:
|
||||
index = CONFIG_AHBOT_CLASS_KEY_PRIORITY; break;
|
||||
case ITEM_CLASS_MISCELLANEOUS:
|
||||
index = CONFIG_AHBOT_CLASS_MISC_PRIORITY; break;
|
||||
case ITEM_CLASS_GLYPH:
|
||||
index = CONFIG_AHBOT_CLASS_GLYPH_PRIORITY; break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return sAuctionBotConfig->GetConfig(index);
|
||||
};
|
||||
|
||||
std::vector<uint32> totalPrioPerQuality(MAX_AUCTION_QUALITY);
|
||||
for (uint32 j = 0; j < MAX_AUCTION_QUALITY; ++j)
|
||||
{
|
||||
uint32 index = config.GetItemsAmountPerQuality(AuctionQuality(j)) /
|
||||
(sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT) +
|
||||
sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GEM_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_REAGENT_AMOUNT) +
|
||||
sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GENERIC_AMOUNT) +
|
||||
sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT) +
|
||||
sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_KEY_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MISC_AMOUNT) + sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GLYPH_AMOUNT));
|
||||
for (uint32 i = 0; i < MAX_ITEM_CLASS; ++i)
|
||||
{
|
||||
// skip empty pools
|
||||
if (_itemPool[j][i].empty())
|
||||
continue;
|
||||
|
||||
totalPrioPerQuality[j] += getPriorityForClass(i);
|
||||
}
|
||||
}
|
||||
|
||||
for (uint32 j = 0; j < MAX_AUCTION_QUALITY; ++j)
|
||||
{
|
||||
uint32 qualityAmount = config.GetItemsAmountPerQuality(AuctionQuality(j));
|
||||
if (!totalPrioPerQuality[j])
|
||||
continue;
|
||||
|
||||
for (uint32 i = 0; i < MAX_ITEM_CLASS; ++i)
|
||||
config.SetItemsAmountPerClass(AuctionQuality(j), ItemClass(i), index);
|
||||
{
|
||||
uint32 classPrio = getPriorityForClass(i);
|
||||
if (_itemPool[j][i].empty())
|
||||
classPrio = 0;
|
||||
|
||||
uint32 weightedAmount = std::lroundf(classPrio / float(totalPrioPerQuality[j]) * qualityAmount);
|
||||
config.SetItemsAmountPerClass(AuctionQuality(j), ItemClass(i), weightedAmount);
|
||||
}
|
||||
}
|
||||
|
||||
// do some assert checking, GetItemAmount must always return 0 iif selected _itemPool is empty
|
||||
for (uint32 j = 0; j < MAX_AUCTION_QUALITY; ++j)
|
||||
for (uint32 i = 0; i < MAX_ITEM_CLASS; ++i)
|
||||
ASSERT(_itemPool[j][i].empty() == (config.GetItemsAmountPerClass(AuctionQuality(j), ItemClass(i)) == 0));
|
||||
}
|
||||
|
||||
void AuctionBotSeller::LoadSellerValues(SellerConfiguration& config)
|
||||
{
|
||||
LoadItemsQuantity(config);
|
||||
uint32 PriceRatio;
|
||||
switch (config.GetHouseType())
|
||||
{
|
||||
case AUCTION_HOUSE_ALLIANCE:
|
||||
PriceRatio = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ALLIANCE_PRICE_RATIO);
|
||||
break;
|
||||
case AUCTION_HOUSE_HORDE:
|
||||
PriceRatio = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_HORDE_PRICE_RATIO);
|
||||
break;
|
||||
default:
|
||||
PriceRatio = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_NEUTRAL_PRICE_RATIO);
|
||||
break;
|
||||
}
|
||||
uint32 ratio = sAuctionBotConfig->GetConfigPriceRatio(config.GetHouseType());
|
||||
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_GRAY, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_GRAY_PRICE_RATIO));
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_WHITE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_WHITE_PRICE_RATIO));
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_GREEN, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_GREEN_PRICE_RATIO));
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_BLUE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_BLUE_PRICE_RATIO));
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_PURPLE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_PURPLE_PRICE_RATIO));
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_ORANGE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_ORANGE_PRICE_RATIO));
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_YELLOW, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_YELLOW_PRICE_RATIO));
|
||||
for (uint32 i = 0; i < MAX_AUCTION_QUALITY; ++i)
|
||||
{
|
||||
uint32 amount = sAuctionBotConfig->GetConfig(AuctionBotConfigUInt32Values(CONFIG_AHBOT_ITEM_GRAY_PRICE_RATIO + i));
|
||||
config.SetPriceRatioPerQuality(AuctionQuality(i), std::lroundf(amount * ratio / 100.f));
|
||||
}
|
||||
|
||||
config.SetPriceRatioPerClass(ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_PRICE_RATIO));
|
||||
config.SetPriceRatioPerClass(ITEM_CLASS_CONTAINER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_CONTAINER_PRICE_RATIO));
|
||||
@@ -579,18 +513,6 @@ void AuctionBotSeller::LoadSellerValues(SellerConfiguration& config)
|
||||
//load min and max auction times
|
||||
config.SetMinTime(sAuctionBotConfig->GetConfig(CONFIG_AHBOT_MINTIME));
|
||||
config.SetMaxTime(sAuctionBotConfig->GetConfig(CONFIG_AHBOT_MAXTIME));
|
||||
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: minTime = %u", config.GetMinTime());
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: maxTime = %u", config.GetMaxTime());
|
||||
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: For AH type %u", config.GetHouseType());
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: GrayItems = %u", config.GetItemsAmountPerQuality(AUCTION_QUALITY_GRAY));
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: WhiteItems = %u", config.GetItemsAmountPerQuality(AUCTION_QUALITY_WHITE));
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: GreenItems = %u", config.GetItemsAmountPerQuality(AUCTION_QUALITY_GREEN));
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: BlueItems = %u", config.GetItemsAmountPerQuality(AUCTION_QUALITY_BLUE));
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: PurpleItems = %u", config.GetItemsAmountPerQuality(AUCTION_QUALITY_PURPLE));
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: OrangeItems = %u", config.GetItemsAmountPerQuality(AUCTION_QUALITY_ORANGE));
|
||||
TC_LOG_DEBUG("ahbot", "AHBot: YellowItems = %u", config.GetItemsAmountPerQuality(AUCTION_QUALITY_YELLOW));
|
||||
}
|
||||
|
||||
// Set static of items on one AH faction.
|
||||
@@ -644,12 +566,13 @@ bool AuctionBotSeller::GetItemsToSell(SellerConfiguration& config, ItemsToSellAr
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_ITEM_CLASS; ++i)
|
||||
{
|
||||
if (config.GetMissedItemsPerClass(AuctionQuality(j), ItemClass(i)) > addedItem[j][i] && !_itemPool[j][i].empty())
|
||||
// if _itemPool for chosen is empty, MissedItemsPerClass will return 0 here (checked at startup)
|
||||
if (config.GetMissedItemsPerClass(AuctionQuality(j), ItemClass(i)) > addedItem[j][i])
|
||||
{
|
||||
ItemToSell miss_item;
|
||||
miss_item.Color = j;
|
||||
miss_item.Itemclass = i;
|
||||
itemsToSellArray.push_back(miss_item);
|
||||
itemsToSellArray.emplace_back(std::move(miss_item));
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
@@ -908,11 +831,11 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config)
|
||||
--items;
|
||||
|
||||
// Select random position from missed items table
|
||||
uint32 pos = urand(0, itemsToSell.size() - 1);
|
||||
ItemToSell const& sellItem = Trinity::Containers::SelectRandomContainerElement(itemsToSell);
|
||||
|
||||
// Set itemId with random item ID for selected categories and color, from _itemPool table
|
||||
uint32 itemId = _itemPool[itemsToSell[pos].Color][itemsToSell[pos].Itemclass][urand(0, _itemPool[itemsToSell[pos].Color][itemsToSell[pos].Itemclass].size() - 1)];
|
||||
++allItems[itemsToSell[pos].Color][itemsToSell[pos].Itemclass]; // Helper table to avoid rescan from DB in this loop. (has we add item in random orders)
|
||||
uint32 itemId = Trinity::Containers::SelectRandomContainerElement(_itemPool[sellItem.Color][sellItem.Itemclass]);
|
||||
++allItems[sellItem.Color][sellItem.Itemclass]; // Helper table to avoid rescan from DB in this loop. (has we add item in random orders)
|
||||
|
||||
if (!itemId)
|
||||
{
|
||||
@@ -951,16 +874,14 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config)
|
||||
switch (etime)
|
||||
{
|
||||
case 1:
|
||||
etime = 43200;
|
||||
break;
|
||||
case 2:
|
||||
etime = 86400;
|
||||
etime = DAY / 2;
|
||||
break;
|
||||
case 3:
|
||||
etime = 172800;
|
||||
etime = 2 *DAY;
|
||||
break;
|
||||
case 2:
|
||||
default:
|
||||
etime = 86400;
|
||||
etime = DAY;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,36 +32,28 @@ struct ItemToSell
|
||||
typedef std::vector<ItemToSell> ItemsToSellArray;
|
||||
typedef std::array<std::array<uint32, MAX_ITEM_CLASS>, MAX_ITEM_QUALITY> AllItemsArray;
|
||||
|
||||
struct SellerItemClassInfo
|
||||
{
|
||||
SellerItemClassInfo(): AmountOfItems(0), MissItems(0), Quantity(0), PriceRatio(0), RandomStackRatio(100) {}
|
||||
|
||||
uint32 AmountOfItems;
|
||||
uint32 MissItems;
|
||||
uint32 Quantity;
|
||||
uint32 PriceRatio;
|
||||
uint32 RandomStackRatio;
|
||||
};
|
||||
|
||||
struct SellerItemInfo
|
||||
{
|
||||
SellerItemInfo(): AmountOfItems(0), MissItems(0), PriceRatio(0) {}
|
||||
uint32 AmountOfItems = 0;
|
||||
uint32 MissItems = 0;
|
||||
};
|
||||
|
||||
uint32 AmountOfItems;
|
||||
uint32 MissItems;
|
||||
uint32 PriceRatio;
|
||||
struct SellerItemClassSharedInfo
|
||||
{
|
||||
uint32 PriceRatio = 0;
|
||||
uint32 RandomStackRatio = 100;
|
||||
};
|
||||
|
||||
SellerItemClassInfo ItemClassInfos[MAX_ITEM_CLASS];
|
||||
struct SellerItemQualitySharedInfo
|
||||
{
|
||||
uint32 AmountOfItems = 0;
|
||||
uint32 PriceRatio = 0;
|
||||
};
|
||||
|
||||
class SellerConfiguration
|
||||
{
|
||||
public:
|
||||
SellerConfiguration(): LastMissedItem(0), _houseType(AUCTION_HOUSE_NEUTRAL), _minTime(1), _maxTime(72)
|
||||
{
|
||||
}
|
||||
|
||||
~SellerConfiguration() {}
|
||||
SellerConfiguration() : LastMissedItem(0), _houseType(AUCTION_HOUSE_NEUTRAL), _minTime(1), _maxTime(72), _itemInfo(), _itemSharedQualityInfo(), _itemSharedClassInfo() { }
|
||||
|
||||
void Initialize(AuctionHouseType houseType)
|
||||
{
|
||||
@@ -83,35 +75,43 @@ public:
|
||||
|
||||
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)
|
||||
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].ItemClassInfos[itemclass].AmountOfItems > found)
|
||||
_ItemInfo[quality].ItemClassInfos[itemclass].MissItems = _ItemInfo[quality].ItemClassInfos[itemclass].AmountOfItems - found;
|
||||
if (_itemInfo[quality][itemClass].AmountOfItems > found)
|
||||
_itemInfo[quality][itemClass].MissItems = _itemInfo[quality][itemClass].AmountOfItems - found;
|
||||
else
|
||||
_ItemInfo[quality].ItemClassInfos[itemclass].MissItems = 0;
|
||||
_itemInfo[quality][itemClass].MissItems = 0;
|
||||
}
|
||||
uint32 GetMissedItemsPerClass(AuctionQuality quality, ItemClass itemclass) const { return _ItemInfo[quality].ItemClassInfos[itemclass].MissItems; }
|
||||
uint32 GetMissedItemsPerClass(AuctionQuality quality, ItemClass itemClass) const { return _itemInfo[quality][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; }
|
||||
void SetRandomStackRatioPerClass(ItemClass item, uint32 value) { _ItemInfo[0].ItemClassInfos[item].RandomStackRatio = value; }
|
||||
uint32 GetRandomStackRatioPerClass(ItemClass item) const { return _ItemInfo[0].ItemClassInfos[item].RandomStackRatio; }
|
||||
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];
|
||||
|
||||
SellerItemInfo _itemInfo[MAX_AUCTION_QUALITY][MAX_ITEM_CLASS];
|
||||
|
||||
SellerItemQualitySharedInfo _itemSharedQualityInfo[MAX_ITEM_QUALITY];
|
||||
SellerItemClassSharedInfo _itemSharedClassInfo[MAX_ITEM_CLASS];
|
||||
};
|
||||
|
||||
// This class handle all Selling method
|
||||
|
||||
Reference in New Issue
Block a user