這是一個翻譯中的詞條,歡迎有興趣的朋友加以補完。 |
本詞條主要是面向想從里々SHIORI移行至YAYA的人。
標題中有「☆」號的項目很可能非「はろーYAYAわーるど(紺野ややめ)」或「SimpleYAYAテンプレート」等範本就用不了。
編程能力較強,人格對話以外的部份的編寫會變得容易。
當然這優勢不光YAYA獨有,華和梨也是另一個選擇。
如果使用不再更新(SHIORI出現了問題不指望會有修正)的話選擇就更多了。
總而言之選擇自己用得最就手就好。
YAYA能夠對檔案進行操作,又能夠使用正規表達式為其特徵,其他的SHIORI也能夠使用SAORI,
靠YAYA as SAORI把YAYA當成SAORI來用也一樣。
也就是說如果這是目的的話就沒有選擇YAYA的必要了。
以起動事件為舉出來看看。
*OnBoot :いっちばーん。
里々就會如此編寫。
YAYA的話就以下面的寫法編寫。
OnBoot { "\0\s[0]いっちばーん。\e" }
有些不明的符號,我們逐一看看吧。
此外和里々不同YAYA不會自動插入等待。想插入等待時請以Sakura Script記入。
Sakura Script除了YAYA以外的SHIORI也能共通的關係,就不在本詞條說明了。
除此之外就是參照關發文件轉換文法了,雖然有點辛苦但是可以的話大家一起學YAYA吧。
符合最初寫好事件名稱、內容以「{}」圍起來的編寫規則的話寫成這樣
OnBoot { "\0\s[0]いっちばーん。\e" }
甚至寫成這樣也沒問題。
OnBoot { "\0\s[0]いっちばーん。\e" }
OnBoot和{之間的空白・換行有沒有也沒關係。[Tab]也可以。
請選舉自己看著舒適,編寫舒適的編寫方法。
OnBoot{"\0\s[0]いっちばーん。\e"}
基本上""之外的空白或[Tab]、換行會被無視、
OnBoot { "\0\s[0]いっちばーん。\e" }
寫成這樣也沒問題。
總之
【ここ】OnBoot【ここ】{【ここ】"\0\s[0]いっちばーん。\e"【ここ】}【ここ】
上面的【ここ】的位置中的空白(半形空白、全形空白、[Tab])或換行填多少個沒關係。
YAYA中使用這個結構能自由整理辭書。
這就是比里々的辭書更容易看的說法的其中一個理由。
*OnBoot :改行 します。
里々會把辭書中對話的換行輸出,但YAYA必須使用Sakura Script的換行標籤才能換行。
請在需要換行的位置記入「\n」。
OnBoot { "\0\s[0]改行\nします。\e" }
「像這樣辭書中沒換行很難看!」…的話
OnBoot { "\0\s[0]改行\n/ します。\e" }
像這樣在行末加入「/」就就可以換行。
在喜歡的位置加入吧。
OnBoot { "\0\s[0]/ 改行\n/ します。/ \e" }
OnBoot { "\0\s[0]改行\n します。\e" }
要注意用" "或' '圍起來的時候行末沒加入「/」就換行的話就會出現錯誤。(但不適用就後面所述的Heredoc格式)
「每個行末都要加入/太麻煩了……。」
YAYA Tc535-1起可以使用 Heredoc 格式,省卻加入「/」的麻煩。
利用「<<"」「">>」或「<<'」「'>>」代替「" "」或「' '」即可,要注意Heredoc的開閉符號必須各自在獨立一行。
例子:
OnBoot { <<" \0\s[0] 改行\n します。 \e ">> }
里々中會從多個同一事件中隨機選擇一個執行。
*OnBoot :こんにちはー。 *OnBoot :おっすー。 *OnBoot :やっほー。
YAYA中這樣做的話會出現錯誤而起動不了。
YAYA中同一事件名稱的事件不能編寫多於一個。
取而代之,在{ }中以" "換行分隔的放在一起吧。
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>這2個中會選一個 "明日は"//←<2> -- "晴れ"//←(1)這4個中會選一個 "雨"//←(2) "曇り"//←(3) "雷"//←(4) -- "です。"//←只有1個時這個必定要選中 }
這樣編寫時
「きょうは雨です。」
「明日は曇りです。」
「きょうは晴れです。」
「明日は雷です。」
「明日は晴れです。」
…就可以做出像這樣隨機的文章。
因為是隨機所以可能會連續選到同樣的單詞。
此時大家會有像「咦?不能像里々那樣回避重複的嗎?」的疑問吧,答案當然有解──做得到。
OnBoot : nonoverlap { "\0\s[0]" -- "こんにちはー。" "おっすー。" "やっほー。" -- \e }
請在事件名稱後加入「 : nonoverlap」。同樣的字串不會再連續被選中。
想要從上而下順序選出時改為「 : sequential」。
另外、里々中能像這樣編寫在另一位置(單詞組)中取出單詞
* :(季節)はいいね~ :どの季節でも言ってるジャン
@季節 春 夏 秋 冬
同樣的事在YAYA做就會是這樣子。
Talk { "\0\s[0]%(季節)はいいね~\w9\1\s[10]どの季節でも言ってるジャン\e" } 季節 { "春" "夏" "秋" "冬" }
對話中記入「%(季節)」又或是「%季節」時,就能從叫「季節」的函數中取得結果。
里々中有由單詞組成時為「@季節」,有換行的文章為「*季節」的編寫規則,
YAYA中不區別單詞和文章所以單詞和文章都用「季節{ }」。
OnBoot等SHIORI事件和單詞組兩者都是「函數」所以編寫方式是完全一樣的。
當然上面所寫的天氣對話
Talk { "\0\s[0]" -- "春" "夏" "秋" "冬" -- "はいいね~\w9\1\s[10]どの季節でも言ってるジャン\e" }
寫成這樣也可以。
這就是其他對話要用季節的單詞組的話,做一個「季節」的函數然後呼叫它的方式。
會用的人就用,不用的人就可能完全不用的就是變數。
可能很多用變數來處理使用者名稱或起動次數・起動時間・好感度等東西。
里々中的變數只有1種,但YAYA有好幾種。
首先從這方面開始說明。
YAYA的變數有字串和數値二種。(正確來說有整數、實數(real number)、字串3種)
変数 = 1
這樣代入時変数的內容為數値的「1」
変数 = "1"
這樣用" "或' '圍起來的代入時変数的內容會變為字串的「1」。
和里々不同全形的「1」「2」「3」…等不能變成數値。
字串變數不能直接當作數値會進行比較或計算。
例如數字的數値「1」和「2」加起來的結果為「3」,但字串的「1」和「2」加起來就會把1和2串在一起變成「12」。
其他還有很多不同。請注意。
另外變數能在任何時候進行字串←→數値變換所以請放心。
請按用途變換。
変数 = TOSTR(変数)
変数 = TOINT(変数)
_変数名
名稱以「_」開頭的為局域變數
変数名
開頭沒有「_」為全域變數。
おおざっぱに言うと「すぐ消えてしまう」のがローカル変数、「削除しない限りずっと残る」のがグローバル変数です。
里々の変数は全部グローバル変数ですね。
ユーザー名や好感度などずっと残しておかないといけない変数以外はローカル変数を使うのが基本です。
で、ローカル変数がどれぐらいの期間使えるのかというと、
「現在の{ }内、およびそれより深い入れ子階層のみで使用できる。寿命は該当する{ }を抜けるところまで。」
です。(マニュアルより引用)
言葉では説明しづらいので一例をだしてみると
ローカル変数テスト { { _変数 = 1 } 結果 = _変数 }
こう書くと「_変数」が深い階層から浅い階層に移った時に消えてしまうので「結果」の中身も空になってしまいますが
ローカル変数テスト { _変数 = "" { _変数 = 1 } 結果 = _変数 }
こうすれば「_変数」は浅い階層→深い階層→浅い階層…と、最初に浅い階層にいた経験があるので深い階層から浅い階層に移動しても消えずに残り、「結果」の中身は1です。
最初に「_変数」が生まれたところが「結果=_変数」と同じ(またはもっと浅い)階層かどうかがポイント。
つまりローカル変数を長生きさせたい時は最初に一番浅い階層で「_○○=""」などの一行を書いておけばOK。
プレゼントをあげてフラグを立てた例。
プレゼントフラグを数値の1にします。
*プレゼントした $プレゼントフラグ=1 :わーいありがとう!
プレゼントした { プレゼントフラグ = 1 "\0\s[0]わーいありがとう!\e" }
これだけ。シンプル。
里々との違いは
【ここ】プレゼントフラグ【ここ】=【ここ】1【ここ】
【ここ】の部分には空白を入れても構いません。
見やすくするため演算記号の右と左に半角空白を入れる人が多いようです。
文字列を代入する場合はこんなかんじ。
「プレゼント」という変数に「花束」という文字を入れます。
*プレゼントした $プレゼント【タブ】花束 :わーいありがとう!
プレゼントした { プレゼント = "花束" "\0\s[0]わーいありがとう!\e" }
数値じゃない時は必ず" "か' 'でくくりましょう。
トークを書くときと同じですね。
里々みたいに「プレゼント【タブ】"花束"」とは書けません。必ず「=」で代入します。
プレゼントした { プレゼント = 花束 "\0\s[0]わーいありがとう!\e" }
うっかりこう書いてしまうと「プレゼント」の中身はからっぽになってしまいます。
なぜかというと、YAYAでは「"花束"」ではなく「花束」だけだと「『花束』という名前の変数」になってしまうからです。
そのため「プレゼント」という変数に「花束」という変数の中身を入れましたよ、という意味に理解され、
「花束」という変数は存在してないため中身は空になってしまう、という訳です。
里々でいうとこんな風に書いちゃった、ということです。
*プレゼントした $プレゼント【タブ】(花束) :わーいありがとう!
このへん里々とは逆なので最初はちょっと混乱するかも。
*好感度アップ $好感度=(好感度)+1 :ユーザーさんだいすき!
プレゼントした { 好感度=好感度+1 "\0\s[0]ユーザーさんだいすき!\e" }
こっちもシンプル。
里々だと「好感度=(好感度)+1」のように右側の変数は()つきで書く必要がありましたが、YAYAは何もつけなくてOK。
これは前述したように" "や' 'でくくってない文字列は変数、関数名(半角数字だけの場合は数値)として見られるからです。
ちなみにYAYAはこう省略して書く事もできます。
プレゼントした { 好感度++ "\0\s[0]ユーザーさんだいすき!\e" }
「好感度++」は「好感度を1増やしますよ」という意味で「好感度=好感度+1」と意味は同じです。
「好感度--(半角マイナス2コ)」だと1減ります。
「好感度+=2」だと「好感度=好感度+2」と同じ、「好感度-=2」は「好感度=好感度-2」と同じです。
そのほかYAYAで使える計算用の記号の説明はこのあたりに書いてあります。(専門用語多くてちょっとわかりにくいですが)
里々と同じく、文字同士の足し算もできます。
プレゼント = "花" + "束"
と書くと変数「プレゼント」の中身は「"花束"」となります。
変数はもちろんトーク中でも使えます。
プレゼントした { プレゼント="花束" "\0\s[0]わーい\w6%(プレゼント)だー!\w9\w9ありがとう!\e" }
バルーンに「わーい花束だー!ありがとう!」と表示されます。
書き方は上で説明した単語群をトークに使う時と全く同じですね。
このあたりは里々もYAYAも変わりません。
変数がちゃんと保存されているかどうか確認したい時はゴーストを終了して「yaya_variable.cfg」をテキストエディタで開いてみてください。
上の例だったら
プレゼント,"花束",,
という一行があれば、保存成功です。
ちなみに数値型の変数の場合は
プレゼント,1,,
こんな風に変数の中身の数字が" "で囲まれてません。
全て半角です。里々と違い、全角では書けません。
R0 R1 R2 ...
reference[0] reference[1] reference[2] ...
古いテンプレートではreference0 reference1 reference2 ..
新しいテンプレートでも設定次第でこう書けます。
S0 S1 S2 ...
valueex0 valueex1 valueex2 ...
SAORIの使い方はこのページの「SAORI」項目を参照。
A0 A1 A2 ...
_argv[0] _argv[1] _argv[2] ...
見ての通りローカル変数。
「条件分岐」「比較」と「計算」はまた違った方法でやりますが、
それ以外はほぼYAYAのシステム関数で同じ事ができます。
関数用途別一覧?を覗いてみてください。
「これじゃ使いたいの見つけにくい!」って人にはYAYAシステム関数リファレンスなんかもあります。
(mciaudio,load,鳥の詩.mp3)(mciaudio,play)
FUNCTIONEX( 'mciaudio.dll' , 'load' , '鳥の詩.mp3' ) FUNCTIONEX( 'mciaudio.dll' , 'play' )
里々みたいに使うSAORIを事前に設定しておく必要はありません。
直接yaya.dllから見たSAORIの相対パスを指定します。
ちなみに「mciaudio.dll」と「鳥の詩.mp3」が「yaya.dll」と同じディレクトリにあるのではなく、そのひとつ下の「saori」ディレクトリにある場合
FUNCTIONEX( 'saori\mciaudio.dll' , 'load' , '鳥の詩.mp3' )
こう書きます。
SAORI( 'mciaudio.dll' , 'load' , '鳥の詩.mp3' ) SAORI( 'mciaudio.dll' , 'play' )
「FUNCTIONEX」ではなく「SAORI」でもOK。
どっちで書いても構わないのなら「FUNCTIONEX」で書きましょう。
SAORI実行関数を使うとそのまま返ってきます。
返り値をバルーンにそのまま表示するのならこうやってトーク中に埋めこんで使ってもいいですし
(ただしSAORI実行関数の引数を" "ではなく' 'で囲まなければいけないので注意。" "の中に" "は書けないからです)
"\0\s[0]クリップボードにある文字を取り出します。\n「%(FUNCTIONEX( 'saori\textcopy.dll' , 'コピーする文字' ))」\e"
一旦変数に保存して使ってもよいです。
変数 = FUNCTIONEX( 'saori\textpaste.dll' )
Resultがそのままバルーンに表示されると困る時も適当なローカル変数に代入しておきます。
上でも書きましたが里々で「S0 S1 S2 ..」と書いていたものは「valueex0 valueex1 valueex2 ...」と書きます。
詳しくはこのページを見てください。
システム辞書/yaya_shiori3.dic - 時刻系関数を参照。
メモリ量、センダーヘッダの変数もここで見れます。
時間をおしえる { "\0\s[0]ただいま%(hour)時%(minute)分%(second)秒で~す。\e" }
「里々みたいに日本語で書けないとやだー」って人はテンプレートを参考にして自分で書いてしまうのもアリです。
年 { GETTIME[0] } 月 { GETTIME[1] } 日 { GETTIME[2] } 分 { GETTIME[5] } 秒 { GETTIME[6] } 時間をおしえる { "\0\s[0]ただいま%(時)時%(分)分%(秒)秒で~す。\e" }
曜日を漢字表記にする方法はこちら。(SimpleYAYAテンプレートには掲載済み)
「$○○タイマ【タブ】秒数」をYAYAで。
5秒待たせるイベント { "\0\s[0]それでは5秒お待ち下さい。\e" SHIORI3FW.SetDelayEvent( '5秒待った' , 5 ) }
5秒待った { "\0\s[0]お待たせしました。\e" }
#defineで同じ事が出来ますが、失敗しないよう注意。
OnTranslateかOnTranslateInternalイベントでできます。
自動ウェイトなどに使うのならOnTranslateInternalの方をおすすめ。
(OnTranslateだと例えばヘッドラインの中身まで変換されてしまいます)
OnTranslateInternal { _text = _argv[0] _text = REPLACE(_text, "…", "…\w3") _text = REPLACE(_text, "、", "、\w5") _text = REPLACE(_text, "。", "。\w9") _text }
里々と同様、YAYAでもそのままトークに書けない記号があります。
里々では記号の前に「Φ」を入れて無効化してました。
YAYAではCHRという関数を使って書きます。
こういったサイトを参考にし、書きたい記号の上位3ビット(上のサイトでいうと横の軸にある記号)と上位4ビット(縦の軸)を調べ
CHR(0x(上位3ビット)(上位4ビット))
と書きます。
例えば「1」でしたら
CHR(0x31)
です。
必ず半角で書きます。
記号表示テスト { "\0\s[0]記号「%(CHR(0x22))」をバルーンに表示\e" }
#を//にするだけです。
# 起動イベント *OnBoot :こんにちはー。
// 起動イベント OnBoot { "\0\s[0]こんにちはー。\e" }
こんな位置にも入れられます。
つまり「//」がついた所から右の部分が全てコメントアウトになります。
OnBoot { "\0\s[0]こんにちはー。\e"// 起動トーク }
「/*」と「*/」でくくってもコメントアウトになります。
複数行ごとくくれるので行数が多いならこっちの方が楽。どこからどこまでコメントアウトかちょっとわかりづらいのが難点?
/* 起動イベント 一番最初に起動した時呼ばれる */ OnBoot { "\0\s[0]こんにちはー。\e" }
YAYAは里々より注釈が入れやすく、気軽に使いやすいです。
後で見返した時どこが何なのかすぐ思い返せるようばんばん入れておきましょう。