yaya_shiori3.dicは、基本的には以下の機能を有します。
SHIORIイベントの入出力†
- ベースウェアから渡されるSHIORIイベントは、例えば以下のような文字列です。
GET SHIORI/3.0
Sender: SSP
Charset: UTF-8
SecurityLevel: local
ID: OnSecondChange
Status: talking
Reference0: 107
Reference1: 0
Reference2: 0
Reference3: 1
Reference4: 0
- yaya_shiori3.dic は上記文字列を解釈し、以下の動作を行います。
ID: OnSecondChange | イベント名として解釈し、OnSecondChange関数を呼び出します。*1 |
Sender: SSP | グローバル変数「basewarename」「sender」に値("SSP")を格納します。 |
Charset: UTF-8 | 文字コードです。適切に解釈し出力時にその文字コードへの変換を行います。 |
Status: talking | グローバル変数「status」に値("talking")を格納します。 |
Reference0: 107 | グローバル変数「Reference[0]」に値(107)を格納します。 |
- 上記動作の結果、OnSecondChange関数内で処理が行われた後、yaya_shiori3.dicはその結果を下記のような文字列としてベースウェアに返します。
SHIORI/3.0 200 OK
Sender: AYA
Charset: UTF-8
Value: \0\s[0]あ、エミリさん。\1\s[10]テディも元気そうだな。
Reference0: Emily
SHIORI/3.0 200 OK | 自動的に適切なコードを返します。 |
Sender: AYA | 自動付加されます。 |
Charset: UTF-8 | 自動的に適切なコードを返します。 |
Value: ~ | 関数の実行結果(要するにトーク)の内容が入ります。 |
Reference0: Emily | res_reference*(*は数字)という名前のグローバル変数があった場合、ここに入ります。*2 |
ランダムトーク†
- ランダムトークを簡単に行えるようにするために、「OnAiTalk」関数を「aitalkinterval」秒毎に呼び出す機能を持ちます。*3
内部トランスレート†
- 全てのイベントの処理後、「OnTranslateInternal」関数を呼び出す機能を持ちます。その際の引数(_argv[0])はベースウェアに出力しようとしているトーク内容になります。
- この関数で返した内容が、実際にベースウェアに出力されるトークになります。
- したがって、「OnTranslateInternal」内で_argv[0]を適当に加工し返すことにより、全てのトークに一律変換を行う、等の処理が可能となります。
チェイントーク†
- チェイントークとは、「あるトークを契機として、一連のトークを指定した順序で行う」機能です。これもyaya_shiroi3.dicで実装されています。
- トークの「\e」の後に「:chain=○○」と書くことで、チェイントークが発動します。*4
- チェイントークが発動した場合、OnAiTalkではランダムトークではなく上で書いた○○関数(チェイン関数)が呼び出されます*5。
- チェイン関数は、通常の関数とは異なり、下記のように記載します。(:chain=hogeとした場合)
hoge
{{CHAIN
"\0\s[0]りんご\e"
"\0\s[1]ごりら\e"
"\0\s[0]らっぱ\e:chain=end"
}}CHAIN
- 通常の関数では、上記「りんご」「ごりら」「らっぱ」はどれか一つが無作為選択されますが、チェイン関数では、上から順番にトークが連鎖します。
- 「\e」の後に「:chain=end」と書くことで、チェイントークを停止できます。
遅延EVAL†
- 「\e」の後に「:eval=式」と書くことで、その「式」を実行(実際には「EVAL(式)」と書くのと同じ)することができます。
- セキュリティ上の理由からこの機能はデフォルトで無効化されています。
有効化したい場合はセキュリティ上のリスクをよく理解した上で、config.dic内のSHIORI3FW.ENABLE_DELAYED_EVALを1に設定してください。
- 例えば「"\0\s[0]はじめまして。\e:eval=aisatu=1"」などと書くことで、「あるトークを喋ることを契機としたフラグ処理」のようなものを簡単に行うことができます。
インストール済みゴーストリスト†
- ID: installedghostlist を解釈し、グローバル変数「installedghostname」(ゴースト名の汎用配列)を作成します。
SAORI呼び出し(FUNCTIONEX)†
- SAORI呼び出しを簡単に行えるよう、yaya_shiori3.dicで「FUNCTIONEX」関数を提供しています。
- SAORIのロード、アンロードもFUNCTIONEXを利用した際、自動的に行われます。
- 「SAORI」でも実行可。一段下駄が入る分FUNCTIONEXより低速になりますが、気にするほどではありません。
FUNCTIONEX( dllname [, Argument0 , Argument1 , ... ] )
- dllname
- 呼び出したいSAORI DLL名。YAYA.DLLからの相対パスで指定。
- Argument0,1,...
- SAORIに与える引数。省略可能。
返り値†
- FUNCTIONEXの返り値は、SAORIの返り値(Resultの値)になります。
- SAORIがそれ以上の返り値(Value0,1,...)を返した場合、グローバル変数「valueex0,1,...」に格納されます。
配列操作†
JOIN†
配列を一番最後の要素で区切る。
request {
_配列=("A","B","C","D","E")
結果=JOIN(_配列,"★")
}
「結果」の内容 "A★B★C★D★E"
REVERSE†
配列を逆順に並べかえる。
UNIQUE†
配列から重複する要素を取り除く。
SPLITEX†
YAYAの関数「SPLIT」と同じだが、SPLITと違い中身が空白の要素は配列化しない。
MAX†
配列の最大値を求める。文字列が入っている場合辞書順で最後の物が返る。
MIN†
配列の最小値を求める。文字列が入っている場合辞書順で最初の物が返る。
AVERAGE†
配列の平均値を求める。文字列が入っている場合空文字が返る。
「遅れて喋る」イベント†
SHIORI3FW.SetDelayEvent( '発生させるイベント名' , 遅れる秒数 )
その他の変数†
- そのままでは利用が面倒な関数を簡単に利用するため、以下の変数を提供しています。
システム情報を取得するために使用可能です。
時刻系変数†
関数名 | 返り値 |
year | 現在日時の年の数値 |
month | 現在日時の月の数値 |
day | 現在日時の日の数値 |
weekday | 現在日時の曜日の数値(0=日曜日、1=月曜日・・・6=金曜日) |
hour | 現在日時の時の数値(24時間制) |
ampm | 現在日時の午前午後の数値(0=AM,1=PM) |
hour12 | 現在日時の時の数値(12時間制) |
hour12ex | 現在日時の時の数値(12時間制)、ただし12は0時または12時に表示されます |
minute | 現在日時の分の数値 |
second | 現在日時の秒の数値 |
| |
systemuptime | OS連続起動時間(単位:秒) |
systemupsecond | OS連続起動時間を時分秒とした場合の秒の数値 |
systemupminute | OS連続起動時間を時分秒とした場合の分の数値 |
systemuphour | OS連続起動時間を時分秒とした場合の時の数値 |
| |
ghostuptime | ゴーストの連続起動時間(単位:秒)(現在使用不能?) |
ghostupmin | ゴーストの連続起動時間(単位:分) |
ghostupmin_total | ゴーストの累計起動時間(単位:分) |
メモリ系変数†
関数名 | 返り値 |
memoryload | 物理メモリの使用率 |
memorytotalphys | 物理メモリ量 |
memoryavailphys | 空き物理メモリ量 |
memorytotalvirtual | 仮想+物理メモリ量 |
memoryavailvirtual | 仮想+物理空きメモリ量 |
センダーヘッダ系変数†
関数名 | 返り値 |
basewarenameex | ゴーストが起動しているベースウェア名(MATERIAは「embryo」、CROWは「crow」、SSPは「SSP」) |
basewarename | センダーヘッダ名(ベースウェア名以外のものが入っている事もある) |
sender | basewarenameと同じ |
関連ページ†