mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 17:27:36 +01:00
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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
|
||||
Reference in New Issue
Block a user