mirror of
https://github.com/NathanHandley/mod-ah-bot-plus.git
synced 2026-01-13 01:08:37 +00:00
Merge pull request #39 from zeb139/add-usedroprates-minrate
Added UseDropRates.MinDropRate + other fixes
This commit is contained in:
@@ -94,7 +94,7 @@ AuctionHouseBot.ListingExpireTimeInSecondsMax = 86400
|
|||||||
# Crafted items may also appear more often since their drop rate is effectively 100%.
|
# Crafted items may also appear more often since their drop rate is effectively 100%.
|
||||||
# Default: false (disabled)
|
# Default: false (disabled)
|
||||||
#
|
#
|
||||||
# AuctionHouseBot.Seller.AdvancedListingRules.UseDropRates.<Category>
|
# AuctionHouseBot.AdvancedListingRules.UseDropRates.<Category>
|
||||||
# Toggle AdvancedListingRules.UseDropRates behavior for individual category.
|
# Toggle AdvancedListingRules.UseDropRates behavior for individual category.
|
||||||
# Only applied if AdvancedListingRules.UseDropRates.Enabled is true.
|
# Only applied if AdvancedListingRules.UseDropRates.Enabled is true.
|
||||||
# Default: true (enabled)
|
# Default: true (enabled)
|
||||||
@@ -107,6 +107,12 @@ AuctionHouseBot.ListingExpireTimeInSecondsMax = 86400
|
|||||||
# (0) Poor, (1) Common, (2) Uncommon, (3) Rare, (4) Epic, (5) Legendary, (6) Heirloom
|
# (0) Poor, (1) Common, (2) Uncommon, (3) Rare, (4) Epic, (5) Legendary, (6) Heirloom
|
||||||
# Default: 2,3,4,5
|
# Default: 2,3,4,5
|
||||||
#
|
#
|
||||||
|
# AuctionHouseBot.AdvancedListingRules.UseDropRates.MinDropRate
|
||||||
|
# The minimum drop rate any affected item can have.
|
||||||
|
# Some items can have extremely low drop rates in the DB (e.g. 0.00006), so
|
||||||
|
# this setting will raise those items' drop rate to this value.
|
||||||
|
# Default: 0.005
|
||||||
|
#
|
||||||
# AuctionHouseBot.AdvancedListingRules.UseDropRates.TiersConfig
|
# AuctionHouseBot.AdvancedListingRules.UseDropRates.TiersConfig
|
||||||
# The thresholds that define item drop rate tiers.
|
# The thresholds that define item drop rate tiers.
|
||||||
# Value should be a string of comma-separated numbers between 0 and 100.
|
# Value should be a string of comma-separated numbers between 0 and 100.
|
||||||
@@ -135,6 +141,7 @@ AuctionHouseBot.AdvancedListingRules.UseDropRates.Weapon.AffectedQualities = 2,3
|
|||||||
AuctionHouseBot.AdvancedListingRules.UseDropRates.Armor.AffectedQualities = 2,3,4,5
|
AuctionHouseBot.AdvancedListingRules.UseDropRates.Armor.AffectedQualities = 2,3,4,5
|
||||||
AuctionHouseBot.AdvancedListingRules.UseDropRates.Recipe.AffectedQualities = 2,3,4,5
|
AuctionHouseBot.AdvancedListingRules.UseDropRates.Recipe.AffectedQualities = 2,3,4,5
|
||||||
|
|
||||||
|
AuctionHouseBot.AdvancedListingRules.UseDropRates.MinDropRate = 0.005
|
||||||
AuctionHouseBot.AdvancedListingRules.UseDropRates.TiersConfig = 50, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01, 0.005
|
AuctionHouseBot.AdvancedListingRules.UseDropRates.TiersConfig = 50, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01, 0.005
|
||||||
AuctionHouseBot.AdvancedListingRules.UseDropRates.DisabledItemIDs =
|
AuctionHouseBot.AdvancedListingRules.UseDropRates.DisabledItemIDs =
|
||||||
|
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ AuctionHouseBot::AuctionHouseBot() :
|
|||||||
AdvancedListingRuleUseDropRatesWeaponEnabled(true),
|
AdvancedListingRuleUseDropRatesWeaponEnabled(true),
|
||||||
AdvancedListingRuleUseDropRatesArmorEnabled(true),
|
AdvancedListingRuleUseDropRatesArmorEnabled(true),
|
||||||
AdvancedListingRuleUseDropRatesRecipeEnabled(true),
|
AdvancedListingRuleUseDropRatesRecipeEnabled(true),
|
||||||
|
AdvancedListingRuleUseDropRatesMinDropRate(0.005),
|
||||||
LastBuyCycleCount(0),
|
LastBuyCycleCount(0),
|
||||||
LastSellCycleCount(0),
|
LastSellCycleCount(0),
|
||||||
ActiveListMultipleItemID(0),
|
ActiveListMultipleItemID(0),
|
||||||
@@ -1292,7 +1293,7 @@ void AuctionHouseBot::PopulateItemDropChancesForCategoryAndQuality(ItemClass cat
|
|||||||
|
|
||||||
SELECT itemID,
|
SELECT itemID,
|
||||||
0 AS direct_chance,
|
0 AS direct_chance,
|
||||||
AVG(reference_chance) AS reference_chance
|
MIN(reference_chance) AS reference_chance
|
||||||
FROM chances
|
FROM chances
|
||||||
GROUP BY itemID
|
GROUP BY itemID
|
||||||
)SQL";
|
)SQL";
|
||||||
@@ -1347,7 +1348,7 @@ void AuctionHouseBot::PopulateItemDropChancesForCategoryAndQuality(ItemClass cat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add drop rate of all results to CachedItemDropRates
|
// Add drop rate of all results to CachedItemDropRates
|
||||||
auto parseResults = [this](QueryResult result)
|
auto parseResults = [this](QueryResult result, bool overwriteDropRate)
|
||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
Field* fields = result->Fetch();
|
Field* fields = result->Fetch();
|
||||||
@@ -1359,12 +1360,17 @@ void AuctionHouseBot::PopulateItemDropChancesForCategoryAndQuality(ItemClass cat
|
|||||||
if (IsItemQuestReward(itemID) || IsItemCrafted(itemID))
|
if (IsItemQuestReward(itemID) || IsItemCrafted(itemID))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (CachedItemDropRates.contains(itemID) && !overwriteDropRate)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!fields[1].IsNull())
|
if (!fields[1].IsNull())
|
||||||
directDropChance = fields[1].Get<double>();
|
directDropChance = fields[1].Get<double>();
|
||||||
if (!fields[2].IsNull())
|
if (!fields[2].IsNull())
|
||||||
referenceDropChance = fields[2].Get<double>();
|
referenceDropChance = fields[2].Get<double>();
|
||||||
|
|
||||||
|
// Choose higher of two rates (one is normally 0), then raise to MinDropRate if less than
|
||||||
double higherDropChance = (directDropChance > referenceDropChance) ? directDropChance : referenceDropChance;
|
double higherDropChance = (directDropChance > referenceDropChance) ? directDropChance : referenceDropChance;
|
||||||
|
higherDropChance = (higherDropChance < AdvancedListingRuleUseDropRatesMinDropRate) ? AdvancedListingRuleUseDropRatesMinDropRate : higherDropChance;
|
||||||
|
|
||||||
if (CachedItemDropRates[itemID] < higherDropChance)
|
if (CachedItemDropRates[itemID] < higherDropChance)
|
||||||
CachedItemDropRates[itemID] = higherDropChance;
|
CachedItemDropRates[itemID] = higherDropChance;
|
||||||
@@ -1372,11 +1378,11 @@ void AuctionHouseBot::PopulateItemDropChancesForCategoryAndQuality(ItemClass cat
|
|||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
};
|
};
|
||||||
|
|
||||||
parseResults(directResult);
|
parseResults(directResult, true);
|
||||||
parseResults(referenceResult);
|
parseResults(referenceResult, true);
|
||||||
parseResults(danglingReferenceResult);
|
parseResults(danglingReferenceResult, false);
|
||||||
parseResults(groupResult);
|
parseResults(groupResult, true);
|
||||||
parseResults(objectsDropResult);
|
parseResults(objectsDropResult, true);
|
||||||
|
|
||||||
// Populate drop rates Tiers
|
// Populate drop rates Tiers
|
||||||
for (auto& [classID, qualityGroups] : ItemCandidatesByItemClassAndQuality)
|
for (auto& [classID, qualityGroups] : ItemCandidatesByItemClassAndQuality)
|
||||||
@@ -1706,8 +1712,6 @@ void AuctionHouseBot::Update()
|
|||||||
if (AHCharacters.empty() == true)
|
if (AHCharacters.empty() == true)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CleanupExpiredAuctionItems();
|
|
||||||
|
|
||||||
if ((SellingBotEnabled == false) && (BuyingBotEnabled == false))
|
if ((SellingBotEnabled == false) && (BuyingBotEnabled == false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1815,6 +1819,8 @@ void AuctionHouseBot::InitializeConfiguration()
|
|||||||
AdvancedListingRuleUseDropRatesWeaponEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Weapon", true);
|
AdvancedListingRuleUseDropRatesWeaponEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Weapon", true);
|
||||||
AdvancedListingRuleUseDropRatesArmorEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Armor", true);
|
AdvancedListingRuleUseDropRatesArmorEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Armor", true);
|
||||||
AdvancedListingRuleUseDropRatesRecipeEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Recipe", true);
|
AdvancedListingRuleUseDropRatesRecipeEnabled = sConfigMgr->GetOption<bool>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Recipe", true);
|
||||||
|
AdvancedListingRuleUseDropRatesMinDropRate = sConfigMgr->GetOption<float>("AuctionHouseBot.AdvancedListingRules.UseDropRates.MinDropRate", 0.005);
|
||||||
|
if (AdvancedListingRuleUseDropRatesMinDropRate < 0 || AdvancedListingRuleUseDropRatesMinDropRate > 100) AdvancedListingRuleUseDropRatesMinDropRate = 0.005;
|
||||||
ParseNumberListToSet(AdvancedListingRuleUseDropRatesWeaponAffectedQualities, sConfigMgr->GetOption<std::string>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Weapon.AffectedQualities", "2,3,4,5"), "");
|
ParseNumberListToSet(AdvancedListingRuleUseDropRatesWeaponAffectedQualities, sConfigMgr->GetOption<std::string>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Weapon.AffectedQualities", "2,3,4,5"), "");
|
||||||
ParseNumberListToSet(AdvancedListingRuleUseDropRatesArmorAffectedQualities, sConfigMgr->GetOption<std::string>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Armor.AffectedQualities", "2,3,4,5"), "");
|
ParseNumberListToSet(AdvancedListingRuleUseDropRatesArmorAffectedQualities, sConfigMgr->GetOption<std::string>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Armor.AffectedQualities", "2,3,4,5"), "");
|
||||||
ParseNumberListToSet(AdvancedListingRuleUseDropRatesRecipeAffectedQualities, sConfigMgr->GetOption<std::string>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Recipe.AffectedQualities", "2,3,4,5"), "");
|
ParseNumberListToSet(AdvancedListingRuleUseDropRatesRecipeAffectedQualities, sConfigMgr->GetOption<std::string>("AuctionHouseBot.AdvancedListingRules.UseDropRates.Recipe.AffectedQualities", "2,3,4,5"), "");
|
||||||
|
|||||||
@@ -289,6 +289,7 @@ private:
|
|||||||
std::set<uint32> AdvancedListingRuleUseDropRatesWeaponAffectedQualities;
|
std::set<uint32> AdvancedListingRuleUseDropRatesWeaponAffectedQualities;
|
||||||
std::set<uint32> AdvancedListingRuleUseDropRatesArmorAffectedQualities;
|
std::set<uint32> AdvancedListingRuleUseDropRatesArmorAffectedQualities;
|
||||||
std::set<uint32> AdvancedListingRuleUseDropRatesRecipeAffectedQualities;
|
std::set<uint32> AdvancedListingRuleUseDropRatesRecipeAffectedQualities;
|
||||||
|
float AdvancedListingRuleUseDropRatesMinDropRate;
|
||||||
std::unordered_set<uint32> QuestRewardItemIDs;
|
std::unordered_set<uint32> QuestRewardItemIDs;
|
||||||
|
|
||||||
FactionSpecificAuctionHouseConfig AllianceConfig;
|
FactionSpecificAuctionHouseConfig AllianceConfig;
|
||||||
|
|||||||
@@ -169,6 +169,8 @@ public:
|
|||||||
LOG_INFO("module", "AuctionHouseBot: Updating Auction House...");
|
LOG_INFO("module", "AuctionHouseBot: Updating Auction House...");
|
||||||
handler->PSendSysMessage("AuctionHouseBot: Updating Auction House...");
|
handler->PSendSysMessage("AuctionHouseBot: Updating Auction House...");
|
||||||
AuctionHouseBot::instance()->Update();
|
AuctionHouseBot::instance()->Update();
|
||||||
|
LOG_INFO("module", "AuctionHouseBot: Auction House Updated.");
|
||||||
|
handler->PSendSysMessage("AuctionHouseBot: Auction House Updated.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,6 +200,9 @@ public:
|
|||||||
LOG_INFO("module", "AuctionHouseBot: Emptying Auction House...");
|
LOG_INFO("module", "AuctionHouseBot: Emptying Auction House...");
|
||||||
handler->PSendSysMessage("AuctionHouseBot: Emptying Auction House...");
|
handler->PSendSysMessage("AuctionHouseBot: Emptying Auction House...");
|
||||||
AuctionHouseBot::instance()->EmptyAuctionHouses();
|
AuctionHouseBot::instance()->EmptyAuctionHouses();
|
||||||
|
AuctionHouseBot::instance()->CleanupExpiredAuctionItems(); // Must go after EmptyAuctionHouses()
|
||||||
|
LOG_INFO("module", "AuctionHouseBot: Auction Houses Emptied.");
|
||||||
|
handler->PSendSysMessage("AuctionHouseBot: Auction Houses Emptied.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user