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

応用:最後の行動を記録しよう

この改造を行う前に、ユーザーデータの改造を済ませておいて下さい。

「遊ぼー。」や「一緒」で採用されている、
プレイヤーの最後の行動(ランキングの時に出るヤツですね)

他の人が、いったい何を選んでいるのか、
丸分かりで結構楽しいですよね、いひひ(笑)

では、さっそく改造に取りかかりましょう。


まずは、最後の行動を記録する場所を確保しましょう。
空いているダミーを1つ使います。
例として、ダミー01を使いますね。

全ての $dummy01 を $lastcom にする(6ヶ所or4ヶ所)
全ての $newdummy01 を $newlastcom にする(2ヶ所)





ユーザー情報をチェック(sub checkname)と、
新規ペット登場(sub newpet)の、
$lastcomの初期値を変更する。

#    $lastcom = 0;
    $lastcom = '初めて(未選択)';


次に、コマンドを選んだときに、行動が記録されるようにします。
アクション(sub action)に、下記のように追記してください。

# ------------------------- #
# Sub Action
# アクション
# ------------------------- #
sub action {
    $playmsg = "$playtime時間" if $playtime != 0;
    $playmsg = "$playminute分" if $playtime == 0;

    &checkname;
    &error("まだ$playmsg経過していません") if $enter == 1;

    &header;
    &title;
    &bodytop("ペットデータ($num代目)");
    &petdata;
    srand(time);
    $rnd = int(rand(100) + 1); # Amend Ver 2.2
    $fa = $FORM{'mode'};

    if    ($fa eq 'feed') { $lastcom = '餌をあげる'; }
    elsif ($fa eq 'pat')  { $lastcom = 'なでる'; }
    elsif ($fa eq 'play') { $lastcom = '遊ぶ'; }
    elsif ($fa eq 'hit')  { $lastcom = 'しかる'; }
    elsif ($fa eq 'out')  { $lastcom = '外に出す'; }
    else                  { $lastcom = '???'; } # 上記以外のコマンドの時(特殊イベントなど)

    if ($fa eq 'play') { $lastplay = time }
    if ($fa eq 'out')  { $out = 1; $outdate = time }
    
    if ($rnd <= $rnd_border) {
        &petnow($rnd_img,$rnd_msg);
        $love--;
        $lastcom = 'ランダム';
    }
    elsif ($FORM{'good'} =~ /$fa/) {
        &petnow($good_img{$fa},$good_msg{$fa});
        $love++;$good++;
        if ($fa eq "feed") { $lastfeed = time }
    }
    elsif ($FORM{'bad'} =~ /$fa/) {
        &petnow($bad_img{$fa},$bad_msg{$fa});
        $love--;$bad++;
    }
    else {
        &petnow($else_img{$fa},$else_msg{$fa});
    }

    &openoutpetdata;

    $goodbye = time - (60 * 60 * 24 * $goodbye);
    $newlove = $love;
    &openinuserdata('action');
    &openoutuserdata;
    $actionflag = 1; # 飼い主ランキングのリンクを表示
    &bodybottom;
    &footer;
}


$faに選んだコマンドが格納されているので、それを調べ、
選んだコマンドに対応した言葉を、$lastcomに入れます。

で、ランダムの所の追記ですが、
このように、特別なイベントがある場合は、そこで上書きしてもOKです。
一回きりのイベントを追加しているような方も、同じように上書きできるので、
他のプレイヤーが気になるような言葉を入れてみましょう(笑)


では次に、この最後の行動を、ランキングで表示させてみましょう。
新しいモノをランキングへ表示させる場合は、
その入れ物である変数を、ランキングリストに含めないといけませんので、
ユーザーデータの読みこみ(sub openinuserdata)に、下記のように追記してください。

        if ($_[0] eq 'ownerlist') {
            if ($love >= $loved) {
                @lovelist[$lovenum] = "$name<>$lastcom";
                $lovenum++;
                if ($bestlove < $love)
                    { $bestowner = "$name"; $bestlove = $love }
            } elsif ($love <= $disliked) {
                @hatelist[$hatenum] = "$name<>$lastcom";
                $hatenum++;
            } else {
                @otherlist[$othernum] = "$name<>$lastcom";
                $othernum++;
            }
        }

すでに改造を施してあって、"$name"だけでなく、
"$love<>$name"などになっている人もいると思いますが、
とにかくその最期に、
<>$lastcom
を追加してください。


で、他にも改造を施している方は、この他にも、
$lastcomを追加しないといけない場所があります。
「何人中第何位」の改造をしている人は、

($love,$name) = split(/<>/,$allcnt);

この行を、

($love,$name,$lastcom) = split(/<>/,$allcnt);

とするなど…。

よく分からないときは、ご連絡下さいませ(^^;


最後に、ランキング表示の部分です。
飼い主ランキング(sub ownerlist)に、下記のように追記してください。

# ------------------------- #
# Sub Owner List
# 飼い主ランキング
# ------------------------- #
sub ownerlist {
    &header;
    &title;
    $bestlove = $lovenum = $hatenum = $othernum = 0;
    &openinuserdata('ownerlist');

    &bodytop('飼い主ランキング');
    &tabletop;

    print "$font2$petnameが一番なついている人は</font><br>";
    if ($bestlove < $loved) { print "いません<br>\n" }
    else { print "$bestownerさんです<br>\n" }
    print "<br>\n";

    print "$font2$petnameがなついている人は</font><br>";
    if ($lovenum == 0) { print "いません<br>" }
#    else { foreach $owner (@lovelist)  { print "$ownerさん<br>\n" } }
    else {
        foreach $owner (@lovelist) {
            ($name,$lastcom) = split(/<>/,$owner);
            print "$nameさん($lastcom)<br>\n";
        }
    }
    print "<br>\n";

    print "$font2$petnameが嫌いな人は</font><br>";
    if ($hatenum == 0) { print "いません<br>";}
#    else { foreach $owner (@hatelist)  { print "$ownerさん<br>\n" } }
    else {
        foreach $owner (@hatelist) {
            ($name,$lastcom) = split(/<>/,$owner);
            print "$nameさん($lastcom)<br>\n";
        }
    }
    print "<br>\n";
    
    print "$font2それ以外の人</font><br>";
    if ($othernum == 0) { print "いません<br>" }
#    else { foreach $owner (@otherlist) { print "$ownerさん<br>\n" } }
    else {
        foreach $owner (@otherlist) {
            ($name,$lastcom) = split(/<>/,$owner);
            print "$nameさん($lastcom)<br>\n";
        }
    }

    &tablebottom;
    &bodybottom;
    &footer;
}

すでに他の改造で、このような形になっている場合は、
先ほどのように、

($love,$name) = split(/<>/,$allcnt);

を、

($love,$name,$lastcom) = split(/<>/,$allcnt);

などと追記を行い、
表示させたいところに、$lastcomを追記してください。