[performance] smart scaling configurable (#834)

This commit is contained in:
bash
2025-01-02 19:02:06 +01:00
committed by GitHub
parent 823f9e87a6
commit b16a44c711
6 changed files with 33 additions and 38 deletions

View File

@@ -4159,7 +4159,7 @@ bool PlayerbotAI::AllowActive(ActivityType activityType)
// which prevents unneeded expensive GameTime calls.
if (_isBotInitializing)
{
_isBotInitializing = GameTime::GetUptime().count() < sPlayerbotAIConfig->maxRandomBots * 0.12;
_isBotInitializing = GameTime::GetUptime().count() < sPlayerbotAIConfig->maxRandomBots * 0.11;
// no activity allowed during bot initialization
if (_isBotInitializing)
@@ -4359,33 +4359,18 @@ bool PlayerbotAI::AllowActivity(ActivityType activityType, bool checkNow)
uint32 PlayerbotAI::AutoScaleActivity(uint32 mod)
{
uint32 maxDiff = sWorldUpdateTime.GetAverageUpdateTime();
uint32 maxDiff = sWorldUpdateTime.GetMaxUpdateTimeOfCurrentTable();
uint32 diffLimitFloor = sPlayerbotAIConfig->botActiveAloneSmartScaleDiffLimitfloor;
uint32 diffLimitCeiling = sPlayerbotAIConfig->botActiveAloneSmartScaleDiffLimitCeiling;
double spreadSize = (double)(diffLimitCeiling - diffLimitFloor) / 6;
if (maxDiff > 500) return 0;
if (maxDiff > 250)
{
if (Map* map = bot->GetMap())
{
if (map->GetEntry()->IsWorldMap())
{
if (!HasRealPlayers(map))
{
return 0;
}
if (!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 > 75) return (mod * 9) / 10;
// apply scaling
if (maxDiff > diffLimitCeiling) return 0;
if (maxDiff > diffLimitFloor + (4 * spreadSize)) return (mod * 1) / 10;
if (maxDiff > diffLimitFloor + (3 * spreadSize)) return (mod * 3) / 10;
if (maxDiff > diffLimitFloor + (2 * spreadSize)) return (mod * 5) / 10;
if (maxDiff > diffLimitFloor + (1 * spreadSize)) return (mod * 7) / 10;
if (maxDiff > diffLimitFloor) return (mod * 9) / 10;
return mod;
}