diff --git a/Playerbot-Configuration.md b/Playerbot-Configuration.md deleted file mode 100644 index ba3a54d..0000000 --- a/Playerbot-Configuration.md +++ /dev/null @@ -1,241 +0,0 @@ -## Random bots activity profiles. -Before going into the configuration options we need explain the logic abit. Every update tick of the server its calculated whether a bot can -or can't be active. An active bots takes and eats alot more resources then an idle bot. - -The following logic is applied to determine whether a bot is active or not, applied in the explained order. - -``` -1. NOT ACTIVE: When server just started and the server update is smaller then (max amount of bots * 0.12 seconds) -2. ALWAYS ACTIVE: When bot is in battleground, instance or raid. -3. ALWAYS ACTIVE: When in combat and not in party (defend urself) -4. ALWAYS ACTIVE: If bot zone has a real players -5. ALWAYS ACTIVE: When the bots is a member of a guild with real players -6. ALWAYS ACTIVE: Has real player as master -7. ALWAYS ACTIVE: if grouped and the leader is a real player -8. ALWAYS ACTIVE: if in battleground queue -9. ALWAYS ACTIVE: if looking for group -10. ALWAYS ACTIVE: If bot has a real player within the radius 300 yards -11. ALWAYS ACTIVE: When bot is on a friendlist of a online real player -12. ALWAYS ACTIVE: When bot has more then 10 other bots within the sightDistance, force to spread out -``` -These rules will always be applied regardless what value you have configured **'AiPlayerbot.BotActiveAlone'**. - -*** - -All remaining situations e.g. bots in zones or maps without real players, empty server etc will be configured -based on the **'AiPlayerbot.BotActiveAlone'** value. That value basically means that the bot has about -% chance to get active for only a few seconds. Unless in those few seconds one of the above rules -is triggered then it possible might remain active longer. - -Then **'AiPlayerbot.botActiveAloneSmartScale'** basically auto scale the activity percentages -based on the latency, relative to the configured value of **'AiPlayerbot.BotActiveAlone'**. And only when in -the bots is the level scope of the configured values of: -* **'AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel'** -* **'AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel'** - -*** - -#### 1. best performance with high bot count. -My personal preference is that i keep my bots idle when i am not in the zone or map, which is applied with the following config -and in this specific requirement it doesnt rlly matter autoscale is on or off but i leave it on. - -``` -AiPlayerbot.BotActiveAlone = 10 -AiPlayerbot.botActiveAloneSmartScale = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80 -``` - -#### 2. Default; best effort to enforce 100% acitivity but auto adjust when needed -(prolly best profile with a server with more real players spread over different zones and maps). -When you want all bots active in all situations but you want to server to compensate the bot -acitivity based on your latency then use (basically best effort for 100%) : -``` -AiPlayerbot.BotActiveAlone = 100 -AiPlayerbot.botActiveAloneSmartScale = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80 -``` - -#### 3. All bots active regardless your latency and performance impact. -``` -AiPlayerbot.BotActiveAlone = 100 -AiPlayerbot.botActiveAloneSmartScale = 0 -AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80 -``` - -#### 4. All bots active and only apply autoscale on a level range (e.g. high levels) -``` -AiPlayerbot.BotActiveAlone = 100 -AiPlayerbot.botActiveAloneSmartScale = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 75 -AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80 -``` - -*** - -#### Check profile and performance -Use the command '.server info' to see your latencies. The general latenciesshould be under 70-80 and the percentiles maxed out around -100, 120, 150. And verify how quick a bot executes your command. It should be pretty much instant. If not to should choose a different profile -and/or lower your bot amount. - -If dont use the performance checks it might result into strange and incorrect bot behaviours and/or huge amount of memory footprint growth in -a relative short time (OOM) - -##### Reference -I use profile 1 with 5000 bots on amd 5700x (6 cores), linux, 20GB with the following result: - -![image](https://github.com/user-attachments/assets/6760feaf-3dc7-4d7a-9534-d4183ff43284) - - -## Recommended hardware -``` -Memory - minimal: 16GB - preferable: 32GB or more -CPU cores: - minimal: 4 cores - preferable: 6 or more cores -CPU speed: - minimal: 3000mhz - preferable: 4400mhz or more -``` - -## Recommended config -worldserver.conf -```bash -# bots might not pickup quests in certain condidations -Quests.IgnoreAutoAccept = 1 - -# performance -PreloadAllNonInstancedMapGrids = 0 -SetAllCreaturesWithWaypointMovementActive = 0 -DontCacheRandomMovementPaths = 0 -MapUpdate.Threads = 4 or 6 -MapUpdateInterval = 10 -MinWorldUpdateTime = 1 - -# no player limit for the bots -PlayerLimit = 0 - -# prevent buggy situations -LeaveGroupOnLogout.Enabled = 1 -``` - -playerbots.conf -```bash - - -#------------------------------------------------------------------- -# general -#------------------------------------------------------------------- -AiPlayerbot.Enabled = 1 -AiPlayerbot.DeleteRandomBotAccounts = 0 -AiPlayerbot.RandomBotAccountPrefix = "rndbot" - -#------------------------------------------------------------------- -# randombots -# - RandomBotMaps: 0=Eastern Kingdoms, 1=Kalimdor, 530=Outland, 571=Northrend -#------------------------------------------------------------------- -AiPlayerbot.RandomBotMinLevel = 1 -AiPlayerbot.RandomBotMaxLevel = 80 -AiPlayerbot.AutoTeleportForLevel = 1 -AiPlayerbot.RandomBotMaps = 0,1,530,571 -AiPlayerbot.ProbTeleToBankers = 0.25 -AiPlayerbot.RandomBotMaxLevelChance = 0.01 -AiPlayerbot.RandomBotFixedLevel = 0 -AiPlayerbot.DisableRandomLevels = 0 -AiPlayerbot.RandombotStartingLevel = 5 -AiPlayerbot.SyncLevelWithPlayers = 0 -AiPlayerbot.DisableDeathKnightLogin = 1 -AiPlayerbot.SyncQuestWithPlayer = 1 -AiPlayerbot.AutoDoQuests = 1 - - -#------------------------------------------------------------------- -# command (gear: 1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary) -#------------------------------------------------------------------- -AiPlayerbot.AutoGearQualityLimit = 4 -AiPlayerbot.AutoGearCommand = 1 -AiPlayerbot.MaintenanceCommand = 1 -AiPlayerbot.AllowPlayerBots = 1 -AiPlayerbot.AllowGuildBots = 1 - -#------------------------------------------------------------------- -# chat and broadcast (default; RepeatDelay = 2000) -#------------------------------------------------------------------- -#AiPlayerbot.RepeatDelay = 2000 -AiPlayerbot.EnableBroadcasts = 0 -AiPlayerbot.RandomBotTalk = 0 -AiPlayerbot.RandomBotEmote = 0 -AiPlayerbot.RandomBotSuggestDungeons = 0 -AiPlayerbot.EnableGreet = 0 -AiPlayerbot.ToxicLinksRepliesChance = 0 -AiPlayerbot.ThunderfuryRepliesChance = 0 -AiPlayerbot.GuildRepliesRate = 0 -AIPlayerbot.GuildFeedback = 0 -AiPlayerbot.RandomBotSayWithoutMaster = 0 - - -#------------------------------------------------------------------- -# intervals -#------------------------------------------------------------------- -AiPlayerbot.RandomBotUpdateInterval = 20 -AiPlayerbot.RandomBotCountChangeMinInterval = 1800 -AiPlayerbot.RandomBotCountChangeMaxInterval = 7200 -AiPlayerbot.MinRandomBotInWorldTime = 3600 -AiPlayerbot.MaxRandomBotInWorldTime = 1209600 -AiPlayerbot.MinRandomBotRandomizeTime = 7200 -AiPlayerbot.MaxRandomBotRandomizeTime = 1209600 -AiPlayerbot.RandomBotsPerInterval = 60 -AiPlayerbot.MinRandomBotReviveTime = 60 -AiPlayerbot.MaxRandomBotReviveTime = 300 -AiPlayerbot.MinRandomBotTeleportInterval = 3600 -AiPlayerbot.MaxRandomBotTeleportInterval = 18000 -AiPlayerbot.RandomBotInWorldWithRotationDisabled = 31104000 - - -#------------------------------------------------------------------- -# distance -#------------------------------------------------------------------- -AiPlayerbot.FarDistance = 20.0 -AiPlayerbot.SightDistance = 75.0 -AiPlayerbot.SpellDistance = 28.5 -AiPlayerbot.ShootDistance = 26.0 -AiPlayerbot.ReactDistance = 150.0 -AiPlayerbot.GrindDistance = 75.0 -AiPlayerbot.HealDistance = 38.5 -AiPlayerbot.LootDistance = 25.0 -AiPlayerbot.FleeDistance = 8.0 -AiPlayerbot.TooCloseDistance = 5.0 -AiPlayerbot.MeleeDistance = 1.5 -AiPlayerbot.FollowDistance = 1.5 -AiPlayerbot.WhisperDistance = 6000.0 -AiPlayerbot.ContactDistance = 0.5 -AiPlayerbot.AoeRadius = 10 -AiPlayerbot.RpgDistance = 200 -AiPlayerbot.AggroDistance = 22 - - -#------------------------------------------------------------------- -# performance related -#------------------------------------------------------------------- -AiPlayerbot.BotActiveAlone = 10 (either use 10% or 100% anything is between is kinda useless) -AiPlayerbot.botActiveAloneSmartScale = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1 -AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80 - -PlayerbotsDatabase.WorkerThreads = 1 -PlayerbotsDatabase.SynchThreads = 2 -``` - -## Memory footprint -With too many bots the memory footprint wil grow rather quickly, even with good latency numbers -the bots can get out of sync with the world. Find good balance between your hardware and the -configured amount of (random/alt) bots. - -Until fixed if ever, restart your server every x hours depending on your configuration, hardware, player base/usage. - -e.g. with a cronjob -..