Revision Difference
Bots#545855
<cat>Code.Player</cat>⤶
<title>Bots</title>⤶
⤶
# What are bots?⤶
⤶
Bots are fake clients that can be added to a game, and take a normal player slot. Their input and behaviour can be coded like most other things in C#.⤶
⤶
# Default Bot⤶
⤶
By default, the console command `bot_add` will add a bot that mimics another player's input. This command has some additional parameters you can use:⤶
⤶
`bot_add <clientIndex> <yawOffset> <forceCrouch>`⤶
⤶
**clientIndex** *(def: 1)* Which client to mimic. ⤶
**yawOffset** *(def: 180)* The bots yaw rotation relative to the target client. ⤶
**forceCrouch** *(def: 0)* Whether or not the bot is forced to crouch.⤶
⤶
⤶
#Custom Bots⤶
⤶
To create a custom bot you need to first extend the `Bot` class, which has two important methods: `Tick` and `BuildInput`.⤶
⤶
## Example⤶
⤶
It's worth noting that **the methods used below are only called server-side**, unlike ordinary clients whose input is built client-side and sent to the server.⤶
⤶
```csharp⤶
public class MyCustomBot : Bot⤶
{⤶
[AdminCmd( "bot_custom", Help = "Spawn my custom bot." )]⤶
internal static void SpawnCustomBot()⤶
{⤶
Host.AssertServer();⤶
⤶
// Create an instance of your custom bot.⤶
_ = new MyCustomBot();⤶
}⤶
⤶
public override void BuildInput( InputBuilder builder )⤶
{⤶
// Here we can choose / modify the bot's input each tick.⤶
// We'll make them constantly attack by holding down the Attack1 button.⤶
builder.SetButton( InputButton.Attack1, true );⤶
}⤶
⤶
public override void Tick()⤶
{⤶
// Here we can do something with the bot each tick.⤶
// Here we'll print our bot's name every tick.⤶
Log.Info( Client.Name );⤶
}⤶
}⤶
```⤶
⤶
## Pawns⤶
⤶
Each bot has a `Client` property referring to its underlying fake client. Every bot can have its own [Pawn](https://wiki.facepunch.com/sbox/Pawn) and otherwise do anything any other ordinary client could do.