#!/usr/local/bin/perl # 日本語ライブラリの読み込み require 'jcode.pl'; # 挑戦者ライブラリの読み込み require 'battle.pl'; # レジストライブラリの読み込み require 'regist.pl'; require 'ffadventure.cgi'; #-----------------------------------------------# #ダンジョン拡張スクリプト by Red # #HOME http://red911.starweb.ne.jp/ # #SUB http://www6.ocn.ne.jp/~red911/ # #MAIL malmsteen911@yahoo.co.jp # #お気づきの点があれば上記連絡先へw # #サポートは行いません、自己責任でお使い下さい♪ # #-----------------------------------------------# #gun-online.com様のFFADVENTURE(改)フォーマットです。 # #----ST画面からのリンク方法----# #下記の様なフォームを取り付けてください。 #(何度でも行けてしまうのも問題なので$kmori等と絡めると良いですね。^^;) #
# # # # # # #
#戦闘場所名 $dan_name = "***"; #連続戦闘数(つまり敵の数)、ここに合わせてモンスターの設定も増減して下さい。 $m_kazu = "20"; #最高ターン数 $m_turn = "90"; #連続レベルアップ on=1 off=0 $lvup = "1"; #突破記録 使用=1 未使用=0 使用する場合は空のm_battle2.cgiを属性606で作成して下さい。 #記録を見るファイルパスはm_battle.cgi?mode=check $m_kiroku = "0"; #記録を使う場合のランキング最大表示人数 $rank_suu = "20"; #背景画像(ffadventure.iniで設定したものを使うならこのまま) $back_ground = "$backgif"; #モンスター名 $m_name[1] = "***のモンスターNo.1"; $m_name[2] = "***のモンスターNo.2"; $m_name[3] = "***のモンスターNo.3"; $m_name[4] = "4"; $m_name[5] = "5"; $m_name[6] = "6"; $m_name[7] = "7"; $m_name[8] = "8"; $m_name[9] = "9"; $m_name[10] = "10"; $m_name[11] = "11"; $m_name[12] = "12"; $m_name[13] = "13"; $m_name[14] = "14"; $m_name[15] = "15"; $m_name[16] = "16"; $m_name[17] = "17"; $m_name[18] = "18"; $m_name[19] = "19"; $m_name[20] = "20"; #経験値 $m_ex[1] = "350000000"; $m_ex[2] = "489999999"; $m_ex[3] = "685999998"; $m_ex[4] = "960399997"; $m_ex[5] = "1344559995"; $m_ex[6] = "1882383992"; $m_ex[7] = "2635337588"; $m_ex[8] = "3689472623"; $m_ex[9] = "5165261672"; $m_ex[10] = "7231366340"; $m_ex[11] = "10123912876"; $m_ex[12] = "14173478026"; $m_ex[13] = "19842869236"; $m_ex[14] = "27780016930"; $m_ex[15] = "38892023702"; $m_ex[16] = "54448833182"; $m_ex[17] = "76228366454"; $m_ex[18] = "106719713035"; $m_ex[19] = "149407598249"; $m_ex[20] = "209170637548"; #モンスターのHP、(設定数+(ランダム(設定数/10)))つまり設定数の1.0〜1.1倍。 $m_hp[1] = "184880057"; $m_hp[2] = "198820869"; $m_hp[3] = "371382195"; $m_hp[4] = "541767087"; $m_hp[5] = "629580270"; $m_hp[6] = "1218609378"; $m_hp[7] = "1238025106"; $m_hp[8] = "2549439982"; $m_hp[9] = "2524225522"; $m_hp[10] = "2897299648"; $m_hp[11] = "6498542540"; $m_hp[12] = "9078573315"; $m_hp[13] = "12052799615"; $m_hp[14] = "19364713043"; $m_hp[15] = "20670680487"; $m_hp[16] = "28391912220"; $m_hp[17] = "34408023346"; $m_hp[18] = "56345035926"; $m_hp[19] = "104712157068"; $m_hp[20] = "107393085441"; #回避率、(設定数%の確率で回避) $m_kaihi[1] = "10"; $m_kaihi[2] = "20"; $m_kaihi[3] = "30"; $m_kaihi[4] = "40"; $m_kaihi[5] = "50"; $m_kaihi[6] = "60"; $m_kaihi[7] = "70"; $m_kaihi[8] = "70"; $m_kaihi[9] = "80"; $m_kaihi[10] = "90"; $m_kaihi[11] = "100"; $m_kaihi[12] = "110"; $m_kaihi[13] = "120"; $m_kaihi[14] = "130"; $m_kaihi[15] = "140"; $m_kaihi[16] = "150"; $m_kaihi[17] = "170"; $m_kaihi[18] = "180"; $m_kaihi[19] = "190"; $m_kaihi[20] = "200"; #命中率、(設定数%の確率でHIT) $m_hit[1] = "90"; $m_hit[2] = "110"; $m_hit[3] = "120"; $m_hit[4] = "110"; $m_hit[5] = "110"; $m_hit[6] = "110"; $m_hit[7] = "110"; $m_hit[8] = "110"; $m_hit[9] = "110"; $m_hit[10] = "110"; $m_hit[11] = "110"; $m_hit[12] = "110"; $m_hit[13] = "110"; $m_hit[14] = "130"; $m_hit[15] = "140"; $m_hit[16] = "150"; $m_hit[17] = "160"; $m_hit[18] = "170"; $m_hit[19] = "190"; $m_hit[20] = "200"; #モンスターの攻撃力、(ランダム(設定数))+(設定数/10)が受けるダメージ $m_dmg[1] = "1000000"; $m_dmg[2] = "2000000"; $m_dmg[3] = "3000000"; $m_dmg[4] = "8000000"; $m_dmg[5] = "16000000"; $m_dmg[6] = "32000000"; $m_dmg[7] = "64000000"; $m_dmg[8] = "12800000"; $m_dmg[9] = "25600000"; $m_dmg[10] = "512000000"; $m_dmg[11] = "500000000"; $m_dmg[12] = "600000000"; $m_dmg[13] = "120000000"; $m_dmg[14] = "240000000"; $m_dmg[15] = "480000000"; $m_dmg[16] = "960000000"; $m_dmg[17] = "189990000"; $m_dmg[18] = "200000000"; $m_dmg[19] = "220000000"; $m_dmg[20] = "200000000"; #勝利時の入手金額 $m_gold[1] = "10000000"; $m_gold[2] = "20000000"; $m_gold[3] = "30000000"; $m_gold[4] = "40000000"; $m_gold[5] = "50000000"; $m_gold[6] = "60000000"; $m_gold[7] = "70000000"; $m_gold[8] = "80000000"; $m_gold[9] = "90000000"; $m_gold[10] = "100000000"; $m_gold[11] = "110000000"; $m_gold[12] = "120000000"; $m_gold[13] = "130000000"; $m_gold[14] = "140000000"; $m_gold[15] = "150000000"; $m_gold[16] = "160000000"; $m_gold[17] = "170000000"; $m_gold[18] = "180000000"; $m_gold[19] = "190000000"; $m_gold[20] = "200000000"; &decode; if($ENV{HTTP_REFERER} eq "m_1"){&error("アクセスできません。");} if($mode eq 'm_1'){&m_1;} elsif($mode eq 'check'){✓} else{ &error("現在アクセスできません"); } sub AUTOLOAD { my $name = ($AUTOLOAD =~ /^main::(.+)$/)[0]; ($FLAG{'autoload'}++ > 50) && die $AUTOLOAD; # 念のため無限ループ防止 defined %SUB or &SUBS; if (!defined $SUB{$name}) {&error("定義されていない関数($AUTOLOAD)が呼ばれました。"); exit;} eval $SUB{$name}; length($@) && &error("EVAL ERROR: $@ ($AUTOLOAD)"); delete $SUB{$name}; goto &{'main::' . $name}; } sub SUBS { %SUB = ( m_1 => <<'__SUB__', sub m_1 { if($battle_flag) { &error("現在戦闘中です。少しお待ちになってから戦闘してください。"); } $battle_flag=1; open(IN,"./charalog/$in{'id'}.cgi") or &error('ファイルを開けませんでした。'); @battle = ; close(IN); foreach(@battle){ ($kid,$kpass,$ksite,$kurl,$kname,$ksex,$kchara,$kn_0,$kn_1,$kn_2,$kn_3,$kn_4,$kn_5,$kn_6,$ksyoku,$khp,$kmaxhp,$kex,$klv,$kgold,$klp,$ktotal,$kkati,$kwaza,$kitem,$kmons,$khost,$kdate,$kmori,$kdef,$ktac,$kkumite) = split(/<>/); if($in{'id'} eq "$kid" and $in{'pass'} eq "$kpass") { last; } } if($in{'id'} ne "$kid" or $in{'pass'} ne "$kpass"){&error("オープンエラー、ID・パスワードが正しくありません。");} if($in{'kto'} ne "$ktotal"){&error("連続クリック、更新ボタンの使用は禁止です。");} if($kitem){ open(IN,"$item_file"); @battle_item = ; close(IN); foreach(@battle_item){ ($ci_no,$ci_name,$ci_dmg,$ci_gold) = split(/<>/); if($kitem eq $ci_no) { last; } } } if($kdef){ open(IN,"$def_file"); @battle_def = ; close(IN); foreach(@battle_def){ ($cd_no,$cd_name,$cd_dmg) = split(/<>/); if($kdef eq $cd_no) { last; } } } $mno2 = $in{'mno'} + 1; $mname = $m_name[$in{'mno'}]; $mex = $m_ex[$in{'mno'}]; $mhp = $m_hp[$in{'mno'}]; $mkaihi = $m_kaihi[$in{'mno'}]; $mdmg = $m_dmg[$in{'mno'}]; $mhit = $m_hit[$in{'mno'}]; $khp_flg = $khp; $mhp = $mhp + int(rand($mhp)); $mhp_flg = $mhp; $i=1;$j=0;@battle_date=(); foreach(1..$m_turn) { $dmg1 = $klv * (int(rand(3)) + 1); $dmg2 = (int(rand($mdmg)) + ($mdmg / 10)); $clit1 = ""; $clit2 = ""; $com1 = ""; $com2 = "$mnameが襲いかかった!!"; $kawasi1 = ""; $kawasi2 = ""; &tyousensya; if(int(rand(30)) == 0) { $clit2 .= "クリティカル!!"; $dmg2 = int($dmg2 * 1.5); } if($dmg2 < 0){$dmg2 = $dmg2;} elsif($dmg2 < $cd_dmg){$dmg2 = 0;} else{$dmg2 = $dmg2 - $cd_dmg;} if(int(rand(100)) > $mhit and $m_meityu==0) { $dmg2 = 0; $kawasi1 = "

$knameは身をかわした!"; } if($mkahi > int(rand(100)) and $meityu==0) { $dmg1 = 0; $kawasi2 = "

$mnameは身をかわした!"; } $battle_date[$j] = <<"EOM";
$iターン
なまえ HP 職業 LV
$kname $khp_flg\/$kmaxhp $chara_syoku[$ksyoku] $klv
VS
なまえ HP
$mname $mhp/$mhp_flg

$com1 $clit1 $kawasi2 $mname に $dmg1 のダメージを与えた。

$com2 $clit2 $kawasi1 $kname に $dmg2 のダメージを与えた。

EOM $mhp = $mhp - $dmg1; if($mhp <= 0) { $win = 1; last; } else {$khp_flg = $khp_flg - $dmg2;} if($khp_flg <= 0) { $win = 0; last; } $i++; $j++; } if($win) { if($m_kiroku == "1"){if($in{'mno'} eq $m_kazu){ if($lockkey == 1){ &lock1; }elsif($lockkey == 2){ &lock2; } open(IN,"m_battle2.cgi")|| &error('オープンエラー','指定された書込みファイルが開けません。'); @m_k = ; close(IN); $hit=0;@new=(); foreach(@m_k){ ($m_id,$m_pass,$m_name,$m_kazu) = split(/<>/); if($kid eq "$m_id" and $kpass eq "$m_pass"){ unshift(@new,"$kid<>$kpass<>$kname<>finish<>\n"); $hit=1; }else{ push(@new,"$_"); } } open(IN,">mbattle2.cgi"); print IN @new; close(IN); if(-e $lockfile){ unlink($lockfile); }}} $ktotal += 1; $kkati += 1; $kex = $kex + $mex; $kmori -= 1; $gold = $m_gold[$in{'mno'}]; $kgold = $kgold + $gold; $comment = "$knameは、戦闘に勝利した!!

"; }else{ if($m_kiroku == "1"){if($lockkey == 1){ &lock1; }elsif($lockkey == 2){ &lock2; } open(IN,"m_battle2.cgi")|| &error('オープンエラー','指定された書込みファイルが開けません。'); @m_k = ; close(IN); $hit=0;@new=(); foreach(@m_k){ ($m_id,$m_pass,$m_name,$m_kazu) = split(/<>/); if($kid eq "$m_id" and $kpass eq "$m_pass"){ if($m_kazu eq "finish"){$sin_m = $m_kazu;}elsif($in{'mno'} - 1 > $m_kazu){$sin_m = $in{'mno'} - 1;}else{$sin_m = $m_kazu;} unshift(@new,"$kid<>$kpass<>$kname<>$sin_m<>\n"); $hit=1; }else{ push(@new,"$_"); } } if(!$hit){ $sin_m = $in{'mno'} - 1; unshift(@new,"$kid<>$kpass<>$kname<>$sin_m<>\n"); } open(IN,">m_battle2.cgi"); print IN @new; close(IN); if(-e $lockfile){ unlink($lockfile); }} $ktotal += 1; $mex = 1; $kex = $kex + $mex; $kmori = 0; $comment = "$knameは、戦闘に負けた・・・。

"; } if($lvup){ while($kex >= ($klv * $lv_up)) { $comment .= "
$knameは、レベルが上がった!!

"; $hpup = int(rand($kn_3)) + 1; $kmaxhp = $kmaxhp + $hpup; $khp = $kmaxhp; $comment .= "HPが$hpup上がった!!

"; $kex = $kex - ($klv * $lv_up); $klv += 1; if(int(rand(5)) == 0) { $kn_0 += 1; $comment .= "力が上がった。";} if(int(rand(5)) == 0) { $kn_1 += 1; $comment .= "知\能\が上がった。";} if(int(rand(5)) == 0) { $kn_2 += 1; $comment .= "信仰心が上がった。";} if(int(rand(5)) == 0) { $kn_3 += 1; $comment .= "生命力が上がった。";} if(int(rand(5)) == 0) { $kn_4 += 1; $comment .= "器用さが上がった。";} if(int(rand(5)) == 0) { $kn_5 += 1; $comment .= "速さが上がった。";} if(int(rand(5)) == 0) { $kn_6 += 1; $comment .= "魅力が上がった。";} } }else{ if($kex >= ($klv * $lv_up)){ $comment .= "$knameは、レベルが上がった!!

"; $hpup = int(rand($kn_3)) + 1; $kmaxhp = $kmaxhp + $hpup; $khp = $kmaxhp; $comment .= "HPが$hpup上がった!!

"; $kex = 0; $klv += 1; if(int(rand(5)) == 0) { $kn_0 += 1; $comment .= "力が上がった。";} if(int(rand(5)) == 0) { $kn_1 += 1; $comment .= "知\能\が上がった。";} if(int(rand(5)) == 0) { $kn_2 += 1; $comment .= "信仰心が上がった。";} if(int(rand(5)) == 0) { $kn_3 += 1; $comment .= "生命力が上がった。";} if(int(rand(5)) == 0) { $kn_4 += 1; $comment .= "器用さが上がった。";} if(int(rand(5)) == 0) { $kn_5 += 1; $comment .= "速さが上がった。";} if(int(rand(5)) == 0) { $kn_6 += 1; $comment .= "魅力が上がった。";} } } $khp = $khp_flg + int(rand($kn_3)); if($khp > $kmaxhp) { $khp = $kmaxhp; } if($khp <= 0) { $khp = $kmaxhp; } ®ist; &header; print <<"_BATTLE_"; $dan_name



$in{'mno'}体目!$mnameが現れた!


_BATTLE_ $i=0; foreach(@battle_date){ print "$battle_date[$i]"; $i++; } if($win) { print "$comment

$knameは、$mexの経験値を手に入れた。$goldG手に入れた。

\n"; } else { print "$comment

$knameは、$mexの経験値を手に入れた。

\n"; } if($m_kazu eq $in{'mno'}) { print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; }elsif($win){ print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; }else{ print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; } &footer; $battle_flag=0; exit; } __SUB__ footer => <<'__SUB__', #------------------# # HTMLのフッター # #------------------# sub footer { print "
\n"; print "ダンジョン\拡\張\&\攻\略\状\況\記\録\スクリプト edit by Red
\n"; print "FF ADVENTURE(改) v1.104 edit by GUN
\n"; print "FF ADVENTURE(改) v1.104 remodeling by GUN
\n"; print "FF ADVENTURE v0.43 by D.Takamiya(CUMRO)
\n"; print "
\n"; } __SUB__ header => <<'__SUB__', #------------------# # HTMLのヘッダー # #------------------# sub header { print "Content-Type: text/html\n\n"; print <<"EOM"; EOM print "$main_title\n"; print "\n"; } __SUB__ check => <<'__SUB__', #------------------# # HTMLのヘッダー # #------------------# sub check { open(IN,"./m_battle2.cgi") or &error('ファイルを開けませんでした。'); @KIROKU = ; close(IN); @tmp1 = @tmp2 = (); foreach (@KIROKU) { my ($aa,$bb,$cc,$dd) = split /<>/; push(@tmp1, $dd); push(@tmp2, $cc); } @KIROKU = @KIROKU[sort {$tmp1[$b] <=> $tmp1[$a] or $tmp2[$b] <=> $tmp2[$a]} 0 .. $#tmp1]; &header; print <<"EOM"; $dan_name 攻略状況 
EOM $i=1; foreach(@KIROKU){ ($rid,$rpass,$rname,$rkazu) = split(/<>/); if($rkazu eq "finish"){$kazu = "攻略!";}elsif($rkazu==0){$kazu = "初戦敗退";}else{$kazu = "$rkazu体撃破";} if($i == $rank_suu){ last; } print "\n"; print "\n"; print "\n"; $i++; } print "
キャラ名撃破数
$i 位$rname$kazu

\n"; &footer; exit; } __SUB__ ); }