NoelPet 自定義對話系統(tǒng)簡要說明
暫不支持函數(shù)(為什么自定義對話要支持函數(shù)啊喂)
要Example往下翻,這里直接講運行原理
對話文件是一個.json文件。必須包括正確的后綴名,這是軟件唯一且必要的識別條件
對話內(nèi)容語法錯誤可能導致軟件崩潰
介于習慣,下面我們稱json中的[]為數(shù)組,{}為字典
~~~??非人話警告??~~
建議無編程基礎(chǔ)或無閱讀理解基礎(chǔ)者直接看example
UP在努力說人話(悲)
一個對話文件由多個對話通過數(shù)組構(gòu)成,每個對話是一個字典,應當包括鍵:
1、condition,后接bool表達式
2、talk,后接字符串數(shù)組;如果多余一項,則使得對話有選項,而第一項為對話,后兩項為選項
talk內(nèi)容強制啟用bbcode;不允許修改顏色,允許通過bbcode打開鏈接或文件
可以包括鍵:
result,后接block表達式數(shù)組,分別代表選擇三種talk的三種結(jié)果(不選擇選項,觸發(fā)效果1)
bool表達式可以為?true 或 false,否則應當包括鍵:
1、operator,可選值為"greater"??"smaller" ?"equal" ?"and"??"or" ?"not" ?"xor";此時含義與其代表的運算對應;
"first_run",以data為區(qū)分,僅在軟件打開后首次判斷時成立
2、data,一個數(shù)組,根據(jù)operator的選擇,決定內(nèi)部表達式類型與個數(shù);我們稱 greater、smaller、equal使用的表達式為運算表達式
運算表達式可以直接表示非字典的值,當類型為字典時,應包括鍵:
1、operator(可選值為字符串,見下文)
2、data(下文將data數(shù)組的長度稱為data的個數(shù))
????Operator列表:
????????len:接收data共1個,可為結(jié)果為字典或數(shù)組的運算表達式,返回長度
????????list:接收data共2個,分別為目標字典或數(shù)組及目標下標,返回目標元素
????????var_default:接收data共1個,為字符串,返回該字符串在全局字典中對應的值。如不存在,取默認值0。
????????var:同上,但不判定是否存在該字符串的鍵值。
????????if:接收data共2或3個,其一為bool表達式,若該表達式成立,則返回第二個表達式的結(jié)果,否則返回第三個。
????????block:接收data共1個,為block表達式,返回"return"在全局字典中對應的值。
????????add?/?sub / mul / div:加減乘除,接收data共2個,均為運算表達式,返回結(jié)果。
另有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,使得下一對話無條件設(shè)為,索引為該data值的對話
????????????queue:同上;但在嘗試調(diào)用對話時,會判斷該對話的condition是否為true
????????????list_append:接收2個data,允許全局字典中data1的鍵值數(shù)組中加入data2的運算表達式的鍵值元素,或連接data2的運算表達式的鍵值數(shù)組至data1的鍵值數(shù)組。
????????????list_set:接收3個data,設(shè)置全局字典中data1的鍵值的data2的運算表達式項為data3的運算表達式
????????????list_new:設(shè)置全局字典中data1的鍵值為data2的運算表達式
最簡單的例子
以下內(nèi)容,會觸發(fā)兩條對話隨機其一
“早上好”與帶有選項的對話;
在帶有選項的對話中,會根據(jù)選項修改mood的值:選項1會讓mood+1,選項2則mood-1
Example 文件名:example.json
功能解釋:
包含了兩條對話,效果分別為:
1、啟動時,如果時間為20時,則發(fā)起對話“早上好”,并新建“114”數(shù)組,內(nèi)容為[514]。
2、啟動時,跳出「Just Noel」選項卡,必須點擊對話框,使選擇「Just Noel & Player」或「Just Player」,否則,該對話僅重復
代碼中包含若干冗余判定,用于注明功能