https://emily.shillest.net/ayaya/index.php?チュートリアル/2.トークを書いてみる
テンプレートゴーストを立たせてる状態で、開発パレットの一番下にある「開く」というボタンをクリックしてみてください。
そこから「GHOST」を選ぶとyaya.dllやら何やら色々入ったフォルダがでてきます。
そこにある拡張子が「.dic」のファイルがYAYAの辞書ファイルです。
この辞書ファイルの中に「ゴーストがどうしゃべってどう動くのか」が書いてあります。
これからそれをちょっとづつ編集してゴーストを作ってみます。
まずはメイン辞書である「dic_main.dic」をテキストエディタで開いてみてください。
その150行目ぐらいに
//起動 OnBoot { "\1\s[10]\0\s[0]こんにちは。\e" }
と、いう記述があると思います。
ここが「ゴーストが起動したときしゃべるセリフ」です。
まぁ初めて見たら「こんにちは。」の文字以外なんじゃこりゃ!だと思うので
以下、一個づつ謎記号を解明してみます。
YAYA以外のSHIORIでも共通して使うものなので、このWikiではこれ以上詳しく説明しません。
これ以外も色んなものがあるので、リファレンスサイトで「実際に使ってみたいと思ってるもの」を「ちょっとづつ」覚えてみてください。
(いきなり全部覚えようとすると頭がパンクします…)
起動するたび毎回同じ挨拶ばかりじゃつまらないので、3種類に増やしてみましょう。
OnBoot { "\0\s[0]こんにちはー。\e" "\0\s[0]おっすー。\e" "\0\s[0]やっほー。\e" }
YAYAは{ }の中に" "や' 'でくくった文字列が複数あると、その中のどれか一コだけランダムで選ばれます。
一行にまとめたくなったら、改行の代わりに「;」で区切ります。
OnBoot { "\0\s[0]こんにちはー。\e" ; "\0\s[0]おっすー。\e" ; "\0\s[0]やっほー。\e" }
「\0\s[0]」や「\e」を何度も書くのが面倒?
それなら…
OnBoot { "\0\s[0]" -- "こんにちはー。" "おっすー。" "やっほー。" -- "\e" }
こう書いてしまう事もできます。
「--」で区切ると、その区切った中からそれぞれ" "や' 'でくくった文字列がランダムで1コ選ばれ、くっつけて表示されます。
これもこうすると一行で書けます(みづらいけど)
OnBoot { "\0\s[0]" ; -- ; "こんにちはー。" ; "おっすー。" ; "やっほー。" ; -- ; "\e" }
OnBoot { "きょうは"//←<1>この2つのどっちかが選ばれる "明日は"//←<2> -- "晴れ"//←(1)この4つの中のどれかが選ばれる "雨"//←(2) "曇り"//←(3) "雷"//←(4) -- "です。"//←1コしかないので必ずコレが選ばれる }
こう書くと
「きょうは雨です。」
「明日は曇りです。」
「きょうは晴れです。」
「明日は雷です。」
「明日は晴れです。」
…といったトークが毎回ランダムで作られるわけです。
トークのバリエーションが広がりますね。
でも、これだと本当にランダムなので同じ単語が連続して選ばれてしまう事もあります。
それを回避したい時は…
OnBoot : nonoverlap { "\0\s[0]" -- "こんにちはー。" "おっすー。" "やっほー。" -- \e }
関数名の後ろに「 : nonoverlap」をつけましょう。同じ文が連続して選ばれなくなります。
上から順番に選ばせたい時は「 : sequential」です。
OnBoot { "\0\s[0]きょうは" "\0\s[0]明日は" -- "晴れ" "雨" "曇り" "雷" -- "です。\e" }
上でも書いたコレを
OnBoot { "\0\s[0]きょうは" "\0\s[0]明日は" -- 天気一覧 -- "です。\e" } 天気一覧 { "晴れ" "雨" "曇り" "雷" }
こんな風に、独立したオリジナル関数を作ってそれを呼び出して書くことも可能です。
こう書くとどんなイイ事があるかっていうと…
OnBoot { "\0\s[0]きょうは" "\0\s[0]明日は" -- 天気一覧 -- "です。\e" } OnGhostChanged { "\0\s[0]昨日は" -- 天気一覧 -- "だったよ。\e" } 天気一覧 { "晴れ" "雨" "曇り" "雷" }
こんな風に複数の関数から呼び出せるので使いまわしできるってことです。
OnBoot { "\0\s[0]きょうは%(天気一覧)です。\e" } 天気一覧 { "晴れ" "雨" "曇り" "雷" }
「" "」の中身から関数を呼び出したいときは、こうやって「%(関数名)」と書きます。
関数名(上の例でいうと「天気一覧」の文字)は英語でも日本語でもいいんですが、以下のルールを守る必要があります。
詳しくはManual/Syntax/2. Functionsページを見てください。
最初に関数名を書く、中身を「{}」でくくる、という書き方のルールがちゃんと合ってれば
こんな風に書いても
OnBoot { "\1\s[10]\0\s[0]こんにちは。\e" }
こんな風に書いちゃっても構いません。
OnBoot { "\1\s[10]\0\s[0]こんにちは。\e" }
OnBootと{の間などにある空白・改行は、入れても入れなくても大丈夫。タブをいれてもOK。
自分の見やすい、書きやすい書き方に整えてみてください。
OnBoot{"\1\s[10]\0\s[0]こんにちは。\e"}
基本的に""の外にある空白やタブ、改行は無視されるので、
OnBoot { "\1\s[10]\0\s[0]こんにちは。\e" }
こんなんでもよし。
要するに
【ここ】OnBoot【ここ】{【ここ】"\0\s[0]いっちばーん。\e"【ここ】}【ここ】
上の【ここ】の所に空白(半角空白、全角空白、タブ)や改行をいくらでも入れまくれるって訳です。
YAYAの辞書はこの仕組みを使って綺麗に見易く整える事ができます。
コメントアウトを使うと、その部分だけ辞書として読み込まれなくなります。
「メモや注釈入れたい」「書いた辞書の一部を一時的に隔離しておきたい」って時に便利。
やり方はコメントアウトしたい行の一番左端に「//」を入れるだけ!
// 起動イベント OnBoot { "\0\s[0]こんにちはー。\e" }
↓こんな位置にも入れられます。
つまり「//」がついた所から一番右端の部分までが全てコメントアウトになります。
OnBoot { "\0\s[0]こんにちはー。\e"// 起動トーク }
「/*」と「*/」でくくってもコメントアウトになります。
複数行一気にコメントアウトできるので、行数が多いならこっちの方が楽。
どこからどこまでコメントアウト部分かわかりづらいのが難点?
/* 起動イベント 一番最初に起動した時呼ばれる */ OnBoot { "\0\s[0]こんにちはー。\e" }
後で辞書を見返した時どこが何なのかすぐ思い返せるよう、注釈をばんばん入れておきましょう。
こんなことやるとエラーが出てゴーストがピクリとも動かなくなるので注意!
OnBoot { "\0\s[0]改行\n します。\e" }
" "や' 'でくくってる文字列の途中を改行してしまうとエラー。
そんなときは
OnBoot { "\0\s[0]改行\n/ します。\e" }
こうやって行末に「/」を入れれば改行できます。
それと、YAYA Tc535-1からヒアドキュメントという書き方もできるようになりました。
//起動 OnBoot { "\1\s[10]\0\s[0]こんにちは。\e" } OnBoot { "\1\s[10]\0\s[0]やっほー!\e" }
同じ名前の関数を2つ以上書いちゃだめです。必ず1個だけ!
こういったルールをちゃんと守れば、どの辞書ファイルのどこに関数を書いても問題ありません。
(でもシステム辞書のyaya_shiori3.dicに書くのはなるべくやめたほうがいいです)
落ち着いてエラーの原因を調べてみましょう。
以前まではきちんとゴーストが動いてた訳で、当然エラーの原因はその後に書いた辞書。
辞書の中の自分でいじった所を良く見てみる。
カッコの閉じ忘れなんかが多いです。
それでもわからない場合はあやしげな部分を一時的にコメントアウトしてゴースト再起動。それで正常にゴーストが起動したらビンゴ!
前回用意したアレ。
詳しくはTips/Checking dictionary for errors using Tamaページを。
yaya.dllと同じ階層にあるyaya.txtを開いてみてください。
//log, ayame.log // ログを指定されたファイルに記録
という項目があるので
log, ayame.log // ログを指定されたファイルに記録
一番左の「//」を削って上書き保存。
もう一度ゴーストを起動すると「ayame.log」が出力されるので、それを覗いてみましょう。
ゴーストに一体どんなさくらスクリプトが送られてるのか知りたい時に有効。
使い方は「SSPでゴーストを右クリック→機能→スクリプトログ」
Last modified on: 2014-01-04 (Saturday) 14:25:32
|