欢迎光临散文网 会员登陆 & 注册

NoelPet 自定义对话系统简要说明

2023-02-03 21:39 作者:凌空の猫  | 我要投稿

暂不支持函数(为什么自定义对话要支持函数啊喂)

要Example往下翻,这里直接讲运行原理

对话文件是一个.json文件。必须包括正确的后缀名,这是软件唯一且必要的识别条件

对话内容语法错误可能导致软件崩溃

介于习惯,下面我们称json中的[]为数组,{}为字典

~~~⚠️非人话警告⚠️~~

建议无编程基础或无阅读理解基础者直接看example

UP在努力说人话(悲)

一个对话文件由多个对话通过数组构成,每个对话是一个字典,应当包括键:

1、condition,后接bool表达式

2、talk,后接字符串数组;如果多余一项,则使得对话有选项,而第一项为对话,后两项为选项

talk内容强制启用bbcode;不允许修改颜色,允许通过bbcode打开链接或文件

可以包括键:

result,后接block表达式数组,分别代表选择三种talk的三种结果(不选择选项,触发效果1)


bool表达式可以为 true 或 false,否则应当包括键:

1、operator,可选值为"greater"  "smaller"  "equal"  "and"  "or"  "not"  "xor";此时含义与其代表的运算对应;

"first_run",以data为区分,仅在软件打开后首次判断时成立

2、data,一个数组,根据operator的选择,决定内部表达式类型与个数;我们称 greater、smaller、equal使用的表达式为运算表达式


运算表达式可以直接表示非字典的值,当类型为字典时,应包括键:

1、operator(可选值为字符串,见下文)

2、data(下文将data数组的长度称为data的个数)

    Operator列表:

        len:接收data共1个,可为结果为字典或数组的运算表达式,返回长度

        list:接收data共2个,分别为目标字典或数组及目标下标,返回目标元素

        var_default:接收data共1个,为字符串,返回该字符串在全局字典中对应的值。如不存在,取默认值0。

        var:同上,但不判定是否存在该字符串的键值。

        if:接收data共2或3个,其一为bool表达式,若该表达式成立,则返回第二个表达式的结果,否则返回第三个。

        block:接收data共1个,为block表达式,返回"return"在全局字典中对应的值。

        add / sub / mul / div:加减乘除,接收data共2个,均为运算表达式,返回结果。


另有Operaor:system。应包含键get。

get可为year month day hour minute second其一,获取对应的时间;

可为windows_position_x或windows_position_y,获取屏幕未知;

可为power_percent_left或power_seconds_left,获取电池剩余电量,单位分别为百分比与时间。


block表达式大致与上述表达式一致,列出operator如下:

(简记data的第N项为dataN)

        Operator列表:

            disable:禁用对话。

            disable_walk/enable_walk:禁止/允许诺艾儿行走

            disable_new_music/enable_new_music:禁止/允许切换背景音乐

            disable_hover/enable_hover:禁止/允许诺艾儿被拖拽

            play_music:接收1个data为音乐名,播放音乐

            (可以在AppData/NoelPet/BGM中,或macOS的Application Support/NoelPet/BGM中放入自定义曲目;后缀名只可为.mp3、.ogg、.wav三者其一)

            system:接收2个data,若data1为"full_screen",则data2第二个为决定是否全屏的bool表达式;若data1为"minimized",则data2为决定是否最小化的bool表达式

            var_set:接收2个data,使全局字典中,data1的键值为data2的运算表达式

            force_queue:接收1个data,使得下一对话无条件设为,索引为该data值的对话

            queue:同上;但在尝试调用对话时,会判断该对话的condition是否为true

            list_append:接收2个data,允许全局字典中data1的键值数组中加入data2的运算表达式的键值元素,或连接data2的运算表达式的键值数组至data1的键值数组。

            list_set:接收3个data,设置全局字典中data1的键值的data2的运算表达式项为data3的运算表达式

            list_new:设置全局字典中data1的键值为data2的运算表达式


最简单的例子

以下内容,会触发两条对话随机其一

“早上好”与带有选项的对话;

在带有选项的对话中,会根据选项修改mood的值:选项1会让mood+1,选项2则mood-1



Example 文件名:example.json

功能解释:

包含了两条对话,效果分别为:

1、启动时,如果时间为20时,则发起对话“早上好”,并新建“114”数组,内容为[514]。

2、启动时,跳出「Just Noel」选项卡,必须点击对话框,使选择「Just Noel & Player」或「Just Player」,否则,该对话仅重复

代码中包含若干冗余判定,用于注明功能


NoelPet 自定义对话系统简要说明的评论 (共 条)

分享到微博请遵守国家法律