WIP proportion list rewrite

This commit is contained in:
NathanHandley
2025-09-21 09:58:15 -05:00
parent 42045db573
commit c6d2fbedd2
3 changed files with 162 additions and 91 deletions

View File

@@ -185,41 +185,149 @@ AuctionHouseBot.Buyer.PreventOverpayingForVendorItems = true
AuctionHouseBot.Buyer.BidAgainstPlayers = false AuctionHouseBot.Buyer.BidAgainstPlayers = false
############################################################################### ###############################################################################
# AuctionHouseBot.ListProportion.* # AuctionHouseBot.ListProportion.Category*.Quality*
# Determines how many of the listings, proportionally, show up as new auctions # Determines how many of the listings, proportionally, show up as new auctions
# "0" will mean the item never shows up. Values must be whole numbers. # "0" will mean the item classification never shows up. Values must be whole numbers.
# Defaults: Consumable: 2 # For example, if consumable uncommon has a portion of 4 and container normal has
# Container: 2 # a proportion of 1 with all others being zero, then when an auction is listed
# Weapon: 6 # by a seller bot then 80% will be uncommon consumables and 20% will be normal
# Gem: 2 # containers. This won't increase the total number of auctions.
# Armor: 6
# Reagent: 1
# Projectile: 2
# TradeGood: 22
# Generic: 1
# Recipe: 3
# Quiver: 1
# Quest: 2
# Key: 1
# Misc: 0
# Glyph: 2
############################################################################### ###############################################################################
AuctionHouseBot.ListProportion.Consumable = 2 AuctionHouseBot.ListProportion.CategoryConsumable.QualityPoor = 2
AuctionHouseBot.ListProportion.Container = 2 AuctionHouseBot.ListProportion.CategoryConsumable.QualityNormal = 2
AuctionHouseBot.ListProportion.Weapon = 6 AuctionHouseBot.ListProportion.CategoryConsumable.QualityUncommon = 2
AuctionHouseBot.ListProportion.Gem = 2 AuctionHouseBot.ListProportion.CategoryConsumable.QualityRare = 2
AuctionHouseBot.ListProportion.Armor = 6 AuctionHouseBot.ListProportion.CategoryConsumable.QualityEpic = 2
AuctionHouseBot.ListProportion.Reagent = 1 AuctionHouseBot.ListProportion.CategoryConsumable.QualityLegendary = 2
AuctionHouseBot.ListProportion.Projectile = 2 AuctionHouseBot.ListProportion.CategoryConsumable.QualityArtifact = 2
AuctionHouseBot.ListProportion.TradeGood = 22 AuctionHouseBot.ListProportion.CategoryConsumable.QualityHeirloom = 2
AuctionHouseBot.ListProportion.Generic = 1
AuctionHouseBot.ListProportion.Recipe = 3 AuctionHouseBot.ListProportion.CategoryContainer.QualityPoor = 2
AuctionHouseBot.ListProportion.Quiver = 1 AuctionHouseBot.ListProportion.CategoryContainer.QualityNormal = 2
AuctionHouseBot.ListProportion.Quest = 2 AuctionHouseBot.ListProportion.CategoryContainer.QualityUncommon = 2
AuctionHouseBot.ListProportion.Key = 1 AuctionHouseBot.ListProportion.CategoryContainer.QualityRare = 2
AuctionHouseBot.ListProportion.Misc = 0 AuctionHouseBot.ListProportion.CategoryContainer.QualityEpic = 2
AuctionHouseBot.ListProportion.Glyph = 2 AuctionHouseBot.ListProportion.CategoryContainer.QualityLegendary = 2
AuctionHouseBot.ListProportion.CategoryContainer.QualityArtifact = 2
AuctionHouseBot.ListProportion.CategoryContainer.QualityHeirloom = 2
AuctionHouseBot.ListProportion.CategoryWeapon.QualityPoor = 6
AuctionHouseBot.ListProportion.CategoryWeapon.QualityNormal = 6
AuctionHouseBot.ListProportion.CategoryWeapon.QualityUncommon = 6
AuctionHouseBot.ListProportion.CategoryWeapon.QualityRare = 6
AuctionHouseBot.ListProportion.CategoryWeapon.QualityEpic = 6
AuctionHouseBot.ListProportion.CategoryWeapon.QualityLegendary = 6
AuctionHouseBot.ListProportion.CategoryWeapon.QualityArtifact = 6
AuctionHouseBot.ListProportion.CategoryWeapon.QualityHeirloom = 6
AuctionHouseBot.ListProportion.CategoryGem.QualityPoor = 2
AuctionHouseBot.ListProportion.CategoryGem.QualityNormal = 2
AuctionHouseBot.ListProportion.CategoryGem.QualityUncommon = 2
AuctionHouseBot.ListProportion.CategoryGem.QualityRare = 2
AuctionHouseBot.ListProportion.CategoryGem.QualityEpic = 2
AuctionHouseBot.ListProportion.CategoryGem.QualityLegendary = 2
AuctionHouseBot.ListProportion.CategoryGem.QualityArtifact = 2
AuctionHouseBot.ListProportion.CategoryGem.QualityHeirloom = 2
AuctionHouseBot.ListProportion.CategoryArmor.QualityPoor = 6
AuctionHouseBot.ListProportion.CategoryArmor.QualityNormal = 6
AuctionHouseBot.ListProportion.CategoryArmor.QualityUncommon = 6
AuctionHouseBot.ListProportion.CategoryArmor.QualityRare = 6
AuctionHouseBot.ListProportion.CategoryArmor.QualityEpic = 6
AuctionHouseBot.ListProportion.CategoryArmor.QualityLegendary = 6
AuctionHouseBot.ListProportion.CategoryArmor.QualityArtifact = 6
AuctionHouseBot.ListProportion.CategoryArmor.QualityHeirloom = 6
AuctionHouseBot.ListProportion.CategoryReagent.QualityPoor = 1
AuctionHouseBot.ListProportion.CategoryReagent.QualityNormal = 1
AuctionHouseBot.ListProportion.CategoryReagent.QualityUncommon = 1
AuctionHouseBot.ListProportion.CategoryReagent.QualityRare = 1
AuctionHouseBot.ListProportion.CategoryReagent.QualityEpic = 1
AuctionHouseBot.ListProportion.CategoryReagent.QualityLegendary = 1
AuctionHouseBot.ListProportion.CategoryReagent.QualityArtifact = 1
AuctionHouseBot.ListProportion.CategoryReagent.QualityHeirloom = 1
AuctionHouseBot.ListProportion.CategoryProjectile.QualityPoor = 2
AuctionHouseBot.ListProportion.CategoryProjectile.QualityNormal = 2
AuctionHouseBot.ListProportion.CategoryProjectile.QualityUncommon = 2
AuctionHouseBot.ListProportion.CategoryProjectile.QualityRare = 2
AuctionHouseBot.ListProportion.CategoryProjectile.QualityEpic = 2
AuctionHouseBot.ListProportion.CategoryProjectile.QualityLegendary = 2
AuctionHouseBot.ListProportion.CategoryProjectile.QualityArtifact = 2
AuctionHouseBot.ListProportion.CategoryProjectile.QualityHeirloom = 2
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityPoor = 22
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityNormal = 22
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityUncommon = 22
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityRare = 22
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityEpic = 22
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityLegendary = 22
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityArtifact = 22
AuctionHouseBot.ListProportion.CategoryTradeGood.QualityHeirloom = 22
AuctionHouseBot.ListProportion.CategoryGeneric.QualityPoor = 1
AuctionHouseBot.ListProportion.CategoryGeneric.QualityNormal = 1
AuctionHouseBot.ListProportion.CategoryGeneric.QualityUncommon = 1
AuctionHouseBot.ListProportion.CategoryGeneric.QualityRare = 1
AuctionHouseBot.ListProportion.CategoryGeneric.QualityEpic = 1
AuctionHouseBot.ListProportion.CategoryGeneric.QualityLegendary = 1
AuctionHouseBot.ListProportion.CategoryGeneric.QualityArtifact = 1
AuctionHouseBot.ListProportion.CategoryGeneric.QualityHeirloom = 1
AuctionHouseBot.ListProportion.CategoryRecipe.QualityPoor = 3
AuctionHouseBot.ListProportion.CategoryRecipe.QualityNormal = 3
AuctionHouseBot.ListProportion.CategoryRecipe.QualityUncommon = 3
AuctionHouseBot.ListProportion.CategoryRecipe.QualityRare = 3
AuctionHouseBot.ListProportion.CategoryRecipe.QualityEpic = 3
AuctionHouseBot.ListProportion.CategoryRecipe.QualityLegendary = 3
AuctionHouseBot.ListProportion.CategoryRecipe.QualityArtifact = 3
AuctionHouseBot.ListProportion.CategoryRecipe.QualityHeirloom = 3
AuctionHouseBot.ListProportion.CategoryQuiver.QualityPoor = 1
AuctionHouseBot.ListProportion.CategoryQuiver.QualityNormal = 1
AuctionHouseBot.ListProportion.CategoryQuiver.QualityUncommon = 1
AuctionHouseBot.ListProportion.CategoryQuiver.QualityRare = 1
AuctionHouseBot.ListProportion.CategoryQuiver.QualityEpic = 1
AuctionHouseBot.ListProportion.CategoryQuiver.QualityLegendary = 1
AuctionHouseBot.ListProportion.CategoryQuiver.QualityArtifact = 1
AuctionHouseBot.ListProportion.CategoryQuiver.QualityHeirloom = 1
AuctionHouseBot.ListProportion.CategoryQuest.QualityPoor = 2
AuctionHouseBot.ListProportion.CategoryQuest.QualityNormal = 2
AuctionHouseBot.ListProportion.CategoryQuest.QualityUncommon = 2
AuctionHouseBot.ListProportion.CategoryQuest.QualityRare = 2
AuctionHouseBot.ListProportion.CategoryQuest.QualityEpic = 2
AuctionHouseBot.ListProportion.CategoryQuest.QualityLegendary = 2
AuctionHouseBot.ListProportion.CategoryQuest.QualityArtifact = 2
AuctionHouseBot.ListProportion.CategoryQuest.QualityHeirloom = 2
AuctionHouseBot.ListProportion.CategoryKey.QualityPoor = 1
AuctionHouseBot.ListProportion.CategoryKey.QualityNormal = 1
AuctionHouseBot.ListProportion.CategoryKey.QualityUncommon = 1
AuctionHouseBot.ListProportion.CategoryKey.QualityRare = 1
AuctionHouseBot.ListProportion.CategoryKey.QualityEpic = 1
AuctionHouseBot.ListProportion.CategoryKey.QualityLegendary = 1
AuctionHouseBot.ListProportion.CategoryKey.QualityArtifact = 1
AuctionHouseBot.ListProportion.CategoryKey.QualityHeirloom = 1
AuctionHouseBot.ListProportion.CategoryMisc.QualityPoor = 0
AuctionHouseBot.ListProportion.CategoryMisc.QualityNormal = 0
AuctionHouseBot.ListProportion.CategoryMisc.QualityUncommon = 0
AuctionHouseBot.ListProportion.CategoryMisc.QualityRare = 0
AuctionHouseBot.ListProportion.CategoryMisc.QualityEpic = 0
AuctionHouseBot.ListProportion.CategoryMisc.QualityLegendary = 0
AuctionHouseBot.ListProportion.CategoryMisc.QualityArtifact = 0
AuctionHouseBot.ListProportion.CategoryMisc.QualityHeirloom = 0
AuctionHouseBot.ListProportion.CategoryGlyph.QualityPoor = 2
AuctionHouseBot.ListProportion.CategoryGlyph.QualityNormal = 2
AuctionHouseBot.ListProportion.CategoryGlyph.QualityUncommon = 2
AuctionHouseBot.ListProportion.CategoryGlyph.QualityRare = 2
AuctionHouseBot.ListProportion.CategoryGlyph.QualityEpic = 2
AuctionHouseBot.ListProportion.CategoryGlyph.QualityLegendary = 2
AuctionHouseBot.ListProportion.CategoryGlyph.QualityArtifact = 2
AuctionHouseBot.ListProportion.CategoryGlyph.QualityHeirloom = 2
############################################################################### ###############################################################################
# AuctionHouseBot.PriceMinimumCenterBase.* # AuctionHouseBot.PriceMinimumCenterBase.*

View File

@@ -91,21 +91,6 @@ AuctionHouseBot::AuctionHouseBot() :
RandomStackIncrementKey(1), RandomStackIncrementKey(1),
RandomStackIncrementMisc(1), RandomStackIncrementMisc(1),
RandomStackIncrementGlyph(1), RandomStackIncrementGlyph(1),
ListProportionConsumable(1),
ListProportionContainer(1),
ListProportionWeapon(1),
ListProportionGem(1),
ListProportionArmor(1),
ListProportionReagent(1),
ListProportionProjectile(1),
ListProportionTradeGood(1),
ListProportionGeneric(1),
ListProportionRecipe(1),
ListProportionQuiver(1),
ListProportionQuest(1),
ListProportionKey(1),
ListProportionMisc(1),
ListProportionGlyph(1),
PriceMultiplierCategoryConsumable(1), PriceMultiplierCategoryConsumable(1),
PriceMultiplierCategoryContainer(1), PriceMultiplierCategoryContainer(1),
PriceMultiplierCategoryWeapon(1), PriceMultiplierCategoryWeapon(1),
@@ -838,17 +823,6 @@ void AuctionHouseBot::populateItemCandidateList()
// Store the item ID // Store the item ID
ItemCandidatesByItemClass[itr->second.Class].push_back(itr->second.ItemId); ItemCandidatesByItemClass[itr->second.Class].push_back(itr->second.ItemId);
// Store a second copy if it's a trade good of certain types to double the chances
if (itr->second.Class == ITEM_CLASS_TRADE_GOODS)
{
if (itr->second.SubClass == ITEM_SUBCLASS_CLOTH || itr->second.SubClass == ITEM_SUBCLASS_LEATHER ||
itr->second.SubClass == ITEM_SUBCLASS_ENCHANTING || itr->second.SubClass == ITEM_SUBCLASS_HERB ||
itr->second.SubClass == ITEM_SUBCLASS_METAL_STONE)
{
ItemCandidatesByItemClass[itr->second.Class].push_back(itr->second.ItemId);
}
}
} }
if (debug_Out) if (debug_Out)
@@ -1352,23 +1326,6 @@ void AuctionHouseBot::InitializeConfiguration()
RandomStackIncrementMisc = GetRandomStackIncrementValue("AuctionHouseBot.ListingStack.RandomStackIncrement.Misc", 1); RandomStackIncrementMisc = GetRandomStackIncrementValue("AuctionHouseBot.ListingStack.RandomStackIncrement.Misc", 1);
RandomStackIncrementGlyph = GetRandomStackIncrementValue("AuctionHouseBot.ListingStack.RandomStackIncrement.Glyph", 1); RandomStackIncrementGlyph = GetRandomStackIncrementValue("AuctionHouseBot.ListingStack.RandomStackIncrement.Glyph", 1);
// List Proportions
ListProportionConsumable = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Consumable", 2);
ListProportionContainer = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Container", 2);
ListProportionWeapon = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Weapon", 6);
ListProportionGem = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Gem", 2);
ListProportionArmor = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Armor", 6);
ListProportionReagent = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Reagent", 1);
ListProportionProjectile = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Projectile", 2);
ListProportionTradeGood = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.TradeGood", 22);
ListProportionGeneric = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Generic", 1);
ListProportionRecipe = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Recipe", 3);
ListProportionQuiver = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Quiver", 1);
ListProportionQuest = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Quest", 2);
ListProportionKey = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Key", 1);
ListProportionMisc = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Misc", 0);
ListProportionGlyph = sConfigMgr->GetOption<uint32>("AuctionHouseBot.ListProportion.Glyph", 2);
// Price Multipliers // Price Multipliers
PriceMultiplierCategoryConsumable = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Category.Consumable", 1); PriceMultiplierCategoryConsumable = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Category.Consumable", 1);
PriceMultiplierCategoryContainer = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Category.Container", 1); PriceMultiplierCategoryContainer = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Category.Container", 1);
@@ -1408,15 +1365,28 @@ void AuctionHouseBot::InitializeConfiguration()
PriceMultiplierQualityLegendary = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Quality.Legendary", 3); PriceMultiplierQualityLegendary = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Quality.Legendary", 3);
PriceMultiplierQualityArtifact = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Quality.Artifact", 3); PriceMultiplierQualityArtifact = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Quality.Artifact", 3);
PriceMultiplierQualityHeirloom = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Quality.Heirloom", 3); PriceMultiplierQualityHeirloom = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.Quality.Heirloom", 3);
ItemListProportionNodes.clear();
for (int category = 0; category < MAX_ITEM_CLASS; category++) for (int category = 0; category < MAX_ITEM_CLASS; category++)
{ {
for (int quality = 0; quality < MAX_ITEM_QUALITY; quality++) for (int quality = 0; quality < MAX_ITEM_QUALITY; quality++)
{ {
// Price Multipliers
std::string key = std::string("AuctionHouseBot.PriceMultiplier.Category") + GetCategoryName((ItemClass)category) + std::string key = std::string("AuctionHouseBot.PriceMultiplier.Category") + GetCategoryName((ItemClass)category) +
".Quality" + GetQualityName((ItemQualities)quality); ".Quality" + GetQualityName((ItemQualities)quality);
float multiplier = sConfigMgr->GetOption<float>(key.c_str(), 1.0f); float multiplier = sConfigMgr->GetOption<float>(key.c_str(), 1.0f);
PriceMultiplierCategoryQuality[category][quality] = multiplier; PriceMultiplierCategoryQuality[category][quality] = multiplier;
// List Proportions
if (category != ITEM_CLASS_MONEY && category != ITEM_CLASS_PERMANENT)
{
key = std::string("AuctionHouseBot.ListProportion.Category") + GetCategoryName((ItemClass)category) + ".Quality" + GetQualityName((ItemQualities)quality);
ListProportionNode node;
node.ItemClassID = category;
node.ItemQualityID = quality;
node.Proportion = sConfigMgr->GetOption<uint32>(key.c_str(), 0);
ItemListProportionNodes.push_back(node);
}
} }
} }
PriceMultiplierCategoryMountQualityPoor = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.CategoryMount.QualityPoor", 1.0); PriceMultiplierCategoryMountQualityPoor = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.CategoryMount.QualityPoor", 1.0);

View File

@@ -34,6 +34,13 @@ class WorldSession;
#include "ItemTemplate.h" #include "ItemTemplate.h"
#include "SharedDefines.h" #include "SharedDefines.h"
struct ListProportionNode
{
uint32 ItemClassID = 0;
uint32 ItemQualityID = 0;
uint32 Proportion = 0;
};
class FactionSpecificAuctionHouseConfig class FactionSpecificAuctionHouseConfig
{ {
private: private:
@@ -175,22 +182,8 @@ private:
uint32 RandomStackIncrementMisc; uint32 RandomStackIncrementMisc;
uint32 RandomStackIncrementGlyph; uint32 RandomStackIncrementGlyph;
std::vector<uint32> ItemCandidateClassWeightedProportionList; std::vector<uint32> ItemCandidateClassWeightedProportionList;
std::map<uint32, std::vector<uint32>> ItemCandidatesByItemClass; std::vector<ListProportionNode> ItemListProportionNodes;
uint32 ListProportionConsumable; std::map<uint32, std::vector<uint32>> ItemCandidatesByItemClassAndQuality;
uint32 ListProportionContainer;
uint32 ListProportionWeapon;
uint32 ListProportionGem;
uint32 ListProportionArmor;
uint32 ListProportionReagent;
uint32 ListProportionProjectile;
uint32 ListProportionTradeGood;
uint32 ListProportionGeneric;
uint32 ListProportionRecipe;
uint32 ListProportionQuiver;
uint32 ListProportionQuest;
uint32 ListProportionKey;
uint32 ListProportionMisc;
uint32 ListProportionGlyph;
float PriceMultiplierCategoryConsumable; float PriceMultiplierCategoryConsumable;
float PriceMultiplierCategoryContainer; float PriceMultiplierCategoryContainer;
float PriceMultiplierCategoryWeapon; float PriceMultiplierCategoryWeapon;