全站通知:

Bots

阅读

    

2023-08-26更新

    

最新编辑:TrimesS_

阅读:

  

更新日期:2023-08-26

  

最新编辑:TrimesS_

来自S&boxWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
-TrimesS-

什么是机器人?

机器人是可以添加到游戏中的假客户端,占用一个普通玩家的位置。 它们的输入和行为可以像其他大多数东西一样用 C# 来编写。

默认机器人

默认情况下,控制台命令 bot_add 会添加一个模仿其他玩家输入的机器人。您还可以使用该命令的一些附加参数:
bot_add <clientIndex> <yawOffset> <forceCrouch>
clientIndex (定义:1)要模仿的客户端。如果设置为 0,则不会模仿任何东西,而是保持空闲。
yawOffset (定义:180)机器人相对于目标客户端进行方位旋转。
forceCrouch (def: 0) 是否强制机器人下蹲。

自定义机器人

要创建自定义机器人,首先需要扩展机器人的类,该类有两个重要方法: TickBuildInput

示例


值得注意的是,下面使用的方法只在服务器端调用,这与普通客户端不同,普通客户端的输入是在客户端构建并发送到服务器的。

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,也可以做任何其他普通客户端可以做的事情。