added BuyCandidatesPerBuyCycle variance

This commit is contained in:
zeb
2025-09-26 22:54:54 -04:00
parent 1166c7c527
commit e0a465811d
3 changed files with 47 additions and 29 deletions

View File

@@ -49,7 +49,8 @@ AuctionHouseBot::AuctionHouseBot() :
BidVariationHighReducePercent(0),
BidVariationLowReducePercent(0.25f),
BuyoutBelowVendorVariationAddPercent(0.25f),
BuyingBotBuyCandidatesPerBuyCycle(1),
BuyingBotBuyCandidatesPerBuyCycleMin(1),
BuyingBotBuyCandidatesPerBuyCycleMax(1),
ListingExpireTimeInSecondsMin(900),
ListingExpireTimeInSecondsMax(86400),
BuyingBotAcceptablePriceModifier(1),
@@ -798,7 +799,7 @@ void AuctionHouseBot::PopulateItemCandidatesAndProportions()
ListProportionNode curNode = ItemListProportionNodesSeed[i];
if (ItemCandidatesByItemClassAndQuality[curNode.ItemClassID][curNode.ItemQualityID].size() > 0)
{
for (int j = 0; j < curNode.Proportion; j++)
for (uint32 j = 0; j < curNode.Proportion; j++)
ItemListProportionNodesLookup.push_back(curNode);
}
}
@@ -1002,15 +1003,16 @@ void AuctionHouseBot::AddNewAuctionBuyerBotBid(Player* AHBplayer, FactionSpecifi
{
uint32 tmpdata = result->Fetch()->Get<uint32>();
possibleBids.push_back(tmpdata);
}while (result->NextRow());
} while (result->NextRow());
for (uint32 count = 1; count <= BuyingBotBuyCandidatesPerBuyCycle; ++count)
int randBuyingBotBuyCandidatesPerBuyCycle = urand(BuyingBotBuyCandidatesPerBuyCycleMin, BuyingBotBuyCandidatesPerBuyCycleMax);
for (int count = 1; count <= randBuyingBotBuyCandidatesPerBuyCycle; ++count)
{
// Do we have anything to bid? If not, stop here.
if (possibleBids.empty())
{
//if (debug_Out) sLog->outError( "AHBuyer: I have no newItemsToListCount to bid on.");
count = BuyingBotBuyCandidatesPerBuyCycle;
count = randBuyingBotBuyCandidatesPerBuyCycle;
continue;
}
@@ -1191,16 +1193,16 @@ void AuctionHouseBot::Update()
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION))
{
AddNewAuctions(&_AHBplayer, &AllianceConfig);
if (BuyingBotBuyCandidatesPerBuyCycle > 0)
if (BuyingBotBuyCandidatesPerBuyCycleMin > 0)
AddNewAuctionBuyerBotBid(&_AHBplayer, &AllianceConfig);
AddNewAuctions(&_AHBplayer, &HordeConfig);
if (BuyingBotBuyCandidatesPerBuyCycle > 0)
if (BuyingBotBuyCandidatesPerBuyCycleMin > 0)
AddNewAuctionBuyerBotBid(&_AHBplayer, &HordeConfig);
}
AddNewAuctions(&_AHBplayer, &NeutralConfig);
if (BuyingBotBuyCandidatesPerBuyCycle > 0)
if (BuyingBotBuyCandidatesPerBuyCycleMin > 0)
AddNewAuctionBuyerBotBid(&_AHBplayer, &NeutralConfig);
ObjectAccessor::RemoveObject(&_AHBplayer);
@@ -1255,7 +1257,7 @@ void AuctionHouseBot::InitializeConfiguration()
}
// Buyer Bot
BuyingBotBuyCandidatesPerBuyCycle = sConfigMgr->GetOption<uint32>("AuctionHouseBot.Buyer.BuyCandidatesPerBuyCycle", 1);
SetBuyingBotBuyCandidatesPerBuyCycle();
BuyingBotAcceptablePriceModifier = sConfigMgr->GetOption<float>("AuctionHouseBot.Buyer.AcceptablePriceModifier", 1);
BuyingBotAlwaysBidMaxCalculatedPrice = sConfigMgr->GetOption<bool>("AuctionHouseBot.Buyer.AlwaysBidMaxCalculatedPrice", false);
PreventOverpayingForVendorItems = sConfigMgr->GetOption<bool>("AuctionHouseBot.Buyer.PreventOverpayingForVendorItems", true);
@@ -1467,21 +1469,30 @@ uint32 AuctionHouseBot::GetRandomStackIncrementValue(std::string configKeyString
void AuctionHouseBot::SetCyclesBetweenBuyOrSell()
{
std::string cyclesConfigString = sConfigMgr->GetOption<std::string>("AuctionHouseBot.AuctionHouseManagerCyclesBetweenBuyOrSell", "1");
size_t pos = cyclesConfigString.find(':');
GetConfigMinAndMax(cyclesConfigString, CyclesBetweenBuyOrSellMin, CyclesBetweenBuyOrSellMax);
}
void AuctionHouseBot::SetBuyingBotBuyCandidatesPerBuyCycle()
{
std::string candidatesPerCycleString = sConfigMgr->GetOption<string>("AuctionHouseBot.Buyer.BuyCandidatesPerBuyCycle", "1");
GetConfigMinAndMax(candidatesPerCycleString, BuyingBotBuyCandidatesPerBuyCycleMin, BuyingBotBuyCandidatesPerBuyCycleMax);
}
void AuctionHouseBot::GetConfigMinAndMax(std::string config, uint32& min, uint32& max)
{
size_t pos = config.find(':');
if (pos != std::string::npos)
{
CyclesBetweenBuyOrSellMin = std::stoi(cyclesConfigString.substr(0, pos));
CyclesBetweenBuyOrSellMax = std::stoi(cyclesConfigString.substr(pos + 1));
min = std::stoul(config.substr(0, pos));
max = std::stoul(config.substr(pos + 1));
if (CyclesBetweenBuyOrSellMin < 1)
CyclesBetweenBuyOrSellMin = 1;
if (CyclesBetweenBuyOrSellMax < CyclesBetweenBuyOrSellMin)
CyclesBetweenBuyOrSellMax = CyclesBetweenBuyOrSellMin;
if (min < 1)
min = 1;
if (max < min)
max = min;
}
else
{
CyclesBetweenBuyOrSellMin = CyclesBetweenBuyOrSellMax = std::stoi(cyclesConfigString);
}
min = max = std::stoul(config);
}
void AuctionHouseBot::AddCharacters(std::string characterGUIDString)

View File

@@ -128,15 +128,16 @@ private:
bool SellingBotEnabled;
bool BuyingBotEnabled;
int CyclesBetweenBuyOrSellMin;
int CyclesBetweenBuyOrSellMax;
uint32 CyclesBetweenBuyOrSellMin;
uint32 CyclesBetweenBuyOrSellMax;
uint32 MaxBuyoutPriceInCopper;
float BuyoutVariationReducePercent;
float BuyoutVariationAddPercent;
float BidVariationHighReducePercent;
float BidVariationLowReducePercent;
float BuyoutBelowVendorVariationAddPercent;
uint32 BuyingBotBuyCandidatesPerBuyCycle;
uint32 BuyingBotBuyCandidatesPerBuyCycleMin;
uint32 BuyingBotBuyCandidatesPerBuyCycleMax;
uint32 ListingExpireTimeInSecondsMin;
uint32 ListingExpireTimeInSecondsMax;
float BuyingBotAcceptablePriceModifier;
@@ -272,7 +273,7 @@ private:
FactionSpecificAuctionHouseConfig HordeConfig;
FactionSpecificAuctionHouseConfig NeutralConfig;
int LastCycleCount;
uint32 LastCycleCount;
int ActiveListMultipleItemID;
int RemainingListMultipleCount;
@@ -292,6 +293,8 @@ public:
uint32 GetRandomStackValue(std::string configKeyString, uint32 defaultValue);
uint32 GetRandomStackIncrementValue(std::string configKeyString, uint32 defaultValue);
void SetCyclesBetweenBuyOrSell();
void SetBuyingBotBuyCandidatesPerBuyCycle();
void GetConfigMinAndMax(std::string config, uint32& min, uint32& max);
void AddCharacters(std::string characterGUIDString);
void AddItemIDsFromString(std::set<uint32>& workingItemIDSet, std::string itemString, const char* parentOperationName);
void AddToItemIDSet(std::set<uint32>& workingItemIDSet, uint32 itemID, const char* parentOperationName);