跳到主要内容

创建第一个对话


了解模板

该模板的作用是装饰对话内容格式,使你只需要关注对话内容的编写,而不需要关注对话的格式。

模板的配置内容如下:

chat_animation:
  type: chat_dialog
  header:
    - "{{[[static]][[%img_<0>%  %img_dialog%]]}}"
    - "{{[[static]][[                 <1>]]}}"
    - "{{[[static]][[               ]]}}"
  addIndex: 2
  add: "{{[[static]][[               ]]}}{{[[animation]][[__variable__]]}}"
  footer:
    - "{{[[static]][[               ]]}}"

创建对话转发

创建一个对话很简单,首先进行条件检测转发对话, 转发对话需要用到一个关键词 cases

plugins/QuestEngine/space/dialog/测试.yml
# 对话唯一编号
hello:
cases:
-
# 条件
condition: |
permission "hello.world"
# 转发的对话编号
send: chatDialog1
-
# 条件
condition: |
check quest select q1 quest state is FINISH
send: chatDialog2
- send: dialog_test

上面配置中,对话的编号是 hello,从上到下开始检测条件, 一旦满足条件就会转发指定的对话,并且不再检测后面的条件。

如果不填写条件,那么默认结果为 true,直接转发对话。

如果不想转发对话,而是执行脚本,则可以使用 action 关键词

cases:
- condition: ""
# Kether 语句脚本
action: |
tell 你好,世界

交互 NPC 触发对话

创建的对话后,可以通过命令执行对话,但是有时候希望交互 NPC 时 触发对话模式,这时候就需要 npcIDs 关键词来实现

plugins/QuestEngine/space/dialog/测试.yml
hello:
npcIDs:
- 测试NPC
- test
- "1"
- "82"

上面的配置中,npcIDs 是一个列表,可以填写多个 NPC 的 ID

支持 NPC 插件

目前支持的 NPC 插件有:

注意

列表中的 ID 必须是字符串,如果是数字,需要加上引号 ""

对话主题

目前对话主题有聊天框对话 chat、全息对话 holo

通过 type 关键词来指定对话主题

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
type: chat
注意

全息对话中间更新经过了数据包相关代码修改,没经过完全测试,尚不稳定, 建议使用聊天框对话。

对话空间

对话空间也是相当于对话范围,玩家对话过程中会实时检测条件, 如果不满足条件,那么对话会被中断。

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
# 对话空间
space:
# 是否启用
enable: true
# 检查条件,一旦不符合将终止对话
condition: |
spaceRange 30 30 30 {{location}}

上面的配置中,对话空间是一个立方体,范围是 30,如果玩家离开这个范围, 那么对话会被中断。

{{location}} 是一个变量,表示玩家或者 NPC 当前位置,仅可以在该条件中使用。

通过命令执行的对话,则{{location}} 为 玩家当前位置。通过 NPC 触发的对话, 则 {{location}} 为 NPC 当前位置。

聊天框对话

聊天框对话经过了多次更新和测试,基本上稳定可用。

动态文本播放速度

默认的播放速度是 1,单位是 tick20 tick 约等于 1s

可以通过 speed 关键词来指定动态文本播放速度

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
speed: 2

回复选项选择时的前缀

当玩家选择回复选项时,会在前面添加一个前缀,可以通过 replyChoose 关键词来指定

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
replyChoose: "&7&l[ &b&l! &7&l] &b"

回复选项未选择时的前缀

未被选择的回复选项,会在前面添加一个前缀,可以通过 replyDefault 关键词来指定

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
replyDefault: "&7"

选择模板

模板是对话的装饰,模板已经在上面进行了介绍, 可以通过 template 关键词来指定模板

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
template: chat_animation

对话内容

对话内容是向玩家展示的对话内容,使用 dialog 关键词

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
dialog:
- head1
- 银河舰长
- 你好,旅客,欢迎来到银河系
- 这里是银河系的中心,你可以在这里找到各种各样的任务

上面的配置中,dialog 是一个列表

第一行对应了模板的变量 <0>,即%img_head1%

第二行对应了模板的变量 <1>

第三行及之后则是动态文本内容了

提示

对话内容支持 PlaceholderAPI,可以在对话内容中使用 PlaceholderAPI 变量

所以 %img_head1% 是使用了 ItemsAdder 插件的一个图像变量

回复选项

回复选项是玩家选择的选项,使用 reply 关键词

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
reply:
-
# 显示所需条件
condition: |
check quest select q1 quest state is NOT_ACCEPT
# 回复内容
content:
- "你好,舰长,我来查询任务"
# 选中后执行的脚本
script: |
quest select q1
quest accept
-
# 第二个回复选项
content:
- "你好,舰长"
# 发送对话 test
cases:
- send: test

上面的配置中,reply 是一个列表,每个元素都是一个回复选项

condition 是显示回复选项所需的条件,如果不填写,则默认为 true

script 是选中回复选项后执行的脚本, 如果是发送新的对话,建议使用 casessend 来发送对话

对话约束

对话约束是特殊情况所需要的,比如时刻保持对话、触发对话后不清空聊天框、添加致盲效果等

使用 flag 关键词来需要的对话约束

plugins/QuestEngine/space/dialog/测试.yml
dialog_test:
flag:
- KEEP_CONTENT
- BLINDNESS
- SLOW

下面是对话约束的列表

约束说明
KEEP_CONTENT时刻保持聊天框对话
BLINDNESS对话时失明效果
SLOW对话时缓慢效果
NO_CLEAR对话结束后不清空聊天框
NO_CACHE_CHAT对话过程中屏蔽的聊天消息不缓存,对话结束后不会显示
NO_SCREEN对话过程中不屏蔽聊天消息
WSWS按键代替滚轮来选择回复
AD_CHOOSEAD按键代替F键来点击确认回复
NO_END选择回复后不结束对话,继续保持对话

对话继承

对话继承是指当前的对话继承了另一个对话的配置,基本上全继承了。

当前的对话填写的关键词会覆盖继承的对话的关键词的内容

继承的对话使用 hook 关键词来指定

plugins/QuestEngine/space/dialog/ka.yml
chatDialog2:
hook: dialog_test
dialog:
- se
- 服务员
- 你好,我是服务员
- 你想要点什么
- 我可以推荐你一些菜品
reply:
-
content:
- 有什么好吃的吗
# 发送对话 a2
script: |
dialog select a2
dialog send
-
content:
- 我再看看
# 发送对话 a3
cases:
- send: a3

上面的配置中,chatDialog2 继承了 dialog_test 对话的配置的全部属性,但是 重写了 dialogreply 的内容。

使用方法

进行选择回复类状态下,使用鼠标滚轮上下滑动选择对话类(滚轮原理是槽位切换),按 F 键选中回复(原理是主手副手切换)