⇒開発
トーク数を調べる †里々だと以下のもので調べることができます。
選択肢と追加情報 †(里々関係なし) 聞いてみました。
\q[選択肢テキスト,OnEventExec?,R0,R1,R2....] \q[選択肢テキスト,OnEventExec?] \i[アニメのID]とトランスレート覚書 †○\i[アニメのID]覚書
\i[アニメのID]は、ようするにゴースト側からアニメを呼び出すタグ。 最初、特別なアニメ(魔方陣呼び出したりとか)のために、
ただし、差分自体にアニメをつけておいて、それを重ねると言うのはできない。 「dry apple」さま ○台詞の頭にだけ何かをつけるトランスレート replace_firstを使い、全文と全文を一致させて頭にいろいろ付加する。
里々の場合、自動サーフェス戻しがあるので、 正規表現を使って、数字とアルファベットしかない場合には、 「Un Known」の場合には、自動サーフェス戻しを無効化*1していますが、 入れ子その2 †((かゆ)) @かゆ うま @うま ぞーんびー! 出力結果は「ぞーんびー!」 1,((かゆ))の内側の括弧が最初に展開され「(かゆ)=うま」になる callを使うときに重宝する。 トークのウェイトを調節する †里々専用のウェイト変更スクリプト。 なので、そこをいじれば簡単にできるという。 *config :---- トークの速さ【(iflist,(自動挿入ウェイトの倍率),==300,ゆっくり,==100,普通,==50,速い,==0,ノーウェイト)】 ---- _ゆっくり ウェイト300 _普通 φ=default ウェイト100 _速い ウェイト50 _ノーウェイト ウェイト0 _閉じる *ウェイト300 $自動挿入ウェイトの倍率 300 >config *ウェイト100 $自動挿入ウェイトの倍率 100 >config *ウェイト50 $自動挿入ウェイトの倍率 50 >config *ウェイト0 $自動挿入ウェイトの倍率 0 >config *閉じる \e サーフェスで分岐 †>平常時【タブ】(サーフェス0)==7 >怒ってる【タブ】(サーフェス1)==17 トーク中で使うと判定が間に合わないことがある。 台詞で分岐 †* :今日のおやつは(お菓子)だよ! >和菓子【タブ】(H1)==ようかん :洋菓子! @お菓子 ようかん ケーキ チョコレート クッキー かっこの中身を捕らえて分岐させる。 >和菓子【タブ】(compare,(H1),(和菓子グループ)) @和菓子グループ ようかん★せんべい★こんぺいとう★酒饅頭 や >和菓子【タブ】(H1)==ようかん||(H1)==おせんべ のように書くことになる。 つつき反応をもっと自然にする †つつき反応を二段階にわけ、かつ、 *0つつかれ :つっつかれてるね。 >連続つつかれ0【タブ】(連続つつかれカウント0)==3 $連続つつかれカウント0=(連続つつかれカウント0)+1 $連続つつかれカウント0初期化タイマ【タブ】30 *連続つつかれ0 :三回以上つつかれてます。 $連続つつかれカウント0初期化タイマ=(連続つつかれカウント0初期化タイマ)+5 *連続つつかれカウント0初期化 $連続つつかれカウント0【タブ】0 ようするに、つつかれた回数を保存、一定以上になると分岐。 シェルチェンジ時に台詞をつける †「特定シェルから特定シェル」への変更で台詞を変化させられます。 辞書にはこれを追加しておくこと。
satori_conf.txtに変数として、
を使えば、同じシェルに変更も判定できそうだ。 *OnTranslate?でのトランスレート †コピペして貼ればすぐに動くはず。
*eが押された $トランスレートモード【タブ】(if,(compare,(トランスレートモード),ON)==1,OFF,ON) :トランスレート(トランスレートモード). *OnTranslate >トランスレート【タブ】(compare,(トランスレートモード),ON) *トランスレート $voice【タブ】(R0) $voice【タブ】(replace(byte3)(voice)(byte3)。(byte3)にゃ。)) (voice) 因数区切りとして、他に使っていないもの、誤爆しないものを使う。 引数の追加は以下のような形で行う。(by里々Wiki *OnSatoriLoad $引数区切り追加 (sprintf,%c,3) $byte3 (sprintf,%c,3) しかし、特定の場合には変換を回避しないと、不自然になるなあ。 レゴキチさんの「里々でのOnTranslate?の使い方」 『里々Wiki』 【猫語変換サンプル】 $voice【タブ】(R0) $voice【タブ】(replace(byte3)(voice)(byte3)よー。(byte3)にゃー。) $voice【タブ】(replace(byte3)(voice)(byte3)てー。(byte3)てだにゃー。) $voice【タブ】(replace(byte3)(voice)(byte3)るー。(byte3)るにゃー。) $voice【タブ】(replace(byte3)(voice)(byte3)くー。(byte3)くにゃー。) $voice【タブ】(replace(byte3)(voice)(byte3)たー。(byte3)たにゃー。) $voice【タブ】(replace(byte3)(voice)(byte3)よね。(byte3)よにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)いる。(byte3)いるにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)なよ。(byte3)にゃよ。) $voice【タブ】(replace(byte3)(voice)(byte3)ても。(byte3)てもにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)い。(byte3)いにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)だ。(byte3)にゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)よ。(byte3)にゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)が。(byte3)がにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)う。(byte3)うにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)た。(byte3)たにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)ね。(byte3)にゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)に。(byte3)ににゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)す。(byte3)すにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)る。(byte3)るにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)か。(byte3)かにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)つ。(byte3)つにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)です。(byte3)だにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)ます。(byte3)ますにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)ような。(byte3)ようにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)くらい。(byte3)くらいにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)だけど。(byte3)だけどにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)ところ。(byte3)ところだにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)ない。(byte3)ないにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)なん。(byte3)にゃん。) $voice【タブ】(replace(byte3)(voice)(byte3)すか。(byte3)すかにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)とけ。(byte3)とけにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)には。(byte3)にはにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)しく。(byte3)しくにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)かも。(byte3)かもにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)あり。(byte3)ありにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)みる。(byte3)みるにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)だな。(byte3)だにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)ながら。(byte3)にゃがら。) $voice【タブ】(replace(byte3)(voice)(byte3)ないか。(byte3)にゃいか。) $voice【タブ】(replace(byte3)(voice)(byte3)なんだって。(byte3)にゃんだって。) $voice【タブ】(replace(byte3)(voice)(byte3)なんだってー。(byte3)にゃんだってー。) $voice【タブ】(replace(byte3)(voice)(byte3)なんと。(byte3)にゃんと。) $voice【タブ】(replace(byte3)(voice)(byte3)なあ。(byte3)にゃあ。) $voice【タブ】(replace(byte3)(voice)(byte3)っけ。(byte3)っけにゃ。) $voice【タブ】(replace(byte3)(voice)(byte3)つっ。(byte3)つにゃっ。) $voice【タブ】(replace(byte3)(voice)(byte3)るっ。(byte3)るにゃっ。) $voice【タブ】(replace(byte3)(voice)(byte3)ないかにゃ。(byte3)にゃいか。) (voice) 入れ子 †* ((AB)の話題) @AB A B *Aの話題 :A!A!A! *Bの話題 :B!B!B! パターンは全部で(Aの話題)か(Bの話題)の二種となる。 ((アルファベット)−(数字)) @アルファベット A B @数字 1 2 四パターンに分岐する。ちょっと配列っぽいね。 ((A)−(1)) ((A)−(2)) ((B)−(1)) ((B)−(2)) 【実際の例】 * :今日、(本日の話題)は((本日の話題)の感想) @本日の話題 学食 天気 @学食の感想 混んでたね。 いいにおいがしてたね。 思わぬヒットメニューがあったね。 @天気の感想 悪かったね。 いい割には寒かったね。 なんか変だったね。 無視、コミュでトークを中断させない †$今回は喋らない=有効 何もしない・何も表示させない †(nop,☆)が重宝する。 たとえば、ifを使って、台詞を言わせたいときなどに便利。 単語群をグループわけ扱いにして、グループで検索にひっかける †見通しがよければメンテナンスしやすい。 *【タブ】(count,(シェルリスト),(現在のシェル))!=1 *【タブ】(count,(シェルリスト),(現在のシェル))==1 @実体のあるっぽいシェルグループ (実体のあるっぽいシェルグループ)を定義しておくことで、 これでヒットできるのは、グループとして定義した文字列「月はピアノに誘われて☆k-mode☆sss-mode☆m-mode☆くろゆり」の中に、それぞれのシェル名が含まれているかどうかを検索するものだから。 シェルによってアイコンを変更 †「(hogehoge)」と「@」を使って、 以下は自分用の覚書。 【*OnBoot?周辺の細工】 *OnBoot? @アイコン変更 (現在のシェル)==月はピアノに誘われて @アイコン変更 (現在のシェル)!=月はピアノに誘われて (nop,☆)が重宝する。 *OnShellChanging? *OnShellChanged?【タブ】(現在のシェル)!=月はピアノに誘われて *OnShellChanged? (現在のシェル)==月はピアノに誘われて 結局、シェルによって変わるというなら、変えるタイミングは二つ。 1.該当シェルを切り替えたとき:*OnShellChanged? いくつもの条件をいっぺんに判定させたいときには、 * と同じ役割を、 * @アイコン変更【タブ】(現在のシェル)==月はピアノに誘われて @アイコン変更【タブ】(現在のシェル)!=月はピアノに誘われて 「()」は、別のラベルに飛ばさずに複数の条件の適用が可能である。 【別のラベルに飛ばさず複数の条件を適用】 * @アイコン変更【タブ】(現在のシェル)==月はピアノに誘われて @アイコン変更【タブ】(現在のシェル)!=月はピアノに誘われて @(デフォルトシェル変更)【タブ】(現在のシェル)==k-mode @(デフォルトシェル変更)【タブ】(現在のシェル)!=k-mode ひとつの()で>を代替するパターン。 【ひとつの()で>を代替】 * @アイコン変更【タブ】(現在のシェル)==月はピアノに誘われて @アイコン変更【タブ】(現在のシェル)==k-mode @アイコン変更【タブ】(現在のシェル)!=月はピアノに誘われて||(現在のシェル)!=k-mode オーナードローメニューやその項目名を特定条件で変更 †時間とシェルによるオーナードロー切り替えの一例。 ちなみに、そうしたものとは関係なく、 以下の例では特定のシェル、 実際に見てみたいという方は、ゴースト「Un Known」を、 @menu.foreground.bitmap.filename【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) menu_foreground.png2 @menu.background.bitmap.filename【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) menu_background.png2 @menu.sidebar.bitmap.filename【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) menu_sidebar.png2 ※以下はセパレーターやフォントの色指定 @menu.background.font.color.r【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 255 @menu.background.font.color.g【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 255 @menu.background.font.color.b【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 255 @menu.foreground.font.color.r【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 0 @menu.foreground.font.color.g【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 0 @menu.foreground.font.color.b【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 0 @menu.separator.color.r【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 255 @menu.separator.color.g【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 255 @menu.separator.color.b【タブ】(現在のシェル)==flip-flop&& 17<(現在時)||(現在のシェル)==flip-flop&& 6>(現在時) 255 (現在のシェル)はシェルチェンジ時に(R0)で帰ってくるものを保存する。 *OnShellChanging $現在のシェル【タブ】(R0) $手動セーブ【タブ】実行 :…服などどうでもいいのだけど。 *OnNotifySelfInfo $現在のシェル【タブ】(R3) また、SHIORI Resourceは単語群として設定されたものから読み出しているものなので、 @sakura.portalbuttoncaption【タブ】17<(現在時)||6>(現在時) 夜の森 @sakura.portalbuttoncaption【タブ】17>(現在時)||6<(現在時) 昼の森 モードによってオーナードローのメニュー名を変えたい場合などに使う。 @sakura.portalbuttoncaption 遊び先(&P) 知ってるところ(&P) 割とよく知られていることのようだけれど、 FizzBuzz?問題私的回答 †ループの練習として解いてみた。 *ループ準備 $i 0 $FizzBuzz数 0 >ループ処理 *ループ処理 $FizzBuzz数 (calc,(FizzBuzz数)+1) >FizzBuzz終了 (i)>29 :(if,(Fizz)==0,Fizz)(if,(Buzz)==0,Buzz)(FizzBuzz該当外調査) $i (calc,(i)+1) >ループ処理 *FizzBuzz終了 :\C終了! @FizzBuzz該当外調査 (Fizz)!=0&&(Buzz)!=0 (FizzBuzz数) @FizzBuzz該当外調査 (Fizz)==0||(Buzz)==0 (nop,☆) @Fizz (calc,(FizzBuzz数)%3) @Buzz (calc,(FizzBuzz数)%5) ファイルの種別判別 †*OnFileDrop2 $ドロップ数【タブ】(split,(R0),(sprintf,%c,1)) $ループカウンタ【タブ】0 :\_q(ドロップ数)個のアイテムがドロップされました。 (ループ) *ループ $値保存(ループカウンタ)【タブ】(replace,(S(ループカウンタ)),\,/) :ループ【(ループカウンタ)】回目 ファイルパス取得【(値保存(ループカウンタ))】 $ドロップ数【タブ】(han2zen,(split,(値保存(ループカウンタ)),/)) (ドロップ数)に切り分けると $ファイル名保存(ループカウンタ)【タブ】(replace,(S(ドロップ数)),\,/) ファイル名取得【(ファイル名保存(ループカウンタ))】 $ループカウンタ=(ループカウンタ)+1 ループ【(ループカウンタ)】回目に入ります。 >ループ (変数「S(ループカウンタ)」の存在)==1 ループ【(ループカウンタ)】回目で終了しました。 $ループカウンタ=(ループカウンタ)−1 (loop,ファイル識別,0,(ループカウンタ)) *ファイル識別 :【(ファイル識別カウンタ)】つ目のファイル【(値保存(han2zen,(ファイル識別 カウンタ)))】は(if,( compare_tail,(値保存(han2zen、(ファイル識別カウンタ))),mp3)==1,音楽ファイルです。,音楽ファイルではありません。) リファレンス個数を確かめる †ループの使い方の練習。
*Onループ開始 *判定ループ *個数発表 (R0)が存在するか、とやったら、 リファレンスとして戻ってきている数が足りなくなれば、 以下れしばのログ。 --- Request --- GET SHIORI/3.0 ID: Onループ開始 Reference0: じゃん --- Operation --- *Onループ開始 $カウントアップ=0/overwritten. (カウントアップ)→0 (R0)→じゃん (カウントアップ)→0 $値保存0=じゃん/overwritten. (カウントアップ)→0 (変数「値保存0」の存在)→1 >判定ループ *判定ループ (カウントアップ)→0 $カウントアップ=1/overwritten. (カウントアップ)→1 (R1)→ (カウントアップ)→1 $値保存1/cleared. (カウントアップ)→1 (変数「値保存1」の存在)→0 *計算結果が0だったため、続行します。 >個数発表 *個数発表 (カウントアップ)→1 return: \1\01個のリファレンスが帰ってきました。\_w[102]\n return: \1\1\01個のリファレンスが帰ってきました。\_w[102]\n return: \1\1\1\01個のリファレンスが帰ってきました。\_w[102]\n status code : 200 --- Response --- Value=\0\s[0]\1\s[10]\01個のリファレンスが帰ってきました。\_w[102]\e ネットワーク更新先をフラグで変更する他 †1.特定シェルの時にはネットワーク更新先を変更する 1.特定シェルの時にはネットワーク更新先を変更する
2.delete.txtを使い、特定のネットワーク更新先にアクセスした場合には、 ○Aサーバ delete.txt(ghost/master/特殊辞書.txtと記載したもの) 特殊辞書.txt をいれた更新用ファイルをアップ ○Bサーバ delete.txt(何もかいていない) 特殊辞書.txt をいれた更新用ファイルをアップ 単純にこれで大丈夫。 3.更新ファイルはどこまで削除しても大丈夫なのか ただし、ユーザが久しぶりに更新をしようとした場合、
シェルフォルダも削除しています。 OnSatoriLoad?とOnSatoriBoot? †(レゴキチ氏による解説と浮子屋氏に教えてもらったことや内容をベースに並べ替えた) OnSatoriLoad?、OnSatoriBoot?ともに里々の独自イベント。 OnSatoriBoot?でトークを書くと、 【向いている用途】 OnSatoriLoad:変数の初期化とか設定とか里々の内部の準備用イベント OnSatoriBoot:起動イベント全般に分岐をかけたい時に使うといいかも(特定の日付の起動トークとか 「*OnSatoriLoad?」に記入したトークは読まれない。 OnSatoriClose?やOnSatoriUnload?も同じ対応。 レゴキチ氏による解説:http://ukgkc.nanican.net/lingrlog/uka_dev/logs/2008090700.html#00080 スクリプト解釈のタイミング †【大原則】 ・どんなタグもSSPが解釈された時点で効力を発する。 ・SSPからのイベント(NOTIFY除く)でないと、SHIORIはさくらスクリプトをSSPに返せない。 他のゴーストのトークを聞いて、それに反応する †\![set,otherghosttalk,true]のタグが追加されて以降のSSPでのみ動作。 「SSP CHANGELOG/更新履歴」
(A*) [#v394503d] †やっと理解したのでメモ。 (A*)はこちらで用意した引数。 * :(call,uni,やっほー) @uni (replace,(A0),━━━(゚∀゚)━━━) 結果は「やっほ━━━(゚∀゚)━━━」 uniという処理を呼び出して、(A0)に「やっほー」という引数を代入している。 さくらスクリプトを除去する †数年前にケノさんが書いたもの。 @正規置換 (if,(string,replace,(A0),s/(A1)/(A2)/g)==0,(A0),(string,get,0)) $トークログ (call,正規置換,(R4),\\(\\|q\[.*?\]\[.*?\]|[!&8cfijmpqsn]\[.*?\]|[-*+014567bcehntuvxz]|_[ablmsuvw]\[.*?\]|__(t|[qw]\[.*?\])|_[!?+nqsV]|[sipw][0-9]),) replace.txtに(正規置換,【タブ】(call,正規置換, satori_conf.txtの@SAORIにstring,saori/string.dll *wが押された :(トークログ) で、w押すと呼び出せます。 資料:http://keno.blog62.fc2.com/blog-entry-94.html 1から100まで足し算する †*ループ準備 >ループ処理 *ループ処理 *ループ終了 |