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

ランキング表示を個人別にしてみよう

やりたいことは、タイトルの通り、まんまです(笑)
参加人数が増えて、膨大になったランキング表示の中から自分の名前を探すより、
自分の情報だけ、ちょこっと見ることが出来れば・・・、そんな改造です。

※今回は、一気に作ってしまったので、
スクリプトの上の方から、変更点を説明していきます。

今までのランキング表示とは別に表示させるため、
新たにプログラムを分岐させる必要があります。
ですので、メイン処理という所に、下記のように追記します。

# ------------------------- #
# Main Program
# メイン処理
# ------------------------- #
&decode;
&openinpetdata;
&titlecheck;
if    ($FORM{'mode'} eq "end")       { &error("$endmsg"); }
elsif ($FORM{'mode'} eq "newpet")    { &newpet;    }
elsif ($FORM{'mode'} eq "nopet")     { &nopet;     }
elsif ($FORM{'mode'} eq "owner")     { &ownerlist; }
elsif ($FORM{'mode'} eq "owner1")    { &ownerdisp; }
elsif ($FORM{'mode'} eq "entername") { &petform;   }
elsif ($FORM{'mode'} eq "back")      { &petform;   }
elsif (!$FORM{'mode'})               { &entername; }
else                                 { &action;    }
exit;


owner1ownerdispは、別にこの名前でなくてもよいですが、
後で同じものが出てきますので、変更した人は覚えておいて下さいね。

今度は、自分の情報だけを見る処理へ飛ぶためのチェックボックスを追加します。
ペットフォーム(sub petform)の「飼い主ランキング」の下に追加してみましょう。

# ------------------------- #
# Sub Pet Form
# ペットフォーム
# ------------------------- #
sub petform {
    &checkname;
    if (!$petname) { &nopet;exit; }
    &header;
    &title;
    &bodytop("ペットデータ($num代目)");
    &petdata;
    &condition;
    if ($noaction == 0 && $enter != 1) {
        print "<tr>\n";
        print "<td>\n";
        &tabletop;
        &input('radio','mode','feed',' checked','餌をあげる<br>');
        &input('radio','mode','pat','','なでる<br>');
        &input('radio','mode','out','','外に出す');
        print "</td>\n";
        print "<td>\n";
        &input('radio','mode','play','','遊ぶ<br>');
        &input('radio','mode','hit','','しかる<br>');
        &input('radio','mode','owner','','飼い主ランキング<br>');
        &input('radio','mode','owner1','','飼い主個人情報');
        print "</td>\n";
        print "</tr>\n";

オリジナルのペットルームのままだと、ちょっと表示がズレますが、
どうしても整えたい方は、

# ------------------------- #
# Sub Pet Form
# ペットフォーム
# ------------------------- #
sub petform {
    &checkname;
    if (!$petname) { &nopet;exit; }
    &header;
    &title;
    &bodytop("ペットデータ($num代目)");
    &petdata;
    &condition;
    if ($noaction == 0 && $enter != 1) {
        print "<tr>\n";
        print "<td>\n";
#       &tabletop;
        print "<table width=\"100%\" border=\"0\" cellspacing=\"$f_space\" cellpadding=\"0\">\n";
        print "<tr>\n";
        print "<td valign=top>\n";
        &input('radio','mode','feed',' checked','餌をあげる<br>');
        &input('radio','mode','pat','','なでる<br>');
        &input('radio','mode','out','','外に出す');
        print "</td>\n";
        print "<td valign=top>\n";
        &input('radio','mode','play','','遊ぶ<br>');
        &input('radio','mode','hit','','しかる<br>');
        &input('radio','mode','owner','','飼い主ランキング<br>');
        &input('radio','mode','owner1','','飼い主個人情報');
        print "</td>\n";
        print "</tr>\n";

ちょっと面倒くさいですが、頭が揃います。

では、実際に個人情報として表示される画面を追加しましょう。
飼い主ランキング(sub ownerlist)の下(ペットの現在の状況(sub petnow)の上)あたりに、
個人情報表示の画面を入れてみましょう。

    &tablebottom;
    &bodybottom;
    &footer;
}

# ------------------------- #
# Sub Owner Disp
# 飼い主個人情報
# ------------------------- #
sub ownerdisp {
    &header;
    &title;
    $bestlove = $lovenum = $hatenum = $othernum = 0;
    &openinuserdata('ownerlist');

    &bodytop('飼い主個人情報');
    &tabletop;

    if ($bestowner eq $ownername) {
        $ownerrank = '一番なついている人';
    }

    print "$ownernameさん<br>";
    print "$ownerrank<br>";
    print "$ownerloveポイント<br>";

    &tablebottom;
    &bodybottom;
    &footer;
}

# ------------------------- #
# Sub Pet Now
# ペットの現在の状況
# ------------------------- #
sub petnow {
    print "<tr>\n";
    print "<td align=\"center\">";

よぉ〜く見ると分かるのですが、飼い主ランキングのプログラムを流用しています(^^;
まぁ、それは置いといて。
ここに出てきた変数ですが、それぞれ・・・、

$bestowner
一番なついている人の名前

$ownername
個人情報を表示する人の名前(要はプレイヤーの名前)

$ownerrank
現在どのランクにいるかの説明(別の場所で代入します)

$ownerlove
その人のラブポイント

という意味です。
この次に説明するところで、4つとも値を入れることになります。
このプログラムのままだと、だいぶ表示が寂しいので、
その辺りは、工夫してくださいね(^^;

最後に、その4つの変数に値を代入する部分です。
これも流用ですが、ユーザーデータの読み込み(sub openinuserdata)の下の方に、
下記のように追加してください。

        if ($_[0] eq 'ownerlist') {
            if ($love >= $loved) {
                @lovelist[$lovenum] = "$name";
                $lovenum++;
                if ($FORM{'name'} eq $name) {
                    $ownername = $name;
                    $ownerrank = 'なついている人';
                    $ownerlove = $love;
                }
                if ($bestlove < $love)
                    { $bestowner = "$name"; $bestlove = $love; }
            } elsif ($love <= $disliked) {
                @hatelist[$hatenum] = "$name";
                $hatenum++;
                if ($FORM{'name'} eq $name) {
                    $ownername = $name;
                    $ownerrank = '嫌いな人';
                    $ownerlove = $love;
                }
            } else {
                @otherlist[$othernum] = "$name";
                $othernum++;
                if ($FORM{'name'} eq $name) {
                    $ownername = $name;
                    $ownerrank = 'それ以外の人';
                    $ownerlove = $love;
                }
            }
        }
    }
}

# ------------------------- #
# Sub Open Out User Data
# ユーザーデータの書きこみ

とりあえず、オリジナルのPETROOMならこれで動きます。