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