Repository navigation
Teams Bots
With Custom NPCs and the NPC Vehicles & Soldiers module installed, Teams rounds can be fought by bots alongside players: soldiers with Flan classes, squads, tanks, planes, helicopters, AA guns and ships. Bots spawn at their team's spawn points and vehicle spawners, fight for their team, take capture points and play the round's objective. Every round of the rotation keeps its own bot settings.
Bots are switched off until a round is given settings. The first /teams ai round
setting given to a round switches its bots on.
The same bots can also fight outside rounds, for factions, in battles without objectives: see NPC Factions and Skirmishes.
/teams ai round current team germany count 20
/teams ai round current team us count 20
/teams ai round current team germany names german_20th
/teams ai round current team us names american_20th
current is the round being played; a number is a round of the rotation, as
/teams listRotation numbers them. Settings take effect within a second, also
during a round.
Operators can set everything on this page in a screen: /teams ai editor, or
/teams ai editor <round>. Its pages hold the round's own settings, each team's
infantry, each team's squads and vehicles, and the squad templates. Lists are edited
as one line of text: class weights as rifleman:3, mg:1, class roles as sani:medic, squads as
template:count[:budget], vehicles as
type:count[:budget[:respawn seconds[:ticket cost[:carried template]]]] and template
members as class:count. Save round keeps the round's settings; templates are saved
with their own button. Unsaved changes are marked with a * on Save round, and
switching rounds or closing the editor with some asks first. Its Rules page holds difficulty, the rules below and Vehicle crews,
its forces page has a box per kind of seat for the crew classes, and its Presets page saves
the round's settings as a preset, applies a preset, and copies another round's
settings. On saving, the editor
lists anything that will not work as written: a vehicle type without an NPC model, a
squad template that does not exist, or a class the team does not offer. Such entries
are kept but skipped; /teams ai round <round> show lists the same warnings.
/teams ai round <round> mode <fixed|share|fill> decides what each team's count
means:
| Mode |
count is |
Example |
|---|---|---|
fixed (default) |
the exact number of bots | team 1: 13, team 2: 40 |
share |
a weight; total is shared out by the weights |
total 90, weights 1 and 2: 30 and 60 |
fill |
the fighters the team should have, players included | bots leave as players join |
There is no fixed size and no limit: any total, any ratio, and different targets per
team in fill mode. Large numbers cost server time; /flansnpcbenchmark measures it.
Bots arrive two per tick, so a large force takes a few seconds to appear.
Classes are picked from the team's classes. By default every class is equally likely;
team <team> class <class> <weight> weights them, and a class given no weight is then
left out.
Bots fight in squads. Loose infantry is grouped into squads of squadsize (6 by
default). Squad templates set a composition:
/teams ai template create grenadiers Panzergrenadier Group
/teams ai template members grenadiers officer:1 rifleman:6 mg:2
/teams ai template posture grenadiers assault
/teams ai round 2 team germany squad grenadiers 4
Templates are saved in config/wolffsmodnpcs/squad-templates.json, which can also be
edited by hand. A class a team does not offer is replaced by one it does. Loose
infantry squads worn down below half their size are merged, so the commander keeps
whole squads to send. The posture
(balanced, assault, defense) tells the commander how the squad prefers to be
used, and a template may name its own soldier name list.
/teams ai round 2 team germany vehicle tiger 2
/teams ai round 2 team us vehicle sherman 5
Each entry is a vehicle type and how many of it the team fields at once. Vehicles appear at the vehicle spawners the team holds, or at its spawn points when it holds none. Planes and helicopters fly, ships keep to water, and AA guns stay where they spawned. Vehicles are loaded with the default ammunition of every gun they mount.
The full form is vehicle <type> <count> [budget] [respawn seconds] [ticket cost].
team <team> carry <type> <template> makes a vehicle entry a transport: each time one
of those vehicles spawns, it takes a squad of the template on board, heads for an
objective like infantry, and puts the squad down when it gets there. A truck or a
landing craft unloads it beside itself; a plane or a helicopter more than 8 blocks up
drops it by parachute, using the first parachute tool of the content packs, or lets it
float down when none is loaded. The squad costs a ticket per soldier and does not come
back once lost: the next transport brings another. carry <type> none stops it.
vehiclecrews on gives every vehicle bot of the round a crew of its team's soldiers
when it spawns, sitting in the seats of its model; it is off by default. The vehicle
still drives and fires its main weapons by itself, and its gunners fire the guns of
their seats. Each team chooses the class crewing each kind of
seat:
/teams ai round 2 team germany crew driver tank_crewman
/teams ai round 2 team germany crew gunner any
/teams ai round 2 team germany crew passenger none
driver is the driver seat, gunner the seats with a gun and passenger the seats
without one. A class name crews those seats with that class, any (the default) with
a class picked by the team's class weights, and none leaves them empty. Crew members
are made like the team's other soldiers, from its clone when it has one, and named
from its name list. They spend no tickets, count nothing on capture points, and score
their kills for their vehicle. While aboard they are shielded: enemies aiming at them
aim at the vehicle instead. When the vehicle is destroyed they bail out and fight on
foot until they fall or the round ends, and they are not replaced; the next vehicle of
the entry brings a new crew.
A destroyed vehicle bot sometimes leaves a real vehicle of its type behind, with every
part at 30% of its hit points and no fuel or ammunition, for players to repair and use.
abandon <percent> sets the chance, 25% by default; 0 turns wrecks off.
Respawns are unlimited by default. Two limits can be set, alone or together:
-
Budgets, as in Heroes & Generals.
team <team> budget <n>caps how many loose infantry bots the team may spawn in the whole round; a squad entry's budget caps how many squads of it are raised (a budgeted squad fights until it is wiped out and its members do not come back one by one); a vehicle entry's budget caps how many of that vehicle appear. -
Tickets, as in the original Star Wars Battlefront.
tickets <n>gives every side a pool of respawns. Each respawn of a soldier costs one ticket and each vehicle its ticket cost (1 by default). The force a round starts with costs nothing. With no tickets left, no bot comes back.
Players share their side's tickets: once the round has a ticket limit, each player
respawn costs one ticket, and so does joining the side again after having fought.
Taking the field when the round starts, and the first time a player joins, are free.
A player whose side has no tickets left stays on the team as a spectator until the
round ends. playertickets off keeps player respawns unlimited.
While a limit is set, a side that has fought and has no player in the field, no bot alive and nothing left to bring in is worn out. When only one side is left standing, it wins the round.
rubberband <percent> gives a side that trails on score more infantry: as much as
that percent of its force when it trails by the whole score limit, less the closer it
is. It is off (0) by default and never applies in Assault, whose score counts losses.
Each side has a commander that gives every squad a task every two seconds:
- Domination and Conquest: squads go to the capture points worth most to them: points the side does not hold, held points the enemy is taking or closing in on, and quiet held points last. Squads spread over the points rather than crowd one, and tanks lean towards attacking.
- Assault: the attackers push the objective in play. Two thirds of the defenders hold it and the rest hold the next one.
- Capture the Flag: a squad carrying the enemy flag takes it home; when the side's own flag is stolen, a third of the squads chase its carrier, and a dropped flag is brought back by one squad; half the others raid the enemy flag and the rest guard their own. Bots take, return and capture flags by touching them.
- Deathmatch, Team Deathmatch and Zombies: squads hunt the nearest enemy they know of, or head for the enemy's spawn.
- Aircraft patrol over the point most squads were sent to. AA guns hold. Ships patrol the naval marker nearest the front.
A squad keeps the objective it is heading for unless another one is clearly worth more, so squads do not turn back and forth. Soldiers spawn at the spawn points nearest their squad's task, spread over the three nearest and over free room around each.
On the way, a bot that meets an enemy fights with the tactics the NPC module gives its
weapon, then carries on. Bots seek out the enemy teams' bots as they do players, and
leave allied teams' bots alone. A bot that makes no headway for a few seconds tries its way
round to either side, wider each time, and moves on to the next route point. Bots
capture points as players do, with the round's capture weights: capture infantry <weight> and capture vehicles <weight>, 1 by default, where 0 keeps them off the
points.
Soldiers do more than fight, by what their class carries: a class with a medical tool is
a medic, one with a repair tool an engineer, one with a gun that goes through
40 mm of armour or a launcher with a blast of 2 blocks or more anti-tank, and one
with a deployable or belt-fed gun (automatic, 50 rounds or more) support; any other
class fights as a rifleman. team <team> role <class> <rifleman|medic|engineer|support|anti_tank>
sets a class's role by hand, and role <class> auto gives it back to its equipment.
- Medics heal hurt allies, players and bots, within 16 blocks, by their tool's heal amount every two seconds.
- Engineers repair damaged allied vehicles within 24 blocks: vehicle bots, driveables their side drives, and empty wrecks.
- Support soldiers hand ammunition for the gun in hand to allies within 16 blocks who are short of it, a player once every 30 seconds.
- Anti-tank soldiers turn on enemy armour they can see within 64 blocks, and look at vehicles before infantry; every other soldier looks at infantry first.
A bot walks to its duty while it has nobody to fight, then goes back to its squad.
Flan rounds that pass close to a soldier bot suppress it, by the same near-miss rules
that suppress players: it aims worse, down to half its accuracy, and once pinned down
it stops advancing until the fire lets up a few seconds later. A soldier below
retreat percent of its health (30 by default, 0 never) falls back to the nearest medic
of its side, or to its spawn, until it has healed or 30 seconds have passed.
suppression off turns suppression off.
difficulty <default|recruit|regular|veteran|elite> scales how well bots fight, on
top of what their class's loadout or their clone gives them:
| Difficulty | Aim | Notices enemies at | Health | Time between shots |
|---|---|---|---|---|
default |
as given | as given | as given | as given |
recruit |
60% | 75% | 80% | 150% |
regular |
85% | 90% | 100% | 120% |
veteran |
115% | 115% | 125% | 85% |
elite |
135% | 130% | 150% | 70% |
Markers tell bots about a map. Stand where one belongs and place it:
/teams ai marker <map> add route
/teams ai marker <map> add garrison
| Type | Use |
|---|---|
route |
Points within 64 blocks of each other form paths across the map. Bots take the shortest chain of them to far targets, which leads them round obstacles. |
garrison |
Posts defenders of a nearby objective take up. |
sniper |
Like garrison posts, taken first. |
aa |
A position for AA guns. |
naval |
Patrol points for ships. |
remove deletes the marker nearest to you within 8 blocks, list shows them, and
clear deletes all markers of a map. show draws the map's markers within 128 blocks
of you for two minutes, as columns of coloured dust only you see: white route points,
blue garrison posts, red sniper posts, yellow AA positions and cyan naval points.
Press P (Squad orders, in the controls) to order the allied squads around you, or
use /teams ai order follow|hold|release and /teams ai order attack|defend <point>.
Squads whose leader is within 24 blocks hear you. Hold holds the block you look at,
up to 128 blocks away, or your own position. An order lasts five minutes, or until you
release it, and comes before the AI's plans; a squad told to follow you drops the
order when you die or leave the round. The screen keeps itself up to date while open.
Show map draws the squads you may order, the capture points in their owners' colours and you from above. Click a squad to pick it, a capture point to send the picked squad at it (to attack, or to defend a point your side holds), or anywhere else to have the squad hold that place.
Lead squad in the order screen, or /teams ai squad lead, takes the lead of the
squad you chose, or of the nearest allied infantry squad within 24 blocks; each squad has
one leader and each player leads one squad. The squad follows you unless you order it
elsewhere, and goes back to its commander while you are dead. Leave or
/teams ai squad leave gives it up.
A leader can place a rally point where they stand (/teams ai rally), when no enemy is
within 16 blocks. For five minutes, or until an enemy comes within 8 blocks and overruns
it, the squad's fallen soldiers come back there. Spawn in the order screen, or
/teams ai spawn base|squad|rally, chooses where you come back after dying: where the
game type puts you, on a member of your squad with no enemy near, or at the rally point.
rallypoints off turns rally points off for a round.
Where your orders send squads, and your squad's rally point, are marked in the world with the squad, what it does there and how far away it is, seen through walls.
Bots call out on their side's radio when the side takes or loses a point, when a point
it holds comes under attack, and when enemy armour closes in on one; only that side's
players hear them, and each call about a point waits a minute or more before it comes
again. radio off silences them.
One player per side can take its command seat, in the order screen or with
/teams ai commander take. The commander can order every squad of the side, wherever
it is, from the same screen. The side is told who takes and who leaves the seat. The
seat frees itself when its holder leaves the side; /teams ai commander leave gives
it up.
While you drive a vehicle, /teams ai board sends the nearest allied bots within 16
blocks into its free gunner seats. They man the seat guns against enemies the gun can
see. /teams ai dismount has them get off again.
-
names <list>names a team's bots from a soldier name list, such asgerman_20th. Kill messages name bots like players: "Hans Müller killed John Smith". -
nameplates <default|always|allies|never>: who sees bot name tags.allies(default) shows them to the bot's own side only. -
scoreboard <individual|grouped|auto>: bots appear on the scoreboard one by one, summed up in one[AI]row per team, or (default) one by one up to 12 bots per team and summed up beyond.
Bots made plain wear their class's armour and skin, on dedicated servers as in
singleplayer: each player's game puts the class skin on, on Custom NPCs' 64x32 model
when it is an old 2:1 skin, and vehicle bots wear their model's texture. A skin given
to a bot by hand replaces the class skin. To give a team's bots a look,
stats or AI of your own, set up an NPC with the Custom NPCs tools, save it as a clone
and use it: team <team> clone <tab> <name>. The bot then gets its class's equipment
on top of the clone, unless team <team> keepequipment on lets it keep the weapons and
armour the clone was saved with.
/teams ai round <round> show lists a round's settings.
| Setting | Values |
|---|---|
enable, disable
|
switch the round's bots on or off |
mode <fixed|share|fill> |
how count is read |
total <n> |
bots shared out in share mode |
respawn <seconds> |
wait before a fallen bot comes back, 10 by default |
tickets <n> |
respawns per side, 0 for unlimited |
squadsize <n> |
loose infantry per squad |
playertickets <on|off> |
whether player respawns spend the side's tickets, on by default |
difficulty <default|recruit|regular|veteran|elite> |
how well bots fight |
radio <on|off>, suppression <on|off>, rallypoints <on|off>
|
bot radio calls, suppression, rally points; all on by default |
retreat <percent> |
health below which a soldier falls back, 30 by default |
copyfrom <round> |
copies another round's settings, team by team |
capture <infantry|vehicles> <weight> |
capture weight of bots |
nameplates ..., scoreboard ...
|
see above |
team <team> count <n> |
loose infantry |
team <team> budget <n> |
loose infantry spawns in all, 0 for unlimited |
team <team> names <list|none> |
soldier name list |
team <team> clone <tab> <name>, clone none
|
Custom NPCs clone bots are made from |
team <team> keepequipment <on|off> |
whether bots keep their clone's equipment |
team <team> role <class> <role|auto> |
a class's role |
team <team> class <class> <weight> |
class weight |
team <team> squad <template> <count> [budget], removesquad <template>
|
squads |
team <team> vehicle <type> <count> [budget] [respawn] [ticket cost], removevehicle <type>
|
vehicles |
| `team carry <template | none>` |
vehiclecrews <on|off> |
whether vehicle bots spawn with a crew, off by default |
team <team> crew <driver|gunner|passenger> <class|any|none> |
the class crewing a kind of seat |
abandon <percent> |
chance a destroyed vehicle leaves a wreck, 25 by default |
rubberband <percent> |
extra infantry for a trailing side, 0 by default |
/teams ai preset save <name> <round> keeps a round's bot settings as a preset in
config/wolffsmodnpcs/bot-presets.json; preset apply <name> <round|all> puts it on
rounds, preset list and preset remove <name> manage them. A preset remembers the
teams of its round: applied to a round with other teams, a team the two share keeps its
force, and the others take the forces in their place in round order.
Other commands: /teams ai status shows the bots, tickets and squad tasks of the
round being played; /teams ai clear removes every bot of the round, and the force is
raised again while bots are enabled.
Bots belong to their round: they are removed when it ends. A server that stops during a round keeps its bots with the world: when the same round resumes, it takes them back with their names, scores and squads, and with the tickets and budgets already spent. Bots of any other round are removed.