mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 08:28:32 +01:00
Core/AHBot: Improve AHBot seller math (#16123)
Eliminates edge cases with low values that would round to zero
due to using uint32 in the calculation of sell price and buyout price.
(cherry picked from commit 45ea01fe5c)
# Conflicts:
# src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
This commit is contained in:
@@ -582,13 +582,13 @@ void AuctionBotSeller::LoadSellerValues(SellerConfiguration& config)
|
||||
break;
|
||||
}
|
||||
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_GRAY, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_GRAY_PRICE_RATIO) / 100);
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_WHITE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_WHITE_PRICE_RATIO) / 100);
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_GREEN, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_GREEN_PRICE_RATIO) / 100);
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_BLUE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_BLUE_PRICE_RATIO) / 100);
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_PURPLE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_PURPLE_PRICE_RATIO) / 100);
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_ORANGE, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_ORANGE_PRICE_RATIO) / 100);
|
||||
config.SetPriceRatioPerQuality(AUCTION_QUALITY_YELLOW, PriceRatio * sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ITEM_YELLOW_PRICE_RATIO) / 100);
|
||||
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));
|
||||
|
||||
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));
|
||||
@@ -701,10 +701,10 @@ void AuctionBotSeller::SetPricesOfItem(ItemTemplate const* itemProto, SellerConf
|
||||
{
|
||||
uint32 classRatio = config.GetPriceRatioPerClass(ItemClass(itemProto->Class));
|
||||
uint32 qualityRatio = config.GetPriceRatioPerQuality(AuctionQuality(itemProto->Quality));
|
||||
uint32 priceRatio = (classRatio * qualityRatio) / 100;
|
||||
float priceRatio = (classRatio * qualityRatio) / 10000.0f;
|
||||
|
||||
uint32 buyPrice = itemProto->BuyPrice;
|
||||
uint32 sellPrice = itemProto->SellPrice;
|
||||
float buyPrice = itemProto->BuyPrice;
|
||||
float sellPrice = itemProto->SellPrice;
|
||||
|
||||
if (buyPrice == 0)
|
||||
{
|
||||
@@ -712,11 +712,11 @@ void AuctionBotSeller::SetPricesOfItem(ItemTemplate const* itemProto, SellerConf
|
||||
buyPrice = sellPrice * GetSellModifier(itemProto);
|
||||
else
|
||||
{
|
||||
uint32 divisor = ((itemProto->Class == 2 || itemProto->Class == 4) ? 284 : 80);
|
||||
uint32 tempLevel = (itemProto->ItemLevel == 0 ? 1 : itemProto->ItemLevel);
|
||||
uint32 tempQuality = (itemProto->Quality == 0 ? 1 : itemProto->Quality);
|
||||
float divisor = ((itemProto->Class == ITEM_CLASS_WEAPON || itemProto->Class == ITEM_CLASS_ARMOR) ? 284.0f : 80.0f);
|
||||
float tempLevel = (itemProto->ItemLevel == 0 ? 1.0f : itemProto->ItemLevel);
|
||||
float tempQuality = (itemProto->Quality == 0 ? 1.0f : itemProto->Quality);
|
||||
|
||||
buyPrice = tempLevel * tempQuality * GetBuyModifier(itemProto)* tempLevel / divisor;
|
||||
buyPrice = tempLevel * tempQuality * static_cast<float>(GetBuyModifier(itemProto))* tempLevel / divisor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -725,15 +725,16 @@ void AuctionBotSeller::SetPricesOfItem(ItemTemplate const* itemProto, SellerConf
|
||||
|
||||
if (sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYPRICE_SELLER))
|
||||
buyPrice = sellPrice;
|
||||
|
||||
uint32 basePrice = (buyPrice * stackCount * priceRatio) / (itemProto->Class == 6 ? 200 : itemProto->BuyCount) / 100;
|
||||
uint32 range = basePrice * 0.04;
|
||||
|
||||
buyp = urand(basePrice - range, basePrice + range) + 1;
|
||||
|
||||
basePrice = buyp * .5;
|
||||
|
||||
float basePriceFloat = (buyPrice * stackCount * priceRatio) / (itemProto->Class == 6 ? 200.0f : static_cast<float>(itemProto->BuyCount)) / 100.0f;
|
||||
float range = basePriceFloat * 0.04f;
|
||||
|
||||
buyp = static_cast<uint32>(frand(basePriceFloat - range, basePriceFloat + range) + 0.5f);
|
||||
if (buyp == 0)
|
||||
buyp = 1;
|
||||
uint32 basePrice = buyp * .5;
|
||||
range = buyp * .4;
|
||||
bidp = urand(basePrice - range, basePrice + range) + 1;
|
||||
bidp = urand(static_cast<uint32>(basePrice - range + 0.5f), static_cast<uint32>(basePrice + range + 0.5f)) + 1;
|
||||
}
|
||||
|
||||
// Determines the stack size to use for the item
|
||||
|
||||
Reference in New Issue
Block a user