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; } |