Bots
阅读
2023-08-26更新
最新编辑:TrimesS_
阅读:
更新日期:2023-08-26
最新编辑:TrimesS_
什么是机器人?
机器人是可以添加到游戏中的假客户端,占用一个普通玩家的位置。 它们的输入和行为可以像其他大多数东西一样用 C# 来编写。
默认机器人
默认情况下,控制台命令 bot_add 会添加一个模仿其他玩家输入的机器人。您还可以使用该命令的一些附加参数:
bot_add <clientIndex> <yawOffset> <forceCrouch>
clientIndex (定义:1)要模仿的客户端。如果设置为 0,则不会模仿任何东西,而是保持空闲。
yawOffset (定义:180)机器人相对于目标客户端进行方位旋转。
forceCrouch (def: 0) 是否强制机器人下蹲。
自定义机器人
要创建自定义机器人,首先需要扩展机器人的类,该类有两个重要方法: Tick 和 BuildInput
示例
值得注意的是,下面使用的方法只在服务器端调用,这与普通客户端不同,普通客户端的输入是在客户端构建并发送到服务器的。
public class MyCustomBot : Bot
{
[ConCmd.Admin( "bot_custom", Help = "Spawn my custom bot." )]
internal static void SpawnCustomBot()
{
Game.AssertServer();
// 创建自定义机器人的实例
_ = new MyCustomBot();
}
public override void BuildInput()
{
// 在这里,我们可以 选择/修改 机器人每一Tick的输入
// 我们将通过按住 "主要攻击"(PrimaryAttack/或译主武器开火)按钮使它们持续攻击
Input.SetButton( InputButton.PrimaryAttack, true );
// 在这里,我们将使机器人向前行走并转一个大圈
Input.AnalogMove = Vector3.Forward;
Input.AnalogLook = new Angles( 0, 30 * Time.Delta, 0 );
// 最后,我们将在机器人客户端的Pawn上调用 BuildInput
// 注意,由机器人驱动的模拟客户端的Pawn不会自动调用 Entity.BuildInput,所以我们才在这里调用它
(Client.Pawn as Entity).BuildInput();
}
public override void Tick()
{
// 在这里,我们可以对机器人做一些事情
// 在这里,我们将每隔一秒打印机器人的名字
Log.Info( Client.Name );
}
}
在上面的示例中,我们自己设置了输入值,然后在棋子上调用 BuildInput。这样,处理真实用户输入的代码也可以处理模拟输入。
Pawn
每个机器人都有一个客户端属性,指的是其底层的假客户端。每个机器人都可以拥有自己的Pawn,也可以做任何其他普通客户端可以做的事情。