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

ゲームのクリア【好感度+特定コマンド版】

難しい改造をすることなく、ゲームのクリアを追加してみましょう。
条件は好感度がある一定のポイント以上の時に、特定のコマンドを選んで、
それが喜ぶ反応だったときだけ、クリアとします。
そして、クリアした人は、一応そのゲームは終了という形に致します。

サンプルでは、好感度が50以上で、遊ぶ(play)を選んで喜んだら、クリアとします。

では、まずクリアするときの処理からいきましょう。
アクション(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 'play') { $lastplay = time }
    if ($fa eq 'out')  { $out = 1; $outdate = time }
    
    if ($rnd <= $rnd_border) {
        &petnow($rnd_img,$rnd_msg);
        $love--;
    }
    elsif ($FORM{'good'} =~ /$fa/) {                # 喜ぶ反応なら
#        &petnow($good_img{$fa},$good_msg{$fa});    # コメントにする
        $love++;$good++;
        if ($fa eq "feed") { $lastfeed = time }
        if ($love >= 50 && $fa eq 'play') {         # 好感度が50以上で、コマンドが「遊ぶ」なら
            $disp_img = 'clear.gif';                # クリアしたときの画像
            $disp_msg = "Game Clear!";              # クリアしたときのメッセージ
            &petnow($disp_img,$disp_msg);
            $love = 'clear';                        # 好感度の代わりに文字を入れる
        }
        else {
            &petnow($good_img{$fa},$good_msg{$fa}); # クリアじゃないときは普通の喜ぶ反応
        }
    }
    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;
}

クリアすると、$loveに「clear」という文字が入ります。

ゲームのクリア【簡易版】の改造をすでにしている方も、条件文と$love = 'clear';を追記すれば、
簡単に移行できます。


次に、クリアした後に訪れたときの処理を追加します。
ペットのコンディション(sub condition)に下記のように追記して下さい。

# ------------------------- #
# Sub Condition
# ペットのコンディション
# ------------------------- #
sub condition {
    print "</td>\n";
    print "</tr>\n";
    # 一定期間餌をあげないと死んでしまう。
    if (time >= $lastfeed + $daysec * $deadline) {
        $noaction = 1;
        $deadover = &checkday($lastfeed);

        print "<tr>\n";
        print "<td>\n";
        &tabletop;
        &petnow($dead_img,"$petnameは死にました。<br>死後$deadover日経っています。");

        print "<tr>";
        print "<td align=\"right\">\n";
        &input('hidden','mode','nopet','','');
        &input('hidden','name',$FORM{'name'},'','');
        &input('hidden','pass',$FORM{'pass'},'','');
        print "新しいペットを飼う\n";
        &input('submit','','OK','','');
        &tablebottom;
        print "</td>\n";
        print "</tr>\n";
        return;
    }  

    # クリアした後の画面
    if ($love eq 'clear') {
        $disp_img = 'fin.gif';     # クリアした人用の画面
        $disp_msg = "Game Clear!"; # クリアした人用のメッセージ
        &petnow($disp_img,$disp_msg);
        $noaction = 1;             # コマンドは表示しない
        return;
    }

    # 外出中の処理
    if ($out == 1 && (time - $outdate) < $dayhour[$comeback]) { 
        &petnow($gone_img,$out_msg);
        $noaction = 1;
        return;
    } else {$out = 0;}

最後に、
このゲーム、久々に訪れると、好感度を減らされる仕様があるんですが、
クリアすると文字が入るので、演算してもらうわけにはいかなくなります。
ということで、ペットデータ(sub petdata)に下記のように追記して下さい。

# ------------------------- #
# Sub Pet Data
# ペットデータ
# ------------------------- #
sub petdata {
    # 何日以上か面会がない場合、ペットの機嫌が下がる
    if (&checkday($lastvisit) >= $novisit) { $good-- }
    # 何日間食べていないか。
    $hungry = &checkday($lastfeed);
    
    # ゲストが何日ぶりの来訪かをチェックし、ラブ数を減らす
    if ($love ne 'clear') {
#   $love-- if &checkday($gdate) > 1; # 簡単モード
    $love = $love - &checkday($gdate);
    } # カッコを閉じるのをお忘れなく

    $agetotalday = &checkday($birth);
    &gettime($lastfeed);

    &tabletop;
    print "名前:$font2$petname</font></td>\n";
    print "<td>性別:$font2$sex</font></td>\n";
    print "</tr>\n";

    print "<tr>\n";
    print "<td>名付け親:$font2$godfather</font></td>\n";
    print "<td>年齢:$font2生後$agetotalday日</font></td>\n";
    print "</tr>\n";

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



そしてすみません、追加ですー。
クリア後にユーザーがしばらく訪れないと、データから消されてしまいます(^^;
クリアした人を、遊びに来なくてもずっと残したおきたい場合は、
「ユーザーデータの読みこみ」(sub openinuserdata)に下記のように追記して下さい。

        if ($_[0] eq 'action') {
            if ($FORM{'name'} eq $name) {
                $gdate = time;
                push(@new,"$FORM{'name'}<>$FORM{'pass'}<>$gdate<>$newlove<>\n");
            } else {
                if ($gdate >= $goodbye || $love eq 'clear') { push(@new,$line) }
            }
        }

これでOKです〜。