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

ゲームのクリア【簡易版】

難しい改造をすることなく、ゲームのクリアを追加してみましょう。
条件は好感度がある一定のポイント以上かどうか。
そして、クリアした人は、一応そのゲームは終了という形に致します。

では、まずクリアしたときの処理からいきましょう。
アクション(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(10) + 1);
    $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) {    # 好感度が50以上ならクリア
            $disp_img = 'clear.gif';    # クリアしたときの画像
            $disp_msg = 'ゲームクリア!';    # クリアしたときのメッセージ
            &petnow($disp_img,$disp_msg);
        }
        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;
}

好感度が上がった後で、好感度をチェックし、
ある一定以上の値(例では50)だったら、クリア用の画面を表示します。


次に、クリアした後に訪れたときの処理を追加します。
ペットのコンディション(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 >= 50) {
        $disp_img = 'fin.gif';    # クリアした人用の画面
        $disp_msg = 'あなたはゲームをクリアしました。';    # クリアした人用のメッセージ
        &petnow($disp_img,$disp_msg);
        $noaction = 1;    # コマンドは表示しない
        return;
    }

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

訪れたときに、好感度がある一定以上の値(例では50)なら、
ゲームをすでにクリアしていることを表示して、コマンドは選べないようにします。



そして、すみません、追加ですー。
クリア後にユーザーがしばらく訪れないと、クリア画面にならないことが判明しました!
原因は、訪問間隔によるラブポイント減らしです。
なので、ペットデータ(sub petdata)に下記のように追記して下さい。

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

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

これでOKです〜。
すみませんでしたm(_ _)m



さらにすみません、追加ですー。
クリア後にユーザーがしばらく訪れないと、データから消されてしまいます(^^;
クリアした人を、遊びに来なくてもずっと残したおきたい場合は、
「ユーザーデータの読みこみ」(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 >= 50) { push(@new,$line) }
            }
        }

これでOKです〜。