Added meat, gem, potion, elixir, flask advancedPricingFormulas. Fixed build warnings

This commit is contained in:
zeb
2025-09-18 22:55:30 -04:00
parent 4fdfa50597
commit 86ff7d4217
3 changed files with 67 additions and 7 deletions

View File

@@ -261,12 +261,17 @@ AuctionHouseBot.PriceMinimumCenterBase.OverrideItems =
# will disable PriceMultiplier.ItemLevel pricing for that category
###############################################################################
AuctionHouseBot.AdvancedPricing.Consumable.Potion.Enabled = 1
AuctionHouseBot.AdvancedPricing.Consumable.Elixir.Enabled = 1
AuctionHouseBot.AdvancedPricing.Consumable.Flask.Enabled = 1
AuctionHouseBot.AdvancedPricing.Gem.Enabled = 1
AuctionHouseBot.AdvancedPricing.TradeGood.Cloth.Enabled = 1
AuctionHouseBot.AdvancedPricing.TradeGood.Herb.Enabled = 1
AuctionHouseBot.AdvancedPricing.TradeGood.MetalStone.Enabled = 1
AuctionHouseBot.AdvancedPricing.TradeGood.Leather.Enabled = 1
AuctionHouseBot.AdvancedPricing.TradeGood.Enchanting.Enabled = 1
AuctionHouseBot.AdvancedPricing.TradeGood.Elemental.Enabled = 1
AuctionHouseBot.AdvancedPricing.TradeGood.Meat.Enabled = 1
AuctionHouseBot.AdvancedPricing.Misc.Junk.Enabled = 1
AuctionHouseBot.AdvancedPricing.Misc.Mount.Enabled = 1
@@ -377,9 +382,9 @@ AuctionHouseBot.PriceMultiplier.CategoryWeapon.QualityHeirloom = 1.0
# Gem
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityPoor = 1.0
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityNormal = 1.0
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityUncommon = 1.0
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityRare = 1.4
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityEpic = 2.0
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityUncommon = 1.2
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityRare = 1.2
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityEpic = 0.9
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityLegendary = 1.0
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityArtifact = 1.0
AuctionHouseBot.PriceMultiplier.CategoryGem.QualityHeirloom = 1.0

View File

@@ -48,9 +48,9 @@ AuctionHouseBot::AuctionHouseBot() :
BidVariationHighReducePercent(0),
BidVariationLowReducePercent(0.25f),
BuyoutBelowVendorVariationAddPercent(0.25f),
BuyingBotBuyCandidatesPerBuyCycle(1),
ListingExpireTimeInSecondsMin(900),
ListingExpireTimeInSecondsMax(86400),
BuyingBotBuyCandidatesPerBuyCycle(1),
BuyingBotAcceptablePriceModifier(1),
AHCharactersGUIDsForQuery(""),
ItemsPerCycle(75),
@@ -405,7 +405,45 @@ float AuctionHouseBot::getAdvancedPricingMultiplier(ItemTemplate const* itemProt
// Try to approximate real world prices for Trade Goods based on subclass and item level
double advancedPricingMultiplier = 1.0f;
if (itemProto->Class == ITEM_CLASS_TRADE_GOODS)
if (itemProto->Class == ITEM_CLASS_CONSUMABLE)
{
switch (itemProto->SubClass)
{
case ITEM_SUBCLASS_POTION:
{
if (!AdvancedPricingConsumablePotionEnabled)
break;
double potionMultiplierHelper = std::log(1.0 + (0.08 * itemProto->ItemLevel));
advancedPricingMultiplier = ((std::pow(potionMultiplierHelper,3.0)) / (1 + (4.0 * potionMultiplierHelper))) + (std::pow(potionMultiplierHelper,2.5));
break;
}
case ITEM_SUBCLASS_ELIXIR:
{
if (!AdvancedPricingConsumableElixirEnabled)
break;
double elixirMultiplierHelper = std::log(1.0 + (1.6 * itemProto->ItemLevel));
advancedPricingMultiplier = ((std::pow(elixirMultiplierHelper,3.1)) / (1 + (5.0 * elixirMultiplierHelper))) + (0.05 * std::pow(elixirMultiplierHelper,3.2)) - 1.0;
break;
}
case ITEM_SUBCLASS_FLASK:
{
if (!AdvancedPricingConsumableFlaskEnabled)
break;
// Use logarithmic scaling to compress large differences in vendorSellPrice to a range of ~22g-25g
// advPricingMultiplier = LowTargetRange + (UpperTargetRange - LowTargetRange) * ( ln(vendorSellPrice) - ln(minVendorPrice) ) / ( ln(maxVendorPrice) - ln(minVendorPrice) ) / vendorSellPrice
advancedPricingMultiplier = (220000 + (250000-220000) * (std::log(itemProto->SellPrice) - std::log(1250)) / (std::log(10000) - std::log(1250))) / itemProto->SellPrice;
}
default:
break;
}
}
else if (itemProto->Class == ITEM_CLASS_GEM && AdvancedPricingGemEnabled)
{
// No switch for subclass needed since Gem subclass represents gem color
double gemMultiplierHelper = std::log(1.0 + (0.05 * itemProto->ItemLevel));
advancedPricingMultiplier = ((std::pow(gemMultiplierHelper,1.0)) / (1 + (10.0 * gemMultiplierHelper))) + (std::pow(gemMultiplierHelper,3.0));
}
else if (itemProto->Class == ITEM_CLASS_TRADE_GOODS)
{
switch (itemProto->SubClass)
{
@@ -456,6 +494,14 @@ float AuctionHouseBot::getAdvancedPricingMultiplier(ItemTemplate const* itemProt
advancedPricingMultiplier = 85 - (itemProto->ItemLevel / 0.97);
break;
}
case ITEM_SUBCLASS_MEAT:
{
if (!AdvancedPricingTradeGoodMeatEnabled)
break;
double meatMultiplierHelper = std::log(1.0 + (0.5 * itemProto->ItemLevel));
advancedPricingMultiplier = ((std::pow(meatMultiplierHelper,3.2)) / (1 + (2.0 * meatMultiplierHelper))) + (0.05 * std::pow(meatMultiplierHelper,3.2)) - 0.1;
break;
}
default:
break;
}
@@ -822,7 +868,7 @@ int AuctionHouseBot::getRandomValidItemClassForNewListing()
// Loop through all of the item classes to make sure a valid one is good, looping candidate back to zero
uint32 itemClassCandidate = ItemCandidateClassWeightedProportionList[urand(0, ItemCandidateClassWeightedProportionList.size() - 1)];
for (int i = 0; i < ItemCandidateClassWeightedProportionList.size(); i++)
for (size_t i = 0; i < ItemCandidateClassWeightedProportionList.size(); i++)
{
if (ItemCandidatesByItemClass[itemClassCandidate].size() > 0)
return itemClassCandidate;
@@ -1046,7 +1092,6 @@ void AuctionHouseBot::addNewAuctionBuyerBotBid(Player* AHBplayer, AHBConfig *con
// Determine if it's a bid, buyout, or skip
bool doBuyout = false;
bool doBid = false;
uint64 curAuctionBidAmount = 0;
uint64 calcBidAmount = 0;
if (auction->buyout != 0 && auction->buyout < willingToPayForStackPrice)
@@ -1369,12 +1414,17 @@ void AuctionHouseBot::InitializeConfiguration()
PriceMultiplierCategoryMountQualityHeirloom = sConfigMgr->GetOption<float>("AuctionHouseBot.PriceMultiplier.CategoryMount.QualityHeirloom", 1.0);
// Advanced Pricing
AdvancedPricingConsumablePotionEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.Consumable.Potion.Enabled", true);
AdvancedPricingConsumableElixirEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.Consumable.Elixir.Enabled", true);
AdvancedPricingConsumableFlaskEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.Consumable.Flask.Enabled", true);
AdvancedPricingGemEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.Gem.Enabled", true);
AdvancedPricingTradeGoodClothEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.TradeGood.Cloth.Enabled", true);
AdvancedPricingTradeGoodHerbEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.TradeGood.Herb.Enabled", true);
AdvancedPricingTradeGoodMetalStoneEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.TradeGood.MetalStone.Enabled", true);
AdvancedPricingTradeGoodLeatherEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.TradeGood.Leather.Enabled", true);
AdvancedPricingTradeGoodEnchantingEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.TradeGood.Enchanting.Enabled", true);
AdvancedPricingTradeGoodElementalEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.TradeGood.Elemental.Enabled", true);
AdvancedPricingTradeGoodMeatEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.TradeGood.Meat.Enabled", true);
AdvancedPricingMiscJunkEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.Misc.Junk.Enabled", true);
AdvancedPricingMiscMountEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedPricing.Misc.Mount.Enabled", true);

View File

@@ -236,12 +236,17 @@ private:
float PriceMultiplierCategoryMountQualityLegendary;
float PriceMultiplierCategoryMountQualityArtifact;
float PriceMultiplierCategoryMountQualityHeirloom;
bool AdvancedPricingConsumablePotionEnabled;
bool AdvancedPricingConsumableElixirEnabled;
bool AdvancedPricingConsumableFlaskEnabled;
bool AdvancedPricingGemEnabled;
bool AdvancedPricingTradeGoodClothEnabled;
bool AdvancedPricingTradeGoodHerbEnabled;
bool AdvancedPricingTradeGoodMetalStoneEnabled;
bool AdvancedPricingTradeGoodLeatherEnabled;
bool AdvancedPricingTradeGoodEnchantingEnabled;
bool AdvancedPricingTradeGoodElementalEnabled;
bool AdvancedPricingTradeGoodMeatEnabled;
bool AdvancedPricingMiscJunkEnabled;
bool AdvancedPricingMiscMountEnabled;
uint32 PriceMinimumCenterBaseConsumable;