Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modified the botActiveAlone autoscale functionality #562

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions conf/playerbots.conf.dist
Original file line number Diff line number Diff line change
Expand Up @@ -1462,6 +1462,10 @@ AiPlayerbot.RandombotsWalkingRPG.InDoors = 0
# The default is 10. With 10% of all bots going active or inactive each minute.
AiPlayerbot.BotActiveAlone = 100

# Specify 1 for enabled, 0 for disabled.
# The default is 1. Automatically adjusts 'BotActiveAlone' percentage based on server latency.
AiPlayerbot.botActiveAloneAutoScale = 1

# Premade spell to avoid (undetected spells)
# spellid-radius, ...
AiPlayerbot.PremadeAvoidAoe = 62234-4
Expand Down
60 changes: 28 additions & 32 deletions src/PlayerbotAI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4095,8 +4095,6 @@ bool PlayerbotAI::AllowActive(ActivityType activityType)
return true;
}

uint32 maxDiff = sWorldUpdateTime.GetMaxUpdateTime();

Group* group = bot->GetGroup();
if (group)
{
Expand Down Expand Up @@ -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 =
Expand All @@ -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)
Expand Down
1 change: 1 addition & 0 deletions src/PlayerbotAI.h
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,7 @@ class PlayerbotAI : public PlayerbotAIBase
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);
Expand Down
1 change: 1 addition & 0 deletions src/PlayerbotAIConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions src/PlayerbotAIConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ class PlayerbotAIConfig
uint32 playerbotsXPrate;
bool disableDeathKnightLogin;
uint32 botActiveAlone;
bool botActiveAloneAutoScale;

uint32 enablePrototypePerformanceDiff;
uint32 diffWithPlayer;
Expand Down
Loading