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

かわむら様専用:好感度でコマンド増減+初めて訪問+お散歩システム

ではでは、さっそく好感度によるコマンドの増減からいきましょう!
すみませんが、デザインの統一まではしていません(^^;
プログラムだけですので、ご了承下さいm(_ _)m
例は、キャラ毎に好感度によって4つに分ける場合です。
ペットフォーム(sub petform)の後半半分に、下記のように追記します。

    &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";
        
        
        if ($timeafter ==  0 || $timeafter ==  2 || $timeafter ==  5 ||
            $timeafter ==  8 || $timeafter == 12 || $timeafter == 15 ||
            $timeafter == 17 || $timeafter == 21 || $timeafter == 24 ||
            $timeafter == 26) {
                
#さくら用 play = 遊ぶ,pat = なでる,feed = 餌をやる,hit = しかる,out = 外に出す。話す=tark 手を握る=nigi 結婚!=pro  家に誘う=home 告る=kokuhaku  
#かえで用 茶=feed 散歩=out 遊ぶ=play  戦隊トーク=tark  さくら呼ぶ=call  さくらの事訊く=ask  不意打ち=attack  肩叩き=tataki 結婚!=pro  告る=kokuhaku                  

            
            if ($love < 0) {    # キャラがかえでで、好感度が0未満の場合
                &input('radio','mode','feed',' checked','<font color=4682b4>お茶にする<br>');
                &input('radio','mode','play','','<font color=4682b4>少し遊ぶ<br>');
                &input('radio','mode','tark','','<font color=4682b4>戦隊トークで盛り上げる<BR>');
#                &input('radio','mode','out','','<font color=4682b4>散歩に誘う<BR>');
#                &input('radio','mode','pro','','<font color=4682b4>結婚してくれぇーー!!<BR>');
#                &input('radio','mode','home','','<font color=4682b4>家に招待する<BR>');
                print "</td>\n";
                print "<td>\n";
                &input('radio','mode','call','','<font color=4682b4>さくらを呼んでもらう<br>');
                &input('radio','mode','ask','','<font color=4682b4>さくらのことを訊く<br>');
#                &input('radio','mode','attack','','<font color=4682b4>不意打ち!とりゃっ!<BR>');
#                &input('radio','mode','tataki','','<font color=4682b4>肩をもんでやる<BR>');
#                &input('radio','mode','kokuhaku','','<font color=4682b4>好きです(直)<BR>');
                print "</td>\n";
                print "</tr>\n";
            }
            elsif ($love < 10) {    # キャラがかえでで、好感度が10未満の場合
                &input('radio','mode','feed',' checked','<font color=4682b4>お茶にする<br>');
                &input('radio','mode','play','','<font color=4682b4>少し遊ぶ<br>');
                &input('radio','mode','tark','','<font color=4682b4>戦隊トークで盛り上げる<BR>');
                &input('radio','mode','out','','<font color=4682b4>散歩に誘う<BR>');
#                &input('radio','mode','pro','','<font color=4682b4>結婚してくれぇーー!!<BR>');
#                &input('radio','mode','home','','<font color=4682b4>家に招待する<BR>');
                print "</td>\n";
                print "<td>\n";
                &input('radio','mode','call','','<font color=4682b4>さくらを呼んでもらう<br>');
                &input('radio','mode','ask','','<font color=4682b4>さくらのことを訊く<br>');
                &input('radio','mode','attack','','<font color=4682b4>不意打ち!とりゃっ!<BR>');
#                &input('radio','mode','tataki','','<font color=4682b4>肩をもんでやる<BR>');
#                &input('radio','mode','kokuhaku','','<font color=4682b4>好きです(直)<BR>');
                print "</td>\n";
                print "</tr>\n";
            }
            elsif ($love < 20) {    # キャラがかえでで、好感度が20未満の場合
                &input('radio','mode','feed',' checked','<font color=4682b4>お茶にする<br>');
                &input('radio','mode','play','','<font color=4682b4>少し遊ぶ<br>');
                &input('radio','mode','tark','','<font color=4682b4>戦隊トークで盛り上げる<BR>');
                &input('radio','mode','out','','<font color=4682b4>散歩に誘う<BR>');
#                &input('radio','mode','pro','','<font color=4682b4>結婚してくれぇーー!!<BR>');
                &input('radio','mode','home','','<font color=4682b4>家に招待する<BR>');
                print "</td>\n";
                print "<td>\n";
                &input('radio','mode','call','','<font color=4682b4>さくらを呼んでもらう<br>');
                &input('radio','mode','ask','','<font color=4682b4>さくらのことを訊く<br>');
                &input('radio','mode','attack','','<font color=4682b4>不意打ち!とりゃっ!<BR>');
                &input('radio','mode','tataki','','<font color=4682b4>肩をもんでやる<BR>');
#                &input('radio','mode','kokuhaku','','<font color=4682b4>好きです(直)<BR>');
                print "</td>\n";
                print "</tr>\n";
            }
            else {    # キャラがかえでで、好感度が20以上の場合
            &input('radio','mode','feed',' checked','<font color=4682b4>お茶にする<br>');
            &input('radio','mode','play','','<font color=4682b4>少し遊ぶ<br>');
            &input('radio','mode','tark','','<font color=4682b4>戦隊トークで盛り上げる<BR>');
            &input('radio','mode','out','','<font color=4682b4>散歩に誘う<BR>');
            &input('radio','mode','pro','','<font color=4682b4>結婚してくれぇーー!!<BR>');
            &input('radio','mode','home','','<font color=4682b4>家に招待する<BR>');
            print "</td>\n";
            print "<td>\n";
            &input('radio','mode','call','','<font color=4682b4>さくらを呼んでもらう<br>');
            &input('radio','mode','ask','','<font color=4682b4>さくらのことを訊く<br>');
            &input('radio','mode','attack','','<font color=4682b4>不意打ち!とりゃっ!<BR>');
            &input('radio','mode','tataki','','<font color=4682b4>肩をもんでやる<BR>');
            &input('radio','mode','kokuhaku','','<font color=4682b4>好きです(直)<BR>');
            print "</td>\n";
            print "</tr>\n";
            }    # ←忘れずに閉じてください。
        }
        else {
        
            if ($love < 0) {    # キャラがさくらで、好感度が0未満の場合
                &input('radio','mode','feed',' checked','<font color=cc8097>ごはんを一緒に食べる?<br>');
                &input('radio','mode','pat','','<font color=cc8097>なでなで♪<br>');
#                &input('radio','mode','out','','<font color=cc8097>散歩に誘う?<BR>');
#                &input('radio','mode','nigi','','<font color=cc8097>手をにぎる<BR>');
#                &input('radio','mode','home','','<font color=cc8097>家につれこむ<BR>');
                print "</td>\n";
                print "<td valign=top>\n";
                &input('radio','mode','tark','','<font color=cc8097>お話する?<br>');
                &input('radio','mode','play','','<font color=cc8097>ちょっと遊ぶ?<br>');
#                &input('radio','mode','hit','','<font color=cc8097>怒る/注意する!<br>');
#                &input('radio','mode','kokuhaku','','<font color=cc8097>好きだーー!!<BR>');
#                &input('radio','mode','pro','','<font color=cc8097>結婚してくれ〜<BR>');
#                &input('radio','mode','owner','','■LOVEデータ■<br>');
#                &input('radio','mode','owner1','','■個人情報■');
                print "</td>\n";
                print "</tr>\n";
            }
            elsif ($love < 10) {    # キャラがさくらで、好感度が10未満の場合
                &input('radio','mode','feed',' checked','<font color=cc8097>ごはんを一緒に食べる?<br>');
                &input('radio','mode','pat','','<font color=cc8097>なでなで♪<br>');
                &input('radio','mode','out','','<font color=cc8097>散歩に誘う?<BR>');
#                &input('radio','mode','nigi','','<font color=cc8097>手をにぎる<BR>');
#                &input('radio','mode','home','','<font color=cc8097>家につれこむ<BR>');
                print "</td>\n";
                print "<td valign=top>\n";
                &input('radio','mode','tark','','<font color=cc8097>お話する?<br>');
                &input('radio','mode','play','','<font color=cc8097>ちょっと遊ぶ?<br>');
                &input('radio','mode','hit','','<font color=cc8097>怒る/注意する!<br>');
#                &input('radio','mode','kokuhaku','','<font color=cc8097>好きだーー!!<BR>');
#                &input('radio','mode','pro','','<font color=cc8097>結婚してくれ〜<BR>');
#                &input('radio','mode','owner','','■LOVEデータ■<br>');
#                &input('radio','mode','owner1','','■個人情報■');
                print "</td>\n";
                print "</tr>\n";
            }
            elsif ($love < 20) {    # キャラがさくらで、好感度が20未満の場合
                &input('radio','mode','feed',' checked','<font color=cc8097>ごはんを一緒に食べる?<br>');
                &input('radio','mode','pat','','<font color=cc8097>なでなで♪<br>');
                &input('radio','mode','out','','<font color=cc8097>散歩に誘う?<BR>');
                &input('radio','mode','nigi','','<font color=cc8097>手をにぎる<BR>');
                &input('radio','mode','home','','<font color=cc8097>家につれこむ<BR>');
                print "</td>\n";
                print "<td valign=top>\n";
                &input('radio','mode','tark','','<font color=cc8097>お話する?<br>');
                &input('radio','mode','play','','<font color=cc8097>ちょっと遊ぶ?<br>');
                &input('radio','mode','hit','','<font color=cc8097>怒る/注意する!<br>');
#                &input('radio','mode','kokuhaku','','<font color=cc8097>好きだーー!!<BR>');
#                &input('radio','mode','pro','','<font color=cc8097>結婚してくれ〜<BR>');
#                &input('radio','mode','owner','','■LOVEデータ■<br>');
#                &input('radio','mode','owner1','','■個人情報■');
                print "</td>\n";
                print "</tr>\n";
            }
            else {    # キャラがさくらで、好感度が20以上の場合
        &input('radio','mode','feed',' checked','<font color=cc8097>ごはんを一緒に食べる?<br>');
        &input('radio','mode','pat','','<font color=cc8097>なでなで♪<br>');
        &input('radio','mode','out','','<font color=cc8097>散歩に誘う?<BR>');
        &input('radio','mode','nigi','','<font color=cc8097>手をにぎる<BR>');
        &input('radio','mode','home','','<font color=cc8097>家につれこむ<BR>');
        print "</td>\n";
        print "<td valign=top>\n";
        &input('radio','mode','tark','','<font color=cc8097>お話する?<br>');
        &input('radio','mode','play','','<font color=cc8097>ちょっと遊ぶ?<br>');
        &input('radio','mode','hit','','<font color=cc8097>怒る/注意する!<br>');
        &input('radio','mode','kokuhaku','','<font color=cc8097>好きだーー!!<BR>');
        &input('radio','mode','pro','','<font color=cc8097>結婚してくれ〜<BR>');
     #  &input('radio','mode','owner','','■LOVEデータ■<br>');
     #  &input('radio','mode','owner1','','■個人情報■');
        print "</td>\n";
        print "</tr>\n";
            }    # ←忘れずに閉じてください。
        }

        print "<tr>\n";
        print "<td colspan=\"2\">\n"; 
        print "<div align=\"right\">\n";
        &input('hidden','name',$FORM{'name'},'','');
        &input('hidden','pass',$FORM{'pass'},'','');
        &input('hidden','good',"$scheduledsr[$timeafter]$plusfeed",'','');
        &input('hidden','bad',"$schedulednt[$timeafter]$minusfeed",'','');
        &input('submit','','OK!','<input type〜 style="background:#d698aa;color:#ffffff"','<br>');
        print "</div>\n";
        &tablebottom;
#   } else { $actionflag = 1; }
    }
    $actionflag = 1;
    &bodybottom;
    &openoutpetdata;
    &footer;
}

とりあえず、表示しないコマンドはコメントにしてあります。
表示する/しないの設定は、コメントにするかしないかで設定すると、
あとで変更が生じたときに楽かもしれません。





次に初めての訪問ですが、この改造を施すには、ユーザーデータの改造が必要です。
こちらをご覧になって、ユーザーデータの改造を行ってください。

ユーザーデータの改造

ユーザーデータの改造が終わりましたら、
初めての訪問かどうかを調べる目印として、ダミー1を使用することにします。
プログラム中の、全ての$dummy01を、$firstvisitに書き換えます(全6ヶ所)
プログラム中の、全ての$newdummy01を、$newfirstvisitに書き換えます(全2ヶ所)

次に初めて訪れたときの処理を追加します。
ペットのコンディション(sub condition)に下記のように追記します。

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

    # 初めての訪問
    if ($firstvisit == 0) {
        $disp_img = 'hajimete.gif';    # 初訪問時の画像
        $disp_msg = '初めまして。';    # その時のメッセージ
        &petnowwaku($disp_img,$disp_msg);
        return;
    }

    # お腹が空いている時の処理
    if ($hungry > 0) {
        # お腹が空いて餓死寸前
        if ($hungry >= $deadline - 1) { &petnowwaku($tired_img,$tired_msg); }
        else { &petnowwaku($cry_img,$hungry_msg);
            $swfurl = $img . 'catvoice.swf';
            if ($voice == 1) { &flash($swfurl); }
        }
        $plusfeed  = 'feed';
        $minusfeed = 'hit_pat_play_out';
        return;
    }

外出中の時は挨拶できないので、外出の処理の方が優先で、
空腹の処理よりは、初めての訪問イベントの方が優先されるような位置に追加しました。

次にアクション(sub action)に下記のように追記して下さい。

    &header;
    &title;
    &bodytop("恋愛データ($num)");
    &petdata;
    srand(time);
    $rnd = int(rand(10) + 1);
    $fa = $FORM{'mode'};

    if ($firstvisit == 0) {    # 初めての訪問イベント完了
        $firstvisit = 1;
    }

    if ($fa eq 'play') { $lastplay = time; $playname = $name; }
    if ($fa eq 'out')  { $out = 1; $outdate = time; $outname = $name; }
    
    if ($rnd <= $rnd_border) {

一応、初訪問時の改造は終了ですが、ここで少々問題が(^^;
初訪問時に表示されるコマンドと、どれを選ぶと喜ぶかと言うことですが、
イベントの画面に関係なく、コマンドや喜ぶコマンドの設定は、通常時のままなんです。
これを、初訪問時専用のコマンドを追加したり、喜ぶコマンドを固定したりすることも出来ます。
どうしましょう?
やり方によって、改造方法は変わってきますので。





最後にお散歩システムです。
おいらの難解なスクリプトを送りつける以外では、説明するのは初めてです(^^;
出来るだけ簡略化して、改造を最小限に押さえてみました。
ですので、連れ出した人だけは会えるとか、そういうのは入っていません。

まず、現段階でのお散歩中ですと、コマンドが表示されません。
それを「探しに行く」と「終了」が表示されるようにしてみます。

最初にお散歩中だとコマンドを表示しない、と設定しているところをコメントにします。
ペットのコンディション(sub condition)の下記の部分をコメントにします。

    # 外出中の処理
#   if ($out == 1 && (time - $outdate) < $dayhour[$comeback]) { 
    if ($out == 1 && (time - $outdate) < $comeback * 60) {
        &petnowwaku($gone_img,$out_msg);
#        $noaction = 1;    # コメントにします。
        return;
    } else {$out = 0;}

つづいて、ペットフォーム(sub petform)を下記のように変更してください。
緑色の部分は、さっき上の方で改造したところです。

    &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";
        
        
        if ($out == 1) {    # 外出中ならこのコマンドを表示する。
            &input('radio','mode','sagasu',' checked','<font color=4682b4>探しに行く<br>');
            print "</td>\n";
            print "<td>\n";
            &input('radio','mode','end','','<font color=4682b4>終了<br>');
            print "</td>\n";
            print "</tr>\n";
        }
        elsif ($timeafter ==  0 || $timeafter ==  2 || $timeafter ==  5 ||    # 注意、ifをeisifにします。
            $timeafter ==  8 || $timeafter == 12 || $timeafter == 15 ||
            $timeafter == 17 || $timeafter == 21 || $timeafter == 24 ||
            $timeafter == 26) {
                
#さくら用 play = 遊ぶ,pat = なでる,feed = 餌をやる,hit = しかる,out = 外に出す。話す=tark 手を握る=nigi 結婚!=pro  家に誘う=home 告る=kokuhaku  
#かえで用 茶=feed 散歩=out 遊ぶ=play  戦隊トーク=tark  さくら呼ぶ=call  さくらの事訊く=ask  不意打ち=attack  肩叩き=tataki 結婚!=pro  告る=kokuhaku                  

            
            if ($love < 0) {    # キャラがかえでで、好感度が0未満の場合
                &input('radio','mode','feed',' checked','<font color=4682b4>お茶にする<br>');
                &input('radio','mode','play','','<font color=4682b4>少し遊ぶ<br>');
                &input('radio','mode','tark','','<font color=4682b4>戦隊トークで盛り上げる<BR>');
#                &input('radio','mode','out','','<font color=4682b4>散歩に誘う<BR>');
#                &input('radio','mode','pro','','<font color=4682b4>結婚してくれぇーー!!<BR>');
#                &input('radio','mode','home','','<font color=4682b4>家に招待する<BR>');
                print "</td>\n";
                print "<td>\n";
                &input('radio','mode','call','','<font color=4682b4>さくらを呼んでもらう<br>');
                &input('radio','mode','ask','','<font color=4682b4>さくらのことを訊く<br>');
#                &input('radio','mode','attack','','<font color=4682b4>不意打ち!とりゃっ!<BR>');
#                &input('radio','mode','tataki','','<font color=4682b4>肩をもんでやる<BR>');
#                &input('radio','mode','kokuhaku','','<font color=4682b4>好きです(直)<BR>');
                print "</td>\n";
                print "</tr>\n";
            }

次に新しく追加した「探しに行く」コマンドの処理を追加します。
例は、2分の1の確率で、お散歩から帰ってこさせる(会える)ようにしました。
アクション(sub action)に下記のように追記して下さい。

    &header;
    &title;
    &bodytop("恋愛データ($num)");
    &petdata;
    srand(time);
    $rnd = int(rand(10) + 1);
    $fa = $FORM{'mode'};

    if ($firstvisit == 0) {    # 初めての訪問イベント完了
        $firstvisit = 1;
    }

    if ($fa eq 'play') { $lastplay = time; $playname = $name; }
    if ($fa eq 'out')  { $out = 1; $outdate = time; $outname = $name; }
    
    if ($fa eq 'sagasu') {
        if ($rnd <= 5) {    # 見つからないときは、
            $disp_img = 'mitukaranai.gif';    # 見つからないときの画像
            $disp_msg = '見つかりませんでした。';    # 見つからないときのメッセージ
            &petnowwaku($disp_img,$disp_msg);
            $love--;    # 見つからなかったら好感度マイナス1
        }
        else {    # 見つかったときは、
            $disp_img = 'mitukaru.gif';    # 見つかったときの画像
            $disp_msg = '見つかりました。';    # 見つかったときのメッセージ
            &petnowwaku($disp_img,$disp_msg);
            $out = 0;    # お散歩から帰ってこさせる(お散歩中は$outが1)
            $love++;    # 好感度プラス1
        }
    }

    elsif ($rnd <= $rnd_border) {    # 注意、ifをelsifにする
    
        if ($timeafter ==  0 || $timeafter ==  2 || $timeafter ==  5 ||
            $timeafter ==  8 || $timeafter == 12 || $timeafter == 15 ||
            $timeafter == 17 || $timeafter == 21 || $timeafter == 24 ||
            $timeafter == 26) {

            &petnowwaku($rnd_img2,$rnd_msg2);
        }
        else {
        &petnowwaku($rnd_img,$rnd_msg);
        }
        $love--;
    }

$rnd <= 5の所の数字を変えると、確率を変えられます。
1〜10の値を入れてください。
数字を大きくすると、会えない確率が高くなります。





一応動作も確認しました。
コピペすればエラーは出ないはずです。
初めての訪問のイベントだけ、まだ未完ですので、
どんな風にするか、またご連絡下さいませ。