この記事を参考に、新しい里々に入れ替えよう。 正しく動いてくれない&エラー系 †里々は整備班カスタムの最新版を使おう。旧いものだと扱えない関数があったり、バグがあったりするぞ。 書いたコードが動かない †とりあえず大雑把に以下の5点を疑ってみよう。
コピペしたコードが動かない †ブラウザで表示して、そこからコピーしてきたコードには、書いた人の意図と違う余計な空白などが含まれることがある。 $変数 変数に入れる内容 や >ジャンプ先 ジャンプ条件 などの場合、間に入るのはスペースではなくタブだ。確認してみよう。 関数が動かない †それはssu.dllが提供する関数ではないだろうか? 正しく記述しているのに意図した動作をしない場合、引数区切り問題に引っかかっている可能性もある。 期待した動作をしない †「ポストと狛犬」に同梱されてる「れしば.exe」を起動してみよう。 「式が計算できません」と言われる †計算式に何か問題があるようだ。 >ハラヘリー【タブ】(満腹度)<20 この例では(満腹度)が空っぽだとエラーになりやすい。 400 Bad Requestと言われる †たぶん、SAORIの引数が間違ってる。SAORIの説明書を読みなおそう。 新しい機能がうまく動かない †問題を分解しよう。その機能を構成する要素を、一つ一つ動作確認していこう。シンプルな辞書で試してみよう。 つまっている場所がわかれば、人に聞く場合でも適切な質問ができる。 原因が特定できない †辞書ファイルをいったん別のフォルダにコピーして、必要最小限の辞書だけで動かしてみよう。 つつき反応が動かない †*OnMouseDoubleClick >(R3)(R4)つつかれ () 辞書から消してないか確認。 ただし、最近の里々ではこの記述と同じ動作がそのまま組み込まれている。 「>ジャンプ先【タブ】(条件式)」でジャンプしない †
謎の症例系 †メニュー/選択肢に「…\w3」とか出てくる †replace_after.txtに登録された置換の影響で、右クリックメニュー/選択肢上の「・」「‥」「…」「。」「、」などにウェイトタグが出る場合がある。 例) 辞書上:……おすすめ?(&R) → メニュー上:…\w3…\w3おすすめ?\w8(&R) 辞書上:φ…φ…おすすめφ? → メニュー上:……おすすめ? (注・実際にエスケープすべき文字は、そのときのreplace_after.txtの内容によって異なる。上の例はreplace_after.txtに「…」「?」が設定されている場合。) さおり呼び出しの結果を表示するなど「何を表示するか実行時までわからない」場合には、ssu.dllのreplaceコマンドで置き換える。 例) (replace(byte1)(出力したい文字列)(byte1)…(byte1)φ…) (注・$byte1はバイト値1。 *OnSatoriLoadなどに $byte1【タブ】(sprintf,%c,1) であらかじめ設定しておく。 変数「$出力したい文字列」に「、」「,」が含まれる場合に、 さおり呼び出しの区切り文字と誤認されるのを防ぐため) サーフェスが勝手に変化してしまう †里々には「自動でサーフェスを規定値に戻す」仕組みがあります。 (1) トーク直前(スクリプト冒頭) この二箇所のタイミングで発生し、予め設定されたデフォルトサーフェスに戻るスクリプトが挿入されます。 $デフォルトサーフェス0【タブ】0 $デフォルトサーフェス1【タブ】10 この状態では、全てのトークの先頭に \0\s[0]\1\s[10] が挿入されることになります。 この機能をOFFにするには、特殊変数の$会話時サーフェス戻しを使用します。 $会話時サーフェス戻し【タブ】無効 (1)(2)を個別に有効・無効の設定はできません。 *OnSurfaceRestore \0((デフォルトサーフェス0))\1((デフォルトサーフェス1))\e 起動時にサーフェスが表示されない †上記の$会話時サーフェス戻しに関連する問題と思われます。 勝手に改行されている †行末をφでエスケープしても改行されたり、\1側でトークが始まる前に改行されていたりする現象です。 トークを記述した文「*」の連続 †里々では、ベースウェアが表示するトークを記述しているかどうかで処理が変わってきます。 * (例1)(例2) *例1 $ほげ【タブ】4 $好感度=(好感度)+1 *例2 :トーク 見ての通り、(例1)は処理系だけの文、(例2)はトークを書いた文です。 よって解決法…というより予防法は
などが有効です。 他にも、@の中で関数やSAORIを使い、さらに@を呼び出した時にも発生します。 中身のない変数を使った場合 †「中身のない変数を使う」ことでもこの改行現象が発生します。 * $好感度合計=(好感度合計)+(好感度) >機嫌悪いトーク【タブ】(好感度)<10 >ふつうのトーク【タブ】(好感度)<50 >トーク(機嫌)【タブ】(変数「だるいフラグ」の存在) >ご機嫌なトーク
基本的には「>」の中だとか「$」の中だとかお構いなしです。 発生しても表示させない方法 †ここまでは発生を抑える対策ですが、以下は発生したものは仕方ないとして諦め、表示させない手段を紹介します。
意図しないタイミングでバルーンが消えてしまう †何かのタイミングで、意図しない(マウスクリックも、タイムアウトもしていない)のにバルーンが勝手に消えてしまう場合、何らかのイベントが通知されている可能性があります。 シェルやバルーンに関すること †シェルのインストールや切替時にもバルーンが消えたりする事例が報告されています。 * :\![change,balloon,○○]バルーンを○○に変更したよ。 と書いても、\![change,balloon,○○]を実行した時点で新たにイベントが発生するため、「バルーンを○○に変更したよ」と喋る前に上書きされてしまうのです。当然、トークがない場合はただバルーンが消えてしまう。 特殊変数「次のトーク」が機能しない †たまに $次のトーク【タブ】 が動作しないというのを見るのですがこの後に $手動セーブ【タブ】実行 を行い、かつ*OnSatoriBootや*OnSatoriLoadで $トーク予約のキャンセル【タブ】* を記入しているとトークの予約を消されてしまうことが分かった 新もどき板 里々質問用スレッド2 No.65より引用 対策はOnDestroyでトーク予約のキャンセルとか 関数使ってない場所で「引数の個数が〜」って言われるしれしばでも異常がみつからない †OnTranslateでトーク全文に対して関数で処理をしようとしていませんか? 参考:引数区切り問題 こんな事をしたいTIPS系 †初回起動のテストをしたい †
*aが押された >初回起動 みたいなものを作っておけばaキーを押すだけでトークを確認できるが、これだと初期状態のキャラクター表示が実際の動作と異なる場合があるので、最終的にはちゃんとテストすること。 ちなみにキー操作に反応させる為には *OnKeyPress >(R0)が押された という記述が別途必要となる。既存のゴーストを改造して作っているのなら(たぶん)最初から書いてあるはず。 カッコを無効化したい †(笑)とか(wとかしゃべらせたいのに、括弧が出てこない! #「(w」「(笑)」としゃべらせたい時 @例1 φ(w @例2 φ(笑φ) スコープ切り換え時の自動ウェイトをなんとかしたい †satori_confの $スコープ切り換え時【タブ】\n[half] を $スコープ切り換え時【タブ】\n[half]\w8 にするとか。 要らない時は随時 $スコープ切り換え時【タブ】\n[half] :ここの切り換えは! :即時に! $スコープ切り換え時【タブ】\n[half]\w8 と。 あと、 $自動挿入ウェイトの倍率【タブ】0 になってるのが意図的なものではないなら $自動挿入ウェイトの倍率【タブ】100 とか $自動挿入ウェイトの倍率【タブ】200 とかすると、喋った長さに応じて待ちます。こっちは句読点でも待ちますが。 ユーザー入力やファイル名など外部から取得した文字列の中の()が展開されてしまう。 †まず里々でユーザー入力やファイル名等で外部から(){全角丸括弧}入りの文字列が入ってきた場合の挙動が分かり難いので纏めます。 *OnFileDrop2 :\_q\_!(R0)\_!\_q *OnUserInput :(R1) 次にリファレンス(R?)を、変数に【タブ】や set 関数を使って代入して、その変数を使っても括弧展開されません。(セーブデータを見ると括弧の前にφが自動挿入されて無効化しているのが分かります) *OnUserInput $ユーザ名【タブ】(R1) :(ユーザ名) ただし、リファレンス(R?)を変数に=を使って代入すると括弧展開されてしまいます、文字列を=で代入するのはやめておきましょう。 *OnUserInput $ユーザ名=(R1) :(ユーザ名) 次に(){全角丸括弧}が入ってるリファレンス(R?)や変数を、関数を使って文字列操作した場合に関数返り値は括弧展開されてしまいます。 *OnFileDrop2 $,【タブ】(バイト値,2) $引数区切り追加【タブ】(,) :\_q\_!(replace(,)(R0)(,)\(,)/)\_!\_q ただし関数の配列返り値(S0)だと括弧展開されません。 *OnFileDrop2 $,【タブ】(バイト値,2) $引数区切り追加【タブ】(,) :\_q\_!(nop(,)(split(,)(R0)(,)\))(for,0,(Sの数)-1,(lp))\_!\_q @lp (if,(C0)!=0,/)(S(C0)) 以上が基本的な挙動です、ユーザー名など変数に保存して使うだけで、文字列処理系の関数を使って文字列操作したりするのでなければ特別な処理は必要ありません。変数に=を使って代入だけしない様に注意して下さい。 以上の挙動を理解した上で括弧展開しない様に何とか対策を立てることは可能です。 まずYAYA as SAORI で、ファイルリスト取得(FENUM関数)やテキストファイル読出(FREAD関数)などは関数返り値で値を渡すのでファイル名やファイル内に()があると括弧展開されてしまいます… yaya as saori 側の関数を配列返り値(S0)で返す様に改造して対応する事が出来ます。→改造例
「里々(文字列処理)の道は茨の道。さりとて、戻ることはかなわぬのです。」 なんかもうさっぱりです †掲示板で質問してみる? 質問の際はできるだけ詳しい情報を添えて。 気分が落ち込んで…… †散歩してきなさい。 |