PETROOM大改造
【萌え萌えキャラクターズと遊ぼー。】

「最後に○○した人」を表示しよう

PETROOMは、一匹に対して、大勢の人が「一番」を争う、いわばバトルゲーム(爆)
人気が出てきて、遊びに来てくれる人が増えてくると、
エサをあげようと思ったら、食べた直後だったり、
お散歩に行きたかったのに、すでに誰かが連れだしていたりと、なかなか白熱してきます。
そんなとき、ふと気になるのが「一体誰がっ!?」ということ。
まぁ、これが原因でケンカになったりはしないと思うので、そんなことも表示してみましょう。

ということで、
「最後に散歩に連れ出した人」「最後に遊んだ人」「最後に餌をあげた人」
を表示できるようにしてみます。

アクション(sub action)の中に次のような行があります。

    if ($fa eq 'play') { $lastplay = time }
    if ($fa eq 'out')  { $out = 1; $outdate = time }

少し離れて、

        if ($fa eq "feed") { $lastfeed = time }

$faには、選んだコマンド(選択肢)が入っています。
'play'は遊ぶコマンドのこと、
'out'はお散歩コマンドのこと、
'feed'は餌をあげるコマンドのこと。

1行目は、
「もしコマンドが遊ぶだったら、遊んだ時間を記録する」
2行目は、
「もしコマンドがお散歩だったら、お散歩中にして、お散歩に出した時間を記録する」
3行目は、
「もしコマンドが餌をあげるだったら、餌をあげた時間を記録する」
といった意味でしょうか(^^;

要は、遊ぶ、お散歩、食事の特別な処理を、ここでやっているわけです。
ですので、下記のように追加して、
遊んだ人、お散歩に出した人、餌をあげた人の名前も記録するようにします。

    if ($fa eq 'play') { $lastplay = time; $playname = $name; }
    if ($fa eq 'out')  { $out = 1; $outdate = time; $outname = $name; }

少し離れて、

        if ($fa eq "feed") { $lastfeed = time; $feedname = $name; }

セミコロンに気を付けて下さいね。

これで$playname,$outname,$feednameに現在プレイしている人の名前、
つまりコマンドを選んだ人の名前が入ります。
次にこの3つを保存しなければいけません。
保存場所は、$out$outdateを同じ所です。
と言うことで、ペットデータの更新(sub openoutpetdata)を見て下さい。
この3行目に、下記のように追記して、ペットデータにお散歩に出した人の名前を記録します。

    $line = "$petname<>$godfather<>$birth<>$sex<>$dead<>$lastfeed<>$lastplay<>$lastvisit<>$good<>$bad<>$out<>$outdate<>$num<>$outname<>$playname<>$feedname";


ちょっと横に長いですが、我慢して下さい(^^;
これで保存はOKです。

では次に、読み出し・表示の方をやってみましょう。
まず、このデータを読み出すところは、ペットデータの読みこみ(sub openinpetdata)です。
この6行目に下記のように追記します。

    ($petname,$godfather,$birth,$sex,$dead,$lastfeed,$lastplay,$lastvisit,$good,$bad,$out,$outdate,$num,$outname,$playname,$feedname)
                                                     = split(/<>/,$line);

これで、先程保存した$outnameが、次に遊びに来た人の時に、再び読み込まれるわけです。
次にその名前を表示させてみましょう。
いつも画面の上の方にペットのデータが表示されていますよね? そこへ追加しましょう。
ペットデータ(sub petdata)を見て下さい。最後の方に、

    print "<tr>\n";
    print "<td colspan=2>最後に餌を食べた日:$font2$date</font>\n";
    &tablebottom;

という部分があります。
この「最後に餌を食べた日」の下に追加します。

    print "<tr>\n";
    print "<td colspan=2>最後に餌を食べた日:$font2$date</font></td>\n";
    print "</tr>\n";
    print "<tr>\n";
    print "<td colspan=2>最後に餌をあげたのは:$font2$feednameさん</font></td>\n";
    print "</tr>\n";
    print "<tr>\n";
    print "<td colspan=2>最後に散歩をしたのは:$font2$outnameさん</font></td>\n";
    print "</tr>\n";
    print "<tr>\n";
    print "<td colspan=2>最後に遊んだのは:$font2$playnameさん</font>\n";
    &tablebottom;

「さん」など敬称を付けないと呼び捨てになるので、気を付けましょう(^^;

最後に、ペットデータへ先ほどの3つの変数を追加するようにしたので、
新規でペットを作成するときにも、その3つを追加しておく必要があります。
新規ペット登場(sub newpet)の下記の部分に次のように追記します。

    $outdate   = 0;
    $num++;
    $outname   = '○○';
    $playname   = '○○';
    $feedname   = '○○';
    &openoutpetdata;
    $gdate = time - $dayhour[$playtime + 1];

○○は何でも良いです、ただし後ろに「さん」が付きますけどね(^^;






おまけっぷり。
誰と外出しているのか表示しよう

上の改造で「最後にお散歩した人」を追加してあれば、
それほど難しいことなく、誰とお散歩に行っているのか表示できます。
加えて、お散歩に連れ出した本人だったら、別の画面を表示するようにしてみました。

ではまず、外出時のメッセージから変更しましょう。
「○○さんと外出中です」という風に、○○の部分に最後に連れだした人の名前を入れたいので、
メッセージの設定を、ペットデータが読みこまれた後に持ってくる必要があります。

「キャラに、遊びに来た人の名前を呼ばせよう」の改造をしてある方は、
すでにそうなっていますので、問題ないですが、
やっていない方は、ペットの設定の「その他のメッセージ」にある、

$out_msg     = '外出中のようです';             # 外出中

を、ペットのコンディション(sub condition)の外出中の処理の中へ移動して、
↓こんな風にしてください。

    # 外出中の処理
    if ($out == 1 && (time - $outdate) < $dayhour[$comeback]) { 
        $out_msg = "$outnameさんと外出中のようです"; # 外出中
        &petnow($gone_img,$out_msg);
        $noaction = 1;
        return;
    } else {$out = 0;}

「'」シングルクォーテーションを「"」ダブルクォーテーションに変更するのを、
忘れないでください、シングルのままですと、$outnameが展開されませんので。

連れだした本人かどうかの改造をしないのであれば、これで終わりです、
続けて、連れだした本人の場合は違う画面を表示したいという方へ。

今追加した行の手前で、連れ出した本人かどうかチェックを入れて、分岐させるだけです。
こんな風になりますね。

    # 外出中の処理
    if ($out == 1 && (time - $outdate) < $dayhour[$comeback]) { 
        if ($name eq $outname) {
            $gone_img = '本人用の画像ファイル名';
            $out_msg = "一緒に外出中です";
        }
        else {
            $out_msg = "$outnameさんと外出中のようです"; # 外出中
        }
        &petnow($gone_img,$out_msg);
        $noaction = 1;
        return;
    } else {$out = 0;}

ふふふ、これで寂しかった外出中も、燃えるというものですね!