| このページは、SOLD OUT ファンサイトのso-Junkyで行われていたゲームの改造講座を転記したものです。 |
|
SOLD OUT 改造講座 | SOLD OUT ミジンコ |
商品アイテムを使用するときにメッセージが入力できます。
ミジンコ君たちにお願いが通じることがわかったあなたは、会話ができないものかためしてみようと思いました。「ミジンコ君、こんにちわ」。するとミジンコ君は答えました「うぜ〜よっ」。(汗々・・・ 商品アイテムの @@USE に「arg nocount」を指定すると、コマンドの回数が1回に限定されました。「arg」には、この他にも「message」や「target」を指定することができます(最新β版のSOLD OUTではさらに拡張されています)。今回は「arg message」に関して説明します。 @@ITEM このように記述すると、コマンドの実行時にテキストボックスが表示されて、プレイヤーに文字を入力してもらうことができます。 「argmessage コメントをどうぞ」は、テキストボックスのすぐ上に「コメントをどうぞ」とプレイヤーの入力を促すメッセージを表示することができます。これは「arg message」を使うときだけで他の場合には使いません。ですから、この2つのパラメータはセットで使うものだと思ってください。 書式は、「argmessage(区切り)文字列」です。 実際にテキストボックスを表示する部分は「arg message」です。「arg message40」の「40」は、入力する文字を半角で40字までに限定する、というものです。40でなくて80とか100とかでもOKです。用途に合わせて決めておくとよいでしょう。もちろん省略することもできます。 書式は、「arg(区切り)message40」です。 ※nocount と message を同時に指定したい場合は「arg nocount|message」と |(縦棒?)で繋げます。順番は気にしなくてよいです。 しかしですね、この段階では、プレイヤーがコメントを入力しても、それをどのように使うか決まっていません。このままでは、何かを入力してもらうだけで、それを表示することすらできません。
そこで登場するのが「独自関数」(T−T)なのです。そうなんです。独自関数を使うしか方法はないんです。(わかんない場合は、最後の赤字だけでOK) 「arg message」に入力された文字は、$USE->{arg}->{message} という変数に自動的に格納されています。これを使うわけです。例えば、このメッセージを表示するのであれば次のようにします。return の右に書けば良いのでしたよね。 @@USE この $USE->{arg}->{message} は考え方次第でいろいろな用途に使えます。たとえば「陰陽道」では、プレイヤーが運営しているホームページのアドレスなどを入力してもらい、それをデータに保存しておき、ランキングなどに表示しています。 今回は、テキストボックスに入力してもらったコメントはそのまま表示するとして、会話をするのが目的ですからミジンコにも返事を出してもらうようにしましょう。そして、ついでに、ミジンコと会話をすると人気が上がるようにもしてみます。 まず、ミジンコ君が答えるようにしてみます。(まだサンプルです) @@USE $ret という変数を(勝手に)用意して、そこに文字を入れます。ピリオドで文字列や変数をつなげています。'<BR>' は、HTMLタグの改行に相当するものですよね。 その次の行で $ret .= 'ミジンコ「うぜ〜よ」'; としてあるのは、ひとつ前の $ret に文字列をつなげる場合です。スクリプトが見やすいように複数行にわたって書きたい場合に使用します。 例えば、 $ret = 'あなた「' . $USE->{arg}->{message} . '」<BR>' . 'ミジンコ「うぜ~よ」'; とか、 $ret = 'あなた「'; でも同じ意味です。 この状態だと、 あなた「入力した文字」 と表示されます。
また、人気を上げる方法は次のようになります。これは、arg message に直接関係するものではありません。別物です。 @@USE $DT->{rank} は店舗の人気が格納されている変数です。この変数に 5 という数字を足す。という意味になります。 $DT->{rank} は 0~10000 で 人気1%=100、人気100%=10000です。つまり、ランキングなどの表示時は 1/100 となっています。この場合、5=0.05% の人気上昇となります。
そして、あなたの現在の人気によって、ミジンコ君の返事が変わるようにしてみます。 @@USE すごく長くなりましたが、まずは、緑色の文字を見てください。 1行目は最初のほうと同じですね。 どうやら、青い文字のところが、ミジンコ君が返事をするコトバのようです。( ミジンコ「この部分」 ) 青い部分は、$DT->{rank} というお店の人気によって、表示するメッセージを変更しています。 1つずつ説明しますね。(ちょっとまて、perl の説明はしないんでかなったっけ・・・・こんな説明でわかるかなぁ) まず、if( $DT->{rank} > 9000 ){ $ret .='すごい人気だね'; } は、「もし、人気が9000より大きければ、$ret に 'すごい人気だね' という文字をつなげなさい」というものです。 では、9000以下の場合はどうなるのでしょうか。そういう場合は、次の行の判断を行うことになります。 次の行とは elsif( $DT->{rank} > 8000 ){ $ret .= '今日も絶好調!'; } のことです。 「if」ではなくて「elsif」となっています。 「if」 に一致しない場合は、次の「elsif」の条件をチェックしないさい。それでもだめなら、次の「elsif」をチェックしなさい。という決まった構文なのです。条件に一致しなければ、次の条件をチェックする。条件に一致する場合は、そこで止まって、次の行の条件チェックまで行わない。 ですから、「9000より大きいか?」というチェックに一致しなければ、「じゃぁ、8000より大きい?」という判断をすることになり、これに一致すれば「$ret に '今日も絶好調!' という文字をつなげなさい」となります。「8000より大きい?」に一致しなければ、次は「7000で判断」するわけです。 その判断が、7000 , 6000 , ・・・・, 2000 と続きます。 最後に、「if」でもなく、「elsif」でもなく、「else」となっています。これは、今までの条件のチェックで、どれにも該当しない場合です。もちろん、「else」になる前に、条件が整ってしまえば、「else」の処理までは到達しません。条件が整った時点で、if 〜 elsif 〜 else のひとくくりの処理は終わります。ですから、たくさんある { } の中の、どれか1つしか実行されないわけです。
ってことで、最終的には次のようになります(赤文字を追加してください)。上の説明がわかんなくても良いよ。わかんないのは私の説明が悪いんだから。おいおい勉強してね。 @@ITEM 一番最初に $ret が出てくるときに、「my」という文字を頭にくっつけています。これは勝手に作った変数のおまじないだと思ってください。 エラーがなくなるまで、商品の生成を繰り返し、うまくいったら、テストしてみてください。 空白を入れてよい場所と、入れちゃいけない場所があります。最悪、コピペでなんとかなると思います。 つぎは、「arg target」の使い方です。 |
|
||||||
|
|
| ホーム | ページトップ | |