跳到主要内容

对话代理

对话代理(Agent)是在对话生命周期特定时机自动执行的 Kether 脚本,可以用来触发任务、播放动画、检查条件或修改对话流程。

代理类型

类型说明
begin对话开始前执行,阻塞后续流程直到脚本完成
begin_async对话开始前执行,不阻塞
start对话界面就绪后执行,阻塞
start_async对话界面就绪后执行,不阻塞
goto跳转到新对话节点时执行
refuse玩家拒绝(关闭)对话时执行,阻塞
refuse_async玩家拒绝对话时执行,不阻塞
end对话正常结束时执行,阻塞
end_async对话正常结束时执行,不阻塞

beginstart 的区别:begin 在对话主题初始化之前触发,start 在界面已经展示后触发。

基本写法

在对话文件的 agent: 节点下按类型写入 Kether 脚本:

对话文件.yml
agent:
begin:
- "tell &a对话开始了"
end:
- "tell &7对话结束"

多行脚本按列表顺序依次执行:

对话文件.yml
agent:
begin:
- "set quest_flag value true"
- "tell &a任务已标记"

可用 Kether 动作

对话代理中可以使用以下专属动作:

动作说明
talk <文本>向玩家发送对话消息
cancel取消当前对话(仅在 begin 中有效,通过设置 @Cancelledtrue
goto <节点>跳转到指定对话节点

完整示例

npc_merchant.yml
__option__:
title: "商人王五"
theme: chat

merchant_main:
agent:
begin:
- "tell &7正在检查任务状态..."
begin_async:
- "actionbar &7正在与商人交谈"
start:
- "set greeted true"
goto:
- "tell &7跳转到新节点"
refuse:
- "tell &7好吧,下次再来"
end:
- "set quest_merchant_done true"
npc:
- "你好,旅行者,需要什么吗?"
player:
- reply: "我需要购买物品。"
- reply: "只是随便问问。"
then:
- "tell &7再见"
提示

代理脚本写在对话节点中时对该节点生效。玩家回复选项中的脚本通过 then: 字段执行,不使用 agent: 节点。