二次元斷層 - manual - template ghost |
文 version 5 人格範本 |
人格範本是為了配合 文 version 5 所做的桌面應用程式「伺か」用的角色資料(人格)原型。 機能概要 aya_shiori3.dic version 4 範本的轉移 -基本 -細部的移植 UTF-8辭書的使用 使用方法 -事件處理器 -SAORI -系統變數 -已安裝人格清單的作成 -溝通 -隨機對話的連鎖 機能概要 人格範本提供以下機能。 aya_shiori3.dic 含有範本的辭書檔aya_shiori3.dic是作為文 SHIORI/3.0核心控制用的制御辭書。 version 4 範本的轉移 version 5的轉移是非強制性的。 今後仍會提供version 4的技術支援,所以也可以就這樣繼續使用version 4的版本。請根據自身的需求來判斷是否要進行轉移。 基本 以下為基本的移植作業。
如要引繼的話請參照此步驟。
細部的移植 一言難盡的是,「熟讀version 5的說明手冊中所寫的變更點,進行修正」的作業是很複雜的。 「人格啟動不能」這類比較大的錯誤要排除掉是比較容易的,但如果想讓細部的動作跟以前完全一樣則困難許多。 FAQ 在此明列轉移的時候會發生的問題及有可能發生的問題,並說明修正手法。
但是在version 5則不同。不管是半形還是全形,都會算做1。 舉下列2個例子。 len = STRLEN("ABCディーイー") len在version 4時是13,而在version 5時則是8。 str = SUBSTR("彼女のPCはMacintoshです。", 6, 9) str在version 4時是"PCはMacin"、而在version 5時則是"Macintosh" 。 2個參數的STRLEN、4個參數的STRSTR、2個參數的NAMETOVALUE、2個參數的ARRAYSIZE函式被廢止。 請用指派方式取得結果。以下為例。 函式傳回空字串 ""的這種情況,在version 4被解釋為「沒有傳回值」。version 5則解釋為「傳回空的字串」。 version 4中空文字列會因為「空等同無」的解釋法而被捨棄。因此RandomTalk會傳回空字串以外的4種字串其中一個。 在version 5不會捨棄空字串。RandomTalk會傳回包含空字串在內的5種字串其中一個。 對應方法根據場合的不同而有變化,請參照以下方法。
使用さおり時沒有使用FUNCTIONEX(或是SAORI),直接執行REQUESTLIB必須注意一下。 version 4的REQUESTLIB由於不傳回值,會使用LIB.HEADER或LIB.VALUE等函式取得其結構。 與此不同的是,version 5的REQUESTLIB會直接傳回值。 移行に関する情報 文屋には文開発者の方々が寄せられたTipsが集積されています。 * * * 一旦轉移成功後,用起來應該跟以前的感覺差不多。 version 5削除掉的系統函式幾乎都以人格範本的方式重現了,可以跟以前一樣的使用。 UTF-8辞書を使用する 預設上,人格範本辭書的文字編碼Shift_JIS。 如果想讓您的人格在任何環境系統下運作,或是在對話中混用多國語言的話,請將辭書編碼設定為UTF-8。如下述進行設定的變更。
使用方法 在此簡單說明一下。 詳細內容請直接参照範本的構成檔案。先認真讀過這些解讀後再去看辭書的話應該能理解得快一點。 事件處理器 事件是「發生了~」「做了~」這類、在人格周遭所發生的各式各樣的現象或環境變化。事件發生之時所引發的函式稱之為事件處理器。明確的說,談到人格的開發就不得不提起事件處理器這東西。 事件本身分為很多種類,在此就不逐一詳細解説。 在此提供以下連結,請自行研究如何實行這些事件。 ![]() 通知本體的基礎事件。最重要。 ![]() 外部應用軟件所通知的事件。 ![]() MATERIA 的附屬應用軟件「きのこ」所通知的事件。 ![]() MATERIA の附屬應用軟件「猫どりふ」所通知的事件。 文自己通知的事件。有OnAiTalk、On_ID 這 2 種類。 OnAiTalk 是所謂AI對話(隨機對話)的事件。定期的進行通知。 On_ID SHIORI/3.0 資源参照系以及本體情報系 ID 的request收到訊息時所發生的事件。 ID: hwnd 處理器的記述例子如下所示。變數 SakuraHwnd 被本體側 hwnd 保持。 新增事件的對應方法 即使將來 MATERIA 本體或外部程式定義了新的事件,AYA單單只要追加相對應的事件處理器即可。 例如要實裝あの夢的機能的話,可以寫成這樣。 OnHitThunder { "\0\_s実体化開始。\e" } SAORI SAORI 插件可以用FUNCTIONEX或SAORI 函數來執行。 第一參數指定 DLL 檔名。可以指定與文 DLL的相對路徑。第二參數以後為 Argument[n] 。 使用方式如下。例子所使用的 SAORI 模組「textcopy.dll」可將Argument0 所指定的字串複製到 (→textcopy.dll 配布先 ClearBrainSystems) (→textcopy.dll 的預設編碼是Shift-JIS,所以複製出來的中文會變成亂碼) _result = FUNCTIONEX("textcopy.dll", "複製到剪貼簿。", 1) Value[n] 可取得 SAORI 實行後的變數 valueex? (例子省略)。 FUNCTIONEX 和 SAORI 在機能上是同等的。用哪一個都隨你喜歡。 從初回實行之前到 load 和 GET Version 送出時開始。unload 在文のunload之前。 由於線上更新時可能有 SAORI 構成檔案那類的東西被更新,因此所有 load 完畢的 SAORI 在取得 OnUpdateReady 事件的訊息後便 unload 。 線上更新中時 SAORI 無法使用。 系統變數 範本本身提供了以下的系統變數。 現在的西暦年、月、日、星期。 星期為0~6、0是星期日。 現在時間(24時間)、現在時間(12時間)、上下午、分、秒。 OS起動至今的時間。systemuptickcount的單位是毫秒(ms)、systemuptime是秒(s)。 由systemuptickcount換算成的時、分、秒。 物理記憶體的使用率。單位%。 物理記憶體量、剩餘物理記憶體量、虛擬+物理記憶體量、虛擬+物理剩餘記憶體量。單位是KB。 使用者的名字。初回起動時為"ユーザーさん" 。 「伺か」本體的類別名稱。MATERIA 是 "embryo" 、SSP 是 "SSP" 、CROW 則是 "crow" 。 OnLoad 無法使用(不能取得有意義的類別名稱)。 AI對話(OnAiTalk事件)的発生間隔。單位為秒。預設為 180 (=3 分)。輸入0的話OnAiTalk事件就不會發生。 開始溝通的機率。AI對話中轉換成communicate事件的機率。單位 % 。預設為 10 (也就是說每隨機對話 10 次中有 1 次會跟其他的人格聊天)。 以半形逗號列舉現在同樣起動中的人格名稱 / 數量。 溝通開始時,請從此清單中選擇想要對話的人格。 已安裝人格名稱、本體側的名字、kero 側的名字清單。用半形逗號區分。 人格名為 descript.txt 的 name 輸入文字、本体側名為 sakura.name 輸入文字、kero 側名為 kero.name 輸入文字。 installedghostlist、installedsakuralist、installedkerolist 的元素數量通常是一樣的,並且具有一致性。 例如 installedghostlist[32] 為 "陽子&飯綱&千早" 的時候、installedsakuraname[32] 為 "陽子" 、 installedkeroname 為 "飯綱" 。 獨有 ID 。用於Owned SSTP 的認證。 各種 hwnd 。在利用需要使用 hwnd 的 SAORI 時而用的。 Event reference(受信側)。*為0~。 可能放入數值或字串。値由半角數字組成的話為數值,其他的則為字串。 例如 OnCommunicate 的 reference0 為對話對象的人格名稱,通常來說是字串,但如果對象是人格「54」的時候則為數值。 字串中的byte値 1 會自動的置換成半形逗號。 Event reference(應答側)。*為0~。 如果指派這個系統變數的話,request作為應答會返回 Reference*: header。 主要是用在communicate時,用來指定對象人格的名字(res_reference0)。 SAORI 實行結果的 Value[?] header値。 此外 SAORI 的 Result 是作為 FUNCTIONEX / SAORI 系統函數的傳回值,所以沒有準備專用的變數。 已安裝人格清單的作成 installedghostlist / installedsakuralist / installedkerolist 是人格在 load 過程中自動構築的。 由於構築需要時間,如果已安人格的數量很多時,處理時間會變長。 因此,如果安裝非常多的人格,等級較低的電腦在啟動人格時會變得比較慢。 要解決這個問題的話,可以指定最大的清單長度。 aya_shiori3.dic 第25行
請將此數值改為你所想要的值。或者指定下列的數值。
假若將此值設定為 5 ,系統將會在所有已安裝人格中挑出5個人格,製成清單放入 installedghostlist、installedsakuralist、installedkerolist。 放入清單的人格是循環的,下次啟動時會放入與上次不同的5個人格到清單之中。 已安裝人格如果少於設定值則全數取出。 當然,設定為0時是速度最快的。 如果你製作的人格沒有需要用到這個清單的話,可以設為0。 溝通 在應答各種事件之時,將對話對象人格的名字代入系統函數 res_reference0 ,兩個人格之間就可以產生對話(溝通)事件。 不僅是在隨機對話或是任何狀況下都能夠進行溝通(Communicate)。 現在桌面上存在的人格名字,可以用 On_otherghostname 取得。 具體的實裝例子請參照範本。 範本是以OnAiTalk來進行溝通。(通常在隨機對話的場合下,溝通的發生率較低。) 如果是由其他的人格或使用者主動對人格進行對話時,會發生OnCommunicate事件。 以系統變數 reference0 取得對話者的名字、reference1取得對話的內容,然後再判斷要回覆的內容。回覆對象的名字則填入 res_reference0 。 下面的例子,當對話是來自於奈留的話,會根據內容返回不同的回覆。 至於來自於其他人格的對話,則一律回答「嗯。」。 當無法解釋奈留對話的內容時,回覆「??」避免進一步的對話(雞同鴨講 = = )。 不把人格的名字代入res_reference0 ,並明示其為空的字串時,因為沒有將回覆傳給對方,此次的交談將會在這個回覆之後停住。 如果是來自於使用者的主動對話時, reference0 會代入"user"。 至於人格對使用者的回覆則是一樣的寫法。 隨機對話的連鎖 隨機對話的時候,由於對話的長度或是段落的考量,將一整串相同主題的對話內容,分為複數次的對話來進行。此類對話我們稱之為連鎖對話。 在連鎖的初次對話中寫入「連鎖ID」。 連鎖ID ,即為以下對話後面寫下的「:chain=連鎖ID」。 上述例子中,第三項的對話為連鎖的啟動對話,連鎖ID變成「爭吵」。 這樣一來、以「伊藤是大笨蛋。」為開端,開始進行「爭吵」話題的連鎖再生。 連鎖除了隨機對話可以啟動之外,其他狀況的對話也都能進行連鎖。例如在OnBoot對話(啟動人格時的初始對話)加入連鎖ID的話,人格啟動之後就可以直接進入連鎖對話。 連鎖對話「爭吵」的本體如以下記述。 連鎖是寫入「連鎖函式」用的特殊格式・動作函式。 連鎖函式的動作與sequential選擇對話字串的函式相類似。在取得隨機對話的同時,將接下來的對話順序也一併輸入進去。 連鎖函式不能單純的使用{}來包圍,而是用{{CHAIN及}}CHAIN。 連鎖函式與普通函式一樣可以使用變數或 if 。連鎖之內也可以加入新的連鎖,因此可以寫出相當複雜的連鎖程式。 連鎖ID被指定為「end」時,連鎖就會被終止,回到一般的隨機對話。 以下簡單的例子所示。
|