Add price overrides

This commit is contained in:
NathanHandley
2025-01-20 13:44:33 -06:00
parent 58abc4f94e
commit b0385cc957
3 changed files with 69 additions and 28 deletions

View File

@@ -125,6 +125,15 @@ AuctionHouseBot.PriceMinimumCenterBase.Key = 1000
AuctionHouseBot.PriceMinimumCenterBase.Misc = 1000 AuctionHouseBot.PriceMinimumCenterBase.Misc = 1000
AuctionHouseBot.PriceMinimumCenterBase.Glyph = 1000 AuctionHouseBot.PriceMinimumCenterBase.Glyph = 1000
###############################################################################
# AuctionHouseBot.PriceMinimumCenterBase.OverrideItems
# Comma separated list of items in the format of "itemID:PriceMinCopper"
# Example: "2589:1000000,4306:100000" would set the minimum price center
# of linen cloth to 100 gold and silk cloth to 10 gold each
###############################################################################
AuctionHouseBot.PriceMinimumCenterBase.OverrideItems =
############################################################################### ###############################################################################
# AuctionHouseBot.PriceMultiplier.* # AuctionHouseBot.PriceMultiplier.*
# Category/Quality-level modifier values for the prices of items, which can be # Category/Quality-level modifier values for the prices of items, which can be

View File

@@ -127,30 +127,38 @@ void AuctionHouseBot::calculateItemValue(ItemTemplate const* itemProto, uint64&
} }
// Grab the minimum prices // Grab the minimum prices
int PriceMinimumCenterBase = 1000; uint64 PriceMinimumCenterBase = 1000;
switch (itemProto->Class) auto it = PriceMinimumCenterBaseOverridesByItemID.find(itemProto->ItemId);
if (it != PriceMinimumCenterBaseOverridesByItemID.end())
PriceMinimumCenterBase = it->second;
else
{ {
case ITEM_CLASS_CONSUMABLE: PriceMinimumCenterBase = PriceMinimumCenterBaseConsumable; break; switch (itemProto->Class)
case ITEM_CLASS_CONTAINER: PriceMinimumCenterBase = PriceMinimumCenterBaseContainer; break; {
case ITEM_CLASS_WEAPON: PriceMinimumCenterBase = PriceMinimumCenterBaseWeapon; break; case ITEM_CLASS_CONSUMABLE: PriceMinimumCenterBase = PriceMinimumCenterBaseConsumable; break;
case ITEM_CLASS_GEM: PriceMinimumCenterBase = PriceMinimumCenterBaseGem; break; case ITEM_CLASS_CONTAINER: PriceMinimumCenterBase = PriceMinimumCenterBaseContainer; break;
case ITEM_CLASS_REAGENT: PriceMinimumCenterBase = PriceMinimumCenterBaseReagent; break; case ITEM_CLASS_WEAPON: PriceMinimumCenterBase = PriceMinimumCenterBaseWeapon; break;
case ITEM_CLASS_ARMOR: PriceMinimumCenterBase = PriceMinimumCenterBaseArmor; break; case ITEM_CLASS_GEM: PriceMinimumCenterBase = PriceMinimumCenterBaseGem; break;
case ITEM_CLASS_PROJECTILE: PriceMinimumCenterBase = PriceMinimumCenterBaseProjectile; break; case ITEM_CLASS_REAGENT: PriceMinimumCenterBase = PriceMinimumCenterBaseReagent; break;
case ITEM_CLASS_TRADE_GOODS: PriceMinimumCenterBase = PriceMinimumCenterBaseTradeGood; break; case ITEM_CLASS_ARMOR: PriceMinimumCenterBase = PriceMinimumCenterBaseArmor; break;
case ITEM_CLASS_GENERIC: PriceMinimumCenterBase = PriceMinimumCenterBaseGeneric; break; case ITEM_CLASS_PROJECTILE: PriceMinimumCenterBase = PriceMinimumCenterBaseProjectile; break;
case ITEM_CLASS_RECIPE: PriceMinimumCenterBase = PriceMinimumCenterBaseRecipe; break; case ITEM_CLASS_TRADE_GOODS: PriceMinimumCenterBase = PriceMinimumCenterBaseTradeGood; break;
case ITEM_CLASS_QUIVER: PriceMinimumCenterBase = PriceMinimumCenterBaseQuiver; break; case ITEM_CLASS_GENERIC: PriceMinimumCenterBase = PriceMinimumCenterBaseGeneric; break;
case ITEM_CLASS_QUEST: PriceMinimumCenterBase = PriceMinimumCenterBaseQuest; break; case ITEM_CLASS_RECIPE: PriceMinimumCenterBase = PriceMinimumCenterBaseRecipe; break;
case ITEM_CLASS_KEY: PriceMinimumCenterBase = PriceMinimumCenterBaseKey; break; case ITEM_CLASS_QUIVER: PriceMinimumCenterBase = PriceMinimumCenterBaseQuiver; break;
case ITEM_CLASS_MISC: PriceMinimumCenterBase = PriceMinimumCenterBaseMisc; break; case ITEM_CLASS_QUEST: PriceMinimumCenterBase = PriceMinimumCenterBaseQuest; break;
case ITEM_CLASS_GLYPH: PriceMinimumCenterBase = PriceMinimumCenterBaseGlyph; break; case ITEM_CLASS_KEY: PriceMinimumCenterBase = PriceMinimumCenterBaseKey; break;
default: break; case ITEM_CLASS_MISC: PriceMinimumCenterBase = PriceMinimumCenterBaseMisc; break;
case ITEM_CLASS_GLYPH: PriceMinimumCenterBase = PriceMinimumCenterBaseGlyph; break;
default: break;
}
} }
// Set the minimum price // Set the minimum price
if (outBuyoutPrice < PriceMinimumCenterBase) if (outBuyoutPrice < PriceMinimumCenterBase)
outBuyoutPrice = urand(PriceMinimumCenterBase * 0.5, PriceMinimumCenterBase * 1.5); outBuyoutPrice = urand(PriceMinimumCenterBase * 0.5, PriceMinimumCenterBase * 1.5);
else
outBuyoutPrice = urand(outBuyoutPrice * 0.5, outBuyoutPrice * 1.5);
// Multiply the price based on multipliers // Multiply the price based on multipliers
outBuyoutPrice *= qualityPriceMultplier; outBuyoutPrice *= qualityPriceMultplier;
@@ -161,23 +169,20 @@ void AuctionHouseBot::calculateItemValue(ItemTemplate const* itemProto, uint64&
outBuyoutPrice = itemProto->SellPrice; outBuyoutPrice = itemProto->SellPrice;
// Calculate buyout price with a variance // Calculate buyout price with a variance
uint64 sellVarianceBuyoutPriceTopPercent = 130; float sellVarianceBuyoutPriceTopPercent = 1.30;
uint64 sellVarianceBuyoutPriceBottomPercent = 70; float sellVarianceBuyoutPriceBottomPercent = 0.70;
outBuyoutPrice = urand(sellVarianceBuyoutPriceBottomPercent * outBuyoutPrice, sellVarianceBuyoutPriceTopPercent * outBuyoutPrice); outBuyoutPrice = urand(sellVarianceBuyoutPriceBottomPercent * outBuyoutPrice, sellVarianceBuyoutPriceTopPercent * outBuyoutPrice);
outBuyoutPrice /= 100;
// Calculate a bid price based on a variance against buyout price // Calculate a bid price based on a variance against buyout price
uint64 sellVarianceBidPriceTopPercent = 100; float sellVarianceBidPriceTopPercent = 1;
uint64 sellVarianceBidPriceBottomPercent = 75; float sellVarianceBidPriceBottomPercent = .75;
outBidPrice = urand(sellVarianceBidPriceBottomPercent * outBuyoutPrice, sellVarianceBidPriceTopPercent * outBuyoutPrice); outBidPrice = urand(sellVarianceBidPriceBottomPercent * outBuyoutPrice, sellVarianceBidPriceTopPercent * outBuyoutPrice);
outBidPrice /= 100;
// If variance brought price below sell price, bring it back up to avoid making money off vendoring AH items // If variance brought price below sell price, bring it back up to avoid making money off vendoring AH items
if (outBuyoutPrice < itemProto->SellPrice) if (outBuyoutPrice < itemProto->SellPrice)
{ {
uint64 minLowPriceAddVariancePercent = 125; float minLowPriceAddVariancePercent = 1.25;
outBuyoutPrice = urand(100 * itemProto->SellPrice, minLowPriceAddVariancePercent * itemProto->SellPrice); outBuyoutPrice = urand(itemProto->SellPrice, minLowPriceAddVariancePercent * itemProto->SellPrice);
outBuyoutPrice /= 100;
} }
// Bid price can never be below sell price // Bid price can never be below sell price
@@ -254,7 +259,7 @@ void AuctionHouseBot::populateItemCandidateList()
ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore(); ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr) for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
{ {
// Never store itemID zero // Never store curBlock zero
if (itr->second.ItemId == 0) if (itr->second.ItemId == 0)
continue; continue;
@@ -863,6 +868,7 @@ void AuctionHouseBot::InitializeConfiguration()
PriceMinimumCenterBaseKey = sConfigMgr->GetOption<uint32>("AuctionHouseBot.PriceMinimumCenterBase.Key", 1000); PriceMinimumCenterBaseKey = sConfigMgr->GetOption<uint32>("AuctionHouseBot.PriceMinimumCenterBase.Key", 1000);
PriceMinimumCenterBaseMisc = sConfigMgr->GetOption<uint32>("AuctionHouseBot.PriceMinimumCenterBase.Misc", 1000); PriceMinimumCenterBaseMisc = sConfigMgr->GetOption<uint32>("AuctionHouseBot.PriceMinimumCenterBase.Misc", 1000);
PriceMinimumCenterBaseGlyph = sConfigMgr->GetOption<uint32>("AuctionHouseBot.PriceMinimumCenterBase.Glyph", 1000); PriceMinimumCenterBaseGlyph = sConfigMgr->GetOption<uint32>("AuctionHouseBot.PriceMinimumCenterBase.Glyph", 1000);
AddPriceMinimumOverrides(sConfigMgr->GetOption<std::string>("AuctionHouseBot.PriceMinimumCenterBase.OverrideItems", ""));
// Disabled Items // Disabled Items
DisabledItemTextFilter = sConfigMgr->GetOption<bool>("AuctionHouseBot.DisabledItemTextFilter", true); DisabledItemTextFilter = sConfigMgr->GetOption<bool>("AuctionHouseBot.DisabledItemTextFilter", true);
@@ -960,3 +966,27 @@ void AuctionHouseBot::AddDisabledItems(std::string disabledItemIdString)
} }
} }
} }
void AuctionHouseBot::AddPriceMinimumOverrides(std::string priceMinimimOverridesString)
{
std::string delimitedValue;
std::stringstream priceMinimumStream;
priceMinimumStream.str(priceMinimimOverridesString);
while (std::getline(priceMinimumStream, delimitedValue, ',')) // Process each item ID in the string, delimited by the comma ","
{
std::string curBlock;
std::stringstream itemPairStream(delimitedValue);
itemPairStream >> curBlock;
// Only process if it has a colon (:)
if (curBlock.find(":") != std::string::npos)
{
std::string itemIDString = curBlock.substr(0, curBlock.find(":"));
auto itemId = atoi(itemIDString.c_str());
std::string priceInCopper = curBlock.substr(curBlock.find(":") + 1);
auto copperPrice = atoi(priceInCopper.c_str());
if (itemId > 0 && copperPrice > 0)
PriceMinimumCenterBaseOverridesByItemID.insert({itemId, copperPrice});
}
}
}

View File

@@ -206,6 +206,7 @@ private:
uint32 PriceMinimumCenterBaseKey; uint32 PriceMinimumCenterBaseKey;
uint32 PriceMinimumCenterBaseMisc; uint32 PriceMinimumCenterBaseMisc;
uint32 PriceMinimumCenterBaseGlyph; uint32 PriceMinimumCenterBaseGlyph;
std::unordered_map<uint32, uint64> PriceMinimumCenterBaseOverridesByItemID;
AHBConfig AllianceConfig; AHBConfig AllianceConfig;
AHBConfig HordeConfig; AHBConfig HordeConfig;
@@ -240,6 +241,7 @@ public:
uint32 GetRandomStackValue(std::string configKeyString, uint32 defaultValue); uint32 GetRandomStackValue(std::string configKeyString, uint32 defaultValue);
void AddToDisabledItems(std::set<uint32>& workingDisabledItemIDs, uint32 disabledItemID); void AddToDisabledItems(std::set<uint32>& workingDisabledItemIDs, uint32 disabledItemID);
void AddDisabledItems(std::string disabledItemIdString); void AddDisabledItems(std::string disabledItemIdString);
void AddPriceMinimumOverrides(std::string priceMinimimOverridesString);
ObjectGuid::LowType GetAHBplayerGUID() { return AHBplayerGUID; }; ObjectGuid::LowType GetAHBplayerGUID() { return AHBplayerGUID; };
}; };