ばぐとらぶごるスマートフォン用の表示で見るばぐとらぶごる開発者もすなるぶろぐといふものを、エンバグ野郎もしてみむとてするなり。SENDをすべて拒否するGHOSTキャラ崩れ防止のために、SSTPをすべて拒否する選択肢も必要だという提案がありましたので、対応策をここに書くことにします。その前に、SSTPとはなんたるかの説明から。Protocolの略で、元は外部から任意のスクリプトを送信し喋らせるための規格です。現行のSSTPは、下記に示す種類の通り、汎用のゴースト間通信規格となっているためです。最初に実装された、スクリプトを喋らせるためだけの規格。実はちょっとした選択肢分岐もつけられる。指定したイベントを通知し、ゴーストの反応を期待する。要は\![raiseother]。反応がなかった時の保険用スクリプトもつけられる。ゴースト間コミュニケート規格。他にもEXECUTEとかGIVEとかあったりしますが、ほとんど使われずまた今回の話とは関係しないため割愛します。NOTIFYの「保険用スクリプト」でしょう。確かに外からいつでも任意のスクリプトを実行できるというのは色々気持ち悪いものがあります。(セキュリティ面は一応考慮していますが、それはともかく)残りのCOMMUNICATEと、NOTIFYのイベント部分は、完全にゴースト側で制御できるので関係ありませんね。SENDのみ拒否さて、これを拒否するための実装は、3年前ぐらいからそれなりに可能になっていたわけですが、今日リリースの2.2.86でより対応が容易になりました。2.2.86以降にアップデートした上で、以下の変更を試してみてください。sstp.alwaystranslate,1という行を追加してください。これで処理漏れを防ぐことができます。OnTranslateイベントの処理ほとんどのSakuraScriptは、実行直前にOnTranslateというイベントで通知され、ゴースト側で処理する最後の機会を与えられます。上記の通りalwaystranslateを設定した状態では、すべてのスクリプトがこのイベントを通ります。SENDでスクリプトが打ち込まれた時だけ、OnTranslateで何かダミースクリプトに置き換えて喋れなくすれば良い」わけです。2.2.85までは、できないことはないのですが面倒でした。2.2.86からは簡単で、Reference1に"sstp-send"という文字列が含まれるかどうか調べれば良いだけです。NOTIFYの保険用スクリプトを拒否できます。SEND扱いされています)詳しい仕様はhttp://ukadoc.googlecode.com/svn/trunk/manual/list_shiori_event.html#OnTranslateをご覧ください。この程度の処理だけではもったいないぐらいに盛ってあります。以降、里々向けサンプル実装です。華和梨ユーザーと文・YAYAユーザー、あるいは他SHIORIの方向けサンプルは宿題とします。*OnTranslate>トランスレートSSTPSEND【タブ】(count、(R1)、sstp-send)>0(R0)*トランスレートSSTPSEND:何か電波が飛んできたね。:ワイらはSSTPには対応しとらんで。【タブ】はキーボードのタブ文字に置き換えてください。無言のダミーに置き換えても良いのかもしれませんが、それだとバグと区別がつかないので、何か使えない旨を示すスクリプトを実行するようにしましょう。SENDで喋らない」というバグ報告が溢れかえって、私がひっくりかえることになります。何か働きかけがあれば、それに対して必ず何か返答があるべきです。OnTranslateは本来、このようなことに使うものではなく、また何かを拒否する実装をすることは、その分可能性を失うということなので、実装者の立場からは完全に拒否するこの方法は強く非推奨であり、使うとしても熟慮した上で最小限の使用にとどめるようにしてください。拒否しないと色々致命的なことになるという場合は、躊躇なく使うべきですが。この実装では、NanikaSongPlayer等、明らかに有用なアプリケーションのSSTP通信までも完全無効化します。Senderを確認することで特定のアプリケーションのみパスする実装は可能です。FAQ悪意あるスクリプトでゴーストのキャラが蹂躙されるのが心配です。そんなヘンなことを他のキャラに強要するゴーストは、全ての人からNo!を突きつけられて自然淘汰されます。それでもどうしても心配だというのであれば、上記アイデアを原点として、完全な安全装置を組んでみてください。必要な部品は揃っているはずです。悪意がなくても、わずかなキャラ崩れでも納得できません。そりゃそうでしょうね。キャラを作者の枠内だけにはめ込んでしまうのもそれはそれでもったいないですよ。してSSTPという外部連携機能があるのですか。歴史的事情によるものです。SSTPは気の遠くなるくらい昔、おそらくこの記事を読む9割の方が、ゴーストに触れる前からの実装です。それは伺かというシステムの一つの特徴でもあります。そのほうが技術的に面白いでしょう?SSTPを受信したら、バルーンではなく通知領域バルーンに表示する提案もありましたけど?SSTPのセキュリティ機能により、\![set,trayballoon]や\![raise]系は無効ですので、OnTranslateの出力でこれらを使っても何も起こりません。ヒント:受信時にフラグを立ててOnSecondChangeで処理descript.txtにsstp.accept,0とか書く仕様提案もありましたけど?問答無用でSSTP全カットすると影響がデカすぎです。SENDだけを常に拒否する書き方を作っても、後から「○×だけは通したい」という要求が出た時に対応できないでしょう。はてなブログPro開発者もすなるぶろぐといふものを、エンバグ野郎もしてみむとてするなり。2.4.48月別アーカイブはてなブログをはじめよう!ponapaltさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。