mirror of
https://github.com/NathanHandley/mod-ah-bot-plus.git
synced 2026-02-07 21:01:59 +00:00
Add price overrides
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user