创建第一个对话
了解模板
该模板的作用是装饰对话内容格式,使你只需要关注对话内容的编写,而不需要关注对话的格式。
模板的配置内容如下:
chat_animation:
type: chat_dialog
header:
- "{{[[static]][[%img_<0>% %img_dialog%]]}}"
- "{{[[static]][[ <1>]]}}"
- "{{[[static]][[ ]]}}"
addIndex: 2
add: "{{[[static]][[ ]]}}{{[[animation]][[__variable__]]}}"
footer:
- "{{[[static]][[ ]]}}"
创建对话转发
创建一个对话很简单,首先进行条件检测转发对话,
转发对话需要用到一个关键词 cases
# 对话唯一编号
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
关键词来实现
hello:
npcIDs:
- 测试NPC
- test
- "1"
- "82"
上面的配置中,npcIDs
是一个列表,可以填写多个 NPC 的 ID
列表中的 ID 必须是字符串,如果是数字,需要加上引号 ""
对话主题
目前对话主题有聊天框对话 chat
、全息对话 holo
。
通过 type
关键词来指定对话主题
dialog_test:
type: chat
全息对话中间更新经过了数据包相关代码修改,没经过完全测试,尚不稳定, 建议使用聊天框对话。
对话空间
对话空间也是相当于对话范围,玩家对话过程中会实时检测条件, 如果不满足条件,那么对话会被中断。
dialog_test:
# 对话空间
space:
# 是否启用
enable: true
# 检查条件,一旦不符合将终止对话
condition: |
spaceRange 30 30 30 {{location}}
上面的配置中,对话空间是一个立方体,范围是 30
,如果玩家离开这个范围,
那么对话会被中断。
{{location}}
是一个变量,表示玩家或者 NPC 当前位置,仅可以在该条件中使用。
通过命令执行的对话,则{{location}}
为 玩家当前位置。通过 NPC 触发的对话,
则 {{location}}
为 NPC 当前位置。
聊天框对话
聊天框对话经过了多次更新和测试,基本上稳定可用。
动态文本播放速度
默认的播放速度是 1
,单位是 tick
,20 tick
约等于 1s
。
可以通过 speed
关键词来指定动态文本播放速度
dialog_test:
speed: 2
回复选项选择时的前缀
当玩家选择回复选项时,会在前面添加一个前缀,可以通过 replyChoose
关键词来指定
dialog_test:
replyChoose: "&7&l[ &b&l! &7&l] &b"
回复选项未选择时的前缀
未被选择的回复选项,会在前面添加一个前缀,可以通过 replyDefault
关键词来指定
dialog_test:
replyDefault: "&7"
选择模板
模板是对话的装饰,模板已经在上面进行了介绍,
可以通过 template
关键词来指定模板
dialog_test:
template: chat_animation
对话内容
对话内容是向玩家展示的对话内容,使用 dialog
关键词
dialog_test:
dialog:
- head1
- 银河舰长
- 你好,旅客,欢迎来到银河系
- 这里是银河系的中心,你可以在这里找到各种各样的任务
上面的配置中,dialog
是一个列表
第一行对应了模板的变量 <0>
,即%img_head1%
第二行对应了模板的变量 <1>
第三行及之后则是动态文本内容了
对话内容支持 PlaceholderAPI
,可以在对话内容中使用 PlaceholderAPI
变量
所以 %img_head1%
是使用了 ItemsAdder
插件的一个图像变量
回复选项
回复选项是玩家选择的选项,使用 reply
关键词
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
是选中回复选项后执行的脚本,
如果是发送新的对话,建议使用 cases
的 send
来发送对话
对话约束
对话约束是特殊情况所需要的,比如时刻保持对话、触发对话后不清空聊天框、添加致盲效果等
使用 flag
关键词来需要的对话约束
dialog_test:
flag:
- KEEP_CONTENT
- BLINDNESS
- SLOW
下面是对话约束的列表
约束 | 说明 |
---|---|
KEEP_CONTENT | 时刻保持聊天框对话 |
BLINDNESS | 对话时失明效果 |
SLOW | 对话时缓慢效果 |
NO_CLEAR | 对话结束后不清空聊天框 |
NO_CACHE_CHAT | 对话过程中屏蔽的聊天消息不缓存,对话结束后不会显示 |
NO_SCREEN | 对话过程中不屏蔽聊天消息 |
WS | WS按键代替滚轮来选择回复 |
AD_CHOOSE | AD按键代替F键来点击确认回复 |
NO_END | 选择回复后不结束对话,继续保持对话 |
对话继承
对话继承是指当前的对话继承了另一个对话的配置,基本上全继承了。
当前的对话填写的关键词会覆盖继承的对话的关键词的内容
继承的对话使用 hook
关键词来指定
chatDialog2:
hook: dialog_test
dialog:
- se
- 服务员
- 你好,我是服务员
- 你想要点什么
- 我可以推荐你一些菜品
reply:
-
content:
- 有什么好吃的吗
# 发送对话 a2
script: |
dialog select a2
dialog send
-
content:
- 我再看看
# 发送对话 a3
cases:
- send: a3
上面的配置中,chatDialog2
继承了 dialog_test
对话的配置的全部属性,但是
重写了 dialog
和 reply
的内容。
使用方法
进行选择回复类状态下,使用鼠 标滚轮上下滑动选择对话类(滚轮原理是槽位切换),按 F 键选中回复(原理是主手副手切换)