mirror of
https://github.com/kadeshar/mod-player-bot-level-brackets.git
synced 2026-01-13 01:08:36 +00:00
Merge pull request #41 from DustinHendrickson/Dustin/Performance
[Enhancement] Throttling the amount of bots adjusted and spreading the process out.
This commit is contained in:
@@ -32,10 +32,16 @@ BotLevelBrackets.CheckFrequency = 300
|
||||
|
||||
#
|
||||
# BotLevelBrackets.CheckFlaggedFrequency
|
||||
# Description: The frequency (in seconds) at which the bot level reset is performed for flagged bots that failed safety checks initially.
|
||||
# Description: The frequency (in seconds) at which the bot level reset is performed for processing safe bots and checking flagged bots that failed safety checks initially.
|
||||
# Default: 15
|
||||
BotLevelBrackets.CheckFlaggedFrequency = 15
|
||||
|
||||
# BotLevelBrackets.FlaggedProcessLimit
|
||||
# Description: Maximum number of flagged bots to process per flagged check step.
|
||||
# 0 = unlimited (process all flagged bots each step)
|
||||
# Default: 5
|
||||
BotLevelBrackets.FlaggedProcessLimit = 5
|
||||
|
||||
#
|
||||
# BotLevelBrackets.IgnoreGuildBotsWithRealPlayers
|
||||
# Description: When enabled, bots that are in a guild with at least one real (non-bot) player online are excluded
|
||||
|
||||
@@ -57,6 +57,8 @@ static bool g_BotDistFullDebugMode = false;
|
||||
static bool g_BotDistLiteDebugMode = false;
|
||||
static bool g_UseDynamicDistribution = false;
|
||||
static bool g_IgnoreFriendListed = true;
|
||||
static uint32 g_FlaggedProcessLimit = 5; // 0 = unlimited
|
||||
|
||||
|
||||
// Real player weight to boost bracket contributions.
|
||||
static float g_RealPlayerWeight = 1.0f;
|
||||
@@ -85,6 +87,7 @@ static void LoadBotLevelBracketsConfig()
|
||||
g_RealPlayerWeight = sConfigMgr->GetOption<float>("BotLevelBrackets.Dynamic.RealPlayerWeight", 1.0f);
|
||||
g_SyncFactions = sConfigMgr->GetOption<bool>("BotLevelBrackets.Dynamic.SyncFactions", false);
|
||||
g_IgnoreFriendListed = sConfigMgr->GetOption<bool>("BotLevelBrackets.IgnoreFriendListed", true);
|
||||
g_FlaggedProcessLimit = sConfigMgr->GetOption<uint32>("BotLevelBrackets.FlaggedProcessLimit", 5);
|
||||
|
||||
// Load the bot level restrictions.
|
||||
g_RandomBotMinLevel = static_cast<uint8>(sConfigMgr->GetOption<uint32>("AiPlayerbot.RandomBotMinLevel", 1));
|
||||
@@ -360,10 +363,6 @@ static bool BotInFriendList(Player* bot)
|
||||
|
||||
for (size_t i = 0; i < SocialFriendsList.size(); ++i)
|
||||
{
|
||||
if (g_BotDistFullDebugMode)
|
||||
{
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] Check bot {} against SocialFriendsList Array Character GUID {}", bot->GetName(), SocialFriendsList[i]);
|
||||
}
|
||||
if (SocialFriendsList[i] == bot->GetGUID().GetRawValue())
|
||||
{
|
||||
if (g_BotDistFullDebugMode)
|
||||
@@ -547,8 +546,13 @@ static void ProcessPendingLevelResets()
|
||||
return;
|
||||
}
|
||||
|
||||
// Limit the number of resets processed in one cycle if configured.
|
||||
uint32 processed = 0;
|
||||
for (auto it = g_PendingLevelResets.begin(); it != g_PendingLevelResets.end(); )
|
||||
{
|
||||
if (g_FlaggedProcessLimit > 0 && processed >= g_FlaggedProcessLimit)
|
||||
break;
|
||||
|
||||
Player* bot = it->bot;
|
||||
int targetRange = it->targetRange;
|
||||
if (g_IgnoreGuildBotsWithRealPlayers && BotInGuildWithRealPlayer(bot))
|
||||
@@ -569,6 +573,7 @@ static void ProcessPendingLevelResets()
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] Bot '{}' successfully reset to level range {}-{}.", bot->GetName(), it->factionRanges[targetRange].lower, it->factionRanges[targetRange].upper);
|
||||
}
|
||||
it = g_PendingLevelResets.erase(it);
|
||||
++processed;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1003,7 +1008,24 @@ public:
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] !!!! Adjusting alliance bot '{}' from range {} to range {} ({}-{}).",
|
||||
bot->GetName(), i + 1, targetRange + 1, g_AllianceLevelRanges[targetRange].lower, g_AllianceLevelRanges[targetRange].upper);
|
||||
}
|
||||
AdjustBotToRange(bot, targetRange, g_AllianceLevelRanges.data());
|
||||
bool alreadyFlagged = false;
|
||||
for (auto& entry : g_PendingLevelResets)
|
||||
{
|
||||
if (entry.bot == bot)
|
||||
{
|
||||
alreadyFlagged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!alreadyFlagged)
|
||||
{
|
||||
g_PendingLevelResets.push_back({bot, targetRange, g_AllianceLevelRanges.data()});
|
||||
if (g_BotDistFullDebugMode)
|
||||
{
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] Alliance bot '{}' flagged for pending level reset to range {}-{}.",
|
||||
bot->GetName(), g_AllianceLevelRanges[targetRange].lower, g_AllianceLevelRanges[targetRange].upper);
|
||||
}
|
||||
}
|
||||
allianceActualCounts[i]--;
|
||||
allianceActualCounts[targetRange]++;
|
||||
}
|
||||
@@ -1154,7 +1176,24 @@ public:
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] !!!! Adjusting horde bot '{}' from range {} to range {} ({}-{}).",
|
||||
bot->GetName(), i + 1, targetRange + 1, g_HordeLevelRanges[targetRange].lower, g_HordeLevelRanges[targetRange].upper);
|
||||
}
|
||||
AdjustBotToRange(bot, targetRange, g_HordeLevelRanges.data());
|
||||
bool alreadyFlagged = false;
|
||||
for (auto& entry : g_PendingLevelResets)
|
||||
{
|
||||
if (entry.bot == bot)
|
||||
{
|
||||
alreadyFlagged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!alreadyFlagged)
|
||||
{
|
||||
g_PendingLevelResets.push_back({bot, targetRange, g_HordeLevelRanges.data()});
|
||||
if (g_BotDistFullDebugMode)
|
||||
{
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] Horde bot '{}' flagged for pending level reset to range {}-{}.",
|
||||
bot->GetName(), g_HordeLevelRanges[targetRange].lower, g_HordeLevelRanges[targetRange].upper);
|
||||
}
|
||||
}
|
||||
hordeActualCounts[i]--;
|
||||
hordeActualCounts[targetRange]++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user