Top/StartUp/里々からの移行
  トップページへ   [ 一覧 | 検索 | 最終更新 ]   [ 差分 | バックアップ ]

* 里々からYAYAへ移行する [#ke0d0ecc]

主に里々しかSHIORIを使った事が無いけどYAYAも使ってみたい!という人向けの説明文です。~


#contents

* はじめに [#yd6505d2]

** 里々からYAYAにする利点 [#z8a1faa1]

プログラミング的な事をするのに強いので、ゴーストのトーク以外の部分がごちゃごちゃしてきて書くのが面倒な場合楽になります。~
でもそれは特にYAYAだけに限った特性ではなく、[[華和梨>http://www.towano.net/wk_kwr/]]という選択肢もあります。~
更新が停止していても良いならそれ以外のSHIORIも選択肢に入ります(ただし、それらはもし不具合が発見されても修正は望めません)~
SHIORIの特性を把握し、自分で使いやすそうなSHIORIを選ぶのが良いでしょう。~
//配布停止のためコメントアウト[[透理>http://pleco.is.land.to/]]

**YAYAへの素朴な疑問集 [#m016c7aa]
***バリバリ理系向けのSHIORIって聞いたけど… [#yeeb8ad9]
「文系で今まで里々しか使ってなかったけどYAYAが肌に合ってて使いやすかった」と言っていた人も何人かいます。~
つまりYAYAが向いてるかどうかは理系かどうかは関係なく、その人との相性によります。本人が実際使ってみないとなんとも言えません。

***プログラミングやC言語やった事ある人しか使えないの? [#qc29f786]
少なくともこれ書いてる人はプログラミングもC言語もやった事ないです。~

***里々より難しいんでしょ? [#e9d57da4]
どんなゴーストを作るかによります。~
トーク中心のシンプルなゴーストなら里々のほうが楽ですが、複雑な動作をするゴーストの場合むしろ里々のほうがYAYAより難解なSHIORIになることもあります。~
特にループや配列を多用しまくる場合、里々だと記述するのが辛くなる可能性が高いです。

***重いって本当? [#ca087606]
特に重いという話は聞きません。少なくとも里々よりは軽いです。~
もしシンプルなYAYA製ゴーストなのに重いと感じたら、「実行ログ出力設定」や「インストール済みゴーストリスト取得の制限なし取得」をオンにしている可能性が高いです。~
~
参考になるかもしれないサイト。~
-[[ファイル読み書きはどれくらい遅いのか(追記あり) | すくりや>http://nikolat.herokuapp.com/ukagaka/time-file-io/]](一番下のまとめ)

***ファイル操作や正規表現ってYAYAしか使えないの? [#pc33961c]
他のSHIORIでもSAORIを使えばできます。~
例えば、[[YAYA as SAORI]]でYAYAをSAORIとして使うとYAYAと同じようにファイル操作や正規表現ができます。~
つまりそれだけを目当てにしてYAYAを選択する必要はありません。

***里々だと絶対作れないようなゴーストが作れるようになる? [#t264cef6]
上で書いたように大体の事は里々でもSAORIを使ったり記述を工夫したりする事により実現可能です。~
ただし辞書が記述しやすいか、記述がどれだけ長くなるか、記述した辞書が後から見やすいかどうか等の違いは出てきます。


** 注意点 [#u3ee1de7]
-里々はウェイト、改行、スコープ切り替えタグなどが自動で入りましたが、YAYAはそれらを全て''さくらスクリプトを使い自分で書きます''。選択肢も必ずさくらスクリプトで書くことになります。
-YAYAは基本的にトーク以外は半角で書きます。
-里々はテンプレートゴーストがなくてもsatori.dllを用意してマニュアルを見ればなんとかなりましたが、YAYAはSHIORI/3.0設定スクリプトなど(ゴーストが動くときの歯車の部分)を自力で0から作るのが難しいためほぼ必須です。最低限SHIORI/3.0設定スクリプト([[SimpleYAYAテンプレート]]でいうとyaya_shiori3.dic)だけは流用したほうが無難です。
-里々は拡張子が「.txt」でファイル名が「dic~」から始まる辞書ファイルは自動的に読み込みましたが、YAYAは''yaya.txtで設定した辞書しか読み込みません''。その代わりどの拡張子の辞書も読み込める、辞書を好きなディレクトリに置けるという利点もあります。
-どの辞書にどのイベントを書いてもいいのは里々と同じ。
-フォルダごとの辞書読み込み切り替えはできません。(多重人格のやり方は[[Tips/多重人格モード]]にありますが、読み込みフォルダ切り替え方式ではありません)
-里々はSAORI-basicをそのまま使えましたが、YAYAではPROXY.DLLというSAORIを経由しないと使えません。里々でsatori_conf.txtに書いたようなsaori定義はいりません。(詳しくは[[Tips/SAORIの使い方]]を)

** 準備しておいたほうがよいもの [#qa625c4e]
:テキストエディタ|基本的に何でも良いですが、[[エディタ色分けファイル]]ページにあるテキストエディタとそれに対応した色分けファイルをダウンロードしておくのをお勧めします。記述がとても見やすいです。拡張子が「.dic」のファイルを開くと自動的に色分けされるよう設定しておくと更に便利。
:テンプレートゴースト|[[StartUp/YAYAでゴーストを作る]]から自分に合ったものを。前述したようにほぼ必須。


* YAYAの辞書を書いてみる [#hcfdaf26]
以下、「[[はろーYAYAわーるど(紺野ややめ)>http://ms.shillest.net/yayame.xhtml]]」や「SimpleYAYAテンプレート」以外のテンプレートでは通用しないかもしれません(特にタイトルに「☆」がついている項目)~

起動イベントで例を出してみます。

** 基本 [#me9643b5]

-里々
 *OnBoot
 :いっちばーん。

里々ではこう書いていました。~
YAYAでは以下のように書きます。

-YAYA
 OnBoot
 {
  "\0\s[0]いっちばーん。\e"
 }

なんかよくわからない記号が色々ありますが、一つづつ見ていきましょう。

-記号の解説

:OnBoot|最初に書く起動イベントを表す名前。このへんは里々と同じです。YAYAでは関数名と呼んだりします。~
[[CROW・SSPリファレンス - Shiori>http://crow.aqrs.jp/reference/all/Shiori/index.html]]に書かれてるイベント名はどれもYAYAでそのまま書けます。~
「起動」「終了」「初回」などの日本語のイベント名は里々独自イベント名のため、YAYAで使ってもそのままでは呼び出されません。

:{ }|イベント名を書いたのあと、イベントの中身をこの二つの記号でくくります。~
''YAYAでSHIORI Eventを書く時は必ず「イベント名{イベントの中身}」''です。~
ちゃんと囲まないとエラーが出てゴーストが起動しなくなってしまいます。

:" "|トークなど、文字列は必ずこの記号でくくります。~
''里々と違い、これでくくってない文字は変数名や関数名だと思われてしまいます''。~
ちなみに「" "」の変わりに「' '」でくくると中にある変数が展開されません。普段は「" "」でOK。

:\0|「これから0番キャラ(さくら側)がしゃべったり表情変えたりするぞー」という意味のさくらスクリプト。~
この後に書いたテキストは0番のキャラのバルーンに表示されます。1番の相方キャラにしゃべらせたくなったら\1。~
里々ではこの二つの切り替えを「:」のみでしています。

:\s[0]|0番サーフェスを表示するさくらスクリプト。里々で(0)と書いていたもの。~
里々では最初の(0)は省略できましたが、YAYAではこれを入れないとトークをする前のサーフェスがそのまま表示されてしまいます。

:\e|トークの終了を表すさくらスクリプト。入れなくても特に問題はないようですが一応トークの最後に入れておきましょう。


ちなみに里々と違い自動でウェイトはつきません。入れたい場合はさくらスクリプトで入れてください。
さくらスクリプトはYAYA以外のSHIORIでも共通して使うものなので、このWikiでは詳しく説明しません。~
これ以外も色々あるのでリファレンスサイトで、「実際に使ってみたいもの」を「ちょっとづつだけ」で良いのでYAYAといっしょに覚えてみてください。~
(いきなり全部覚えようとすると頭がパンクします…)~
-[[CROWリファレンス - SakuraScript>http://crow.aqrs.jp/reference/crow/SakuraScript/index.html]]~
-[[Disc-2 SakuraScriptリスト>http://disc2.s56.xrea.com/manual/list_sakura_script.htm]]


最初にイベント名を書く、中身を「{}」でくくるなどの書き方のルールがちゃんと合ってればこんな風に書いても

 OnBoot {
 "\0\s[0]いっちばーん。\e"
 }

こんな風に書いちゃっても構いません。

 OnBoot { "\0\s[0]いっちばーん。\e" }

OnBootと{の間などにある空白・改行は、入れても入れなくても大丈夫。タブをいれてもOK。~
自分の見やすい、書きやすい書き方を選んでください。~

 OnBoot{"\0\s[0]いっちばーん。\e"}


基本的に""の外にある空白やタブ、改行は無視されるので、

 OnBoot
   {
    
      "\0\s[0]いっちばーん。\e"
  
            }

こんなんでもよし。~
要するに

 【ここ】OnBoot【ここ】{【ここ】"\0\s[0]いっちばーん。\e"【ここ】}【ここ】

上の【ここ】の所に空白(半角空白、全角空白、タブ)や改行をいくらでも入れられるっていう訳です。~
~
YAYAはこの仕組みを使って辞書を自由に整える事ができます。~
これが里々より辞書の見通しが良いと言われる理由の一つです。


**改行する [#yc594c97]

-里々
 *OnBoot
 :改行
 します。

里々では辞書の中の改行がそのままトークの改行になりましたが、''YAYAではさくらスクリプトを使って改行しないとバルーンに表示された時改行になりません''。~
改行したい部分に「\n」をいれてください。

-YAYA
 OnBoot
 {
  "\0\s[0]改行\nします。\e"
 }

「これじゃあ辞書の中で改行になってなくてわかりづらい!」…と思う方は

 OnBoot
 {
  "\0\s[0]改行\n/
  します。\e"
 }

こうやって行末に「/」を入れれば改行できます。~
好きな位置に入れてつかいましょう。

 OnBoot
 {
  "\0\s[0]/
  改行\n/
  します。/
  \e"
 }

-わるい例
 OnBoot
 {
  "\0\s[0]改行\n
  します。\e"
 }

''" "や' 'でくくってあるところを末尾に「/」を入れないで改行してしまうとエラーになってしまうので気を付けてください''。

**単語や文章をランダムで選ぶ [#i74d4072]

里々では同じイベントをたくさん書くとその中からランダムで選ばれました。

 *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コ選ばれ、くっつけて表示されます''。~

~
ちょっとわかりづらいので例を出して説明。~

 てんき
 {
  "きょうは"//←<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"
 }

こう書いてもよいです。~
別なトークでも「季節」の単語群を使いたかったら最初に書いた方式の方が良いですね。~

**変数 [#d9cc0463]

里々でもおなじみ変数。ユーザー名や起動回数・起動時間・好感度で使う人が多かったかも。~
里々では1種類の変数しかありませんでしたが、YAYAはいろいろとあります。~
まずはそのへんの説明。

***文字列と数値 [#v9f96732]

YAYAの変数は文字列と数値の二種類があります。(正確には整数、実数、文字列の3種類)~

 変数 = 1

こう代入すると変数の中身は数値の「1」

 変数 = "1"

こうやって" "か' 'でくくって代入すると変数の中身は文字列の「1」となります。~
~
里々と違い全角の「1」「2」「3」…は数値になることはできません。文字列扱いです。~
''文字列変数だと数値として比較や計算ができません。''~
例えば数字の数値「1」と「2」で足し算すると結果は「3」になりますが、文字列の「1」と「2」を足すと1と2がくっついて「12」になってしまいます。~
他にも色々違いがありますので注意してください。~
~
ちなみに変数はいつでも好きな時に文字列←→数値に変更できるので安心。~
用途によって変更してください。

-変数を文字列変数にする
 変数 = TOSTR(変数)

-変数を数値変数にする
 変数 = TOINT(変数)

自動的に整数、実数、文字列どれなのか判断して変換してくれる[[TOAUTO]]なんてのもあります。

***グローバルとローカルの違い [#gd41ca5e]

 _変数名
名前の頭に「_」をつけるとローカル変数

 変数名
つけないとグローバル変数になります。~
~
おおざっぱに言うと「一時的に使うものですぐ消えてしまう」のがローカル変数、「削除しない限りずっと残る」のがグローバル変数です。~
里々の変数は全部グローバル変数ですね。~
YAYAではユーザー名や好感度などずっと残しておかないといけない変数以外はローカル変数を使うのをお勧めします。~
~
で、ローカル変数がどれぐらいの期間使えるのかというと、~
「現在の{ }内、およびそれより深い入れ子階層のみで使用できる。寿命は該当する{ }を抜けるところまで。」~
です。(マニュアルより引用)~
~
言葉では説明しづらいので一例をだしてみると

 ローカル変数テスト {
   {
   _変数 = 1
   }
 結果 = _変数
 }

こう書くと「_変数」が深い階層から浅い階層に移った時に消えてしまうので「結果」の中身も空になってしまいますが

 ローカル変数テスト {
 _変数 = ""
   {
   _変数 = 1
   }
 結果 = _変数
 }

こうすれば「_変数」は浅い階層→深い階層→浅い階層…と、最初に浅い階層にいた経験があるので深い階層から浅い階層に移動しても消えずに残り、「結果」の中身は1です。~
最初に「_変数」が生まれたところが「結果=_変数」と同じ(またはもっと浅い)階層かどうかがポイント。
~
つまりローカル変数を長生きさせたい時は最初に一番浅い階層で「_○○=""」などの一行を書いておけばOK。

***変数の代入 [#a87ba410]

プレゼントをあげてフラグを立てた例。~
プレゼントフラグを数値の1にします。

-里々
 *プレゼントした
 $プレゼントフラグ=1
 :わーいありがとう!

-YAYA
 プレゼントした
 {
 プレゼントフラグ = 1
 
  "\0\s[0]わーいありがとう!\e"
 }

里々との違いは~
-頭に「$」はつけない。
-トークや計算などは全部{ }の中に書く({ }の外に書くとエラーになります)
-「=」などの計算用の記号、「1」などの数値は全て''半角で書く''。
里々でも計算式や数値を半角で書く癖があった人は楽かもしれません。~
~
 【ここ】プレゼントフラグ【ここ】=【ここ】1【ここ】

【ここ】の部分には空白やタブを入れても構いません。~
見やすくするため演算記号の右と左に半角空白を入れる人が多いようです。~
~
文字列を代入する場合はこんなかんじ。~
「プレゼント」という変数に「花束」という文字を入れます。~

-里々
 *プレゼントした
 $プレゼント【タブ】花束
 :わーいありがとう!

-YAYA
 プレゼントした
 {
 プレゼント = "花束"
 
  "\0\s[0]わーいありがとう!\e"
 }

数値じゃない時は必ず" "か' 'でくくりましょう。~
トークを書くときと同じですね。
里々みたいに「プレゼント【タブ】"花束"」とは書けません。必ず「=」で代入します。

 プレゼントした
 {
 プレゼント = 花束
 
  "\0\s[0]わーいありがとう!\e"
 }

うっかりこう書いてしまうと「プレゼント」の中身はからっぽになってしまいます。~
なぜかというと、''YAYAでは「"花束"」ではなく「花束」だけだと「『花束』という名前の変数」になってしまうからです''。~
そのため「『プレゼント』という変数に『花束』という変数の中身を入れましたよ~」、という意味に誤解され、~
「花束」という変数は存在してないため中身は空っぽになってしまう、という訳です。~
~
里々でいうとこんな風に書いちゃった、ということです。

 *プレゼントした
 $プレゼント【タブ】(花束)
 :わーいありがとう!

このへん里々とは逆なので最初はちょっと混乱するかも。

***変数の計算 [#a61ce42f]

-里々
 *好感度アップ
 $好感度=(好感度)+1
 :ユーザーさんだいすき!

-YAYA
 プレゼントした
 {
 好感度=好感度+1
 
  "\0\s[0]ユーザーさんだいすき!\e"
 }

こっちもシンプル。~
里々だと「好感度=(好感度)+1」のように右側の変数は()つきで書く必要がありましたが、YAYAは何もつけなくてOK。~
これは前述したように" "や' 'でくくってない文字列は変数、関数名(半角数字だけの場合は数値)として見られるからです。~
~
ちなみにYAYAはこう省略して書く事もできます。

 プレゼントした
 {
 好感度++
 
  "\0\s[0]ユーザーさんだいすき!\e"
 }

「好感度++」は「好感度を1増やしますよ」という意味で「好感度=好感度+1」と意味は同じです。~
「好感度--(半角マイナス2コ)」だと1減ります。~
「好感度+=2」だと「好感度=好感度+2」と同じ、「好感度-=2」は「好感度=好感度-2」と同じです。~
そのほかYAYAで使える計算用の記号の説明はこのあたりに書いてあります。(専門用語多くてちょっとわかりにくいですが)~
-[[old/AYA/ドキュメント/V5/マニュアル>http://emily.shillest.net/ayaya/index.php?old%2FAYA%2F%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%2FV5%2F%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB#v84b1e7f]]

里々と同じく、文字同士の足し算もできます。

 プレゼント = "花" + "束"

と書くと変数「プレゼント」の中身は「"花束"」となります。~
~
変数はもちろんトーク中でも使えます。

 プレゼントした
 {
 プレゼント="花束"
 
  "\0\s[0]わーい\w6%(プレゼント)だー!\w9\w9ありがとう!\e"
 }

バルーンに「わーい花束だー!ありがとう!」と表示されます。~
書き方は上で説明した単語群をトークに使う時と全く同じですね。~
このあたりは里々もYAYAも変わりません。~
~
変数がちゃんと保存されているかどうか確認したい時はゴーストを終了してセーブデータファイル(yaya_variable.cfg)をテキストエディタで開いてみてください。~
上の例だったら~

 プレゼント,"花束",,

という一行があれば、保存成功です!~
ちなみに数値型の変数の場合は~

 プレゼント,1,,

こんな風に変数の中身の数字が" "で囲まれてません。

**分岐 [#xbdc6578]
つつかれ反応での例。~
OnMouseDoubleClickイベントは、0番キャラ(さくら側)がつつかれるとReference3の中に「0」が入るという仕様。~
そんな訳でReference3に0が入ってるのを確認したら「0番つつかれ反応」に飛ばす辞書を書いてみますね。

-里々
 *OnMouseDoubleClick
 >0番さんがつつかれた【タブ】(R3)==0
 
 *0番さんがつつかれた
 :(7)つつくなっ!
 
-YAYA
 OnMouseDoubleClick {
 	if reference[3] == 0 {
 	 	0番さんがつつかれた
  	}	
 }
 
  0番さんがつつかれた {
 	"\0\s[7]つつくなっ!\e"
 }

ここで新登場な「if」。~
「if」はその後にある条件式(ここでは「reference[3] == 0」)が正しければ次の「{ }」の中身を実行するよ~、という意味。

  OnMouseDoubleClick {
 	if reference[3] == 0 {
 	 	"\0\s[7]つつくなっ!\e"
  	}	
 }

もちろんこれもこんな風に「{ }」の中に直接トークを書くことも可能。~
必要に応じて記述法を変えてください。~
~
「if」とあわせて「else」を使うとこんなこともできます。~

  OnMouseDoubleClick {
 	if reference[3] == 0 {
 	 	"\0\s[7]つつくなっ!\e"
  	}
  	else {
 	 	"\0\s[7]あたし以外の子もつつくなっ!\e"
  	}
 }
「if 条件式 { }」にひっかからなかったらその次にある「else { }」の中身を実行。~
この例だと0番以外のキャラがつつかれたら全部「else { }」の中身を実行。~
「else」は「if」の後専用で、「else」単体で書いてもエラーになるので注意。~
~
0番キャラの「頭が」つつかれた時だけトークさせたい!って時はこう。~

  OnMouseDoubleClick {
 	if reference[3] == 0 && reference[3] == "Head" {
 	 	"\0\s[7]頭を叩くなっ!\e"
  	}	
 }

二つ以上条件式を並べられます。~
半角か全角かの違いだけで、「==」と「&&」の記号の使い方は里々と全く同じですね。~
「if」と「reference[3] == 0」の間に空白かタブを入れるのを忘れずに。~
~
ん?あれ?~
でも里々でつつき反応って…~

 *0Headつつかれ
  :(7)頭を叩くなっ!
 
 *1つつかれ
 やめれ!

こうやって書いてたよね?~
YAYAじゃ似たようなことできんの??~
~
…と、言うあなたのためにこちらの記述法。~

 OnMouseDoubleClick {
 	EVAL( "%(reference[3])%(reference[4])つつかれ" )
 }
 
 0Headつつかれ {
 	"\0\s[7]頭を叩くなっ!\e"
 }
 
 1つつかれ {
 	"\1\s[10]やめれ!\e"
 }

普通なら "%(reference[3])%(reference[4])つつかれ" だけ書くと、0番の頭がつつかれた時「0Headつつかれ」としゃべるゴーストのトークになります。~
それを「EVAL ( )」で包み込むと、なんと!「0Headつつかれ」が関数名になっちゃいます!~
~
このEVALはこういった「いきなり独立した関数を書ける分岐」以外でも色んな場面で役立つ便利な関数です。~
詳しくは[[マニュアル/関数/EVAL]]のページをどうぞ。

**R0とかS0とかA0のYAYAでの書き方 [#rd2a3a4b]

全て半角です。~

-里々
 R0 R1 R2 ...

-YAYA
 reference[0] reference[1] reference[2] ...

古いテンプレートではreference0 reference1 reference2 ..~でした。
(新しいテンプレートでも設定次第でこう書けます)

-里々
 S0 S1 S2 ...

-YAYA
 valueex0 valueex1 valueex2 ...

SAORIの使い方はこのページの「SAORI」項目を参照。

-里々
 A0 A1 A2 ...

-YAYA
 _argv[0] _argv[1] _argv[2] ...

頭に「_」が付いてるのでわかる通り、ローカル変数です。~


**ssuみたいなこと [#fca00fd6]

「条件分岐」「比較」と「計算」はまた違った方法でやりますが、~
それ以外はほぼYAYAのシステム関数で同じ事ができます。~
~ 
[[関数用途別一覧]]を覗いてみてください。~
「これじゃ使いたいの見つけにくい!」って人には[[YAYAシステム関数リファレンス>http://navy.nm.land.to/post/y_sysfn.html]]なんかもあります。~

**SAORI [#vd442bfc]

***つかいかた [#maff9ab3]

-里々
 (mciaudio,load,鳥の詩.mp3)(mciaudio,play)

-YAYA
 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」で書きましょう。~
~
***返り値 Result [#oab51c89]

SAORI実行関数を使うとそのまま返ってきます。~
返り値をバルーンにそのまま表示するのならこうやってトーク中に埋めこんで使ってもいいですし~
(ただしSAORI実行関数の引数を" "ではなく' 'で囲まなければいけないので注意。" "の中に" "は書けないからです)

 "\0\s[0]クリップボードにある文字を取り出します。\n「%(FUNCTIONEX( 'saori\textcopy.dll' , 'コピーする文字' ))」\e"

一旦変数に保存して使ってもよいです。~

 変数 = FUNCTIONEX( 'saori\textpaste.dll' )
 
Resultがそのままバルーンに表示されると困る時も適当なローカル変数に代入しておきます。

***返り値 Value[n] [#h55dd7e3]
上でも書きましたが里々で「S0 S1 S2 ..」と書いていたものは「valueex0 valueex1 valueex2 ...」と書きます。

詳しくはこのページを見てください。
-[[Tips/音を鳴らす]]
-[[Tips/SAORIの使い方]]


**☆現在時刻を表示 [#k1ed6212]

[[システム辞書/yaya_shiori3.dic - 時刻系関数>http://emily.shillest.net/ayaya/index.php?%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%BE%9E%E6%9B%B8%2Fyaya_shiori3.dic#ta7752a4]]を参照。~
メモリ量、センダーヘッダの変数もここで見れます。

 時間をおしえる
 {
  "\0\s[0]ただいま%(hour)時%(minute)分%(second)秒で~す。\e"
 }

「里々みたいに日本語で書けないとやだー」って人はテンプレートを参考にして自分で書いてしまうのもアリです。

 年 { GETTIME[0] }
 月 { GETTIME[1] }
 日 { GETTIME[2] }
 分 { GETTIME[5] }
 秒 { GETTIME[6] }
 
 時間をおしえる
 {
  "\0\s[0]ただいま%(時)時%(分)分%(秒)秒で~す。\e"
 }


曜日を漢字表記にする方法はこちら。(SimpleYAYAテンプレートには掲載済み)
-[[Tips/曜日を判別]]

**☆タイマー [#l9a16687]
**☆タイマー ($○○タイマ【タブ】秒数)[#l9a16687]

「$○○タイマ【タブ】秒数」をYAYAで。
-[[Tips/指定秒数経過後にイベントを実行]]

 5秒待たせるイベント
 {
  "\0\s[0]それでは5秒お待ち下さい。\e"
  
  SHIORI3FW.SetDelayEvent( '5秒待った' , 5 )
 }

 5秒待った
 {
  "\0\s[0]お待たせしました。\e"
 }

-残り時間も取得したいという例~
 OnSecondChange { //これ以外は自作関数
	if timerFlag == 1 {
		OnTimerCounter
	}
 }
 
 OnTimerStart { //OnTimerStart(60)とかで呼び出す。
	timerFlag = 1
	timerCount_s = _argv[0]//timerCount_sの現在値が残り時間。
 }
 
 OnTimerCounter { //計測中処理
	timerCount_s--
	if timerCount_s <= 0 { //タイマ終了処理
			OnTimerEnd
	}
 }
 
 OnTimerEnd {
	timerFlag = 0
	timerCount_s = 0
	//タイマ終了時に何か処理する場合このへんに書く
 }
タイマを同時にいくつか計測したい場合は、もう少し工夫が必要です。


**replace.txt [#g29dd3e7]

#defineで同じ事が出来ますが、SHIORIで計算等が実行される前の「辞書に書かれてる文字列そのまま全部」を変換してしまう強力なものなので、重要な文字列まで変換してしまう等の失敗をしないよう注意。~
詳しい使い方は[[関数・変数・さくらスクリプトを短縮して書く]]ページを参照。~
~
例えばこんな記述をしておくと、
 #define @r reference
今まで「reference[0]」と書いてた所を「@r[0]」と短縮して書けるように。

**☆replace_after.txt [#s674ca8a]

OnTranslateかOnTranslateInternalイベントでできます。~
自動ウェイトなどに使うのならOnTranslateInternalの方をおすすめ。~
(OnTranslateだと、例えばヘッドラインの中身まで変換されてしまいます)~
~
トークに自動でウェイトをつける例
 OnTranslateInternal
 {
 	_text = _argv[0]
 	_text = REPLACE(_text, "…", "…\w3")
 	_text = REPLACE(_text, "、", "、\w5")
 	_text = REPLACE(_text, "。", "。\w9")
 	_text
 }

**シェルの見切れ・重なり反応をつける [#v1534609]
-[[Tips/見切れ・重なり反応を里々風に]]

**Φのように危険な記号を無効化する [#ta5d62ba]

里々と同様、YAYAでもそのままトークに書けない記号があります。~
里々では記号の前に「Φ」を入れて無効化してました。~
YAYAではCHRという関数を使って書きます。

-[[[psl]ASCIIコード一覧表>http://www.psl.ne.jp/perl/pdojo00b.html]]
-[[キャラクタコード表>http://winofsql.jp/VA003334/CprogBase040109013756.htm]]

こういったサイトを参考にし、書きたい記号の上位3ビット(上のサイトでいうと横の軸にある記号)と上位4ビット(縦の軸)を調べ~

 CHR(0x(上位3ビット)(上位4ビット))
と書きます。

例えば「1」でしたら
 CHR(0x31)
です。~
必ず半角で書きます。

-「" "」の中に「"」を書くサンプル

 記号表示テスト
 {
 	"\0\s[0]記号「%(CHR(0x22))」をバルーンに表示\e"
 }

**コメントアウト [#ncce31d5]

#を//にするだけです。

-里々
 # 起動イベント
 *OnBoot
 :こんにちはー。

-YAYA
 // 起動イベント
 OnBoot
 {
  "\0\s[0]こんにちはー。\e"
 }

こんな位置にも入れられます。~
つまり「//」がついた所から右の部分が全てコメントアウトになります。
 
 OnBoot
 {
  "\0\s[0]こんにちはー。\e"// 起動トーク
 }


「/*」と「*/」でくくってもコメントアウトになります。~
複数行ごとくくれるので行数が多いならこっちの方が楽。どこからどこまでコメントアウトかちょっとわかりづらいのが難点?

 /*
 起動イベント
 一番最初に起動した時呼ばれる
 */
 OnBoot
 {
  "\0\s[0]こんにちはー。\e"
 }

YAYAは里々より注釈が入れやすく、気軽に使いやすいです。~
後で見返した時どこが何なのかすぐ思い返せるようばんばん入れておきましょう。


*里々からYAYAに移行した人にありがちな疑問 [#dbf6357e]

**ゴーストを起動しても全く動かない! [#p4111ec3]

YAYAでは里々と違って辞書の記述方式が一文字でも間違っているとゴーストが動作しなくなります。どこの記述が間違っていたのか確認しましょう。~

-Tips/玉を使った辞書エラーチェック
~
~
もしくは実行ログを見ても確認できます。~
yaya.dllと同じ階層にあるyaya.txtに「log, ayame.log」の一行を追加してからゴーストを起動し、出力された「ayame.log」をテキストエディタで開いてみてください。

**satori_savedata.txt(セーブデータ)どこー? [#w9ffd6bb]

グローバル変数は「yaya_variable.cfg」に保存されています。~
(テンプレートによってファイル名が違うこともあります)

**エイリアスエラーが出たけどこれって何? [#t2e56fb4]

descript.txtがshiori,satori.dllのままではないでしょうか。

**そのほか [#va63791e]
[[困ったときの対処法]]も見ましょう。