<PETROOM大改造> 
 【追加改造】

ことねっつで公開している「標準改造スクリプトVer.A03」に、
追加改造を施すためのページです。
需要の高そうな改造のみの掲載ですが、ご参考になれば幸いです〜。

= ご注意 =
基本的には文字の色が「オレンジ」になっている部分を追加していくだけです。
…が、ベースを「何もいじっていないVer.A03」にしていますので、
すでに何らかの改造を行っている方は、そのままでは上手くいかないことがあります。
作業前に必ずバックアップを取り、しばらく保存しておいてくださいませ。




サブキャラの追加ダミーデータの追加




  サブキャラの追加  

メインキャラをもう一人追加する、いわゆる「ペットの複数化」は、
現在のところ改造のメドが立っていない状況です…、すみません。

この「サブキャラの追加」の改造は、
メインキャラほど重要ではないけど、ちょくちょく登場させて、
好感度によるスケジュール変化やクリア、
ランキング表示などを追加してしまおうというものです。
スクリプト全域に渡る改造ですので、少々大変ですが、
同じことを繰り返せば、キャラをどんどん追加することも出来ます。

主な仕様:
サブキャラの好感度ランキングは3段階
各ランクごとにスケジュールと反応を設定可能
クリアイベントあり
サブキャラをクリアしても引き続き遊べるが、サブキャラは登場しなくなる
メインキャラが散歩中は、サブキャラにも会えない
というか、サブキャラは散歩に連れ出せない
携帯非対応


まず、サブキャラ用のデータを保存するエリアを確保します。
Ver.A03には、すでに予備が10個ほど用意してありますので、
そのウチの2つを、サブキャラの好感度と、サブキャラのクリアフラグとして利用します。
現在使用していない予備のデータ(ダミーデータ)の名前を、分かりやすいように変更します。
例として、$dmy01$dmy02を使用することにします。

すべての$dmy01$subloveに、(8ヶ所)
すべての$newdmy01$newsubloveに変更します。(2ヶ所)

すべての$dmy02$subclrに、(8ヶ所)
すべての$newdmy02$newsubclrに変更します。(2ヶ所)



次に「ペットの設定」の中に、サブキャラ用の設定データを追加します。

# ランキングの画像(a03-16) 必要ないときは「''」にしてください
@ownerimgs = ('jare'   # $lovelv1以上の人のランキング画像
             ,'nobi'   # $lovelv2以上の人のランキング画像
             ,'maru'   # $lovelv3以上の人のランキング画像
             ,'boo'    # $lovelv4以上の人のランキング画像
             ,'keikai' # $lovelv4未満の人のランキング画像
             ,'love'   # クリアした人のランキング画像
);

$sublvc = 15; # サブキャラ好感度を何ポイント以上取るとクリアイベント発生か
$sublv1 = 10; # サブキャラ好感度を何ポイント以上取ると好感度Lv1か
$sublv2 = 5;  # サブキャラ好感度を何ポイント以上取ると好感度Lv2か
              # サブキャラ好感度が$sublv2未満なら好感度Lv3
$subpar = 20; # サブキャライベント発生確率(%)

# スペシャル画像の設定
$special1      = 20; # ラブポイントが何点以上だとスペシャル画像1を表示するか。
$specialtime1a = 0;  # 食後何個目のスケジュールでその画像を表示させるか。0〜
$specialtime1b = 5;  # 二つまで設定可能。一つでいい場合は上と同じにする。



次に「ペットのコンディション」にサブキャラのスケジュールを組みます。
サブキャラの登場には乱数を使用して、ランダムに発生するようにします。

# ------------------------- #
# Sub Condition
# ペットのコンディション
# ------------------------- #
sub condition {
    srand($gdate);             # 乱数の種を設定
    $rnd = int(rand(100) + 1); # 1〜100の乱数を発生
                               # ここの追加はサブキャラを複数にするときも1つだけでOK
    if ($agent eq 'pc') {
        print "</td>\n";
        print "</tr>\n";
    }
    # 一定期間餌をあげないと死んでしまう。

===< 中略 >===

# サンプル(キリ番イベント・フキダシ・専用コマンド付き) # (a03-18)
# →ペットフォームとアクションに続きます。
    # キリ番だったら
    if ($counter % $kiri == 0) {
        petnow('love',"<B>$counter</B>Hit、ありがとう〜♪",'','');
        return;
    }

# 実際には”専用コマンドあり”の一番下あたりに追加。
    # サブキャラスケジュール
    # 乱数が$subpar以下でサブキャラをクリアしていないときだけ発生
    if ($rnd <= $subpar && $subclr == 0) {

        # サブキャラクリアイベントなら
        if ($sublove >= $sublvc) {
            petnow('friend',"$petnameよりもヒヨコが…。",'','no');
        }

        # サブキャラ好感度Lv1(高)なら
        elsif ($sublove >= $sublv1) {
            petnow('friend',"ヒヨコが遊びに来ました。",'','no');
        }

        # サブキャラ好感度Lv2(中)なら
        elsif ($sublove >= $sublv2) {
            petnow('friend',"ヒヨコがやって来ました。",'','no');
        }

        # サブキャラ好感度Lv3(低)なら
        else {
            petnow('friend',"ヒヨコが邪魔しに来ました。",'','no');
        }

        return;
    }





# ---------------- #
# 専用コマンドなし #
# ---------------- #



次に「ペットフォーム」でその時の選択肢などを設定します。

# サンプル(キリ番イベント・フキダシ・専用コマンド付き) # (a03-18)
# →アクションに続きます。

        # キリ番なら
        elsif ($counter % $kiri == 0) {
            &input('radio','mode','ev05_1',' checked','なんかちょーだい。<br>');
            print "</td><td valign=top>\n" if $agent eq 'pc'; # 中間区切り(PCの場合) (a01-07)
            &input('radio','mode','ev05_2','','これからもよろしくね。<br>');
            print "キリ番<BR>"; # 確認用なので本番時は削除
        }

# 実際には”専用コマンドあり”の一番下あたり、
# 「ペットのコンディション」と同じ位置に追加。
        # サブキャラスケジュール
        # 乱数が$subpar以下でサブキャラをクリアしていないときだけ発生
        elsif ($rnd <= $subpar && $subclr == 0) {

            # サブキャラクリアイベントなら
            if ($sublove >= $sublvc) {
                &input('radio','mode','evsub_c_1',' checked','選択肢C−1<br>');
                print "</td><td valign=top>\n" if $agent eq 'pc'; # 中間区切り(PCの場合)
                &input('radio','mode','evsub_c_2','','選択肢C−2<br>');
            }

            # サブキャラ好感度Lv1(高)なら
            elsif ($sublove >= $sublv1) {
                &input('radio','mode','evsub_1_1',' checked','選択肢1−1<br>');
                &input('radio','mode','evsub_1_2','','選択肢1−2<br>');
                print "</td><td valign=top>\n" if $agent eq 'pc'; # 中間区切り(PCの場合)
                &input('radio','mode','evsub_1_3','','選択肢1−3<br>');
                &input('radio','mode','evsub_1_4','','選択肢1−4<br>');
            }

            # サブキャラ好感度Lv2(中)なら
            elsif ($sublove >= $sublv2) {
                &input('radio','mode','evsub_2_1',' checked','選択肢2−1<br>');
                &input('radio','mode','evsub_2_2','','選択肢2−2<br>');
                print "</td><td valign=top>\n" if $agent eq 'pc'; # 中間区切り(PCの場合)
                &input('radio','mode','evsub_2_3','','選択肢2−3<br>');
                &input('radio','mode','evsub_2_4','','選択肢2−4<br>');
            }

            # サブキャラ好感度Lv3(低)なら
            else {
                &input('radio','mode','evsub_3_1',' checked','選択肢3−1<br>');
                &input('radio','mode','evsub_3_2','','選択肢3−2<br>');
                print "</td><td valign=top>\n" if $agent eq 'pc'; # 中間区切り(PCの場合)
                &input('radio','mode','evsub_3_3','','選択肢3−3<br>');
                &input('radio','mode','evsub_3_4','','選択肢3−4<br>');
            }
        }





# ##########
# ↑ここまで
# ##########



次に「アクション」で、コマンドを選んだ後のサブキャラの処理を追加します。

# サンプル(キリ番イベント・フキダシ・専用コマンド付き) # (a03-18)

    # なんかちょーだい。
    elsif ($fa eq 'ev05_1') {
        &petnow('unko',"…はい。",'','');
        $love--; # 好感度-1
        $bad++;  # ペットの不機嫌+1
    }
    # これからもよろしく
    elsif ($fa eq 'ev05_2') {
        &petnow('jare',"うにゃんっ♪",'','');
        $love += 5; # 好感度+1
        $good++;    # ペットの機嫌+1
    }

# 実際には”専用コマンド追加位置”の一番下あたりに追加
    # サブキャラクリアイベント 選択肢C−1
    elsif ($fa eq 'evsub_c_1') {
        &petnow('friend',"ヒヨコクリア!",'','no');
        if ($subclr == 0) { $subclr = time; } # クリアフラグON
    }
    # サブキャラクリアイベント 選択肢C−2
    elsif ($fa eq 'evsub_c_2') {
        &petnow('friend',"残念、好感度が半分に。",'','no');
        $sublove = int($sublove / 2); # 2で割って小数点以下切り捨て
    }

    # サブキャラ好感度Lv1(高) 選択肢1−1
    elsif ($fa eq 'evsub_1_1') {
        &petnow('friend',"1−1(アップ)",'','');
        $sublove++;
    }
    # サブキャラ好感度Lv1(高) 選択肢1−2
    elsif ($fa eq 'evsub_1_2') {
        &petnow('friend',"1−2(ダウン)",'','');
        $sublove--;
    }
    # サブキャラ好感度Lv1(高) 選択肢1−3
    elsif ($fa eq 'evsub_1_3') {
        &petnow('friend',"1−3(変化なし)",'','');
    }
    # サブキャラ好感度Lv1(高) 選択肢1−4
    elsif ($fa eq 'evsub_1_4') {
        &petnow('friend',"1−4(+3)",'','');
        $sublove += 3;
    }

    # サブキャラ好感度Lv2(中) 選択肢2−1
    elsif ($fa eq 'evsub_2_1') {
        &petnow('friend',"2−1(アップ)",'','');
        $sublove++;
    }
    # サブキャラ好感度Lv2(中) 選択肢2−2
    elsif ($fa eq 'evsub_2_2') {
        &petnow('friend',"2−2(ダウン)",'','');
        $sublove--;
    }
    # サブキャラ好感度Lv2(中) 選択肢2−3
    elsif ($fa eq 'evsub_2_3') {
        &petnow('friend',"2−3(変化なし)",'','');
    }
    # サブキャラ好感度Lv2(中) 選択肢2−4
    elsif ($fa eq 'evsub_2_4') {
        &petnow('friend',"2−4(+3)",'','');
        $sublove += 3;
    }

    # サブキャラ好感度Lv3(低) 選択肢3−1
    elsif ($fa eq 'evsub_3_1') {
        &petnow('friend',"3−1(アップ)",'','');
        $sublove++;
    }
    # サブキャラ好感度Lv3(低) 選択肢3−2
    elsif ($fa eq 'evsub_3_2') {
        &petnow('friend',"3−2(ダウン)",'','');
        $sublove--;
    }
    # サブキャラ好感度Lv3(低) 選択肢3−3
    elsif ($fa eq 'evsub_3_3') {
        &petnow('friend',"3−3(変化なし)",'','');
    }
    # サブキャラ好感度Lv3(低) 選択肢3−4
    elsif ($fa eq 'evsub_3_4') {
        &petnow('friend',"3−4(+3)",'','');
        $sublove += 3;
    }





# ##########
# ↑ここまで
# ##########



次に「ユーザーデータの読みこみ」で、
サブキャラのランキングリストとクリアリストを追加します。

                # 好感度Lv5リスト作成
                else {
                    $lovelv5list[$lovelv5num] = "$love<>$name<>$lastlove<>$lastcom";
                    $lovelv5num++;
                    if ($FORM{'name'} eq $name) {
                        $ownerlv = 4 if $clrflg == 0; # (a02-04)
                        $ownerrk = 4; # (a02-04)
                    }
                }
            }

# 追加場所にご注意!
            # サブキャラクリアした人リスト作成
            if ($subclr != 0) {
                $subclrlist[$subclrnum] = "$subclr<>$name";
                $subclrnum++;
            }
            # サブキャラ好感度Lv1リスト作成
            elsif ($sublove >= $sublv1) {
                $sublv1list[$sublv1num] = "$sublove<>$name";
                $sublv1num++;
            }
            # サブキャラ好感度Lv2リスト作成
            elsif ($sublove >= $sublv2) {
                $sublv2list[$sublv2num] = "$sublove<>$name";
                $sublv2num++;
            }
            # サブキャラ好感度Lv3リスト作成
            else {
                $sublv3list[$sublv3num] = "$sublove<>$name";
                $sublv3num++;
            }

#####
        }
    }

    # 作成したリストのソート処理など
    if ($_[0] eq 'ownerlist') {

        # クリアした人のソート
        &user_sort(@clrlist);
        @clrlist = @newtxt;

        # 好感度Lv1のソート
        &user_sort_r(@lovelv1list);
        @lovelv1list = @newtxt;

        # 好感度Lv2のソート
        &user_sort_r(@lovelv2list);
        @lovelv2list = @newtxt;

        # 好感度Lv3のソート
        &user_sort_r(@lovelv3list);
        @lovelv3list = @newtxt;

        # 好感度Lv4のソート
        &user_sort_r(@lovelv4list);
        @lovelv4list = @newtxt;

        # 好感度Lv5のソート
        &user_sort_r(@lovelv5list);
        @lovelv5list = @newtxt;

        # サブキャラクリアした人のソート
        &user_sort(@subclrlist);
        @subclrlist = @newtxt;

        # サブキャラ好感度Lv1のソート
        &user_sort_r(@sublv1list);
        @sublv1list = @newtxt;

        # サブキャラ好感度Lv2のソート
        &user_sort_r(@sublv2list);
        @sublv2list = @newtxt;

        # サブキャラ好感度Lv3のソート
        &user_sort_r(@sublv3list);
        @sublv3list = @newtxt;

        # 好感度Lv1のリストから
        # トップの人を抜き出し、リスト作成
        foreach $works (@lovelv1list) {
            ($love,$work) = split(/<>/,$works);
            if ($love >= $bestlove) {
                $toplist[$topnum] = "$works";
                $topnum++;
            }
        }



最後に「飼い主ランキング」にサブキャラのランキングを追加します。

# ------------------------- #
# Sub Owner List
# 飼い主ランキング
# ------------------------- #
sub ownerlist {
    &checkname; # パスワードのチェック追加(a03-22)
    &header;
    &title;
    $bestlove = $topnum = $lovelv1num = $lovelv2num = $lovelv3num = $lovelv4num = $lovelv5num = $clrnum = 0;
    $subclrnum = $sublv1num = $sublv2num = $sublv3num = 0;
    &openinuserdata('ownerlist');

    &bodytop('好感度ランキング'); # [変更可]

    $ownercom = $ownercoms[$ownerlv]; # (a02-04)
    $clrno = 0;                       # (a02-10)
    $subclrno = 0;

    # PC用ランキング表示(a01-07)
    if ($agent eq 'pc') {
        print "<table width=\"100%\" border=\"0\" cellspacing=\"$f_space\" cellpadding=\"0\" background=\"\">\n";

===< 中略 >===

        ### ▲ユーザーデータと同じ変数名が使えるのはここまで ###

        # 全体情報
        # クリアした人が現れるまで表示されません
        if ($clrnum != 0) {
            # ランキングと同じ(a02-04)
            if ($clrdisp == 0) {
                print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2><B>$ownercoms[5]は</B></font></TD></TR>";
                foreach $owner (@clrlist)  {
                    ($clrflg,$name,$message) = split(/<>/,$owner); # (a03-11)
                    $cellcnta = $cellcnt - 1;
                    $clrno++;                                                         # (a02-10)
                    print "<TR><TD>第<B>$clrno</B>位</TD><TD colspan=\"$cellcnta\">"; # (a02-10)
                    if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
                    else                        { print "$nameさん"; }
                    print "</TD></TR>";
                    # メッセージ入力ありなら # (a03-11)
                    if ($msgon == 1) {
                        print "<TR><TD colspan=\"$cellcnt\">└ <FONT color=\"$font1\">$message</FONT></TD></TR>\n";
                    }
                }
            }
            # 別ページ(a02-04)
            else {
                print "<TR><TD colspan=\"$cellcnt\" align=center><A href=\"$cgiurl?mode=clear&name=$FORM{'name'}&pass=$FORM{'pass'}&pass2=$FORM{'pass2'}\">[$ownercoms[5]は]</A>(現在$clrnum名)</TD></TR>"; # (a02-09)
            }

            print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";
        }

        # サブキャラをクリアした人が現れるまで表示されません
        if ($subclrnum != 0) {
            # ランキングと同じ
            if ($clrdisp == 0) {
                print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2><B>サブキャラをクリアした人は</B></font></TD></TR>";
                foreach (@subclrlist)  {
                    ($subclr,$name) = split(/<>/,$_);
                    $cellcnta = $cellcnt - 1;
                    $subclrno++;
                    print "<TR><TD>第<B>$clrno</B>位</TD><TD colspan=\"$cellcnta\">";
                    if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
                    else                        { print "$nameさん"; }
                    print "</TD></TR>";
                }
            }
            # 別ページ
            else {
                print "<TR><TD colspan=\"$cellcnt\" align=center><A href=\"$cgiurl?mode=clear&name=$FORM{'name'}&pass=$FORM{'pass'}&pass2=$FORM{'pass2'}\">[サブキャラをクリアした人は]</A>(現在$subclrnum名)</TD></TR>";
            }

            print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";
        }

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2><B>$bestcomは</B></font></TD></TR>";
        if ($topnum == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>" }
        else {
            foreach $owner (@toplist)  {
                ($love,$name,$lastlove,$lastcom) = split(/<>/,$owner);
                print "<TR><TD colspan=\"$cellcnt\">";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
                else                        { print "$nameさん"; }
                print "</TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

===< 中略 >===

        # 簡略表示(a02-04)
        else { print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font3>$lovelv5num</FONT>人</TD></TR>"; }

        print "<TR><TD colspan=\"$cellcnt\"><hr size=5></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv1の人は</font><SMALL>($sublv1num)</SMALL></TD></TR>";
        if ($sublv1num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv1list)  {
                ($sublove,$name) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD></TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv2の人は</font><SMALL>($sublv2num)</SMALL></TD></TR>";
        if ($sublv2num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv2list)  {
                ($sublove,$name) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD></TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv3の人は</font><SMALL>($sublv3num)</SMALL></TD></TR>";
        if ($sublv3num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv3list)  {
                ($sublove,$name) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD></TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        if ($rankdisp != 0) {
            print "<TR><TD colspan=\"$cellcnt\" align=center><A href=\"$cgiurl?mode=ownern&name=$FORM{'name'}&pass=$FORM{'pass'}&pass2=$FORM{'pass2'}\">[通常表\示]</A></TD></TR>"; # (a02-04)
        }

        print "</table>\n";
    }



    # 携帯用ランキング表示(a01-07)
    else {

===< 中略 >===

# ------------------------- #
# Sub Clear List
# クリアした人のリスト(a02-04)
# ------------------------- #
sub clearlist {
    &checkname; # パスワードのチェック追加(a03-22)
    &header;
    &title;
    $bestlove = $topnum = $lovelv1num = $lovelv2num = $lovelv3num = $lovelv4num = $lovelv5num = $clrnum = 0;
    $subclrnum = $sublv1num = $sublv2num = $sublv3num = 0;
    &openinuserdata('ownerlist');

    &bodytop("$ownercoms[5]は");

    $clrno = 0; # (a02-10)
    $subclrno = 0;
    # PC用
    if ($agent eq 'pc') {
        print "<table width=\"100%\" border=\"0\" cellspacing=\"$f_space\" cellpadding=\"0\" background=\"\">\n";
        # セルの数
        $cellcnt = 4;
        foreach $owner (@clrlist)  {
            ($clrflg,$name,$message) = split(/<>/,$owner); # (a03-11)
            $cellcnta = $cellcnt - 1;
            $clrno++;                                                         # (a02-10)
            print "<TR><TD>第<B>$clrno</B>位</TD><TD colspan=\"$cellcnta\">"; # (a02-10)
            if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
            else                        { print "$nameさん"; }
            print "</TD></TR>";
            # メッセージ入力ありなら # (a03-11)
            if ($msgon == 1) {
                print "<TR><TD colspan=\"$cellcnt\">└ <FONT color=\"$font1\">$message</FONT></TD></TR>\n";
            }
        }
        print "</table>\n";

        print "</td>";
        print "</tr>\n";
        &bar('','サブキャラをクリアした人は');
        print "<tr>\n";
        print "<td>\n";

        print "<table width=\"100%\" border=\"0\" cellspacing=\"$f_space\" cellpadding=\"0\" background=\"\">\n";
        foreach (@subclrlist)  {
            ($subclr,$name) = split(/<>/,$_);
            $cellcnta = $cellcnt - 1;
            $subclrno++;
            print "<TR><TD>第<B>$subclrno</B>位</TD><TD colspan=\"$cellcnta\">";
            if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
            else                        { print "$nameさん"; }
            print "</TD></TR>";
        }
        print "</table>\n";
    }



    # 携帯用
    else {
        foreach $owner (@clrlist)  {
            ($clrflg,$name,$message) = split(/<>/,$owner); # (a03-11)
            $cellcnta = $cellcnt - 1;
            $clrno++;                  # (a02-10)
            print "第<B>$clrno</B>位"; # (a02-10)
            if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
            else                        { print "$nameさん"; }
            print "<BR>";
            # メッセージ入力ありなら # (a03-11)
            if ($msgon == 1) {
                print "└ <FONT color=\"$font1\">$message</FONT><BR>\n";
            }
        }
    }



    &bodybottom;
    &footer;
}





さらに追加で、「サンプル画面」にもサブキャラのランキングを表示したい方は、

# ------------------------- #
# Sub Sample
# サンプル画面(a03-09)
# ------------------------- #
sub sample {
    &header;
    &title;
    $bestlove = $topnum = $lovelv1num = $lovelv2num = $lovelv3num = $lovelv4num = $lovelv5num = $clrnum = 0;
    $subclrnum = $sublv1num = $sublv2num = $sublv3num = 0;
    &openinuserdata('ownerlist');

    &bodytop('サンプル画面'); # [変更可]
    $allnum = $lovelv1num + $lovelv2num + $lovelv3num + $lovelv4num + $lovelv5num;
    &petnow('nobi',"ようこそ!$titleへ。<br>ここはサンプル画面です。<BR>現在参加している方のランキングも、<BR>見ることが出来ます。<BR>現在の参加者は<B>$allnum</B>名です。",'',''); # [変更可]

    $ownercom = $ownercoms[$ownerlv];
    $clrno = 0;
    $subclrno = 0;

    # PC用ランキング表示
    if ($agent eq 'pc') {
        print "<TR><TD>";
        print "<table width=\"100%\" border=\"0\" cellspacing=\"$f_space\" cellpadding=\"0\" background=\"\">\n";

        # セルの数
        $cellcnt = 4;

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2><B>$bestcomは</B></font></TD></TR>";
        if ($topnum == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>" }
        else {
            foreach $owner (@toplist)  {
                ($love,$name,$lastlove,$lastcom) = split(/<>/,$owner);
                print "<TR><TD colspan=\"$cellcnt\">";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
                else                        { print "$nameさん"; }
                print "</TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>$ownercoms[0]は</font><SMALL>($lovelv1num)</SMALL></TD></TR>";
        if ($lovelv1num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach $owner (@lovelv1list)  {
                &rkdisp;
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>$ownercoms[1]は</font><SMALL>($lovelv2num)</SMALL></TD></TR>";
        if ($lovelv2num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach $owner (@lovelv2list)  {
                &rkdisp;
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>$ownercoms[2]は</font><SMALL>($lovelv3num)</SMALL></TD></TR>";
        if ($lovelv3num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach $owner (@lovelv3list)  {
                &rkdisp;
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>$ownercoms[3]は</font><SMALL>($lovelv4num)</SMALL></TD></TR>";
        if ($lovelv4num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach $owner (@lovelv4list)  {
                &rkdisp;
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>$ownercoms[4]は</font><SMALL>($lovelv5num)</SMALL></TD></TR>";
        if ($lovelv5num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach $owner (@lovelv5list)  {
                &rkdisp;
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr size=5></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv1の人は</font><SMALL>($sublv1num)</SMALL></TD></TR>";
        if ($sublv1num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv1list)  {
                ($sublove,$name) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD></TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv2の人は</font><SMALL>($sublv2num)</SMALL></TD></TR>";
        if ($sublv2num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv2list)  {
                ($sublove,$name) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD></TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv3の人は</font><SMALL>($sublv3num)</SMALL></TD></TR>";
        if ($sublv3num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv3list)  {
                ($sublove,$name) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD></TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";
        print "</table></TD></TR>\n";
    }



    # 携帯用ランキング表示
    else {




さらに追加で、サブキャラの「最後の行動」を表示させたい方は、
現在使用していない予備のデータの一つを、サブキャラの「最後の行動」保存用データとして利用します。
例として、$dmy03を使用します。

すべての$dmy03$subcomに、(8ヶ所)
すべての$newdmy03$newsubcomに変更します。(2ヶ所)



次に、サブキャラのイベントが発生するまでの、サブキャラの「最後の行動」の初期値を決めます。
「ユーザー情報をチェック」の”新規ユーザーの登録”の中を下記のように変更してください。

        $sublove = 0;
        $subclr = 0;
        $subcom = '最後の行動初期値、???など';
        $dmy04 = 0;
        $dmy05 = 0;
        $dmy06 = 0;
        $dmy07 = 0;
        $dmy08 = 0;
        $dmy09 = 0;
        $dmy10 = 0;



次に、「アクション」で最後の行動を記録します。

# 実際には”専用コマンド追加位置”の一番下あたりに追加
    # サブキャラクリアイベント 選択肢C−1
    elsif ($fa eq 'evsub_c_1') {
        &petnow('friend',"ヒヨコクリア!",'','no');
        if ($subclr == 0) { $subclr = time; } # クリアフラグON
        $subcom = '最後の行動';
    }
    # サブキャラクリアイベント 選択肢C−2
    elsif ($fa eq 'evsub_c_2') {
        &petnow('friend',"残念、好感度が半分に。",'','no');
        $sublove = int($sublove / 2); # 2で割って小数点以下切り捨て
        $subcom = '最後の行動';
    }

    # サブキャラ好感度Lv1(高) 選択肢1−1
    elsif ($fa eq 'evsub_1_1') {
        &petnow('friend',"1−1(アップ)",'','');
        $sublove++;
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv1(高) 選択肢1−2
    elsif ($fa eq 'evsub_1_2') {
        &petnow('friend',"1−2(ダウン)",'','');
        $sublove--;
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv1(高) 選択肢1−3
    elsif ($fa eq 'evsub_1_3') {
        &petnow('friend',"1−3(変化なし)",'','');
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv1(高) 選択肢1−4
    elsif ($fa eq 'evsub_1_4') {
        &petnow('friend',"1−4(+3)",'','');
        $sublove += 3;
        $subcom = '最後の行動';
    }

    # サブキャラ好感度Lv2(中) 選択肢2−1
    elsif ($fa eq 'evsub_2_1') {
        &petnow('friend',"2−1(アップ)",'','');
        $sublove++;
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv2(中) 選択肢2−2
    elsif ($fa eq 'evsub_2_2') {
        &petnow('friend',"2−2(ダウン)",'','');
        $sublove--;
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv2(中) 選択肢2−3
    elsif ($fa eq 'evsub_2_3') {
        &petnow('friend',"2−3(変化なし)",'','');
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv2(中) 選択肢2−4
    elsif ($fa eq 'evsub_2_4') {
        &petnow('friend',"2−4(+3)",'','');
        $sublove += 3;
        $subcom = '最後の行動';
    }

    # サブキャラ好感度Lv3(低) 選択肢3−1
    elsif ($fa eq 'evsub_3_1') {
        &petnow('friend',"3−1(アップ)",'','');
        $sublove++;
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv3(低) 選択肢3−2
    elsif ($fa eq 'evsub_3_2') {
        &petnow('friend',"3−2(ダウン)",'','');
        $sublove--;
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv3(低) 選択肢3−3
    elsif ($fa eq 'evsub_3_3') {
        &petnow('friend',"3−3(変化なし)",'','');
        $subcom = '最後の行動';
    }
    # サブキャラ好感度Lv3(低) 選択肢3−4
    elsif ($fa eq 'evsub_3_4') {
        &petnow('friend',"3−4(+3)",'','');
        $sublove += 3;
        $subcom = '最後の行動';
    }



次に「ユーザーデータの読みこみ」のリストに、「最後の行動を」追加します。

# 追加場所にご注意!
            # サブキャラクリアした人リスト作成
            if ($subclr != 0) {
                $subclrlist[$subclrnum] = "$subclr<>$name";
                $subclrnum++;
            }
            # サブキャラ好感度Lv1リスト作成
            elsif ($sublove >= $sublv1) {
                $sublv1list[$sublv1num] = "$sublove<>$name<>$subcom";
                $sublv1num++;
            }
            # サブキャラ好感度Lv2リスト作成
            elsif ($sublove >= $sublv2) {
                $sublv2list[$sublv2num] = "$sublove<>$name<>$subocm";
                $sublv2num++;
            }
            # サブキャラ好感度Lv3リスト作成
            else {
                $sublv3list[$sublv3num] = "$sublove<>$name<>$subcom";
                $sublv3num++;
            }



最後に「飼い主ランキング」と「サンプル画面」に最後の行動を追加します。

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv1の人は</font><SMALL>($sublv1num)</SMALL></TD></TR>";
        if ($sublv1num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv1list)  {
                ($sublove,$name,$subcom) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD>$subcom</TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv2の人は</font><SMALL>($sublv2num)</SMALL></TD></TR>";
        if ($sublv2num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv2list)  {
                ($sublove,$name,$subcom) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD>$subcom</TD></TR>";
            }
        }

        print "<TR><TD colspan=\"$cellcnt\"><hr></TD></TR>";

        print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2>サブキャラ好感度Lv3の人は</font><SMALL>($sublv3num)</SMALL></TD></TR>";
        if ($sublv3num == 0) { print "<TR><TD colspan=\"$cellcnt\">いません</TD></TR>"; }
        else {
            foreach (@sublv3list)  {
                ($sublove,$name,$subcom) = split(/<>/,$_);
                print "<TR><TD></TD><TD>";
                if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font></TD><TD>$subloveポイント"; }
                else {
                    print "$nameさん</TD><TD>";
                    if ($loveon == 1) { print "$subloveポイント"; }
                }
                print "</TD><TD>$subcom</TD></TR>";
            }
        }




サブキャラをクリアしたときにも、メッセージを入力出来るようにする場合は、まず、
現在使用していない予備のデータの一つを、サブキャラの「クリアメッセージ」保存用データとして利用します。
例として、$dmy04を使用します。

すべての$dmy04$submsgに、(8ヶ所)
すべての$newdmy04$newsubmsgに変更します。(2ヶ所)



次に「アクション」に、クリアしたときのメッセージ入力画面と、
メッセージを入力し終わってOKを押したあとの画面を追加します。

# ------------------------- #
# Sub Action
# アクション
# ------------------------- #
sub action {
    &checkname;
    if (($msgon == 0 || $FORM{'mode'} ne 'clrmsg') && ($FORM{'mode'} ne 'submsg') && ($selcnt == 0 || $FORM{'selcnt'} != $selcnt)) { # (a03-11)(a03-17)
        &error("まだ$playtime分経過していません")    if $enter == 1;  # [変更可]
        &error("今日の訪問回数をオーバーしています") if $enter == 2;  # (a03-03)[変更可]

        # ブラウザの戻る対策
        # ブラウザの戻るボタンで戻って、
        # 同じイベントをもう一度やろうとした人を、
        # 注意するための処理。
        if ((time - $FORM{'lovept'}) >= $playtime * 60 && $playtime != 0) {
            &error("1つ前の画面で更新をしてください"); # [変更可]
        }

        # 同時入室の対策
        # コマンドで迷っている間に、誰かに散歩に連れ出されてしまったとき
        if ($out != 0 && (time - $outdate) < $comeback * 60) {
            if ($FORM{'mode'} ne 'sagasu' && $FORM{'mode'} ne 'akirame') {
                &error("微妙な差で$outnameさんとお散歩に出てしまいました<BR>1つ前の画面で更新をしてください"); # [変更可]
            }
        }

        # コマンド選択最中に散歩から帰った場合
        # 散歩中だったけど、コマンドを選ぶ間に戻ってきていたとき
        else {
            $out = 0;
            if ($FORM{'mode'} eq 'sagasu' || $FORM{'mode'} eq 'akirame') {
                &error("すれ違いでお散歩から帰って来たようです<BR>1つ前の画面で更新をしてください"); # [変更可]
            }
        }
    } # (a03-11)

    &header;
    &title;
    &bodytop("キャラデータ($num代目)"); # [変更可]
    &petdata;
    $rnd = int(rand(100) + 1);
    $fa = $FORM{'mode'};
    if ($fa ne 'clrmsg' && $fa ne 'submsg' && $FORM{'selcnt'} eq '') { # (a03-11)(a03-17)
        $lastlove = $love;
        $visitcnt++;
        $cntday++;

===< 中略 >===

    # サブキャラクリアイベント 選択肢C−1
    elsif ($fa eq 'evsub_c_1') {
        &petnow('friend',"ヒヨコクリア!",'','no');
        if ($subclr == 0) { $subclr = time; } # クリアフラグON
        $subcom = 'C−1';
        if ($agent eq 'pc') { print "<TR><TD>\n"; }
        &tabletop;
        print "<DIV align=center>\n";
        print "メッセージをどうぞ!<BR>\n"; # [変更可]
        &input('text','message',''," maxlength=$mslmt",'<br><BR>');
        &input('hidden','name',$FORM{'name'},'','');
        &input('hidden','pass',$FORM{'pass'},'','');
        &input('hidden','pass2',$FORM{'pass2'},'','');
        &input('hidden','mode','submsg','','');
        print "</DIV><DIV align=right>\n";
        &input('submit','','OK!','','<br>');
        print "</DIV>\n";
        &tablebottom;
        if ($agent eq 'pc') { print "</TD></TR>\n"; }
    }

===< 中略 >===

# ##########
# ↑ここまで
# ##########


    # クリアメッセージ入力後 # (a03-11)
    elsif ($fa eq 'clrmsg') {
        &petnow('love.gif',"メッセージ、ありがとう!",'',''); # [変更可]
        $message = $FORM{'message'};
    }

    # サブキャラクリアメッセージ入力後
    elsif ($fa eq 'submsg') {
        &petnow('friend',"メッセージ、ありがとう!",'','');
        $submsg = $FORM{'message'};
    }

    # ランダムマイナスイベント
    elsif ($rnd <= $rnd_border) {
        &petnow('keikai',"今日はいつもと違って様子が変です",'','no'); # [変更可]
        $love--;

        # サンプル(お詫びイベント・フキダシ・専用コマンド付き)
        $owabi++; # お詫びカウンタ+1

    }



次に「ユーザーデータの読みこみ」のサブキャラクリアリストに、サブキャラクリアメッセージを追加します。

# 追加場所にご注意!
            # サブキャラクリアした人リスト作成
            if ($subclr != 0) {
                $subclrlist[$subclrnum] = "$subclr<>$name<>$submsg";
                $subclrnum++;
            }
            # サブキャラ好感度Lv1リスト作成



最後に「飼い主ランキング」と「クリアした人のリスト」にサブキャラクリアメッセージを追加します。

「飼い主ランキング」

        # サブキャラをクリアした人が現れるまで表示されません
        if ($subclrnum != 0) {
            # ランキングと同じ
            if ($clrdisp == 0) {
                print "<TR><TD colspan=\"$cellcnt\"><FONT color=$font2><B>サブキャラをクリアした人は</B></font></TD></TR>";
                foreach (@subclrlist)  {
                    ($subclr,$name,$submsg) = split(/<>/,$_);
                    $cellcnta = $cellcnt - 1;
                    $subclrno++;
                    print "<TR><TD>第<B>$clrno</B>位</TD><TD colspan=\"$cellcnta\">";
                    if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
                    else                        { print "$nameさん"; }
                    print "</TD></TR>";
                    print "<TR><TD colspan=\"$cellcnt\">└ <FONT color=\"$font1\">$submsg</FONT></TD></TR>\n";
                }
            }
            # 別ページ
            else {

        print "</td>";
        print "</tr>\n";
        &bar('','サブキャラをクリアした人は');
        print "<tr>\n";
        print "<td>\n";



「クリアした人のリスト」

        print "<table width=\"100%\" border=\"1\" cellspacing=\"$f_space\" cellpadding=\"0\" background=\"\">\n";
        foreach (@subclrlist)  {
            ($subclr,$name,$submsg) = split(/<>/,$_);
            $cellcnta = $cellcnt - 1;
            $subclrno++;
            print "<TR><TD>第<B>$subclrno</B>位</TD><TD colspan=\"$cellcnta\">";
            if ($name eq $FORM{'name'}) { print "<FONT color=$font3><B>$nameさん</B></font>"; }
            else                        { print "$nameさん"; }
            print "</TD></TR>";
            print "<TR><TD colspan=\"$cellcnt\">└ <FONT color=\"$font1\">$submsg</FONT></TD></TR>\n";
        }
        print "</table>\n";
    }








  ダミーデータの追加  

特別なイベントのフラグに使用したり、サブキャラ用の変数などに使ったりして、
元々用意されているダミーデータ$dmy01$dmy10を使い切ってしまった場合に、
新しいダミーデータを追加する方法です。


===< 注意 >===

PETROOM本体(pet.cgi)とユーザーデータを両方改造する必要があります。
どちらか一方だけを改造した状態で、誰かが遊んでしまうと、
ユーザーデータがおかしくなってしまう可能性があります。
改造する前に、本体とユーザーデータのバックアップを必ずとって、
改造の順番を出来るだけ守って進めてください。



まず、PETROOM本体(pet.cgi)の方を改造します。
今回新たに増やすダミーデータは10個だけですが、
もっと増やしておきたい場合は、追加するダミーデータを単純に増やしていただければOKです。

では、オレンジ色の部分をすべて追加してください。
横に長いので、ご注意くださいませ〜。

# ------------------------- #
# Sub Check Name
# ユーザー情報をチェック
# ------------------------- #
sub checkname {
    local($flag) = 0;

    # 未入力をチェック
    if (!$FORM{'name'}) { &error("名前がありません");       }                                # [変更可]
    if (!$FORM{'pass'}) { &error("パスワードがありません"); }                                # [変更可]
    if (!$FORM{'pass2'}) { &error("パスワードがありません"); }                               # [変更可](a02-09)
    if ($FORM{'pass'} eq $FORM{'pass2'}) { &error("異なったパスワードを入力してください"); } # [変更可](a02-09)

    # 禁止ワードのチェック(a01-03)
    foreach $kinshi (@kinshiword) {
        if ($FORM{'name'} =~ /$kinshi/i) {
            &error("不適切な言葉が含まれています"); # [変更可]
        }
    }

    &openinuserdata('checkname');

    # 新規ユーザーを登録
    if ($flag == 0) {
        $gdate      = time - ($playtime * 60);
        $love       = 0;
        $lastlove   = 0;
        $firstvisit = time;
        $visitcnt   = 0;
        $lastcom    = '初訪問'; # [変更可] 覗いただけでコマンドを選ばなかった場合に、ランキングに表示されます。
        $clrflg     = 0;
        $owabi      = 0;
        $de_cnt     = 0;
        $dayevent   = 0; # (a01-05)
        $cntday     = 0; # (a02-11)(a03-03)
        $birth_m    = 0; # (a02-11)(a03-05)
        $birth_d    = 0; # (a02-11)(a03-05)
        $message    = 0; # (a02-11)(a03-11)
        $selcnt     = 0; # (a02-11)(a03-17)
        $sys06      = 0; # (a02-11)改造の際、使用不可
        $sys07      = 0; # (a02-11)改造の際、使用不可
        $sys08      = 0; # (a02-11)改造の際、使用不可
        $sys09      = 0; # (a02-11)改造の際、使用不可
        $sys10      = 0; # (a02-11)改造の際、使用不可

        $dmy01 = 0;
        $dmy02 = 0;
        $dmy03 = 0;
        $dmy04 = 0;
        $dmy05 = 0;
        $dmy06 = 0;
        $dmy07 = 0;
        $dmy08 = 0;
        $dmy09 = 0;
        $dmy10 = 0;

        $dmy11 = 0;
        $dmy12 = 0;
        $dmy13 = 0;
        $dmy14 = 0;
        $dmy15 = 0;
        $dmy16 = 0;
        $dmy17 = 0;
        $dmy18 = 0;
        $dmy19 = 0;
        $dmy20 = 0;

        @new = @lines;
# 追加あります→
        push(@new,"$FORM{'name'}<>$FORM{'pass'}<>$FORM{'pass2'}<>$gdate<>$love<>$lastlove<>$firstvisit<>$visitcnt<>$lastcom<>$clrflg<>$owabi<>$de_cnt<>$dayevent<>$cntday<>$birth_m<>$birth_d<>$message<>$selcnt<>$sys06<>$sys07<>$sys08<>$sys09<>$sys10<>$dmy01<>$dmy02<>$dmy03<>$dmy04<>$dmy05<>$dmy06<>$dmy07<>$dmy08<>$dmy09<>$dmy10<>$dmy11<>$dmy12<>$dmy13<>$dmy14<>$dmy15<>$dmy16<>$dmy17<>$dmy18<>$dmy19<>$dmy20<>\n"); # (a01-05)(a02-09)(a02-11)(a03-03)(a03-05)(a03-11)(a03-17)
        &openoutuserdata;
        $name = $FORM{'name'};
        $pass = $FORM{'pass'};
        $pass2 = $FORM{'pass2'}; # (a02-09)
    }

    # ユーザーの誕生日入力チェック(a03-05)
    if ($usbir == 1 && ($birth_m == 0 || $birth_d == 0)
        && $FORM{'birth_m'} ne '' && $FORM{'birth_d'} ne '') {
        undef @new;
        foreach (@lines) {
# 追加あります→
            ($name,$pass,$pass2,$gdate,$love,$lastlove,$firstvisit,$visitcnt,$lastcom,$clrflg,$owabi,$de_cnt,$dayevent,$cntday,$birth_m,$birth_d,$message,$selcnt,$sys06,$sys07,$sys08,$sys09,$sys10,$dmy01,$dmy02,$dmy03,$dmy04,$dmy05,$dmy06,$dmy07,$dmy08,$dmy09,$dmy10,$dmy11,$dmy12,$dmy13,$dmy14,$dmy15,$dmy16,$dmy17,$dmy18,$dmy19,$dmy20) = split(/<>/,$_); # (a03-11)(a03-17)
            if ($FORM{'name'} eq $name) {
# 追加あります→
                push(@new,"$name<>$pass<>$pass2<>$gdate<>$love<>$lastlove<>$firstvisit<>$visitcnt<>$lastcom<>$clrflg<>$owabi<>$de_cnt<>$dayevent<>$cntday<>$FORM{'birth_m'}<>$FORM{'birth_d'}<>$message<>$selcnt<>$sys06<>$sys07<>$sys08<>$sys09<>$sys10<>$dmy01<>$dmy02<>$dmy03<>$dmy04<>$dmy05<>$dmy06<>$dmy07<>$dmy08<>$dmy09<>$dmy10<>$dmy11<>$dmy12<>$dmy13<>$dmy14<>$dmy15<>$dmy16<>$dmy17<>$dmy18<>$dmy19<>$dmy20<>\n"); # (a03-11)(a03-17)
            }
            else {
                push(@new,$_);
            }
        }
        &openoutuserdata;
        &openinuserdata('checkname');
    }

    # 訪問回数のチェック # (a03-03)
    # 前回の訪問時間を取得し、日付が変わっているかどうかチェック
    # 日付が変わっていたら、1日の訪問回数カウンタをクリア
    ($zsec,$zmin,$zhour,$zday,$zmon,$zyear,$zwday) = localtime($gdate);
    $zyear += 1900 ;
    $zmon++;
    if ($imon != $zmon || $iday != $zday) {
        $cntday = 0;
    }
    # 設定回数以上訪問していたら入室禁止
    if ($cntday >= $limitday && $limitday != 0) { $enter = 2; }

    # 入室チェック
    $enter = 1 if time - $gdate < $playtime * 60;

    # クッキーを保存
    if ($FORM{'cook'} eq "on") { &set_cookie; }
}

# ------------------------- #
# Sub Action
# アクション
# ------------------------- #
sub action {
    &checkname;
    if (($msgon == 0 || $FORM{'mode'} ne 'clrmsg') && ($selcnt == 0 || $FORM{'selcnt'} != $selcnt)) { # (a03-11)(a03-17)
        &error("まだ$playtime分経過していません")    if $enter == 1;  # [変更可]
        &error("今日の訪問回数をオーバーしています") if $enter == 2;  # (a03-03)[変更可]

===< 中略 >===

    $goodbye       = time - (60 * 60 * 24 * $goodbye);
    $goodbye1      = time - (60 * 60 * 24 * $goodbye1); # (a02-03)
    $goodbye0      = time - (60 * 60 * $goodbye0);      # (a02-03)
    $newlove       = $love;
    $newlastlove   = $lastlove;
    $newfirstvisit = $firstvisit;
    $newvisitcnt   = $visitcnt;
    $newlastcom    = $lastcom;
    $newclrflg     = $clrflg;
    $newowabi      = $owabi;
    $newde_cnt     = $de_cnt;
    $newdayevent   = $dayevent; # (a01-05)
    $newcntday     = $cntday;   # (a02-11)(a03-03)
    $newbirth_m    = $birth_m;  # (a02-11)(a03-05)
    $newbirth_d    = $birth_d;  # (a02-11)(a03-05)
    $newmessage    = $message;  # (a02-11)(a03-11)
    $newselcnt      = $selcnt;  # (a02-11)(a03-17)
    $newsys06      = $sys06;    # (a02-11)改造の際、使用不可
    $newsys07      = $sys07;    # (a02-11)改造の際、使用不可
    $newsys08      = $sys08;    # (a02-11)改造の際、使用不可
    $newsys09      = $sys09;    # (a02-11)改造の際、使用不可
    $newsys10      = $sys10;    # (a02-11)改造の際、使用不可

    $newdmy01 = $dmy01;
    $newdmy02 = $dmy02;
    $newdmy03 = $dmy03;
    $newdmy04 = $dmy04;
    $newdmy05 = $dmy05;
    $newdmy06 = $dmy06;
    $newdmy07 = $dmy07;
    $newdmy08 = $dmy08;
    $newdmy09 = $dmy09;
    $newdmy10 = $dmy10;

    $newdmy11 = $dmy11;
    $newdmy12 = $dmy12;
    $newdmy13 = $dmy13;
    $newdmy14 = $dmy14;
    $newdmy15 = $dmy15;
    $newdmy16 = $dmy16;
    $newdmy17 = $dmy17;
    $newdmy18 = $dmy18;
    $newdmy19 = $dmy19;
    $newdmy20 = $dmy20;

    &openinuserdata('action');
    &openoutuserdata;
    &unlock; # (a02-02)
    $actionflag = 1; # 好感度ランキングのリンクを表示
    &bodybottom;
    &footer;
}

# ------------------------- #
# Sub Open In User Data
# ユーザーデータの読みこみ
# ------------------------- #
sub openinuserdata {
# 以下変更(a02-02)
    open(USER_FH,"$userdata") || &error("Can't open Userdata");
    eval { flock(USER_FH,1); };
    @lines = <USER_FH>;
    close(USER_FH);
    if ($_[0] eq 'ownerlist') { &unlock; }
    undef @new;
#####

    foreach $line (@lines) {
# 追加あります→
        ($name,$pass,$pass2,$gdate,$love,$lastlove,$firstvisit,$visitcnt,$lastcom,$clrflg,$owabi,$de_cnt,$dayevent,$cntday,$birth_m,$birth_d,$message,$selcnt,$sys06,$sys07,$sys08,$sys09,$sys10,$dmy01,$dmy02,$dmy03,$dmy04,$dmy05,$dmy06,$dmy07,$dmy08,$dmy09,$dmy10,$dmy11,$dmy12,$dmy13,$dmy14,$dmy15,$dmy16,$dmy17,$dmy18,$dmy19,$dmy20) = split(/<>/,$line); # (a01-05)(a02-09)(a02-11)(a03-03)(a03-05)(a03-11)(a03-17)
        if ($_[0] eq 'checkname') {
            if ($FORM{'name'} eq $name) {
                $flag = 1; # データの中にユーザーを確認
                if ($FORM{'pass'} ne $pass)   { &error("パスワードが間違っています"); } # [変更可]
                if ($FORM{'pass2'} ne $pass2) { &error("パスワードが間違っています"); } # [変更可](a02-09)
                last;
            }
        }
        if ($_[0] eq 'action') {
            if ($FORM{'name'} eq $name) {
                $gdate = time;
# 追加あります→
                push(@new,"$FORM{'name'}<>$FORM{'pass'}<>$FORM{'pass2'}<>$gdate<>$newlove<>$newlastlove<>$newfirstvisit<>$newvisitcnt<>$newlastcom<>$newclrflg<>$newowabi<>$newde_cnt<>$newdayevent<>$newcntday<>$newbirth_m<>$newbirth_d<>$newmessage<>$newselcnt<>$newsys06<>$newsys07<>$newsys08<>$newsys09<>$newsys10<>$newdmy01<>$newdmy02<>$newdmy03<>$newdmy04<>$newdmy05<>$newdmy06<>$newdmy07<>$newdmy08<>$newdmy09<>$newdmy10<>$newdmy11<>$newdmy12<>$newdmy13<>$newdmy14<>$newdmy15<>$newdmy16<>$newdmy17<>$newdmy18<>$newdmy19<>$newdmy20<>\n"); # (a01-05)(a02-09)(a02-11)(a03-03)(a03-05)(a03-11)(a03-17)
            } else {
                if ($clrflg != 0                               # クリアしている人は残す(a02-03)
                    || ($visitcnt >= 2 && $gdate >= $goodbye)  # 2回以上の人は$goodbyeでチェック(a02-03)
                    || ($visitcnt == 1 && $gdate >= $goodbye1) # 1回だけの人は$goodbye1でチェック(a02-03)
                    || ($visitcnt == 0 && $gdate >= $goodbye0) # 0回の人は$goodbye0でチェック(a02-03)
                    ) {
                    # お散歩”バトル”システム(a02-05)
                    if ($btname eq $name) {
                        $love += $btlove;
                        $lastcom = $btcom;
# 追加あります→
                        push(@new,"$name<>$pass<>$pass2<>$gdate<>$love<>$lastlove<>$firstvisit<>$visitcnt<>$lastcom<>$clrflg<>$owabi<>$de_cnt<>$dayevent<>$cntday<>$birth_m<>$birth_d<>$message<>$selcnt<>$sys06<>$sys07<>$sys08<>$sys09<>$sys10<>$dmy01<>$dmy02<>$dmy03<>$dmy04<>$dmy05<>$dmy06<>$dmy07<>$dmy08<>$dmy09<>$dmy10<>$dmy11<>$dmy12<>$dmy13<>$dmy14<>$dmy15<>$dmy16<>$dmy17<>$dmy18<>$dmy19<>$dmy20<>\n"); # (a02-09)(a02-11)(a03-03)(a03-05)(a03-11)(a03-17)
                    }
                    else {
                        push(@new,$line);
                    }
                }
            }
        }

===< 中略 >===

        # ランキング表示でいつもの変数名を使用可に(a02-01)
        foreach $line (@lines) {
# 追加あります→
            ($name,$pass,$pass2,$gdate,$love,$lastlove,$firstvisit,$visitcnt,$lastcom,$clrflg,$owabi,$de_cnt,$dayevent,$cntday,$birth_m,$birth_d,$message,$selcnt,$sys06,$sys07,$sys08,$sys09,$sys10,$dmy01,$dmy02,$dmy03,$dmy04,$dmy05,$dmy06,$dmy07,$dmy08,$dmy09,$dmy10,$dmy11,$dmy12,$dmy13,$dmy14,$dmy15,$dmy16,$dmy17,$dmy18,$dmy19,$dmy20) = split(/<>/,$line); # (a02-09)(a02-11)(a03-03)(a03-05)(a03-11)(a03-17)
            if ($FORM{'name'} eq $name) {
                last;
            }
        }
    }
}




ここまでの改造が終わりましたら、エラーが出ないかどうか、
ローカルサーバやテスト用のサーバにアップして動きを確認してください。


次にユーザーデータの改造を行いますが、
これは、すでにPETROOMを設置して動かしている方だけが必要な改造で、
これから新しく設置される方は、これより下の作業は必要ありません〜。


ではまず、現在サーバに設置されている古いPETROOMを呼び出して、
「PETROOM管理」に入ってください。 → 他の人が遊べなくなります。

「ユーザーデータ」の修正に入り、
「全ユーザー一括設定」に入ってください。


−−−−−−−−−−−−−−
全ユーザーの最後尾に
初期値「0」で
「ダミーデータ追加」

−−−−−−−−−−−−−−


↑これを、追加したダミーデータの数だけ繰り返してください。


ダミーデータを、追加した分だけ増やしましたら、
「管理終了」を押す前に、
改造したPETROOM本体(pet.cgi)をサーバにアップしてください。


サーバへのアップが完了しましたら、
「管理終了」を押して、管理を終了してください。