mirror of
https://github.com/kadeshar/mod-player-bot-level-brackets.git
synced 2026-01-13 01:08:36 +00:00
Compare commits
5 Commits
ASP-1.0
...
disablewit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ceb27c5ae4 | ||
|
|
ccbe8ae63f | ||
|
|
d7b1618cc0 | ||
|
|
894bc68f4e | ||
|
|
2cb23fe201 |
@@ -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.
|
||||
# Default: 15
|
||||
# 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)
|
||||
@@ -468,6 +467,14 @@ static bool IsBotSafeForLevelReset(Player* bot)
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (bot->GetSession()->isLogingOut())
|
||||
{
|
||||
if (g_BotDistFullDebugMode)
|
||||
{
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] Bot {} (Level {}) is logging out.", bot->GetName(), bot->GetLevel());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (!bot->IsInWorld())
|
||||
{
|
||||
if (g_BotDistFullDebugMode)
|
||||
@@ -538,6 +545,11 @@ static std::vector<PendingResetEntry> g_PendingLevelResets;
|
||||
|
||||
static void ProcessPendingLevelResets()
|
||||
{
|
||||
if (!sRandomPlayerbotMgr->GetDisabledWithoutRealPlayerLogoutInProgress())
|
||||
{
|
||||
g_PendingLevelResets.clear();
|
||||
return;
|
||||
}
|
||||
if (g_BotDistFullDebugMode)
|
||||
{
|
||||
LOG_INFO("server.loading", "[BotLevelBrackets] Processing {} pending resets...", g_PendingLevelResets.size());
|
||||
@@ -547,34 +559,40 @@ 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(); )
|
||||
{
|
||||
Player* bot = it->bot;
|
||||
int targetRange = it->targetRange;
|
||||
if (g_IgnoreGuildBotsWithRealPlayers && BotInGuildWithRealPlayer(bot))
|
||||
{
|
||||
it = g_PendingLevelResets.erase(it);
|
||||
continue;
|
||||
}
|
||||
if (g_IgnoreFriendListed && BotInFriendList(bot))
|
||||
{
|
||||
it = g_PendingLevelResets.erase(it);
|
||||
continue;
|
||||
}
|
||||
if (bot && bot->IsInWorld() && IsBotSafeForLevelReset(bot))
|
||||
{
|
||||
AdjustBotToRange(bot, targetRange, it->factionRanges);
|
||||
if (g_BotDistFullDebugMode)
|
||||
if (g_FlaggedProcessLimit > 0 && processed >= g_FlaggedProcessLimit)
|
||||
break;
|
||||
|
||||
Player* bot = it->bot;
|
||||
int targetRange = it->targetRange;
|
||||
if (g_IgnoreGuildBotsWithRealPlayers && BotInGuildWithRealPlayer(bot))
|
||||
{
|
||||
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);
|
||||
continue;
|
||||
}
|
||||
if (g_IgnoreFriendListed && BotInFriendList(bot))
|
||||
{
|
||||
it = g_PendingLevelResets.erase(it);
|
||||
continue;
|
||||
}
|
||||
if (bot && bot->IsInWorld() && IsBotSafeForLevelReset(bot))
|
||||
{
|
||||
AdjustBotToRange(bot, targetRange, it->factionRanges);
|
||||
if (g_BotDistFullDebugMode)
|
||||
{
|
||||
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
|
||||
{
|
||||
++it;
|
||||
}
|
||||
it = g_PendingLevelResets.erase(it);
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This function returns a valid bracket index for the given player's level.
|
||||
@@ -1003,7 +1021,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 +1189,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