*Sakura語法基礎篇 [#u6b11ad9]

#contents

*前言 [#oa0efb02]
Sakura語法為撰寫人格基礎中的基礎,所有的偽AI都會遵循以下的Sakura語法標準來進行文字訊息的處理以及取得系統變數、事件等。

儘管看似複雜龐大,但其實還是它還是遵循著一個類似人類思考模式的規則喔~Sakura語法的寫法主要規律如下:

 起始.指定作用端(看是主體還是使魔).指定作用端的表情圖片(如不指定則用預設值).敘述的文字/變數.結束

也就是說,在每個句子之中你必須一一告知核心程式你希望作的關鍵動作。完整的敘述範例:

 \0\s[0]大家好,\w8我的名字是晴子。\e

以上為指定主體端說話(\0),表情為0號圖片(\s[0]),在說完"大家好"之後停頓400毫秒(\w8),在繼續說"我的名字是晴子",最後結束這一段文字訊息(\e)。

在文字訊息之中,除了插入對話標籤(如停頓)之外,也可以自己設計變數來達到每次說出的話語或關鍵名詞都不相同的效果,關於這個將會在華和梨篇詳細談及。

那麼就請大家先熟悉下列的語法標籤(建議配合人格檔案對照觀看)

*一般指令: [#ra4ed5bd]
以”\”開頭的特定字串,是用來控制、以及執行指令的指令。

格式:
**\0 [#d20bb48d]
以下為sakura(人格本體)端對話框
**\1 [#l3015218]
以下為kero(人格的搭檔,或稱為使魔)端對話框
**\s[id] [#jb69e97f]
指定要出現的人物表情id編號。如果id編號設定為-1的話,則可以讓人物圖像消失,成為不可視的狀態。現用對話端的人物圖像以id進行切換。id為-1時圖像暫時消失。

**\b[id] [#a89fe29d]
現用對話框的Balloon外框以id切換。id為-1時Balloon外框暫時消失。

**\n [#ie7640dc]
換行

**\n[half] [#q55daee2]
換行時只換半行高

**\w? [#ad3d484d]
簡易形的等待指令,等待時間為50*?毫秒,注意沒有方括號”[]”注意不要跟下一個指令搞混了。(一般都使用w8)

**\_w[?] [#p9e6be8e]
精確的等待指令,等待?毫秒。

**\c [#a24b7f8c]
清除現用對話框區域,文字座標回到(0,0)。

**\x [#j22747c7]
顯示暫停,等待滑鼠點擊。滑鼠點擊後繼續顯示。

**\t [#kee42777]
時間極限區段,時間極限區段中不會受到按右鍵/雙點選單及自動檢查等事件妨礙執行,本指令到\e前都有效。

**\_q [#ua8f0c81]
快速顯示區段,本區段中之所有文字訊息之顯示均不等待。本指令一直有效到下一個\_q及\e時才解除。

**\_s [#v182b033]
同步會話選項,本選項中雙方會同時顯示對話。本指令一直有效到下一個\_s及\e時才解除。

**\_n [#r272c91e]
自動換行開關。

**\_l[x,y] [#w199ebbf]
將現用對話框移動到絕對座標(x,y)。

**\e [#j9ace3fa]
日文中的えんいー ,代表一個指令列結束的意思。

*選擇性指令: [#h5fbcada]
**\q[title,id] [#f497fa2e]
以title表示的選項,選擇後對應SHIORI的OnChoiceSelect事件會發生。id為識別代號及其參數。選項最大可到255個。

**\q[title] [#xecea523]
第一參數title表示的title選項。選擇後第二參數event為對應SHIORI的事件。第三參數起皆為reference(讀入的變數)。選項最大可到255個。

**\* [#u103d895]
下一個選項不暫停。

*文字編碼: [#cbe427df]
-\_u[0x0000] 	嵌入UCS-2碼(應該指Unicode)。
-\_m[0x00] 	嵌入ASCII碼。
-\&[id]	        參照其他編碼(須有編碼對應檔)。

*其他執行指令: [#s155f068]
**\_v[檔名] [#z7b83b23]
指定撥放的wav/mp3/wma檔。必須與使用該檔的人格在"同一目錄"下,即使以絕對路徑指定的檔案也不行。即使檔案不存在也不會導致錯誤發生。

**\_V [#x0f6a24f]
等待以\_v指令撥放完畢的檔案。無視於尚未撥放或已撥放完畢的情況。

**\I[id] [#y4b3a86f]
撥放以id指定的動畫檔。

**\v [#ye5608d0]
推到最上層顯示。

**\4 [#t66d5e61]
現用對話框強制往角色離開的一定距離移動,通常用於對話框與角色重疊時使用。

**\5 [#o321a017]
現用對話框移動到接觸角色為止。

**\- [#sd8a0712]
即刻停止。

*特殊指令: [#d5b6ab94]
**\m[umsg,wparam,lparam] [#c7157476]
僅限SSTP權限的script使用。
執行HWnd標頭設定的windowhandle對應的postmessage(umsg,wparam,lparam)。

**r2 [#sf878cc9]
**\![lock,repaint] [#bd578857]
暫停重新繪圖,也就是鎖住,此為區段參數(需要明確的解除)。

**\![unlock,repaint] [#g8d489fe]
解除暫停重新繪圖。

**\![open,browser] [#i7b213bd]
起動本機瀏覽器,第3參數以後為瀏覽器的啟動參數。

**\![open,mailer] [#bac2e716]
起動本機郵件軟體,第3參數以後為郵件軟體的啟動參數。

**\![open,teachbox] [#r27b5653]
開啟教導對話列。

**\![open,communicatebox] [#qedd5e3e]
開啟通訊對話列。

**\![set,alignmentondesktop,top] [#k124a7d6]
移動到桌面上端。

**\![set,alignmentondesktop,bottom] [#h7b9dda2]
移動到桌面下端。

**\![raise] [#hf8c39e2]
使用者定義事件,第2參數為事件識別標籤。第3參數起皆為reference標頭,並以雙引號(“”)中包起來。例如:
      \![raise,OnUserEvent, r0, r1, r2, r3, r4, r5, r6, r7]
      \![raise,OnUserEvent,”0,100”]
      \![raise,OnClose]

**\![enter,passivemode] [#b53ad004]
**\![leave,passivemode] [#i919ccb0]
進入/解除被動模式控制指令,enter為進入,leave為解除。被動模式在明確的解除之前都有效。

被動模式式抑制系統中斷的一種模式,主要是被遊戲使用。被動模式有以下的特徵:
-沒有跳出式選單。
-不檢查郵件。
-不會辨識首字大寫。
-不會自動轉換。
-選項不暫停。
-顯示出的畫面不隨時間經過而消失。
-檔案無視於拖放動作。
-無視於雙點nar檔案。
-OnSurfaceRestore無作用。
-Cantalk通常是無效的(OnSecondChange或OnMinuteChange來自本身呼叫)。
-關閉通訊欄或是無法開啟。
-無法最小化。
-無法結束。

被動模式中事件事鏈形的,並不會形成SHIORI內的主迴圈。原因是被動模式在鏈形中若中斷會造成無法操作。

**\![open,inputbox] [#xa47ef92]
開啟輸入欄,輸入文字後按enter就會出現在第3參數指定的使用者定義事件,設定r0返回輸入模式,也可設定r0在什麼都不輸入的情況下以limitetime設定時間自動返回並顯示”timeout”,但是若limittime為-1時則不發生time out的事件。Limittime的單位為毫秒(ms)。例如:

*\![open,inputbox,OnUserInput,4000] [#k157243e]
在被動模式下,文字輸入的時間限制結束前,使用者什麼事也不能做。

**\![change,ghost] [#lf5ce4bb]
第3參數為ghost名稱,可以指定為現用的ghost也可以變更。若指定的ghost不存在則什麼都不顯示。例如:

**\![change,ghost,さくら] [#ybcdfcaf]
-若第3參數指定為”random”則從現有的所有ghost中隨機變換。
-若第3參數指定為” sequential”, 則從現有的所有ghost中依序變換。
-不論如何OnGhostChanging事件都不會發生

*環境變數/meta字串: [#t6222ec1]
以%開頭的特定字串組合稱為meta字串,用來置換顯示時的字串。

**基礎情報用: [#kd036375]
 %month         現在月份。
 %day 	        現在日。
 %hour 	        現在時。
 %minute 	現在分。
 %second 	現在秒。
 %username 	使用者名稱。
 %selfname 	角色名稱(正確)。
 %slefname2 	角色名稱(錯誤)。
 %keroname 	kero名稱。

**特殊情報用: [#jd26e661]
 %screenwidth 	指定螢幕寬,若為多螢幕顯示時會無法取得主監視器的大小。
 %screenhight 	指定螢幕高,若為多螢幕顯示時會無法取得主監視器的大小。
 %exh 	        連續啟動時間。
 %songname 	最後認識的曲名。

**AI用: [#g683b504]
 %ml 	名詞(集合)。
 %mc 	名詞(公司名)。
 %mh 	名詞(店名)。
 %mt 	名詞(技術)。
 %me 	名詞(食物)。
 %mp 	名詞(地名)。
 %m? 	名詞(非限定)。
 %dms 	像「~に~する~」之類,以複數連結的長名詞

**構造用: [#t37e7829]

#entry為指示入口用,用法如下:

 #temp
 \h\s0%j[#temp0]\e
 #temp0 
 カードキャプター%ms

※以上配合SSTP/1.2使用

忽略順序:
 若將\\打在一起時會忽略\。
 若將\%打在一起時會忽略%。
 將\放在方括號內時會忽略方括號。

* 進階資料: [#gc768fea]

- [[櫻花語法全列表>SakuraScriptList]]
- [[櫻花語法全列表>開發文件/SakuraScript]]



首頁   新建條目 一覽 搜索 最近的變更   幫助   最近更新的RSS