命令注册指南¶
LeviLamina提供了一套易用的命令注册系统,分为编译期和运行时。本指南仅介绍编译期命令注册系统。
如果你想要实现自己的脚本引擎,运行时命令注册对你可能有用。在本指南加入运行时命令注册的部分之前,你可以参考LegacyScriptEngine的实现或LeviLamina中的CommandTest。
使用方法¶
-
引用必要的头文件
-
调用
CommandRegistrar::getInstance().getOrCreateCommand方法获取或创建一个命令,并将其赋值为auto& command -
调用
command.overload重载命令,如果你不需要一个可以传入参数的命令,可以不传入模板参数,比如:command.overload() -
调用
required方法添加必须的参数,optional方法添加可选的参数,需要注意判断用户是否传入了参数。调用text来添加一个子命令。其他方法可以参考ll/api/command/Overload.h和Intellisense。 -
调用
execute传入命令的回调函数,回调函数的参数参考下列示例。
示例¶
#include "ll/api/command/CommandHandle.h"
#include "ll/api/command/CommandRegistrar.h"
struct NewCommand {
enum class NewEnum { a = 0, b = 1, c = 2 } enum1;
std::string str;
int number = 1;
};
void registerCommand() {
using namespace ll::command;
auto& command = CommandRegistrar::getInstance().getOrCreateCommand("new", "A example command");
command.overload<NewCommand>().text("test").required("enum1").required("str").optional("number").execute(
[](CommandOrigin const& origin, CommandOutput& output, NewCommand const& param) {
output.success("test! {} {} {}", param.enum1, param.str, param.number);
}
);
}
在此示例中,我们定义了一个名为NewCommand的结构,其中存储了命令的各项参数。通过getOrCreateCommand方法创建了一个名为new的命令,通过overload方法重载了名为text的子命令、枚举、字符串和整数参数。在游戏中的效果如下:
下一步¶
- 了解更多关于事件系统
- 查看LeviLamina API参考中的命令模块
- 参考创建第一个模组获得更多上下文