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

日付でイベントを発生させよう

ひと通りPETROOMが動いて、自分でも遊びに行ったりしていると、
そのうち欲しくなるのが、「いつもと違った特別なイベント」。
その実現方法にはいくつかあると思われますが、今回は日付を使った方法をご紹介します。

まず、ここでいう「イベント」ですが、えー・・・文章で説明するのって難しいですね(^^;
たとえば、誕生日。
キャラの誕生日が10月9日(ちなみに琴音ちゃん)だとして、
10月9日にプレイヤーが遊びに来ます。
特別な日なので、キャラにいつもと違ったセリフを言わせたりしたいわけですが、
その後、また同じ日のうちに同じプレイヤーが遊びに来たとき、
また、同じセリフを言うのは、なんか芸がないなと。
1回訪れた後は、通常に戻したいのです。
ここでいう「イベント」は、そういう1回限りのイベントのことを言います。
1回限りじゃなくていいイベントは、応用で実現可能ですので、ここでは省略します。
また、この「イベント」は、プレイヤーが訪れたときの話で、
選択肢を選んだ後のことではありません。
選択肢は通常通りで、選択肢を選んだ後も通常通りですので、ご注意下さい。
(「琴音ちゃんと遊ぼー。」ではその辺もいじってますけどね(^^;)

PETROOMのユーザーデータには、
はじめから「最後に訪れた日付(厳密には秒数)」が記録されています。
方法としては、
まず、遊びに来たときに日付をチェックし、イベントを発生させる日かどうか確認する。
次に、前回遊びに来た日付をチェックし、その日1回目の訪問かどうか確認する。
それだけです(^^;
1回限りじゃなくてもいいイベントの時は、この2つ目のチェックをしなければいいのです。

では、具体的にやってみましょう。先程の誕生日を例に進めていきます。
ペットのコンディション(sub condition)の中で設定するのですが、
今から作ろうと思っているイベントの優先度によって、挿入する場所が変わります。
今回は、通常の場合より優先度が高く、スペシャル画像(?)よりは優先度が低い、として設置します。
なので、挿入場所はここになります。

    # スペシャル画像2
    if ($love > $special2) {
        if ($timeafter == $specialtime2a || $timeafter == $specialtime2b) {
            &petnow($friend_img,$friend_msg);
            return;
        }
    }

# → ここ!

    # ラブポイントが一定以上でノーマル画像
    if ( $love >= $bad - $good ) {
        &petnow($scheduleimg[$timeafter],$schedulemsg[$timeafter]);
        return;
    }

# → ここ!の部分に入るのは、これです。

# イベント用現在の日付取得
    ($isec,$imin,$ihour,$iday,$imon,$iyear) = localtime(time);
    $iyear += 1900;
    $imon++;

# イベント用前回の日付取得
    ($zsec,$zmin,$zhour,$zday,$zmon,$zyear) = localtime($gdate);
    $zyear += 1900;
    $zmon++;

# イベント・誕生日
    if ( $imon == 10 && $iday == 9 ) {
        if ( $zmon != 10 || $zday != 9 ) {
            $event_img  = 'char_ten.gif';
            $event_msg  = '今日は誕生日です。';
            &petnow($event_img,$event_msg);
            return;
        }
    }

簡単に説明したいところですが、おいらにもよく分かりません(爆)
1ブロック目が、現在時刻を拾ってくるところ。
2ブロック目が、前回訪れた時刻を拾ってくるところ。
time$gdateには、いつからだかの秒数が入っています。
それを、年月日時分秒に分割、1900年を足して、月をプラス1すると、
・・・なにか、良いらしいのです(爆)

3ブロック目は、1行目で今日が10月9日かどうかチェック。
2行目で、前回訪れたのが10月9日かどうかチェック、
つまり、前回訪れたのが10月9日でなくて、今日が10月9日ならイベント発生というわけです。

1回限りでなくて、その日ずっと発生して良ければ、下記のようにして下さい。

# イベント・誕生日
    if ( $imon == 10 && $iday == 9 ) {
#       if ( $zmon != 10 || $zday != 9 ) {
            $event_img  = 'char_ten.gif';
            $event_msg  = '今日は誕生日です。';
            &petnow($event_img,$event_msg);
            return;
#       }
    }

応用次第で、○月○日〜○月○日までとか、毎月○日とか、○月中ずっととか、
いろいろイベントを作れます。