Merge pull request #562 from hermensbas/feature/performance_botActiveAutoScale

Modified the botActiveAlone autoscale functionality
This commit is contained in:
Yunfan Li
2024-10-03 17:36:33 +08:00
committed by GitHub
5 changed files with 35 additions and 32 deletions

View File

@@ -4095,8 +4095,6 @@ bool PlayerbotAI::AllowActive(ActivityType activityType)
return true;
}
uint32 maxDiff = sWorldUpdateTime.GetMaxUpdateTime();
Group* group = bot->GetGroup();
if (group)
{
@@ -4176,37 +4174,10 @@ bool PlayerbotAI::AllowActive(ActivityType activityType)
if (sPlayerbotAIConfig->botActiveAlone <= 0)
return false;
if (sPlayerbotAIConfig->botActiveAlone >= 100)
return true;
if (maxDiff > 1000)
return false;
uint32 mod = 100;
// if has real players - slow down continents without player
if (maxDiff > 100)
mod = 50;
if (maxDiff > 150)
mod = 25;
if (maxDiff > 200)
mod = 10;
if (maxDiff > 250)
uint32 mod = sPlayerbotAIConfig->botActiveAlone > 100 ? 100 : sPlayerbotAIConfig->botActiveAlone;
if (sPlayerbotAIConfig->botActiveAloneAutoScale)
{
if (Map* map = bot->GetMap())
{
if (map->GetEntry()->IsWorldMap())
{
if (!HasRealPlayers(map))
return false;
if (!map->IsGridLoaded(bot->GetPositionX(), bot->GetPositionY()))
return false;
}
}
mod = AutoScaleActivity(mod);
}
uint32 ActivityNumber =
@@ -4232,6 +4203,31 @@ bool PlayerbotAI::AllowActivity(ActivityType activityType, bool checkNow)
return allowed;
}
uint32 PlayerbotAI::AutoScaleActivity(uint32 mod)
{
uint32 maxDiff = sWorldUpdateTime.GetAverageUpdateTime();
if (maxDiff > 500) return 0;
if (maxDiff > 250)
{
if (Map* map = bot->GetMap())
{
if (map->GetEntry()->IsWorldMap() &&
(!HasRealPlayers(map) ||
!map->IsGridLoaded(bot->GetPositionX(), bot->GetPositionY())))
return 0;
}
return (mod * 1) / 10;
}
if (maxDiff > 200) return (mod * 3) / 10;
if (maxDiff > 150) return (mod * 5) / 10;
if (maxDiff > 100) return (mod * 6) / 10;
if (maxDiff > 80) return (mod * 9) / 10;
return mod;
}
bool PlayerbotAI::IsOpposing(Player* player) { return IsOpposing(player->getRace(), bot->getRace()); }
bool PlayerbotAI::IsOpposing(uint8 race1, uint8 race2)

View File

@@ -527,6 +527,7 @@ public:
bool HasManyPlayersNearby(uint32 trigerrValue = 20, float range = sPlayerbotAIConfig->sightDistance);
bool AllowActive(ActivityType activityType);
bool AllowActivity(ActivityType activityType = ALL_ACTIVITY, bool checkNow = false);
uint32 AutoScaleActivity(uint32 mod);
// Check if player is safe to use.
bool IsSafe(Player* player);

View File

@@ -465,6 +465,7 @@ bool PlayerbotAIConfig::Initialize()
playerbotsXPrate = sConfigMgr->GetOption<int32>("AiPlayerbot.KillXPRate", 1);
disableDeathKnightLogin = sConfigMgr->GetOption<bool>("AiPlayerbot.DisableDeathKnightLogin", 0);
botActiveAlone = sConfigMgr->GetOption<int32>("AiPlayerbot.BotActiveAlone", 100);
botActiveAloneAutoScale = sConfigMgr->GetOption<bool>("AiPlayerbot.botActiveAloneAutoScale", true);
enablePrototypePerformanceDiff = sConfigMgr->GetOption<bool>("AiPlayerbot.EnablePrototypePerformanceDiff", false);
diffWithPlayer = sConfigMgr->GetOption<int32>("AiPlayerbot.DiffWithPlayer", 100);

View File

@@ -263,6 +263,7 @@ public:
uint32 playerbotsXPrate;
bool disableDeathKnightLogin;
uint32 botActiveAlone;
bool botActiveAloneAutoScale;
uint32 enablePrototypePerformanceDiff;
uint32 diffWithPlayer;