mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
[performance] smart scaling configurable (#834)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user