battle.cgi

「battle.cgi」の編集履歴(バックアップ)一覧はこちら

battle.cgi」(2010/09/27 (月) 20:16:47) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p># Sub Enemy List #<br /> sub enemy {<br />     &amp;get_all_users;<br />     &amp;form_table('up','100%',1);<br />     &amp;reload;<br />     print qq|襲撃  |;<br />     &amp;submit_button;<br />     print qq|&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=left&gt;\n|;<br />     foreach (@alllines) {<br />         ($uid,$uname,$usex,$uarea,$uport,$utactics) = (split(/&lt;&gt;/))[0,1,3,15,16,18];<br />         if ( ((($port != $uport) || !$port) &amp;&amp; ($port || $uport || ($area != $uarea))) || $id == $uid) { next }<br />         $checked = !$first ? ' checked' : '';<br />         $surrender = $utactics == 3 ? ' 白旗' : '';<br />         $first =1;<br />         $sex_img = $usex ? $wmn_img : $man_img;<br />         $on_click = qq|onClick="return opWin('$listcgi?mode=uprofile&amp;uid=$uid','win6')"|;<br />         print qq|&lt;input type=radio name=uid value="$uid"$checked&gt;\n|;<br />         print qq|&lt;img src="$img/$sex_img"&gt;&lt;a href="$listcgi?mode=uprofile&amp;uid=$uid" $on_click target=_blank&gt;$uname&lt;/a&gt;$surrender&lt;br&gt;\n|;<br />     }<br />     if (!$sex_img) { print qq|ここには誰もいません| }<br />     print qq|&lt;input type=hidden name=mode value="battle"&gt;\n|;<br />     &amp;id_ps;<br />     &amp;form_table('down');<br />     &amp;b_lift;<br /> }<br /><font color="#339966">襲撃対象欄表示処理</font><br /><br /> # Sub Battle #<br /> sub battle {<br />     &amp;get_me($F{'id'});<br />     if ($action ne $F{'reload'}) { &amp;play; exit }<br />     if ($#ship_ind &lt; 0 ) { &amp;play("船がありません"); exit }<br />     if (!$F{'uid'}) { &amp;play; exit }<br />     &amp;get_u($F{'uid'});<br />     if ( ((($port != $uport) || !$port) &amp;&amp; ($port || $uport || ($area != $uarea))) || $id == $uid) { &amp;play; exit }<br />     &amp;b_limit;<br />     $urecord  .= "$nameに襲撃されました!&lt;br&gt;";<br />     if (($utactics &gt;= 3) ||($#uship_ind &lt; 0) || ($utactics == 2 &amp;&amp; rand(100) &lt; &amp;level($utexp*(1 + $ut_item*0.01)) ) ) {<br /><font color="#339966">対象の戦術が3以上(デフォルトでは降伏)か、船が無いか、対象の戦術が回避かつ、数式が真だった場合</font><br />         $piracy += 100;<br />         my $lost_money = int($umoney * 0.005);<br /><font color="#339966">海賊名声+100、奪取金額=対象の金額*0.005</font><br />         $money += $lost_money;<br />         $umoney -= $lost_money;<br />         $upiracy -= 200;<br />         $uadven -= 100;<br />         &amp;add_record("$nameに襲撃され降伏し、$lost_money Gを献上しました",1);<br />         &amp;set_me;<br />         &amp;set_u;<br />         &amp;msg("&lt;font color=\"#00AA00\"&gt;$unameは降伏しました&lt;br&gt;$lost_money Gを献上してきました&lt;/font&gt;");<br />         &amp;play;<br />         exit<br />     }<br />     &amp;ship_data;<br />     &amp;uship_data;<br />     if ($tactics == 0) { $turn = @ship_ind &lt; 3 ? @ship_ind : 3 }<br />     elsif ($tactics == 1) { $turn = @ship_ind &lt; 2 ? @ship_ind : 2 }<br />     else { $turn = 1 }<br /><font color="#339966">戦術が0(デフォルト好戦)なら、数式が真なら現在船数、偽なら3を$turnに格納。</font><br />     my $aup_exist = &amp;item_search($item_line,@atkup);<br />     if ($aup_exist != -1 &amp;&amp; rand(100) &lt; 1 &amp;&amp; @ship_ind &gt; 3) {<br />         $turn++;<br />         &amp;msg("&lt;font color=\"#00AA00\"&gt;$atkup[$aup_exist]があやしく笑う!&lt;br&gt;攻撃回数+1!&lt;/font&gt;");<br />     }<br /><font color="#339966">特定(ここではターン増加の)財宝を所持していれば$aup_existは0以上になる。</font><br /><font color="#339966">$aup_existが-1ではなく、かつランダム判定が真、かつ船の数が4以上ならば、$turnが1増加。</font><br />     $uturn = $tactics - $utactics &gt; 0 ? 1 : 0; # 被襲撃側の方がより好戦である場合<br /><font color="#339966">自分の戦術-対象戦術が0より大きければ、1、小さければ0を$uturnに格納。</font><br />     my $van_exist = &amp;item_search($uitem_line,@vanish);<br />     if ($utactics == 2 &amp;&amp; $van_exist != -1 &amp;&amp; rand(100) &lt; 5) {<br />         $turn = -1;<br />         $uturn = -1;<br />         &amp;msg("&lt;font color=\"#00AA00\"&gt;$unameの$vanish[$van_exist]が激しく輝き、敵は消えました・・・&lt;/font&gt;");<br />         $urecord .= "$vanish[$van_exist]の加護により回避しました!&lt;br&gt;";<br />     }<br />     $a_i_atk = $a_u_atk = 0;<br />     for (0 .. ($turn - 1)) {<br />         $i_atked = &amp;s_sort;<br />         $u_atked = int(rand(@uship));<br /><font color="#339966">攻撃する船の選択</font><br />         if ($utactics) {<font color="#339966"><br /> 好戦以外の場合</font><br />             my $uavoid = $utactics == 2 ? $ucmd / 3 : $ucmd / 5;<br /><font color="#339966">2(デフォ回避)なら指揮力/3、それ以外(デフォ適度)なら指揮力/5を$uavoidに格納。</font><br />             $uavoid = $uavoid * (($uship[$u_atked][3] + ($unav * 0.01))/ 7);<br /><font color="#339966">$uavoid*((対象の攻撃船のノット数+(航海力*0.01)/7))を$uavoidに格納。</font><br />             if (rand(100) &lt; $uavoid) {<br />                 &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameの$uship[$u_atked][4]に攻撃失敗!&lt;/font&gt;");<br />                 next<br />             }<br />         }<br />         &amp;b_p_d;<br /><font color="#339966">攻撃力の算出</font><br />         my $sh_exist = &amp;item_search($uitem_line,@shield);<br />         if ($sh_exist != -1) {<br />             if (rand(100) &lt; 10 - 2 * $sh_exist) {<br />                 &amp;msg("&lt;font color=\"#00AA00\"&gt;$unameの$shield[$sh_exist]が攻撃を吸収!攻撃力ダウン!&lt;/font&gt;");<br />                 $i_pow = int($i_pow * 0.9);<br />                 $protect = $shield[$sh_exist];<br />             }<br />         }<br />         $a_i_atk += $i_pow;<br />         if ($i_pow - int($us_pow / 5) &lt; 0) { $usailor -= 5 * $i_pow } # 水夫で耐えた場合(被)<br /><font color="#339966">攻撃力-対象の積載水夫/5が0より小さければ、対象水夫数-5*攻撃力。</font><br />         else {<br />             $usailor -= $us_pow;<br />             $usailor -= 1 if $usailor &gt; 0;<br />             $i_pow -= int($us_pow / 5);<br />             if ($uship[$u_atked][2] - $i_pow &gt; 0) {<br /><font color="#339966">対象HP-攻撃力が>0の場合</font><br />                 $uship[$u_atked][2] -= $i_pow;<br />                 &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameの$uship[$u_atked][4]を攻撃!$i_pow ptのダメージを与えました!&lt;/font&gt;")<br />             } else {<br />                 if($#ship &lt; 16 ) {<font color="#339966"><br /> 船が16隻より下だった場合</font><br />                     push(@ship, $uship[$u_atked]);<br />                     &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameから$uship[$u_atked][4]を奪取!&lt;/font&gt;");<br />                     $get_s .= "$uship[$u_atked][4] "<br />                 } else {<br />                     &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameの$uship[$u_atked][4]を撃沈!&lt;/font&gt;");<br />                     $sink_s .= "$uship[$u_atked][4] "<br />                 }<br />                 &amp;u_lost;<br />                 if ($#uship &lt; 0) { $a_u_atk = 0; last }<br />             }<br />         }<br />         my $ualv = &amp;level($uaexp*(1 + $ut_item*0.01));<br />         if (rand(200) &lt; $ualv) { $u_pow += $ualv }<br />         my $plv = &amp;level($pexp*(1 + $t_item*0.01));<br />         if (rand(200) &lt; $plv) { $u_pow = int($u_pow * 0.9); &amp;msg("&lt;font color=\"#00AA00\"&gt;敵をひるませました!&lt;/font&gt;") }<br />         $a_u_atk += $u_pow;<br />         if (&amp;u_attack == -1) { $a_i_atk = 0; last }<br />         if ($utactics == 2) { last if rand(100) &lt; $ucmd * 0.5 }<br />     }<br />     for (0 .. ($uturn -1)) {<br />         if ($#uship &lt; 0 || $#ship &lt; 0) { last; }<br />         last if $uturn == 0;<br />         $i_atked = int(rand(@ship));<br />         $u_atked = int(rand(@uship));<br />         &amp;b_p_d;<br />         $a_u_atk += $u_pow;<br />         if (&amp;u_attack == -1) { $a_i_atk = 0; last }<br />     }<br /><br />     if ($a_i_atk &gt;= $a_u_atk &amp;&amp; $a_i_atk != 0) {<br />         my $pup = 3000;<br />         $pup += int( ($upiracy - $piracy) * 0.5 ) if $upiracy &gt; $piracy;<br />         $piracy += $pup; $pexp += $pup;<br />         my $aup = int( ($upiracy - $piracy) * 0.01 ) if $piracy &lt; $upiracy;<br />         $adven += $aup; $aexp += $aup;<br />         $upiracy -= 200;<br />         $utrade -= 200;<br />         &amp;item_get;<br />         &amp;msg("&lt;font color=\"#0000FF\"&gt;戦闘に勝利しました!&lt;/font&gt;");<br />         my $lost_money = int($umoney * rand($robmoney) * 0.01);<br />         if (int(rand(100)) &gt; ($ucmd / 4) &amp;&amp; $lost_money) {<br />             $get_money = $lost_money;<br />             $money += $lost_money;<br />             $umoney -= $lost_money;<br />             &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameから$lost_money Gを略奪しました!&lt;/font&gt;")<br />         }<br />     } elsif ($a_i_atk != 0) {<br />         my $upup = 2000;<br />         $upup += int($piracy/10) if $piracy &gt; $upiracy;<br />         $upiracy += $upup; $upexp += $upup;<br />         $piracy = int(0.9 * $piracy);<br />         $trade = int(0.9 * $trade);<br />         &amp;msg("&lt;font color=\"#FF0000\"&gt;返り討ちにされました&lt;/font&gt;");<br />         $urecord  .= "返り討ちにしました!&lt;br&gt;"<br />     }<br />     $urecord .= "$protectの加護を受けました&lt;br&gt;" if $protect;<br />     $get_s = 'なし' if !$get_s; $sink_s = 'なし' if !$sink_s; $get_money = '0' if !$get_money; $rob_item = 'なし' if !$rob_item;<br />     $uget_s = 'なし' if !$uget_s; $usink_s = 'なし' if !$usink_s;<br />     if ($a_i_atk == 0 &amp;&amp; $uturn &lt;= 0) {<br />         &amp;add_record("$unameを襲撃!襲撃失敗!");<br />         &amp;add_record("$nameが急襲!回避成功!",1)<br />     } else {<br />         &amp;add_record("$unameを襲撃!&lt;br&gt;獲得[奪取:$get_s、撃沈:$sink_s、資金:$get_money G、財宝:$rob_item]&lt;br&gt;被害[奪取:$uget_s、撃沈:$usink_s]");<br />         &amp;add_record("$nameが急襲!&lt;br&gt;被害[奪取:$get_s、撃沈:$sink_s、資金:$get_money G、財宝:$rob_item]&lt;br&gt;獲得[奪取:$uget_s、撃沈:$usink_s]",1)<br />     }<br />     &amp;into_ind; &amp;into_uind;<br />     &amp;set_me;<br />     &amp;set_u;<br />     &amp;play<br /> }<br /><br /> # Sub Battle Pre-disposal #<br /> sub b_p_d {<br />     $utotal = 0;<br />     for(0 .. $#uship){ $utotal += $uship[$_][1] }<br />     &amp;fleet;<br />     $is_pow = $total ? int($sailor * $ship[$i_atked][1] / $total) : 0; # 積荷割合によって水夫配置<br />     $us_pow = $utotal ? int($usailor * $uship[$u_atked][1] / $utotal) : 0;<br />     $i_pow = int(rand(2 * $atk) + ($is_pow / 5)); # 戦闘力 = 船長戦闘力 + 水夫/5<br />     $u_pow = int(rand(2 * $uatk) + ($us_pow / 5))<br /> }<br /><br /> # Sub U Attack #<br /> sub u_attack {<br />     if ($u_pow - int($is_pow / 5) &lt; 0) { $sailor -= 5 * $u_pow; return 1; } # 水夫で耐えた場合(自)<br />     else {<br />         $sailor -= $is_pow;<br />         $sailor -= 1 if $sailor &gt; 0;<br />         $u_pow -= int($is_pow / 5);<br />         if ($ship[$i_atked][2] - $u_pow &gt; 0) {<br />             $ship[$i_atked][2] -= $u_pow;<br />             &amp;msg("&lt;font color=\"#FF0000\"&gt;$ship[$i_atked][4]を攻撃されました!$u_pow ptのダメージを受けました!&lt;/font&gt;");<br />             return 1;<br />         } else {<br />             if($#uship &lt; 16 ) {<br />                 push(@uship , $ship[$i_atked]);<br />                 &amp;msg("&lt;font color=\"#FF0000\"&gt;$unameに$ship[$i_atked][4]を奪われました!&lt;/font&gt;");<br />                 $uget_s .= "$ship[$i_atked][4] ";<br />                 &amp;i_lost;<br />                 return -1 if $#ship &lt; 0;<br />                 return 1;<br />             } else { &amp;msg("&lt;font color=\"#FF0000\"&gt;$ship[$i_atked][4]を撃沈されました!&lt;/font&gt;"); $usink_s .= "$ship[$i_atked][4] " }<br />             &amp;i_lost;<br />             return -1 if $#ship &lt; 0;<br />             return 1;<br />         }<br />     }<br /> }<br /><br /> # Sub Ship Sort #<br /> sub s_sort {<br />     $most_ld = 0;<br />     for (0 .. $#ship) {<br />         if ($most_ld &lt; $ship[$_][1]) {<br />             $most_ld = $ship[$_][1];<br />             $most_nb = $_;<br />         }<br />     }<br />     return $most_nb;<br /> }<font color="#339966"><br /> $most_ld<N番目の積載なら、$most_ldにN番目の積載を格納、$most_nbにN番を格納。以下最後の船まで繰り返し$most_nbの値を返す。</font><br /><br /> # Sub Get U Ship Data #<br /> sub uship_data {<br />     undef @uship;<br />     foreach (0 .. $#uship_ind) {<br />         @{$uship[$_]} = split(/,/,$uship_ind[$_])<br />     }<br /> }<br /><br /> # Sub Into I ind #<br /> sub into_ind {<br />     undef @ship_ind;<br />     return if @ship &lt; 0;<br />     foreach (0 .. $#ship) {<br />         next if !$ship[$_][0];<br />         push(@ship_ind , "$ship[$_][0],$ship[$_][1],$ship[$_][2],$ship[$_][3],$ship[$_][4]")<br />     }<br /> }<br /><br /> # Sub Into U ind #<br /> sub into_uind {<br />     undef @uship_ind;<br />     return if $#uship &lt; 0;<br />     foreach (0 .. $#uship) {<br />         next if !$uship[$_][0];<br />         push(@uship_ind , "$uship[$_][0],$uship[$_][1],$uship[$_][2],$uship[$_][3],$uship[$_][4]")<br />     }<br /> }<br /><br /> # Sub Battle Limit # $battle_line=id,time△id,time△time<br /> sub b_limit {<br />     my @battled = split(/△/,$battle_line);<br />     my $last_b = pop(@battled);<br />     if ($battle_line =~ /$F{'uid'},/ ) { &amp;play("$unameは襲撃したばかりです"); exit }<br />     my $now = time;<br />     if ( ($now - $last_b)/60 &lt; $cont ) { &amp;play("$cont分以内に続けて戦闘はできません"); exit }<br />     unshift(@battled , "$F{'uid'},$now");<br />     $battle_line = join('△' , @battled , $now);<br /> }<br /><br /> # Sub Battle Lift #<br /> sub b_lift {<br />     my @battled = split(/△/,$battle_line);<br />     my $last_b = pop(@battled);<br />     my $now = time;<br />     my @battled = grep { ($now - (split(/,/))[1])/(60*60*24) &lt; $same } @battled;<br />     $battle_line = join('△' , @battled , $last_b);<br /> }<br /><br /> # Sub I Lost #<br /> sub i_lost {<br />     &amp;fleet;<br />     undef @my_load;<br />     $rate = $total ? 1 - ($ship[$i_atked][1] / $total) : 0;<br />     $food = int($food * $rate);<br />     my @my_lt = split(/△/,$load);<br />     foreach (0 .. $#my_lt) {<br />         ($load_name,$load_quan) = split(/,/,$my_lt[$_]);<br />         $load_quan = int($load_quan * $rate);<br />         push(@my_load , "$load_name,$load_quan") if $load_quan != 0;<br />     }<br />     $load = join('△' , @my_load);           <br />     splice(@ship , $i_atked ,1 )<br /> }<br /><br /> # Sub U Lost #<br /> sub u_lost {<br />     $utotal = 0;<br />     undef @u_load;<br />     for(0 .. $#uship){ $utotal += $uship[$_][1] }<br />     $urate = $utotal ? 1 - ($uship[$u_atked][1] / $utotal) : 0;<br />     $ufood = int($ufood * $urate);<br />     my @u_lt = split(/△/,$uload);<br />     foreach (0 .. $#u_lt) {<br />         ($uload_name,$uload_quan) = split(/,/,$u_lt[$_]);<br />         $uload_quan = int($uload_quan * $urate);<br />         push(@u_load , "$uload_name,$uload_quan") if $uload_quan != 0;<br />     }<br />     $uload = join('△' , @u_load);           <br />     splice(@uship , $u_atked ,1 )<br /> }<br /><br /> # Sub Item Search # 引数[0]=$item_line or $uitem_line, 引数[1]... = 対象アイテム<br /> sub item_search {<br />     foreach $j(1 .. $#_) {<br />         if (index($_[0],"$_[$j]") != -1) {<br />             return ($j - 1);<br />         }<br />     }<br />     return (-1);<br /> }<br /><br /> # Sub Item Get #<br /> sub item_get {<br />     return if !$uitem_line;<br />     return if int(rand(100)) &lt; ($ucmd / 4);<br />     my $gd_exist = &amp;item_search($uitem_line,@gard);<br />     if ($gd_exist != -1 &amp;&amp; rand(100) &gt; 5) {<br />         $urecord  .= "$gard[$gd_exist]の加護により財宝は守られました&lt;br&gt;";<br />         return;<br />     }<br />     my @uitem_ind = split(/,/,$uitem_line);<br />     srand(time*time);<br />     my $rob = int(rand($#uitem_ind));<br />     my @item_check = split(/,/,$item_line);<br />     foreach (@item_check) { if ($_ eq $uitem_ind[$rob]) { $find = 1; last } }<br />     return if $find;<br />     $item_line = join(',' , @item_check , $uitem_ind[$rob]);<br />     &amp;msg("&lt;font color=\"#0000FF\"&gt;$uitem_ind[$rob]を奪いました!&lt;/font&gt;");<br />     $rob_item = $uitem_ind[$rob];<br />     splice(@uitem_ind , $rob , 1);<br />     $uitem_line = join(',' , @uitem_ind)<br /> }<br /><br /> 1;</p>
<p># Sub Enemy List #<br /> sub enemy {<br />     &amp;get_all_users;<br />     &amp;form_table('up','100%',1);<br />     &amp;reload;<br />     print qq|襲撃  |;<br />     &amp;submit_button;<br />     print qq|&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=left&gt;\n|;<br />     foreach (@alllines) {<br />         ($uid,$uname,$usex,$uarea,$uport,$utactics) = (split(/&lt;&gt;/))[0,1,3,15,16,18];<br />         if ( ((($port != $uport) || !$port) &amp;&amp; ($port || $uport || ($area != $uarea))) || $id == $uid) { next }<br />         $checked = !$first ? ' checked' : '';<br />         $surrender = $utactics == 3 ? ' 白旗' : '';<br />         $first =1;<br />         $sex_img = $usex ? $wmn_img : $man_img;<br />         $on_click = qq|onClick="return opWin('$listcgi?mode=uprofile&amp;uid=$uid','win6')"|;<br />         print qq|&lt;input type=radio name=uid value="$uid"$checked&gt;\n|;<br />         print qq|&lt;img src="$img/$sex_img"&gt;&lt;a href="$listcgi?mode=uprofile&amp;uid=$uid" $on_click target=_blank&gt;$uname&lt;/a&gt;$surrender&lt;br&gt;\n|;<br />     }<br />     if (!$sex_img) { print qq|ここには誰もいません| }<br />     print qq|&lt;input type=hidden name=mode value="battle"&gt;\n|;<br />     &amp;id_ps;<br />     &amp;form_table('down');<br />     &amp;b_lift;<br /> }<br /><font color="#339966">襲撃対象欄表示処理</font><br /><br /> # Sub Battle #<br /> sub battle {<br />     &amp;get_me($F{'id'});<br />     if ($action ne $F{'reload'}) { &amp;play; exit }<br />     if ($#ship_ind &lt; 0 ) { &amp;play("船がありません"); exit }<br />     if (!$F{'uid'}) { &amp;play; exit }<br />     &amp;get_u($F{'uid'});<br />     if ( ((($port != $uport) || !$port) &amp;&amp; ($port || $uport || ($area != $uarea))) || $id == $uid) { &amp;play; exit }<br />     &amp;b_limit;<br />     $urecord  .= "$nameに襲撃されました!&lt;br&gt;";<br />     if (($utactics &gt;= 3) ||($#uship_ind &lt; 0) || ($utactics == 2 &amp;&amp; rand(100) &lt; &amp;level($utexp*(1 + $ut_item*0.01)) ) ) {<br /><font color="#339966">対象の戦術が3以上(デフォルトでは降伏)か、船が無いか、対象の戦術が回避かつ、数式が真だった場合</font><br />         $piracy += 100;<br />         my $lost_money = int($umoney * 0.005);<br /><font color="#339966">海賊名声+100、奪取金額=対象の金額*0.005</font><br />         $money += $lost_money;<br />         $umoney -= $lost_money;<br />         $upiracy -= 200;<br />         $uadven -= 100;<br />         &amp;add_record("$nameに襲撃され降伏し、$lost_money Gを献上しました",1);<br />         &amp;set_me;<br />         &amp;set_u;<br />         &amp;msg("&lt;font color=\"#00AA00\"&gt;$unameは降伏しました&lt;br&gt;$lost_money Gを献上してきました&lt;/font&gt;");<br />         &amp;play;<br />         exit<br />     }<br />     &amp;ship_data;<br />     &amp;uship_data;<br />     if ($tactics == 0) { $turn = @ship_ind &lt; 3 ? @ship_ind : 3 }<br />     elsif ($tactics == 1) { $turn = @ship_ind &lt; 2 ? @ship_ind : 2 }<br />     else { $turn = 1 }<br /><font color="#339966">戦術が0(デフォルト好戦)なら、数式が真なら現在船数、偽なら3を$turnに格納。</font><br />     my $aup_exist = &amp;item_search($item_line,@atkup);<br />     if ($aup_exist != -1 &amp;&amp; rand(100) &lt; 1 &amp;&amp; @ship_ind &gt; 3) {<br />         $turn++;<br />         &amp;msg("&lt;font color=\"#00AA00\"&gt;$atkup[$aup_exist]があやしく笑う!&lt;br&gt;攻撃回数+1!&lt;/font&gt;");<br />     }<br /><font color="#339966">特定(ここではターン増加の)財宝を所持していれば$aup_existは0以上になる。</font><br /><font color="#339966">$aup_existが-1ではなく、かつランダム判定が真、かつ船の数が4以上ならば、$turnが1増加。</font><br />     $uturn = $tactics - $utactics &gt; 0 ? 1 : 0; # 被襲撃側の方がより好戦である場合<br /><font color="#339966">自分の戦術-対象戦術が0より大きければ、1、小さければ0を$uturnに格納。</font><br />     my $van_exist = &amp;item_search($uitem_line,@vanish);<br />     if ($utactics == 2 &amp;&amp; $van_exist != -1 &amp;&amp; rand(100) &lt; 5) {<br />         $turn = -1;<br />         $uturn = -1;<br />         &amp;msg("&lt;font color=\"#00AA00\"&gt;$unameの$vanish[$van_exist]が激しく輝き、敵は消えました・・・&lt;/font&gt;");<br />         $urecord .= "$vanish[$van_exist]の加護により回避しました!&lt;br&gt;";<br />     }<br />     $a_i_atk = $a_u_atk = 0;<br />     for (0 .. ($turn - 1)) {<br />         $i_atked = &amp;s_sort;<br />         $u_atked = int(rand(@uship));<br /><font color="#339966">攻撃する船の選択</font><br />         if ($utactics) {<font color="#339966"><br /> 好戦以外の場合</font><br />             my $uavoid = $utactics == 2 ? $ucmd / 3 : $ucmd / 5;<br /><font color="#339966">2(デフォ回避)なら指揮力/3、それ以外(デフォ適度)なら指揮力/5を$uavoidに格納。</font><br />             $uavoid = $uavoid * (($uship[$u_atked][3] + ($unav * 0.01))/ 7);<br /><font color="#339966">$uavoid*((対象の攻撃船のノット数+(航海力*0.01)/7))を$uavoidに格納。</font><br />             if (rand(100) &lt; $uavoid) {<br />                 &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameの$uship[$u_atked][4]に攻撃失敗!&lt;/font&gt;");<br />                 next<br />             }<br />         }<br />         &amp;b_p_d;<br /><font color="#339966">攻撃力の算出</font><br />         my $sh_exist = &amp;item_search($uitem_line,@shield);<br />         if ($sh_exist != -1) {<br />             if (rand(100) &lt; 10 - 2 * $sh_exist) {<br />                 &amp;msg("&lt;font color=\"#00AA00\"&gt;$unameの$shield[$sh_exist]が攻撃を吸収!攻撃力ダウン!&lt;/font&gt;");<br />                 $i_pow = int($i_pow * 0.9);<br />                 $protect = $shield[$sh_exist];<br />             }<br />         }<br />         $a_i_atk += $i_pow;<br />         if ($i_pow - int($us_pow / 5) &lt; 0) { $usailor -= 5 * $i_pow } # 水夫で耐えた場合(被)<br /><font color="#339966">攻撃力-対象の積載水夫/5が0より小さければ、対象水夫数-5*攻撃力。</font><br />         else {<br />             $usailor -= $us_pow;<br />             $usailor -= 1 if $usailor &gt; 0;<br />             $i_pow -= int($us_pow / 5);<br />             if ($uship[$u_atked][2] - $i_pow &gt; 0) {<br /><font color="#339966">対象HP-攻撃力が>0の場合</font><br />                 $uship[$u_atked][2] -= $i_pow;<br />                 &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameの$uship[$u_atked][4]を攻撃!$i_pow ptのダメージを与えました!&lt;/font&gt;")<br />             } else {<br />                 if($#ship &lt; 16 ) {<font color="#339966"><br /> 船が16隻より下だった場合</font><br />                     push(@ship, $uship[$u_atked]);<br />                     &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameから$uship[$u_atked][4]を奪取!&lt;/font&gt;");<br />                     $get_s .= "$uship[$u_atked][4] "<br />                 } else {<br />                     &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameの$uship[$u_atked][4]を撃沈!&lt;/font&gt;");<br />                     $sink_s .= "$uship[$u_atked][4] "<br />                 }<br />                 &amp;u_lost;<br />                 if ($#uship &lt; 0) { $a_u_atk = 0; last }<br />             }<br />         }<br />         my $ualv = &amp;level($uaexp*(1 + $ut_item*0.01));<br />         if (rand(200) &lt; $ualv) { $u_pow += $ualv }<br />         my $plv = &amp;level($pexp*(1 + $t_item*0.01));<br />         if (rand(200) &lt; $plv) { $u_pow = int($u_pow * 0.9); &amp;msg("&lt;font color=\"#00AA00\"&gt;敵をひるませました!&lt;/font&gt;") }<br />         $a_u_atk += $u_pow;<br />         if (&amp;u_attack == -1) { $a_i_atk = 0; last }<br />         if ($utactics == 2) { last if rand(100) &lt; $ucmd * 0.5 }<br />     }<br />     for (0 .. ($uturn -1)) {<br />         if ($#uship &lt; 0 || $#ship &lt; 0) { last; }<br />         last if $uturn == 0;<br />         $i_atked = int(rand(@ship));<br />         $u_atked = int(rand(@uship));<br />         &amp;b_p_d;<br />         $a_u_atk += $u_pow;<br />         if (&amp;u_attack == -1) { $a_i_atk = 0; last }<br />     }<br /><br />     if ($a_i_atk &gt;= $a_u_atk &amp;&amp; $a_i_atk != 0) {<br />         my $pup = 3000;<br />         $pup += int( ($upiracy - $piracy) * 0.5 ) if $upiracy &gt; $piracy;<br />         $piracy += $pup; $pexp += $pup;<br />         my $aup = int( ($upiracy - $piracy) * 0.01 ) if $piracy &lt; $upiracy;<br />         $adven += $aup; $aexp += $aup;<br />         $upiracy -= 200;<br />         $utrade -= 200;<br />         &amp;item_get;<br />         &amp;msg("&lt;font color=\"#0000FF\"&gt;戦闘に勝利しました!&lt;/font&gt;");<br />         my $lost_money = int($umoney * rand($robmoney) * 0.01);<br />         if (int(rand(100)) &gt; ($ucmd / 4) &amp;&amp; $lost_money) {<br />             $get_money = $lost_money;<br />             $money += $lost_money;<br />             $umoney -= $lost_money;<br />             &amp;msg("&lt;font color=\"#0000FF\"&gt;$unameから$lost_money Gを略奪しました!&lt;/font&gt;")<br />         }<br />     } elsif ($a_i_atk != 0) {<br />         my $upup = 2000;<br />         $upup += int($piracy/10) if $piracy &gt; $upiracy;<br />         $upiracy += $upup; $upexp += $upup;<br />         $piracy = int(0.9 * $piracy);<br />         $trade = int(0.9 * $trade);<br />         &amp;msg("&lt;font color=\"#FF0000\"&gt;返り討ちにされました&lt;/font&gt;");<br />         $urecord  .= "返り討ちにしました!&lt;br&gt;"<br />     }<br />     $urecord .= "$protectの加護を受けました&lt;br&gt;" if $protect;<br />     $get_s = 'なし' if !$get_s; $sink_s = 'なし' if !$sink_s; $get_money = '0' if !$get_money; $rob_item = 'なし' if !$rob_item;<br />     $uget_s = 'なし' if !$uget_s; $usink_s = 'なし' if !$usink_s;<br />     if ($a_i_atk == 0 &amp;&amp; $uturn &lt;= 0) {<br />         &amp;add_record("$unameを襲撃!襲撃失敗!");<br />         &amp;add_record("$nameが急襲!回避成功!",1)<br />     } else {<br />         &amp;add_record("$unameを襲撃!&lt;br&gt;獲得[奪取:$get_s、撃沈:$sink_s、資金:$get_money G、財宝:$rob_item]&lt;br&gt;被害[奪取:$uget_s、撃沈:$usink_s]");<br />         &amp;add_record("$nameが急襲!&lt;br&gt;被害[奪取:$get_s、撃沈:$sink_s、資金:$get_money G、財宝:$rob_item]&lt;br&gt;獲得[奪取:$uget_s、撃沈:$usink_s]",1)<br />     }<br />     &amp;into_ind; &amp;into_uind;<br />     &amp;set_me;<br />     &amp;set_u;<br />     &amp;play<br /> }<br /><br /> # Sub Battle Pre-disposal #<br /> sub b_p_d {<br />     $utotal = 0;<br />     for(0 .. $#uship){ $utotal += $uship[$_][1] }<br />     &amp;fleet;<br />     $is_pow = $total ? int($sailor * $ship[$i_atked][1] / $total) : 0; # 積荷割合によって水夫配置<br />     $us_pow = $utotal ? int($usailor * $uship[$u_atked][1] / $utotal) : 0;<br />     $i_pow = int(rand(2 * $atk) + ($is_pow / 5)); # 戦闘力 = 船長戦闘力 + 水夫/5<br />     $u_pow = int(rand(2 * $uatk) + ($us_pow / 5))<br /> }<br /><br /> # Sub U Attack #<br /> sub u_attack {<br />     if ($u_pow - int($is_pow / 5) &lt; 0) { $sailor -= 5 * $u_pow; return 1; } # 水夫で耐えた場合(自)<br />     else {<br />         $sailor -= $is_pow;<br />         $sailor -= 1 if $sailor &gt; 0;<br />         $u_pow -= int($is_pow / 5);<br />         if ($ship[$i_atked][2] - $u_pow &gt; 0) {<br />             $ship[$i_atked][2] -= $u_pow;<br />             &amp;msg("&lt;font color=\"#FF0000\"&gt;$ship[$i_atked][4]を攻撃されました!$u_pow ptのダメージを受けました!&lt;/font&gt;");<br />             return 1;<br />         } else {<br />             if($#uship &lt; 16 ) {<br />                 push(@uship , $ship[$i_atked]);<br />                 &amp;msg("&lt;font color=\"#FF0000\"&gt;$unameに$ship[$i_atked][4]を奪われました!&lt;/font&gt;");<br />                 $uget_s .= "$ship[$i_atked][4] ";<br />                 &amp;i_lost;<br />                 return -1 if $#ship &lt; 0;<br />                 return 1;<br />             } else { &amp;msg("&lt;font color=\"#FF0000\"&gt;$ship[$i_atked][4]を撃沈されました!&lt;/font&gt;"); $usink_s .= "$ship[$i_atked][4] " }<br />             &amp;i_lost;<br />             return -1 if $#ship &lt; 0;<br />             return 1;<br />         }<br />     }<br /> }<br /><br /> # Sub Ship Sort #<br /> sub s_sort {<br />     $most_ld = 0;<br />     for (0 .. $#ship) {<br />         if ($most_ld &lt; $ship[$_][1]) {<br />             $most_ld = $ship[$_][1];<br />             $most_nb = $_;<br />         }<br />     }<br />     return $most_nb;<br /> }<font color="#339966"><br /> $most_ld<N番目の積載なら、$most_ldにN番目の積載を格納、$most_nbにN番を格納。以下最後の船まで繰り返し$most_nbの値を返す。</font><br /><br /> # Sub Get U Ship Data #<br /> sub uship_data {<br />     undef @uship;<br />     foreach (0 .. $#uship_ind) {<br />         @{$uship[$_]} = split(/,/,$uship_ind[$_])<br />     }<br /> }<br /><br /> # Sub Into I ind #<br /> sub into_ind {<br />     undef @ship_ind;<br />     return if @ship &lt; 0;<br />     foreach (0 .. $#ship) {<br />         next if !$ship[$_][0];<br />         push(@ship_ind , "$ship[$_][0],$ship[$_][1],$ship[$_][2],$ship[$_][3],$ship[$_][4]")<br />     }<br /> }<br /><br /> # Sub Into U ind #<br /> sub into_uind {<br />     undef @uship_ind;<br />     return if $#uship &lt; 0;<br />     foreach (0 .. $#uship) {<br />         next if !$uship[$_][0];<br />         push(@uship_ind , "$uship[$_][0],$uship[$_][1],$uship[$_][2],$uship[$_][3],$uship[$_][4]")<br />     }<br /> }<br /><br /> # Sub Battle Limit # $battle_line=id,time△id,time△time<br /> sub b_limit {<br />     my @battled = split(/△/,$battle_line);<br />     my $last_b = pop(@battled);<br />     if ($battle_line =~ /$F{'uid'},/ ) { &amp;play("$unameは襲撃したばかりです"); exit }<br />     my $now = time;<br />     if ( ($now - $last_b)/60 &lt; $cont ) { &amp;play("$cont分以内に続けて戦闘はできません"); exit }<br />     unshift(@battled , "$F{'uid'},$now");<br />     $battle_line = join('△' , @battled , $now);<br /> }<br /><br /> # Sub Battle Lift #<br /> sub b_lift {<br />     my @battled = split(/△/,$battle_line);<br />     my $last_b = pop(@battled);<br />     my $now = time;<br />     my @battled = grep { ($now - (split(/,/))[1])/(60*60*24) &lt; $same } @battled;<br />     $battle_line = join('△' , @battled , $last_b);<br /> }<br /><br /> # Sub I Lost #<br /> sub i_lost {<br />     &amp;fleet;<br />     undef @my_load;<br />     $rate = $total ? 1 - ($ship[$i_atked][1] / $total) : 0;<br />     $food = int($food * $rate);<br />     my @my_lt = split(/△/,$load);<br />     foreach (0 .. $#my_lt) {<br />         ($load_name,$load_quan) = split(/,/,$my_lt[$_]);<br />         $load_quan = int($load_quan * $rate);<br />         push(@my_load , "$load_name,$load_quan") if $load_quan != 0;<br />     }<br />     $load = join('△' , @my_load);           <br />     splice(@ship , $i_atked ,1 )<br /> }<br /><br /> # Sub U Lost #<br /> sub u_lost {<br />     $utotal = 0;<br />     undef @u_load;<br />     for(0 .. $#uship){ $utotal += $uship[$_][1] }<br />     $urate = $utotal ? 1 - ($uship[$u_atked][1] / $utotal) : 0;<br />     $ufood = int($ufood * $urate);<br />     my @u_lt = split(/△/,$uload);<br />     foreach (0 .. $#u_lt) {<br />         ($uload_name,$uload_quan) = split(/,/,$u_lt[$_]);<br />         $uload_quan = int($uload_quan * $urate);<br />         push(@u_load , "$uload_name,$uload_quan") if $uload_quan != 0;<br />     }<br />     $uload = join('△' , @u_load);           <br />     splice(@uship , $u_atked ,1 )<br /> }<br /><br /> # Sub Item Search # 引数[0]=$item_line or $uitem_line, 引数[1]... = 対象アイテム<br /> sub item_search {<br />     foreach $j(1 .. $#_) {<br />         if (index($_[0],"$_[$j]") != -1) {<br />             return ($j - 1);<br />         }<br />     }<br />     return (-1);<br /> }<br /><br /> # Sub Item Get #<br /> sub item_get {<br />     return if !$uitem_line;<br />     return if int(rand(100)) &lt; ($ucmd / 4);<br />     my $gd_exist = &amp;item_search($uitem_line,@gard);<br />     if ($gd_exist != -1 &amp;&amp; rand(100) &gt; 5) {<br />         $urecord  .= "$gard[$gd_exist]の加護により財宝は守られました&lt;br&gt;";<br />         return;<br />     }<br />     my @uitem_ind = split(/,/,$uitem_line);<br />     srand(time*time);<br />     my $rob = int(rand($#uitem_ind));<br />     my @item_check = split(/,/,$item_line);<br />     foreach (@item_check) { if ($_ eq $uitem_ind[$rob]) { $find = 1; last } }<br />     return if $find;<br />     $item_line = join(',' , @item_check , $uitem_ind[$rob]);<br />     &amp;msg("&lt;font color=\"#0000FF\"&gt;$uitem_ind[$rob]を奪いました!&lt;/font&gt;");<br />     $rob_item = $uitem_ind[$rob];<br />     splice(@uitem_ind , $rob , 1);<br />     $uitem_line = join(',' , @uitem_ind)<br /> }<br /><br /> 1;</p>

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。