#author("2023-01-18T19:09:45+09:00;2022-12-14T10:40:13+09:00","default:post","post") よくあるトラブルシューティングみたいなものまとめ。~ &color(red){まずは里々は''整備班カスタムの最新版''を使おう。};~ 新たに追加された関数や変数も多いので、古いものだと扱えなかったり、バグがあったりする。~ このページで書かれている問題と対処法も、里々のバージョンアップによって解決することがある。 他に、少し高度になるが[[れしば>れしばの使い方]]を使うと挙動を追いやすくなる。~ 使っているベースウェアがSSPならこちらも最新のバージョンにしておこう。 -''里々本体の更新方法''~ [[里々(整備班カスタム)>http://ms.shillest.net/satoriya.xhtml]]→[[ダウンロード&更新履歴>https://github.com/ponapalt/satoriya-shiori/releases]]~ ダウンロードしたsatori.zipを展開し、&color(red){satori.dll};を(satorite.exeを使っているならこれも一緒に)上書きすれば完了。~ #br ---- #contents ---- ~ *正しく動いてくれない&エラー系 [#i72a31f4] **書いたコードが動かない [#d14bbefd] とりあえず大雑把に以下の5点を疑ってみよう。 +''&color(#cc0000){タブ・スペース・全角・半角の間違い};''~ バグ筆頭。よくあるミスながら、慣れていても付きまとってくるイヤ~なやつ。~ 後述するようにコピペした時にも注意が必要。~ 特にタブとスペース(全角・半角)は可視化できるエディタを使うことでかなり予防できるし、発見もしやすくなる。 #br +''&color(#cc0000){条件式のミス};''~ 原因が分かっても何がおかしいか分かりにくいイヤ~なやつ。~ ()で呼び出す変数が存在しなかったり、記号が含まれたりした時の予想外の動作がよく起こる。 #br +''&color(#cc0000){トーク名や変数名の重複};''~ 被っていると大惨事。~ 里々ではトークも単語群も変数も関数も言い方が違うだけで実体は同じもの。トークはともかく、変数と関数は重複ダメ絶対。 #br +''&color(#cc0000){変数への代入方法};''~ $に代入する時に''【タブ】''と''=''を間違えていないか確認してみよう。~ 計算させたい時に【タブ】を使ってたり、させたくない時に=を使ってたりすると、変数の中身が変なことになる。 #br +''&color(#cc0000){括弧の閉じ忘れ、全角半角の混在};''~ 括弧の対応がおかしくないか調べてみよう。閉じる括弧が半角になってたりとか。~ 括弧の全角半角が一致して正しく閉じていないと、''その行より先にある全てが動作しなくなる''。~ ジャンプ先があるのにジャンプしてくれないとか、正しい記述なのに他が動かない時、突然まったく関係ない所が動かなくなった時…などなど、あらゆる不具合にも波及する可能性のあるヤバイやつだ。~ これを見つける時は、テキストエディタで半角の括弧を一文字ずつ検索してみるといいかも。~ 意図的に括弧を文字として使いたい場合は、[[φ>特殊記号一覧]]を使うこと。~ **コピペしたコードが動かない [#q7570133] ブラウザで表示して、そこからコピーしてきたコードには、書いた人の意図と違う余計な空白などが含まれることがある。~ 例えば行の前後に半角空白があったり、タブが空白になっていたり。~ $変数 変数に入れる内容 や >ジャンプ先 ジャンプ条件 などの場合、間に入るのはスペースではなくタブだ。確認してみよう。~ また、【タブ】等と表記されてる場合もある。これもTabキーで置き換えよう。~ **関数が動かない [#r5200cb4] 記述してもウンともスンとも言わない場合は以下を疑おう。 :関数の使い方が間違っている| ''そんなんわかっとるわい!''と言いたいとは思うが、何はともあれここから疑わないと始まらない。~ 関数名の誤字脱字なんてのも本当によくあることなのだ。~ 関数に与える「引数」も念入りにチェック。順番が間違っていたり、足りなかったりする事はよくある。~ 関数名の間違いや、引数が間違っていてもエラーを返さない事はある。要チェックポイントの一つ。~ [[演算に使える文字が混入していないか>演算子一覧#m90dbfea]]も確認しておこう。 :こことは別の場所で記述に問題がある| 記述が正しくても[[引数区切り問題>関数#b92d8132]]に引っかかっている可能性がある。~ また、辞書のどこかで「括弧の閉じ忘れ・閉じ間違い」があり、特定以降の行が丸ごと機能していない可能性も考えよう。 :関数がサポートされていない| これは昔の里々で起こった問題で、ssu.dllが提供する関数はsatori_conf.txtで正しく定義しないと使えない。~ 現在の里々ではssuは不要なので、逆にssu.dllと、satori_conf.txt内のssu関連の定義は消した方がいいかもしれない? 参考:[[関数]],[[関数一覧]] **期待した動作をしない [#p49b9c2c] 「ポストと狛犬」に同梱されてる「れしば.exe」を起動してみよう。 ~ その状態でゴーストを起動すると、中で何が起こってるかがわかる。 ~ また、掲示板等で助けを求める場合にも、れしばで表示される内容は役に立つことが多い。 ~ **「式が計算できません」と言われる [#h57cf275] 計算式に何か問題があるようだ。 ~ 中身がない、何も定義されていない変数に計算をしようとしていないかチェック。~ 前述の「れしば.exe」を立ち上げて、どこでそれが発生しているのか確認してみよう。 ~ 他にも、計算式の中に[[演算に使える文字が混入していないか>演算子一覧#m90dbfea]]をチェックしておくと吉。~ >ハラヘリー【タブ】(満腹度)<20 この例では(満腹度)が空っぽだとエラーになりやすい。~ 四則演算や比較演算問わず、[[satori_conf.txt>ファイル構成#j3e3ee70]]で初期値を設定しておこう。 **400 Bad Requestと言われる [#h9a06d28] たぶん、SAORIの引数が間違ってる。SAORIの説明書を読みなおそう。~ **新しい機能がうまく動かない [#bd6205bd] 問題を分解しよう。その機能を構成する要素を、一つ一つ動作確認していこう。シンプルな辞書で試してみよう。 つまっている場所がわかれば、人に聞く場合でも適切な質問ができる。 **原因が特定できない [#d2ee7fa3] 辞書ファイルをいったん別のフォルダにコピーして、必要最小限の辞書だけで動かしてみよう。~ 正常に動く状態から、少しずつ変更していって、原因を突き止めよう。~ **つつき反応が動かない [#z1737fe9] *OnMouseDoubleClick >(R3)(R4)つつかれ () 辞書から消してないか確認。~ 消えてたら、ポストの辞書から持ってこよう。 ただし、&color(#ff0000){最近の里々ではこの記述と同じ動作がそのまま組み込まれている};。~ つまり、反応がないということは、このイベントに別の記述がされていたり、ジャンプ先でエラーを起こしている可能性が高い。 **「>ジャンプ先【タブ】(条件式)」でジャンプしない [#t2b51c1f] -ジャンプ先が存在するか確認する。 -条件式を展開してみて想定した挙動を示すか確認する。 -余計な括弧がないか確認する。 --計算順序を変更しない括弧は変数等の置き換えと解釈されてしまう。 -【タブ】が全角・半角スペース等になっていないか確認する。 -[[replace.txtやreplace_after.txt>ファイル構成]]に【タブ】をタブ文字にする定義があるか確認する。 -れしばを見てみる。 -他の人にも確認してもらう。 *謎の症例系 [#udb7d567] **メニュー/選択肢に「…\w3」とか出てくる [#jdd2d885] 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) であらかじめ設定しておく。 変数「$出力したい文字列」に「、」「,」が含まれる場合に、 さおり呼び出しの区切り文字と誤認されるのを防ぐため) **サーフェスが勝手に変化してしまう [#w92fb37d] 里々には「自動でサーフェスを規定値に戻す」仕組みがあります。~ (1) トーク直前(スクリプト冒頭)~ (2) トーク後に一定時間経過した時~ この二箇所のタイミングで発生し、予め設定された[[デフォルトサーフェス>特殊変数#i67fbef9]]に戻るスクリプトが挿入されます。~ デフォルトサーフェスは初期状態では下記のように設定されています。 $デフォルトサーフェス0【タブ】0 $デフォルトサーフェス1【タブ】10 この状態では、全てのトークの先頭に \0\s[0]\1\s[10] が挿入されることになります。 ~ ただし、スクリプトの最初に \s[ID] などサーフェス変更スクリプトが使われていた場合(トークの最初に(5)とかがあった場合)はそちらが優先され、デフォルトサーフェスへの変更は行われません。~ この機能をOFFにするには、特殊変数の[[$会話時サーフェス戻し>特殊変数#j901292e]]を使用します。~ このコマンドで無効を指定した時点からサーフェスの自動変更が停止します。 $会話時サーフェス戻し【タブ】無効 (1)(2)を個別に有効・無効の設定はできません。~ つまり、無効にすると(2)トーク後に一定時間経過した時にもサーフェスが戻らないため、次のトークが来るまでずっと前回最後のサーフェスのままになります。これをなんとかしたい場合は「会話時サーフェス戻し」は弄らず、「今回は会話時サーフェス戻し」を使いましょう。 $今回は会話時サーフェス戻し【タブ】無効 これを特定のスクリプトの時だけ使う事で、個別にサーフェススクリプトの自動挿入を制御できます。 **起動時にサーフェスが表示されない [#nd1c5f67] 上記の[[$会話時サーフェス戻し>特殊変数#j901292e]]に関連する問題と思われます。~ これは「トークの最初にサーフェス指定していない時、デフォルトサーフェスに戻すスクリプトを挿入する」機能ですが、里々が内部で”最初にサーフェス指定していない判定”に失敗した場合は自動挿入が行われないため、サーフェスが何も指定されない状態になっていると思われます。~ とりあえずサーフェス指定をいれてみましょう。 **意図しないタイミングでバルーンが消えてしまう [#o7702c3c] 何かのタイミングで、意図しない(マウスクリックも、タイムアウトもしていない)のにバルーンが勝手に消えてしまう場合、何らかのイベントが通知されている可能性があります。~ 例えば、mciaudior.dllを使っていると、曲が終了した時にOnMAAPlayFinishが通知され、バルーンが消える…といった具合です。~ これを防ぐ方法は、通知されているイベントを特定し、そのイベントに[[$スクリプトの一番頭【タブ】\C>特殊変数#o334a39e]]又は[[$今回は喋らない【タブ】有効>特殊変数#n82294fb]]を記述するのが有効です。~ ***シェルやバルーンに関すること [#d8a6ed12] シェルのインストールや切替時にもバルーンが消えたりする事例が報告されています。~ [[SHIORI イベントリスト>http://ssp.shillest.net/ukadoc/manual/list_shiori_event.html]]のOnShellChanged、OnShellChangingなどに注目。 また、これらのシェルやバルーン関連のイベントは''トークを書いてない場合でも上書きで発生する''という特性があります。例えば、 * :\![change,balloon,○○]バルーンを○○に変更したよ。 と書いても、\![change,balloon,○○]を実行した時点で新たにイベントが発生するため、「バルーンを○○に変更したよ」と喋る前に上書きされてしまうのです。当然、トークがない場合はただバルーンが消えてしまう。~ シェルをインストール→インストールしたシェルに変更、でトークをしてくれないケースも基本的にはこれと同じ。ここでは文の中で連続で喋らせる事は諦め、OnBalloonChangedなど発生したイベントの中で続きのトークを書くように(バルーンを消したくない場合は\Cなどを活用)しましょう。 **特殊変数「次のトーク」が機能しない [#r7f126d2] たまに $次のトーク【タブ】 が動作しないというのを見るのですがこの後に $手動セーブ【タブ】実行 を行い、かつ*OnSatoriBootや*OnSatoriLoadで $トーク予約のキャンセル【タブ】* を記入しているとトークの予約を消されてしまうことが分かった 新もどき板 里々質問用スレッド2 No.65より引用 対策はOnDestroyでトーク予約のキャンセルとか **関数使ってない場所で「引数の個数が~」って言われるしれしばでも異常がみつからない [#dd5adca0] OnTranslateでトーク全文に対して関数で処理をしようとしていませんか?~ 関数の区切り字と同じ文字がトーク中に出現すると、このエラーがでます。~ またOnTranslateはれしばに拾われません。~ 尚、トーク中に選択肢が含まれる場合、トーク中にバイト値1が存在する可能性が高いので注意してください。 参考:[[引数区切り問題>関数#b92d8132]] **選択肢に関係した文字がうまく使えない [#kc1359bc] 選択肢で使うreference情報は[[里々が内部で使用するために加工が施されています>里々の内部処理]]。~ このため里々の選択肢記法「_」や、さくらスクリプトの\q[...]タグがトーク中に存在していると、トーク中に必ずバイト値1が含まれることになり、従って関数の区切り字に「、」や「,」だけでなくバイト値1も使用できなくなります。 そんな時は選択肢はさくらスクリプトの \__q[選択ID]選択ラベル\__q を使ってみましょう。~ 代わりに選択肢関係の情報取得変数も使えなくなる(更新されなくなる)事にも注意して下さい。 *こんな事をしたいTIPS系 [#s61e9b86] **初回起動のテストをしたい [#n36e8a23] -ghostフォルダ内のmasterフォルダ内にあるprofileフォルダを削除すれば初回起動になる。 -satori_savedata.txt、satori_savebackup.txtも削除しておくべき。 -なお、単に初回起動のトーク内容の具合を確認するだけならば、 *aが押された >初回起動 みたいなものを作っておけばaキーを押すだけでトークを確認できるが、これだと初期状態のキャラクター表示が実際の動作と異なる場合があるので、最終的にはちゃんとテストすること。 ちなみにキー操作に反応させる為には *OnKeyPress >(R0)が押された という記述が別途必要となる。既存のゴーストを改造して作っているのなら(たぶん)最初から書いてあるはず。 **カッコを無効化したい [#we052759] (笑)とか(wとかしゃべらせたいのに、括弧が出てこない!~ そういうときは[[φ(ふぁい)>特殊記号一覧#d9244c7e]]を使います。~ φ(と記述してカッコを始めることで、置き換え等の特殊機能を抑制し、単なるカッコとして出力することができます。~ また、カッコ内で閉じカッコを表示したい場合は φ) で可能。~ もちろん、置き換え対象が無い場合はそのままカッコつきで出力されます。~ #「(w」「(笑)」としゃべらせたい時 @例1 φ(w @例2 φ(笑φ) **スコープ切り換え時の自動ウェイトをなんとかしたい [#f31bfb21] satori_confの $スコープ切り換え時【タブ】\n[half] を $スコープ切り換え時【タブ】\n[half]\w8 にするとか。 要らない時は随時 $スコープ切り換え時【タブ】\n[half] :ここの切り換えは! :即時に! $スコープ切り換え時【タブ】\n[half]\w8 と。~ (さくらスクリプトでトークを書いている人は「$さくらスクリプトによるスコープ切り換え時」) ~ あと、 $自動挿入ウェイトの倍率【タブ】0 になってるのが意図的なものではないなら $自動挿入ウェイトの倍率【タブ】100 とか $自動挿入ウェイトの倍率【タブ】200 とかすると、喋った長さに応じて待ちます。こっちは句読点でも待ちますが。~ 指定するのはパーセント単位の倍率。~ いずれも、satori_savedata.txtを一回消さないと反映されないかも。 **ユーザー入力やファイル名など外部から取得した文字列の中の()が展開されてしまう。 [#i30d21bd] まず里々でユーザー入力やファイル名等で外部から(){全角丸括弧}入りの文字列が入ってきた場合の挙動が分かり難いので纏めます。~ ~ まず、OnFileDrop や OnUserInput イベントで取得したリファレンス(R?)の中に(){全角丸括弧}が入っていても、リファレンス(R?)を直接表示等を行う分には括弧展開されません。 *OnFileDrop2 :\_q\_!(R0)\_!\_q *OnUserInput :(R1) 次にリファレンス(R?)を、変数に【タブ】や set 関数を使って代入して、その変数を使っても括弧展開されません。(セーブデータを見ると括弧の前に[[φ>特殊記号一覧#d9244c7e]]が自動挿入されて無効化しているのが分かります) *OnUserInput $ユーザ名【タブ】(R1) :(ユーザ名) ただし、リファレンス(R?)を&color(#ff0000){変数に=を使って代入する};と括弧展開されてしまいます、文字列を=で代入するのはやめておきましょう。 *OnUserInput $ユーザ名=(R1) :(ユーザ名) 次に(){全角丸括弧}が入ってるリファレンス(R?)や変数を、関数を使って文字列操作した場合に&color(#ff0000){関数返り値};は括弧展開されてしまいます。 *OnFileDrop2 $,【タブ】(バイト値,2) $引数区切り追加【タブ】(,) :\_q\_!(replace(,)(R0)(,)\(,)/)\_!\_q ただし関数の&color(#0000ff){配列返り値(S0)};だと括弧展開されません。 *OnFileDrop2 $,【タブ】(バイト値,2) $引数区切り追加【タブ】(,) :\_q\_!(nop(,)(split(,)(R0)(,)\))(for,0,(Sの数)-1,(lp))\_!\_q @lp (if,(C0)!=0,/)(S(C0)) 以上が基本的な挙動です、ユーザー名など変数に保存して使うだけで、文字列処理系の関数を使って文字列操作したりするのでなければ特別な処理は必要ありません。変数に=を使って代入だけしない様に注意して下さい。~ 以上の挙動を理解した上で括弧展開しない様に何とか対策を立てることは可能です。~ まず[[YAYA as SAORI>SAORI/YAYA]] で、ファイルリスト取得(FENUM関数)やテキストファイル読出(FREAD関数)などは&color(#ff0000){関数返り値};で値を渡すのでファイル名やファイル内に()があると括弧展開されてしまいます… yaya as saori 側の関数を&color(#0000ff){配列返り値(S0)で返す様に改造};して対応する事が出来ます。→[[改造例>SAORI/YAYA#y05c89f9]]~ ~ 最後に、外部から取得した()入りの文字列を関数を使って操作したい場合はどうするか…~ +関数返り値に(){全角丸括弧}があると括弧展開されてしまうので配列返り値で返す様に関数を改造する、ssuの文字列操作系関数は改造できないので yaya as saori で返り値を配列返り値(S0)で返すようにssuと同等の関数を改造&自作する。%%(ムリダナ…)%% yaya as saori で ssu と同等の動作ををする aym モジュールを作った人がいる→[[RabbitBike>http://rabbitbike.oh.land.to/nicky/log200803.html]] みち氏 +(){全角丸括弧}を別の文字(例えば半角の丸括弧)に変換して括弧展開されない様にする。(ここまでならssuのreplace関数で可能)~ ただしファイル処理等正確な文字列が必要な場合には元に戻さないといけませんが、戻すときにreplace関数を使うと関数返り値は括弧展開されてしまいます…→[[YAYA as SAORIのユーザー関数で何とかする >SAORI/YAYA#n744a43a]] +里々を捨てて他の栞に乗り換える→「一生呪われろー!!貴様には一生里々が使えなく無くなる呪いをかけてやるぅーっ!!」 「'''里々(文字列処理)の道は茨の道。さりとて、戻ることはかなわぬのです。'''」 *なんかもうさっぱりです [#ld047da8] 外部サイト[[「伺的なフォーラム」の「里々での開発相談」>http://ghost.sakura.tv/fluxbb/viewtopic.php?id=4]]に質問をするのも手です。~ (リンク先上部に記述されている共有アカウントでログインしないと書き込めない点に注意) Twitterで #伺か #ukagaka などのタグを添えてツイートすると教えてもらえる場合もあります。 掲示板で質問してみる? 質問の際はできるだけ詳しい情報を添えて。 ~ [[質問はこちらまで⇒うにゅう@新もどき板>http://nar.mods.jp/unyu/]](※リンク切れ)~ [[こっちもあるよ⇒ゴースト回覧板/ゴーストをつくろうとしてる人たちが話すスレ>http://jbbs.shitaraba.net/bbs/read.cgi/computer/44300/1498998812/]] *気分が落ち込んで…… [#v73a3829] 散歩してきなさい。