外部からの入力に関するTIPS。
ユーザ名の入力、他ゴーストへ切り替えを行う時に相手の名前を呼ぶなど、
どんな文字が来るか分からない場合、対策しておかないと危険な場合があります。
ユーザ名を入力してもらって、以降その名前で呼ぶとします。
このときユーザ名に「\![vanishbymyself]」と入力されたりするかもしれません。
\![vanishbymyself]は、その場で自分自身をアンインストールするさくらスクリプトです。
もしこの入力をそのままユーザ名に設定してしまうと、
今後ゴーストがユーザ名を呼ぶたびに自分自身をアンインストールするという非常に困った事態になってしまいます。
他にも、外部サイトから情報を取得する「\![execute,http-get,URL]」なども危険です。
外部入力による予期せぬ動作を防ぐ必要があります。
外部入力からのさくらスクリプトを無効化する必要があります。
里々のサンプルゴーストである「Rポストと狛犬」には、既に便利な機能が入っています。
基本的に自分の辞書からでない文字列は、これを使えば安全です。
dic00_system.txtに記述されているので、活用しましょう。
* :(call(バイト値、1)KillDangerousTag(バイト値、1)\![vanishbymyself]を実行するぞ!)
このように記述すると、\![vanishbymyself]は実行されず、バルーンに以下のように出力されます。
\![vanishbymyself]を実行するぞ!
\_?で挟まれた範囲のさくらスクリプトは実行されず、そのまま表示されます。
* :もうゴーストやめてやるー! \_?\![vanishbymyself]\_?
出力結果は以下となります。
もうゴーストやめてやるー! \![vanishbymyself]
注意点として、\_?はSSPにしか実装されていません。
この方法を使う場合、配布ページやreadmeに、SSPでしか動作しないことを記述しておく必要があります。
上記のKillDangerousTag関数を使うのが一番簡単ですが、自分で対策を作ることも可能です。
半角\記号はさくらスクリプトで使われるため、ただ「\」と書いてもバルーンに表示されません。
半角\記号をバルーンに表示するには、「\\」と表示します。
また、\\と書いた場合にはさくらスクリプトとして解釈されません。
* :メガンテ! \\![vanishbymyself]!
このように書いた場合、バルーンには以下のように表示され、\![vanishbymyself]は実行されません。
メガンテ! \![vanishbymyself]!
全ての半角\記号を「\\」と置き換えてしまう処理を作ります。
@さくらスクリプト無効化 (replace(バイト値、1)(A0)(バイト値、1)\(バイト値、1)\\)
使い方は以下です。
* :(call、さくらスクリプト無効化、\![vanishbymyself]も\![execute,http-get,URL]もぜんぶ無効化だ!)
出力結果は以下となります。
\![vanishbymyself]も\![execute,http-get,URL]もぜんぶ無効化だ!
基本的に、辞書に書いている部分には使用する必要はありません。
外部から入力された文字列など、何が入っているか分からない部分に使用します。
以下に例を挙げます。
ユーザ入力は「Rポストと狛犬」で対策済みなので、ここではゴースト切り替え時の対策を記述します。
普通は以下のように記述しますが、もし\![vanishbymyself]なんて名前のゴーストが発表された場合に困ります。
*他のゴーストへ変更 >(R0)へ変更 :(R0)さんに交代します。
そこで、先ほどのKillDangerousTag関数を使用して書き換えます。
*他のゴーストへ変更 >(R0)へ変更 :(call(バイト値、1)KillDangerousTag(バイト値、1)(R0))さんに交代します。
または、\_?でさくらスクリプトを無効化しておきます。
前述のとおり、この記述はSSP専用です。
*他のゴーストへ変更 >(R0)へ変更 :\_?(R0)\_?さんに交代します。
なお、以下はきちんと動作し、さくらスクリプトは実行されません。
* >\![vanishbymyself] *\![vanishbymyself] 消えないでトークをするよ!