Updated AuctionHouseSeller to have item class level stack control

For each item class (consumable, glyph), you can now edit the worldserver.conf to

configure the ratio (percent) of random compared to single stack auction postings.

Example 1
AuctionHouseBot.Class.RandomStackRatio.Consumable = 0
- New consumable auctions posted by AuctionHouseSeller will always be single stack.

Example 2
AuctionHouseBot.Class.RandomStackRatio.Consumable = 100
- New consumable auctions posted by AuctionHouseSeller will always be of a random

stack size.

Example 3
AuctionHouseBot.Class.RandomStackRatio.Consumable = 20
- New consumable auctions posted by AuctionHouseSeller have a 20% chance of being a

random stack size, and an 80% chance of being single stack size.
This commit is contained in:
NathanHandley
2015-12-25 18:54:15 -06:00
parent 347373264b
commit 33a75afb60
5 changed files with 112 additions and 1 deletions

View File

@@ -242,6 +242,22 @@ void AuctionBotConfig::GetConfigFromFile()
SetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_MAX_ITEM_LEVEL, "AuctionHouseBot.Class.TradeGood.ItemLevel.Max", 0);
SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_MIN_ITEM_LEVEL, "AuctionHouseBot.Class.Container.ItemLevel.Min", 0);
SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_MAX_ITEM_LEVEL, "AuctionHouseBot.Class.Container.ItemLevel.Max", 0);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE, "AuctionHouseBot.Class.RandomStackRatio.Consumable", 20);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONTAINER, "AuctionHouseBot.Class.RandomStackRatio.Container", 0);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_WEAPON, "AuctionHouseBot.Class.RandomStackRatio.Weapon", 0);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GEM, "AuctionHouseBot.Class.RandomStackRatio.Gem", 20);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_ARMOR, "AuctionHouseBot.Class.RandomStackRatio.Armor", 0);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT, "AuctionHouseBot.Class.RandomStackRatio.Reagent", 100);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE, "AuctionHouseBot.Class.RandomStackRatio.Projectile", 100);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD, "AuctionHouseBot.Class.RandomStackRatio.TradeGood", 50);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC, "AuctionHouseBot.Class.RandomStackRatio.Generic", 100);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE, "AuctionHouseBot.Class.RandomStackRatio.Recipe", 0);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER, "AuctionHouseBot.Class.RandomStackRatio.Quiver", 0);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST, "AuctionHouseBot.Class.RandomStackRatio.Quest", 100);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_KEY, "AuctionHouseBot.Class.RandomStackRatio.Key", 100);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_MISC, "AuctionHouseBot.Class.RandomStackRatio.Misc", 100);
SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH, "AuctionHouseBot.Class.RandomStackRatio.Glyph", 0);
}
char const* AuctionBotConfig::GetHouseTypeName(AuctionHouseType houseType)

View File

@@ -137,6 +137,21 @@ enum AuctionBotConfigUInt32Values
CONFIG_AHBOT_CLASS_TRADEGOOD_MAX_ITEM_LEVEL,
CONFIG_AHBOT_CLASS_CONTAINER_MIN_ITEM_LEVEL,
CONFIG_AHBOT_CLASS_CONTAINER_MAX_ITEM_LEVEL,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONTAINER,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_WEAPON,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GEM,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_ARMOR,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_KEY,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_MISC,
CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH,
CONFIG_UINT32_AHBOT_UINT32_COUNT
};

View File

@@ -533,6 +533,23 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_GLYPH, 0);
// ============================================================================================
// Set Stack Quantities
config.SetRandomStackRatioPerClass(ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE));
config.SetRandomStackRatioPerClass(ITEM_CLASS_CONTAINER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONTAINER));
config.SetRandomStackRatioPerClass(ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_WEAPON));
config.SetRandomStackRatioPerClass(ITEM_CLASS_GEM, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GEM));
config.SetRandomStackRatioPerClass(ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_ARMOR));
config.SetRandomStackRatioPerClass(ITEM_CLASS_REAGENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT));
config.SetRandomStackRatioPerClass(ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE));
config.SetRandomStackRatioPerClass(ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD));
config.SetRandomStackRatioPerClass(ITEM_CLASS_GENERIC, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC));
config.SetRandomStackRatioPerClass(ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE));
config.SetRandomStackRatioPerClass(ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER));
config.SetRandomStackRatioPerClass(ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST));
config.SetRandomStackRatioPerClass(ITEM_CLASS_KEY, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_KEY));
config.SetRandomStackRatioPerClass(ITEM_CLASS_MISC, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_MISC));
config.SetRandomStackRatioPerClass(ITEM_CLASS_GLYPH, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH));
// Set the best value to get nearest amount of items wanted
for (uint32 j = 0; j < MAX_AUCTION_QUALITY; ++j)
{
@@ -719,6 +736,24 @@ void AuctionBotSeller::SetPricesOfItem(ItemTemplate const* itemProto, SellerConf
bidp = urand(basePrice - range, basePrice + range) + 1;
}
// Determines the stack size to use for the item
void AuctionBotSeller::SetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& stackcnt)
{
uint32 randomStackPercent = config.GetRandomStackRatioPerClass(ItemClass(itemProto->Class));
if (randomStackPercent >= 100)
stackcnt = urand(1, itemProto->GetMaxStackSize());
else if (randomStackPercent == 0)
stackcnt = 1;
else
{
uint32 randomStackRoll = urand(0, 99);
if (randomStackRoll < randomStackPercent)
stackcnt = urand(1, itemProto->GetMaxStackSize());
else
stackcnt = 1;
}
}
// Determine the multiplier for the sell price of any weapon without a buy price.
uint32 AuctionBotSeller::GetSellModifier(ItemTemplate const* prototype)
{
@@ -952,7 +987,8 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config)
continue;
}
uint32 stackCount = urand(1, prototype->GetMaxStackSize());
uint32 stackCount = 1;
SetStackSizeForItem(prototype, config, stackCount);
Item* item = Item::CreateItem(itemId, stackCount);
if (!item)

View File

@@ -39,6 +39,7 @@ struct SellerItemClassInfo
uint32 MissItems;
uint32 Quantity;
uint32 PriceRatio;
uint32 RandomStackRatio;
};
struct SellerItemInfo
@@ -102,6 +103,8 @@ public:
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; }
private:
AuctionHouseType _houseType;
@@ -139,6 +142,7 @@ private:
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 SetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& stackcnt);
void LoadItemsQuantity(SellerConfiguration& config);
static uint32 GetBuyModifier(ItemTemplate const* prototype);
static uint32 GetSellModifier(ItemTemplate const* itemProto);

View File

@@ -3189,6 +3189,46 @@ AuctionHouseBot.forceIncludeItems = ""
AuctionHouseBot.forceExcludeItems = ""
#
# AuctionHouseBot.Class.RandomStackRatio.*
# Description: Used to determine how often an item of the class will be single or randomly-size stacked
# Value needs to be between 0 and 100, no decimal. Anything higher than 100 will be treated as 100
# Examples: 100 = stacks will always be random in size
# 50 = half the time the stacks are random, the other half being single stack
# 0 = stacks will always single size
# Default: Consumable: 20 (20% random stack size, 80% single stack size)
# Container: 0 (100% single stack size)
# Weapon: 0 (100% single stack size)
# Gem: 20 (20% random stack size, 80% single stack size)
# Armor: 0 (100% single stack size)
# Reagent: 100 (100% random stack size)
# Projectile: 100 (100% random stack size)
# TradeGood: 50 (50% random stack size, 50% single stack size)
# Generic: 100 (100% random stack size)
# Recipe: 0 (100% single stack size)
# Quiver: 0 (100% single stack size)
# Quest: 100 (100% random stack size)
# Key: 100 (100% random stack size)
# Misc: 100 (100% random stack size)
# Glyph: 0 (100% single stack size)
#
AuctionHouseBot.Class.RandomStackRatio.Consumable = 20
AuctionHouseBot.Class.RandomStackRatio.Container = 0
AuctionHouseBot.Class.RandomStackRatio.Weapon = 0
AuctionHouseBot.Class.RandomStackRatio.Gem = 20
AuctionHouseBot.Class.RandomStackRatio.Armor = 0
AuctionHouseBot.Class.RandomStackRatio.Reagent = 100
AuctionHouseBot.Class.RandomStackRatio.Projectile = 100
AuctionHouseBot.Class.RandomStackRatio.TradeGood = 50
AuctionHouseBot.Class.RandomStackRatio.Generic = 100
AuctionHouseBot.Class.RandomStackRatio.Recipe = 0
AuctionHouseBot.Class.RandomStackRatio.Quiver = 0
AuctionHouseBot.Class.RandomStackRatio.Quest = 100
AuctionHouseBot.Class.RandomStackRatio.Key = 100
AuctionHouseBot.Class.RandomStackRatio.Misc = 100
AuctionHouseBot.Class.RandomStackRatio.Glyph = 0
#
###################################################################################################