このページは、SOLD OUT ファンサイトのso-Junkyで行われていたゲームの改造講座を転記したものです。

SOLD OUT 改造講座 | SOLD OUT ミジンコ

五芒星

SOLD OUT ミジンコ

018 ミジンコと会話♪

商品アイテムを使用するときにメッセージが入力できます。

ミジンコ君たちにお願いが通じることがわかったあなたは、会話ができないものかためしてみようと思いました。「ミジンコ君、こんにちわ」。するとミジンコ君は答えました「うぜ〜よっ」。(汗々・・・

商品アイテムの @@USE に「arg nocount」を指定すると、コマンドの回数が1回に限定されました。「arg」には、この他にも「message」や「target」を指定することができます(最新β版のSOLD OUTではさらに拡張されています)。今回は「arg message」に関して説明します。

@@ITEM
        @@USE
                argmessage コメントをどうぞ
                arg message40

このように記述すると、コマンドの実行時にテキストボックスが表示されて、プレイヤーに文字を入力してもらうことができます。

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
                argmessge コメントをどうぞ
                arg message
                func _local_
                        return $USE->{arg}->{message};
                _local_

この $USE->{arg}->{message} は考え方次第でいろいろな用途に使えます。たとえば「陰陽道」では、プレイヤーが運営しているホームページのアドレスなどを入力してもらい、それをデータに保存しておき、ランキングなどに表示しています。

今回は、テキストボックスに入力してもらったコメントはそのまま表示するとして、会話をするのが目的ですからミジンコにも返事を出してもらうようにしましょう。そして、ついでに、ミジンコと会話をすると人気が上がるようにもしてみます。

まず、ミジンコ君が答えるようにしてみます。(まだサンプルです)

        @@USE
                argmessge コメントをどうぞ
                arg message
                func _local_
                        $ret  = 'あなた「' . $USE->{arg}->{message} . '」<BR>';
                        $ret .= 'ミジンコ「うぜ~よ」'; 
                        return $ret;
                _local_

$ret という変数を(勝手に)用意して、そこに文字を入れます。ピリオドで文字列や変数をつなげています。'<BR>' は、HTMLタグの改行に相当するものですよね。

その次の行で $ret .= 'ミジンコ「うぜ〜よ」'; としてあるのは、ひとつ前の $ret に文字列をつなげる場合です。スクリプトが見やすいように複数行にわたって書きたい場合に使用します。

例えば、

$ret = 'あなた「' . $USE->{arg}->{message} . '」<BR>' . 'ミジンコ「うぜ~よ」';

とか、

$ret  = 'あなた「';
$ret .= $USE->{arg}->{message};
$ret .= '」<BR>';
$ret .= 'ミジンコ「うぜ〜よ」';

でも同じ意味です。

この状態だと、

あなた「入力した文字」
ミジンコ「うぜ~よ」

と表示されます。

 

また、人気を上げる方法は次のようになります。これは、arg message に直接関係するものではありません。別物です。

        @@USE
                func _local_
                        $ret  = 'あなた「' . $USE->{arg}->{message} . '」<BR>';
                        $ret .= 'ミジンコ「うぜ~よ」'; 
                        $DT->{rank}+=5;
                        return $ret;
                _local_

$DT->{rank} は店舗の人気が格納されている変数です。この変数に 5 という数字を足す。という意味になります。

$DT->{rank} は 0~10000 で 人気1%=100、人気100%=10000です。つまり、ランキングなどの表示時は 1/100 となっています。この場合、5=0.05% の人気上昇となります。

 

そして、あなたの現在の人気によって、ミジンコ君の返事が変わるようにしてみます。

        @@USE
                func _local_
                        $ret  = 'あなた「'.$USE->{arg}->{message}.'」<BR>';
                        $ret .= 'ミジンコ「';
                        if(    $DT->{rank} > 9000 ){ $ret .= 'すごい人気だね!'; }
                        elsif( $DT->{rank} > 8000 ){ $ret .= '今日も絶好調!'; }
                        elsif( $DT->{rank} > 7000 ){ $ret .= 'いい感じ♪'; }
                        elsif( $DT->{rank} > 6000 ){ $ret .= '順調、順調!'; }
                        elsif( $DT->{rank} > 5000 ){ $ret .= 'こんにちわ〜'; }
                        elsif( $DT->{rank} > 4000 ){ $ret .= '元気かい?'; }
                        elsif( $DT->{rank} > 3000 ){ $ret .= 'おいおい、大丈夫かよ'; }
                        elsif( $DT->{rank} > 2000 ){ $ret .= 'はんかくさいんでないかい?'; }
                        else{ $ret .= 'おいらにかまってないでがんばってくれよ'; }
                        $ret .= '」';
                        $DT->{rank}+=5;
                        return $ret;
                _local_

すごく長くなりましたが、まずは、緑色の文字を見てください。

1行目は最初のほうと同じですね。
2行目は、$ret に 'ミジンコ「' という文字をつなげています。
そして、青い文字がだらだら〜っとあって、
12行目(?)では、$ret に '' という文字をつなげています。

どうやら、青い文字のところが、ミジンコ君が返事をするコトバのようです。( ミジンコ「この部分」 

青い部分は、$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
        no  1
        name ミジンコ
        @@USE
                name 酸素を集めてきなさい
        @@USE
                time 10m
                scale 回
                action 会話
                name 話しかける
                info 野生のミジンコに話しかけてみよう
                arg  message80|nocount
                argmessage あいさつ文を入力してください
                func _local_
                        my $ret = 'あなた「'.$USE->{arg}->{message}.'」<BR>';
                        $ret .= 'ミジンコ「';
                        if(    $DT->{rank} > 9000 ){ $ret .= 'すごい人気だね!'; }
                        elsif( $DT->{rank} > 8000 ){ $ret .= '今日も絶好調!'; }
                        elsif( $DT->{rank} > 7000 ){ $ret .= 'いい感じ♪'; }
                        elsif( $DT->{rank} > 6000 ){ $ret .= '順調、順調!'; }
                        elsif( $DT->{rank} > 5000 ){ $ret .= 'こんにちわ〜'; }
                        elsif( $DT->{rank} > 4000 ){ $ret .= '元気かい?'; }
                        elsif( $DT->{rank} > 3000 ){ $ret .= 'おいおい、大丈夫かよ'; }
                        elsif( $DT->{rank} > 2000 ){ $ret .= 'はんかくさいんでないかい?'; }
                        else{ $ret .= 'おいらにかまってないでがんばってくれよ'; }
                        $ret .= '」';
                        $DT->{rank}+=5;
                        if( $DT->{rank}>10000 ){ $DT->{rank} = 10000; }
                        return $ret;
                _local_

一番最初に $ret が出てくるときに、「my」という文字を頭にくっつけています。これは勝手に作った変数のおまじないだと思ってください。

エラーがなくなるまで、商品の生成を繰り返し、うまくいったら、テストしてみてください。

空白を入れてよい場所と、入れちゃいけない場所があります。最悪、コピペでなんとかなると思います。

つぎは、「arg target」の使い方です。

コンテンツ

ミジンコトップページ

001 アイテムを1個追加

002 ミジンコの説明

003 2つ目のアイテム

004 街人に売る設定

005 タモでミジンコをすくう

X01 おまけ1

006 市場に入荷させない

007 ミジンコが道具?

008 アイコン画像

009 維持費など

010 使うと無くなる

X02 おまけ2

011 よく使う物ほど上に

012 合成材料

013 コマンドに必要商品

014 バージョン変更方法

015 職業の変更

X03 おまけ3

016 1回だけのコマンド

017 お金を使うコマンド

018 ミジンコと会話♪

019 お店の選択

020 陳列棚を操作する

X04 おまけ4


SOLD OUT 陰陽道


おすすめ

イラストアイコン素材のCUTE

SOLD OUT Shop of Monsters(SOSM)

簡易データベースCGI

ホーム | ページトップ Copyright (C) 2006 HeRO. ALL RIGHT RESERVED.
ホームページランキングのザ・ランクテンに参加しています