mirror of
https://github.com/liyunfan1223/mod-playerbots.git
synced 2026-02-20 18:10:02 +01:00
Created Playerbot configuration (markdown)
parent
c7a7c533d4
commit
0b898ebf28
241
Playerbot-configuration.md
Normal file
241
Playerbot-configuration.md
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
## 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:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## 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
|
||||||
|
..
|
||||||
Loading…
x
Reference in New Issue
Block a user