跳到主要内容

自定义控制器

自定义控制器是基于 Kether 的,在开始前请确保你已阅读 脚本 部分。

提示

因为脚本性能问题,我们并不推荐 大量 使用 Kether 制作自定义控制器。

提示

自定义控制器是 标准控制器 的简化版本,

自定义控制器目录位于:

Adyeshach
└── npc ··················· 虚拟实体储存目录
└── controller ········ 自定义控制器目录 ······ 默认没有,需自行创建
└── def.yml ······· 自定义控制器文件

演示文件:

example-custom-controller:
# 概率
chance: 0.001
# 冷却
cooldown: 20s
# 异步
async: false
# 条件
if: true
# 行为
# 当变量名为 "__XXX__" 形式时,会被临时持久化在当前控制器中
then: |-
if check &__num__ == null then {
set __num__ to 0
}
set __num__ to math &__num__ + 1
tell inline "你好, 我是傻逼。这是我第 {{ &__num__ }} 次发言。"

所有自定义控制器都会显示在 下级页面:控制器 中。

名词解释

自定义控制器文件中各节点作用如下:

概率

指每个游戏刻中执行这个控制器的概率,最大为 1 (100%)。

冷却

指触发这个控制器的最短间隔。

异步

指是否在 非主线程 中运行 Kether 脚本。

警告

不是所有语句都支持异步运行,请酌情使用。

条件

指触发这个控制器的要求,在 概率冷却 判定通过之后处理。

提示

不用条件做 概率 判断是因为 Java 代码的效率要远高于 Kether 脚本。

提示

如果没有条件请删除 if 节点,不要使用 if: true,因为那是演示写法,会带来额外的性能损耗。

行为

就是控制器的脚本部分,对于 __名字__ 形式的变量会被临时储存(关服清空)在控制器中。

警告

控制器的执行频率非常高,如果你对你的脚本水平没有把握,请不要以身试险。

交互

每个注册到 Adyeshach 中的控制器都拥有其唯一名称,例如预设控制器中的:

  • 看玩家:LOOK_AT_PLAYER
  • 看风景:RANDOM_LOOKAROUND

这个名称除了用于储存,也是使用 代码脚本 交互的重要判别方式,例如:

使用代码获取控制器

Adyeshach.api().getEntityControllerRegistry().getControllerGenerator("LOOK_AT_PLAYER")

使用脚本语句添加控制器

controller add "LOOK_AT_PLAYER"

当然,自定义控制器也是如此。你注册的所有自定义控制器都将会以 inner:[节点名称] 作为唯一的判别名称。例如演示文件中的自定义控制器,就是 inner:example-custom-controller

使用代码获取控制器

Adyeshach.api().getEntityControllerRegistry().getControllerGenerator("inner:example-custom-controller")

使用脚本语句添加控制器

controller add "inner:example-custom-controller"