You can use bot_minClients to set a minimum number of (client) players on the server e.g. start with 12 bots but drop one bot each time a human player connects, and add one bot each time a human player disconnects, so that the server always has a minimum of 12 players.
set bot_minClients 12 // Keep a minimum number of clients on the server with bots and humans.
// (bots will disconnect when human connects) -1 to disable type: int [-1, 32]
You can also set the maximum allowed value for bot_minClients but it only affects the in-game UI, is write protected and seems to have a hardcoded limit of 16 in Quake Wars v1.2.
set bot_minClientsMax 32 // Maximum allowed value of bot_minClients. Only affects the in-game UI. type: int [-1, 32] (init)
There is a workaround that allows you to add more than 16 bots to a server but its not as nice as setting one cvar value.
You can override the bot_minClientsMax of 16 by disabling bot_minClients (by setting it to -1) and then adding bots manually with the admin addbot command.
Manually added bots (via the limbo admin UI options, via rcon commands or via scripts) are dropped at the start of each campaign so if you want to keep more than 16 bots you'll need a script to manually add bots at the start of each campaign.
I have implemented the following solution on our {TWR} game servers:
bots.cfg sets the bot cvars and adds 22 bots to the server
bots.cfg
// set bot cvars
set bot_enable 1 // type: bool default: 1 (true)
set bot_minClients -1 // Keep a minimum number of clients on the server with bots and humans. (bots will disconnect when human connects) -1 to disable type: int [-1, 32]
set bot_minClientsMax 22 // Maximum allowed value of bot_minClients. Only affects the in-game UI. type: int [-1, 32] (init)
set bot_skill 2 // Sets the bot's default AI skill. 0 = EASY, 1 = NORMAL, 2 = EXPERT
set bot_aimSkill 1 // Sets the bot's default aiming skill. 0 = EASY, 1 = MEDIUM, 2 = EXPERT, 3 = MASTER
// add 22 bots - 11 gdf and 11 strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
admin addbot gdf
admin addbot strogg
FTP bots.cfg to your server's /base directory
Then add or replace your campaign rotation commands in server.cfg to execute the bots.cfg after each campaign start.
Example campaign rotation at the end of server.cfg
// Start campaign rotations
set campaign1 "set g_nextMap $campaign2; spawnServer campaign_africa; exec bots.cfg"
set campaign2 "set g_nextMap $campaign3; spawnServer campaign_northamerica; exec bots.cfg"
set campaign3 "set g_nextMap $campaign4; spawnServer campaign_northeurope; exec bots.cfg"
set campaign4 "set g_nextMap $campaign1; spawnServer campaign_pacific; exec bots.cfg"
vstr campaign1
Restart the server and it should load 22 bots, and keep 22 bots even after campaign starts.