TOWN

セキュリティ対策

「競馬」の不正防止

「掲示板」の不正防止方法を紹介します。

改造場所

■「unit.pl」
■「basic.cgi」

改造内容

■「unit.pl」をエディタで開き、下記部分を探して下さい。
(※表示の都合上改行が加えてあります。)

"競馬" => "<form method=POST action=\"basic.cgi\">
<td height=32 width=32><input type=hidden name=mode value=keiba>
<input type=hidden name=name value=$in{'name'}>
<input type=hidden name=pass value=$in{'pass'}>
<input type=hidden name=town_no value=$in{'town_no'}>
<input type=image src=\"$img_dir/keiba.gif\"  onMouseOver='onMes5(\"競馬場です。\")' onMouseOut='onMes5(\"\")'>
</td></form>",			#ver.1.40

■下記赤文字部分を追加して下さい。

"競馬" => "<form method=POST action=\"basic.cgi\">
<td height=32 width=32><input type=hidden name=mode value=keiba>
<input type=hidden name=name value=$in{'name'}>
<input type=hidden name=pass value=$in{'pass'}>
<input type=hidden name=town_no value=$in{'town_no'}>
<input type=hidden name=k_id value=$k_id>
<input type=image src=\"$img_dir/keiba.gif\"  onMouseOver='onMes5(\"競馬場です。\")' onMouseOut='onMes5(\"\")'>
</td></form>",			#ver.1.40
<input type=hidden name=k_id value=$k_id>
を「unit.pl」の「競馬」に追加します。
競馬場に入場する時に「個人ID番号」を保持します。

■「basic.cgi」をエディタで開き、下記部分を探して下さい。
(※表示の都合上改行が加えてあります。)
★★★」部分に変更を加えます。

####競馬
sub keiba {
     my $now_time = time;
     my (@umaname)=('◇ダンスパートナー','◇エアグルーヴ',
          '◇ビワハヤヒデ','◇イシノサンデー','◇ジャングルポケット',
          '◇マンハッタンカフェ','◇ノーリーズン','◇オグリキャップ',
          '◇サクラプレジデント','◇エアシャカール','◇ビワハイジ',
          '◇ナリタブライアン','◇テイエムオーシャン','◇トウカイテイオー',
          '◇ローマンエンパイア');
     my (@umakakeritu)=('8','28','2','12','16','4','30','3','5');
     %umagazou =("◇ダンスパートナー","danpa.gif","◇エアグルーヴ",
          "groove.gif","◇ビワハヤヒデ","hayahide.gif","◇イシノサンデー",
          "ishisun.gif","◇ジャングルポケット","junpoke.gif","◇マンハッタンカフェ",
          "manhattan.gif","◇ノーリーズン","noreason.gif","◇オグリキャップ",
          "oguri.gif","◇サクラプレジデント","sakura_predi.gif","◇エアシャカール",
          "shakur.gif","◇ビワハイジ","heidi.gif","◇ナリタブライアン","brian.gif",
          "◇テイエムオーシャン","tm_ocean.gif","◇トウカイテイオー",
          "tokai_teio.gif","◇ローマンエンパイア","roman.gif");

#ランキングファイル読み込み
     open(KR,"$keibarank_logfile") || &error("Open Error : $keibarank_logfile");
     @keiba_ranking =<KR>;
     close(KR);
     foreach (@keiba_ranking){
          $key=(split(/<>/,$_))[1];  #ソートする要素を選ぶ
          push @alldata,$_;
          push @keys,$key;
     }
     sub bykeys{$keys[$b] <=> $keys[$a];}
     @alldata=@alldata[ sort bykeys 0..$#alldata]; 
     $i = 0;
     foreach (@alldata){
          ($kr_name,$kr_moukegaku,$kr_tounyuugaku,$kr_kakutokugaku,
          $kr_yobi1,$kr_yobi2,$kr_yobi3,$kr_yobi4)= split(/<>/);
     #kr_yobi1 = 最終ゲーム時間
          $rank_html .= "<tr><td>$kr_name</td><td align=right>$kr_moukegaku円</td>
          <td align=right>$kr_tounyuugaku円</td><td align=right>$kr_kakutokugaku円</td></tr>";
          $i ++;
          if ($i >= 10){last;}
     }

#馬をランダムに並び替え
     @new_entry = ();
     foreach (@umaname){
          my $r = rand @new_entry+1;
          push (@new_entry,$new_entry[$r]);
          $new_entry[$r] = $_;
     }

#掛け率をランダムに並び替え
     @new_kakeritu = ();
     foreach (@umakakeritu){
          my $s = rand @new_kakeritu+1;
          push (@new_kakeritu,$new_kakeritu[$s]);
          $new_kakeritu[$s] = $_;
     }

     foreach (0..5){
          $umaname{$new_entry[$_]} = "$new_kakeritu[$_]";
     }
#賭ける画面
     if ($in{'command'} eq ""){
★★★
          &header(keiba_style);
          print <<"EOM";
<table width="90%" border="0" cellspacing="0" cellpadding="10" align=center class=yosumi>
<tr>
<td bgcolor=#ffff99>馬券は1枚500円です。購入枚数を入力して「レース開始」ボタンを押してください。2頭まで賭けることができます。<br>
$nameさんの持ち金:$money円<br>
※一度に購入できる馬券の枚数は$keiba_gendomaisuu枚までです。<br>
※$deleteUser日間ゲームしていないユーザーはランキングから削除されます。</td>
<td  bgcolor=#333333 align=center width=35%><img src="$img_dir/keiba_tytle.gif"></td>
</tr></table><br>
<table width="90%" border="0" cellspacing="0" cellpadding="10" align=center class=yosumi>

<form method="POST" action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=command value="start">
<input type=hidden name=name value="$in{'name'}">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=town_no value=$in{'town_no'}>
★★★
<tr><td valign=top>
<table cellspacing="0" cellpadding="8" width=100% class=yosumi>
<tr bgcolor=#99cc66>
<td align=center colspan=3>本日の出走馬</td></tr>
<tr bgcolor=#ffff99>
<td align=center>馬</td><td align=center>オッズ</td><td align=center>購入数</td></tr>
EOM
          foreach (0..5){
               $hid_name = "uma"."$_";
               $hid_kake = "kake"."$_";
               $hid_kane = "kane"."$_";
               print %lt;%lt;"EOM";
<tr><td>
<input type=hidden name="$hid_name" value="$new_entry[$_]">
$new_entry[$_] 
</td>
<td align=right>
<input type=hidden name="$hid_kake" value="$new_kakeritu[$_]">
$new_kakeritu[$_]倍
</td>
<td align=right><input type=text name="$hid_kane" size=10> 枚</td></tr>
EOM
          }
          print <<"EOM";
<tr><td align=center colspan=3><input type=submit value="レース開始"></td></tr>
</table></form>
</td><td  valign=top width=60%>
<table cellspacing="0" cellpadding="4" class=yosumi width=100%>
<tr bgcolor=#ff9900><td colspan=4 align=center>
ギャンブル王ベスト10
</td></tr>
<tr bgcolor=#ffffcc><td align=center>名前</td><td align=center>トータル儲け額</td><td align=center>総投入額</td><td align=center>総獲得額</td></tr>
$rank_html
</table>
</tr></table>
EOM
          &hooter("login_view","戻る");
          exit;
     }
#スタート開始画面
     if ($in{'command'} eq "start"){
          &keibalock;
          $start_html  .= <<"EOM";
<form method="POST" action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=command value="go">
<input type=hidden name=name value="$in{'name'}">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=town_no value=$in{'town_no'}>
★★★
<table border=0 width=620 bgcolor=#cc9933 align=center cellspacing="0" cellpadding="0">
<tr><td width=20>
<table border=0 width=20 height=100% bgcolor=#ffff99><tr><td align=center><img src=$img_dir/goal.gif width=11 height=33></td></tr></table>
</td><td align=right>
<table border=0 bgcolor=#ffffff><tr><td width=120 align=center>馬</td><td width=40 align=center>オッズ</td><td width=40 align=center>購入</td></tr></table>
<hr size=2 color=#ffffff>
EOM
          foreach (0..5){
               if($in{'kane'.$_} =~ /[^0-9]/){&keibaunlock; &error("購入数が不適切です。");}  #ver.1.3
               if ($in{'kane'.$_}){$kaketaumanokazu ++;}
               $kyori = int((rand(60)+10)/(1+($in{'kake'.$_}/70)));
               $keiba_temp = "$in{'uma'.$_}<>$in{'kake'.$_}<>$in{'kane'.$_}<>$kyori<>\n";
               $hikarerugaku += $in{'kane'.$_} * 500;
               $kounyuu_soumaisuu += $in{'kane'.$_};  #ver.1.2
               push (@now_race,$keiba_temp);
               if ($in{'kane'.$_}){$kakekin = "$in{'kane'.$_}枚";}else{$kakekin = "";}
               $start_html  .=  <<"EOM";
<table border=0 cellspacing="0" cellpadding="0">
<tr>
<td width=$kyori align=left><img src=$img_dir/uma/$umagazou{"$in{'uma'.$_}"} width=30 height=30></td>
<td width=120>$in{'uma'.$_}</td>
<td width=40 align=right>$in{'kake'.$_}倍</td>
<td width=40 align=right>$kakekin</td>
</tr></table><hr size=2 color=#ffffff noshade>
EOM
          }
          if ($hikarerugaku == 0){&keibaunlock; &error("馬券が購入されていません");}
          if ($money < $hikarerugaku){&keibaunlock; &error("お金が足りません");}
          if ($kounyuu_soumaisuu > $keiba_gendomaisuu){&keibaunlock; &error("一度に購入できる馬券の枚数は$keiba_gendomaisuu枚までです");}  #ver.1.2
          if ($kaketaumanokazu > 2){&keibaunlock; &error("2頭までしか賭けることができません");}
          &header;
          print <<"EOM";
$start_html
※「GO ! GO !」ボタンを押してレースを進めてください。<br>
※この画面の状態で終了させないでください(お金も支払われただけで終わります)。

</td><tr></table>
<br><br><div align=center><input type=submit value="GO ! GO !"></div>
</form>
</body></html>
EOM
          open(KB,">$keiba_logfile")|| &error("Open Error : $keiba_logfile");
          print KB @now_race;
          close(KB);

          $money -= $hikarerugaku;
#データ更新
          &temp_routin;
          &log_kousin($my_log_file,$k_temp);
          exit;

     }
#ゴーゴー画面
     if ($in{'command'} eq "go"){
          if (!-e $keibalockfile) {&error("時間切れのためレースは棄権扱いとなりました。");}
          open(KB,"$keiba_logfile")|| &error("Open Error : $keiba_logfile");
          @keiba_hairetu =<KB>;
          close(KB);
★★★
          &header;
          print <<"EOM";
<form method="POST" action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=command value="go">
<input type=hidden name=name value="$in{'name'}">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=town_no value=$in{'town_no'}>
★★★
<table border=0 width=620 bgcolor=#cc9933 align=center cellspacing="0" cellpadding="0">
<tr><td width=20>
<table border=0 width=20 height=100% bgcolor=#ffff99><tr><td align=center><img src=$img_dir/goal.gif width=11 height=33></td></tr></table>
</td><td align=right>
<table border=0 bgcolor=#ffffff><tr><td width=120 align=center>馬</td><td width=40 align=center>オッズ</td><td width=40 align=center>購入</td></tr></table>
<hr size=2 color=#ffffff>
EOM
          @now_race = ();
          @kekkahantei = ();
#1ターン
          foreach (@keiba_hairetu){
               ($umaname,$ods,$kane,$kyori) = split(/<>/);
               $kyori += int((rand(100)+0)/(1+($ods/80)));
               if ($kyori >= 400){$kyori = 400;}
               push (@kekkahantei , $kyori);
               $keiba_temp = "$umaname<>$ods<>$kane<>$kyori<>\n";
               push (@now_race,$keiba_temp);
               if ($kane){$kakekin = "$kane枚";}else{$kakekin = "";}
               print <<"EOM";
<table border=0 cellspacing="0" cellpadding="0">
<tr>
<td width=$kyori align=left><img src=$img_dir/uma/$umagazou{"$umaname"} width=30 height=30></td>
<td width=120>$umaname</td>
<td width=40 align=right>$ods倍</td>
<td width=40 align=right>$kakekin</td>
</tr></table><hr size=2 color=#ffffff noshade>
EOM
          }
#結果判定
          foreach (0..5){
               if ($kekkahantei[$_] >= 400){
                    ($winner) = split (/<>/ , $now_race[$_] );
                    push (@win_hairetu ,$winner);
               }
          }
#ゴールした場合
          if (@win_hairetu){
               if (@win_hairetu >=2){
                    $syasin_randed=rand($#win_hairetu+1);
                    $kekkahappyou = "@win_hairetuがほぼ同時にゴールインしましたが、写真判定の結果、@win_hairetu[$syasin_randed]が1着となりました!";
                    $win_uma = "@win_hairetu[$syasin_randed]";
               }else{
                    $kekkahappyou ="@win_hairetuが1着でゴールイン!";
                    $win_uma = "@win_hairetu";
               }
               foreach (@now_race){
                    ($umaname,$ods,$kane,$kyori) = split(/<>/);
                    if ($umaname eq "$win_uma"){
                         $kakutokugaku = $ods * $kane * 500;
                         if ($kakutokugaku == 0){
                              $kakutokuhyouzi = "残念ながら配当金はありません";
                         }else{
                              $kakutokuhyouzi = "$kakutokugaku円";
                         }
                    }
                    $soukounyuu += $kane*500;
               }
               print <<"EOM";
<div align=center><br><table  border=0  cellspacing="5" cellpadding="0" width=300 style="$message_win"><tr><td>
<div  class=tyuu>$kekkahappyou</div>
購入金額:$soukounyuu円<br>
獲得金額:$kakutokuhyouzi
</td></tr></table><br>
</td></tr>
</table>
</form>

<div align=center><form method=POST action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=iesettei_id value="$in{'iesettei_id'}">
<input type=hidden name=name value=$in{'name'}>
<input type=hidden name=pass value=$in{'pass'}>
<input type=hidden name=admin_pass value=$in{'admin_pass'}>
<input type=hidden name=town_no value=$in{'town_no'}>
★★★
<input type=submit value="再挑戦">
</form></div>

EOM
               &hooter("login_view","戻る");
               print "</body></html>";

               $money += $kakutokugaku;
#データ更新
               &temp_routin;
               &log_kousin($my_log_file,$k_temp);
#ランキングファイル更新
               open(KR,"$keibarank_logfile") || &error("Open Error : $keibarank_logfile");
               @keiba_ranking =<KR>;
               close(KR);
               $kizon_flag=0;
               foreach (@keiba_ranking){
                    ($kr_name,$kr_moukegaku,$kr_tounyuugaku,$kr_kakutokugaku,$kr_yobi1,$kr_yobi2,$kr_yobi3,$kr_yobi4)= split(/<>/);
                    if ($name eq "$kr_name"){
                         $kr_tounyuugaku += $soukounyuu;
                         $kr_kakutokugaku += $kakutokugaku;
                         $kr_moukegaku = $kr_kakutokugaku - $kr_tounyuugaku;
                         $kizon_flag=1;
                         $kr_yobi1 = $now_time;
                    }
#                    if ($now_time - $kr_yobi1< 60*60*24*$deleteUser){next;}
                    $kr_rank_temp = "$kr_name<<$kr_moukegaku<<$kr_tounyuugaku<<$kr_kakutokugaku<<$kr_yobi1<<$kr_yobi2<<$kr_yobi3<<$kr_yobi4<<\n";
                    push (@new_keiba_ranking ,$kr_rank_temp);
               }
               if ($kizon_flag == 0){
                    $moukegaku = $kakutokugaku - $soukounyuu;
                    $kr_rank_temp = "$name<<$moukegaku<<$soukounyuu<<$kakutokugaku<<$now_time<<<<<<<<\n";
                    push  (@new_keiba_ranking ,$kr_rank_temp);
               }
               open(KRO,"<$keibarank_logfile")|| &error("Open Error : $keibarank_logfile");
               print KRO @new_keiba_ranking;
               close(KRO);

               &keibaunlock;
#レース続行
          }else{
               print <<"EOM";
※「GO ! GO !」ボタンを押してレースを進めてください。<br>
※この画面の状態で終了させないでください(お金も支払われただけで終わります)。

</td></tr>
</table>
<br><br><div align=center><input type=submit value="GO ! GO !"></div>
</form>
</body></html>
EOM
               open(KB,">$keiba_logfile")|| &error("Open Error : $keiba_logfile");
               print KB @now_race;
               close(KB);
          }
          exit;
     }  #goコマンドの場合の閉じ
}

■上記「★★★」部分に下記赤文字部分を追加して下さい。

####競馬
sub keiba {
     my $now_time = time;
     my (@umaname)=('◇ダンスパートナー','◇エアグルーヴ',
          '◇ビワハヤヒデ','◇イシノサンデー','◇ジャングルポケット',
          '◇マンハッタンカフェ','◇ノーリーズン','◇オグリキャップ',
          '◇サクラプレジデント','◇エアシャカール','◇ビワハイジ',
          '◇ナリタブライアン','◇テイエムオーシャン','◇トウカイテイオー',
          '◇ローマンエンパイア');
     my (@umakakeritu)=('8','28','2','12','16','4','30','3','5');
     %umagazou =("◇ダンスパートナー","danpa.gif","◇エアグルーヴ",
          "groove.gif","◇ビワハヤヒデ","hayahide.gif","◇イシノサンデー",
          "ishisun.gif","◇ジャングルポケット","junpoke.gif","◇マンハッタンカフェ",
          "manhattan.gif","◇ノーリーズン","noreason.gif","◇オグリキャップ",
          "oguri.gif","◇サクラプレジデント","sakura_predi.gif","◇エアシャカール",
          "shakur.gif","◇ビワハイジ","heidi.gif","◇ナリタブライアン","brian.gif",
          "◇テイエムオーシャン","tm_ocean.gif","◇トウカイテイオー",
          "tokai_teio.gif","◇ローマンエンパイア","roman.gif");

#ランキングファイル読み込み
     open(KR,"$keibarank_logfile") || &error("Open Error : $keibarank_logfile");
     @keiba_ranking =<KR>;
     close(KR);
     foreach (@keiba_ranking){
          $key=(split(/<>/,$_))[1];  #ソートする要素を選ぶ
          push @alldata,$_;
          push @keys,$key;
     }
     sub bykeys{$keys[$b] <=> $keys[$a];}
     @alldata=@alldata[ sort bykeys 0..$#alldata]; 
     $i = 0;
     foreach (@alldata){
          ($kr_name,$kr_moukegaku,$kr_tounyuugaku,$kr_kakutokugaku,
          $kr_yobi1,$kr_yobi2,$kr_yobi3,$kr_yobi4)= split(/<>/);
          #kr_yobi1 = 最終ゲーム時間
          $rank_html .= "<tr><td>$kr_name</td><td align=right>$kr_moukegaku円</td>
               <td align=right>$kr_tounyuugaku円</td><td align=right>$kr_kakutokugaku円</td></tr>";
          $i ++;
          if ($i >= 10){last;}
     }

#馬をランダムに並び替え
     @new_entry = ();
     foreach (@umaname){
          my $r = rand @new_entry+1;
          push (@new_entry,$new_entry[$r]);
          $new_entry[$r] = $_;
     }

#掛け率をランダムに並び替え
     @new_kakeritu = ();
     foreach (@umakakeritu){
          my $s = rand @new_kakeritu+1;
          push (@new_kakeritu,$new_kakeritu[$s]);
          $new_kakeritu[$s] = $_;
     }

     foreach (0..5){
          $umaname{$new_entry[$_]} = "$new_kakeritu[$_]";
     }
#賭ける画面
     if ($in{'command'} eq ""){

     #※不正対策 ここから
          $kojin_keiba_file = "./member/$in{'k_id'}/kojin_keiba.cgi";
          if (! -e $kojin_keiba_file){
               open(KKF,">$kojin_keiba_file") || &error("競馬個人ファイルを作成できません。<br>管理者へ連絡して下さい。");
               close(KKF);
          }
          @kojin_keiba = ();
          foreach (0..5){
               $kojin_keiba[$_] = "$new_entry[$_]<>$new_kakeritu[$_]<><>\n";
          }
          open(KKF,">$kojin_keiba_file")|| &error("競馬個人ファイルが開けません。");
          print KKF @kojin_keiba;
          close(KKF);
     #※不正対策 ここまで

          &header(keiba_style);
          print <<"EOM";
<table width="90%" border="0" cellspacing="0" cellpadding="10" align=center class=yosumi>
<tr>
<td bgcolor=#ffff99>馬券は1枚500円です。購入枚数を入力して「レース開始」ボタンを押してください。2頭まで賭けることができます。<br>
$nameさんの持ち金:$money円<br>
※一度に購入できる馬券の枚数は$keiba_gendomaisuu枚までです。<br>
※$deleteUser日間ゲームしていないユーザーはランキングから削除されます。</td>
<td  bgcolor=#333333 align=center width=35%><img src="$img_dir/keiba_tytle.gif"></td>
</tr></table><br>
<table width="90%" border="0" cellspacing="0" cellpadding="10" align=center class=yosumi>

<form method="POST" action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=command value="start">
<input type=hidden name=name value="$in{'name'}">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=town_no value=$in{'town_no'}>
<input type=hidden name=k_id value="$in{'k_id'}">
<tr><td valign=top>
<table cellspacing="0" cellpadding="8" width=100% class=yosumi>
<tr bgcolor=#99cc66>
<td align=center colspan=3>本日の出走馬</td></tr>
<tr bgcolor=#ffff99>
<td align=center>馬</td><td align=center>オッズ</td><td align=center>購入数</td></tr>
EOM
          foreach (0..5){
               $hid_name = "uma"."$_";
               $hid_kake = "kake"."$_";
               $hid_kane = "kane"."$_";
               print <<"EOM";
<tr><td>
<input type=hidden name="$hid_name" value="$new_entry[$_]">
$new_entry[$_] 
</td>
<td align=right>
<input type=hidden name="$hid_kake" value="$new_kakeritu[$_]">
$new_kakeritu[$_]倍
</td>
<td align=right><input type=text name="$hid_kane" size=10> 枚</td></tr>
EOM
          }
          print <<"EOM";
<tr><td align=center colspan=3><input type=submit value="レース開始"></td></tr>
</table></form>
</td><td  valign=top width=60%>
<table cellspacing="0" cellpadding="4" class=yosumi width=100%>
<tr bgcolor=#ff9900><td colspan=4 align=center>
ギャンブル王ベスト10
</td></tr>
<tr bgcolor=#ffffcc><td align=center>名前</td><td align=center>トータル儲け額</td><td align=center>総投入額</td><td align=center>総獲得額</td></tr>
$rank_html
</table>
</tr></table>
EOM
          &hooter("login_view","戻る");
          exit;
     }
#スタート開始画面
     if ($in{'command'} eq "start"){
          &keibalock;
          $start_html  .= <<"EOM";
<form method="POST" action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=command value="go">
<input type=hidden name=name value="$in{'name'}">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=town_no value=$in{'town_no'}>
<input type=hidden name=k_id value="$in{'k_id'}">
<table border=0 width=620 bgcolor=#cc9933 align=center cellspacing="0" cellpadding="0">
<tr><td width=20>
<table border=0 width=20 height=100% bgcolor=#ffff99><tr><td align=center><img src=$img_dir/goal.gif width=11 height=33></td></tr></table>
</td><td align=right>
<table border=0 bgcolor=#ffffff><tr><td width=120 align=center>馬</td><td width=40 align=center>オッズ</td><td width=40 align=center>購入</td></tr></table>
<hr size=2 color=#ffffff>
EOM
          foreach (0..5){
               if($in{'kane'.$_} =~ /[^0-9]/){&keibaunlock; &error("購入数が不適切です。");}  #ver.1.3
               if ($in{'kane'.$_}){$kaketaumanokazu ++;}
               $kyori = int((rand(60)+10)/(1+($in{'kake'.$_}/70)));
               $keiba_temp = "$in{'uma'.$_}<>$in{'kake'.$_}<>$in{'kane'.$_}<>$kyori<>\n";
               $hikarerugaku += $in{'kane'.$_} * 500;
               $kounyuu_soumaisuu += $in{'kane'.$_};  #ver.1.2
               push (@now_race,$keiba_temp);
               if ($in{'kane'.$_}){$kakekin = "$in{'kane'.$_}枚";}else{$kakekin = "";}
               $start_html  .=  <<"EOM";
<table border=0 cellspacing="0" cellpadding="0">
<tr>
<td width=$kyori align=left><img src=$img_dir/uma/$umagazou{"$in{'uma'.$_}"} width=30 height=30></td>
<td width=120>$in{'uma'.$_}</td>
<td width=40 align=right>$in{'kake'.$_}倍</td>
<td width=40 align=right>$kakekin</td>
</tr></table><hr size=2 color=#ffffff noshade>
EOM
          }
          if ($hikarerugaku == 0){&keibaunlock; &error("馬券が購入されていません");}
          if ($money < $hikarerugaku){&keibaunlock; &error("お金が足りません");}
          if ($kounyuu_soumaisuu > $keiba_gendomaisuu){&keibaunlock; &error("一度に購入できる馬券の枚数は$keiba_gendomaisuu枚までです");}  #ver.1.2
          if ($kaketaumanokazu > 2){&keibaunlock; &error("2頭までしか賭けることができません");}
          &header;
          print <<"EOM";
$start_html
※「GO ! GO !」ボタンを押してレースを進めてください。<br>
※この画面の状態で終了させないでください(お金も支払われただけで終わります)。

</td><tr></table>
<br><br><div align=center><input type=submit value="GO ! GO !"></div>
</form>
</body></html>
EOM
          open(KB,">$keiba_logfile")|| &error("Open Error : $keiba_logfile");
          print KB @now_race;
          close(KB);

          $money -= $hikarerugaku;
#データ更新
          &temp_routin;
          &log_kousin($my_log_file,$k_temp);
          exit;

     }
#ゴーゴー画面
     if ($in{'command'} eq "go"){
          if (!-e $keibalockfile) {&error("時間切れのためレースは棄権扱いとなりました。");}
          open(KB,"$keiba_logfile")|| &error("Open Error : $keiba_logfile");
          @keiba_hairetu =<KB>;
          close(KB);

     #※不正対策 ここから
          $kojin_keiba_file = "./member/$in{'k_id'}/kojin_keiba.cgi";
          open(KKF,"$kojin_keiba_file")|| &error("競馬個人ファイルが開けません。");
          @kojin_keiba =<KKF>;
          close(KKF);
          foreach (0..5){
               ($kk_umaname,$kk_ods) = split(/<>/,$kojin_keiba[$_]);
               ($umaname,$ods) = split(/<>/,$keiba_hairetu[$_]);
               if($kk_ods ne $ods){ &error("不正なレースが行われたため、没収となりました。");}
          }
     #※不正対策 ここまで

          &header;
          print <<"EOM";
<form method="POST" action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=command value="go">
<input type=hidden name=name value="$in{'name'}">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=town_no value=$in{'town_no'}>
<input type=hidden name=k_id value="$in{'k_id'}">
<table border=0 width=620 bgcolor=#cc9933 align=center cellspacing="0" cellpadding="0">
<tr><td width=20>
<table border=0 width=20 height=100% bgcolor=#ffff99><tr><td align=center><img src=$img_dir/goal.gif width=11 height=33></td></tr></table>
</td><td align=right>
<table border=0 bgcolor=#ffffff><tr><td width=120 align=center>馬</td><td width=40 align=center>オッズ</td><td width=40 align=center>購入</td></tr></table>
<hr size=2 color=#ffffff>
EOM
          @now_race = ();
          @kekkahantei = ();
#1ターン
          foreach (@keiba_hairetu){
               ($umaname,$ods,$kane,$kyori) = split(/<>/);
               $kyori += int((rand(100)+0)/(1+($ods/80)));
               if ($kyori >= 400){$kyori = 400;}
               push (@kekkahantei , $kyori);
               $keiba_temp = "$umaname<>$ods<>$kane<>$kyori<>\n";
               push (@now_race,$keiba_temp);
               if ($kane){$kakekin = "$kane枚";}else{$kakekin = "";}
               print <<"EOM";
<table border=0 cellspacing="0" cellpadding="0">
<tr>
<td width=$kyori align=left><img src=$img_dir/uma/$umagazou{"$umaname"} width=30 height=30></td>
<td width=120>$umaname</td>
<td width=40 align=right>$ods倍</td>
<td width=40 align=right>$kakekin</td>
</tr></table><hr size=2 color=#ffffff noshade>
EOM
          }
#結果判定
          foreach (0..5){
               if ($kekkahantei[$_] >= 400){
                    ($winner) = split (/<>/ , $now_race[$_] );
                    push (@win_hairetu ,$winner);
               }
          }
#ゴールした場合
          if (@win_hairetu){
               if (@win_hairetu >=2){
                    $syasin_randed=rand($#win_hairetu+1);
                    $kekkahappyou = "@win_hairetuがほぼ同時にゴールインしましたが、写真判定の結果、@win_hairetu[$syasin_randed]が1着となりました!";
                    $win_uma = "@win_hairetu[$syasin_randed]";
               }else{
                    $kekkahappyou ="@win_hairetuが1着でゴールイン!";
                    $win_uma = "@win_hairetu";
               }
               foreach (@now_race){
                    ($umaname,$ods,$kane,$kyori) = split(/<>/);
                    if ($umaname eq "$win_uma"){
                         $kakutokugaku = $ods * $kane * 500;
                         if ($kakutokugaku == 0){
                              $kakutokuhyouzi = "残念ながら配当金はありません";
                         }else{
                              $kakutokuhyouzi = "$kakutokugaku円";
                         }
                    }
                    $soukounyuu += $kane*500;
               }
               print <<"EOM";
<div align=center><br><table  border=0  cellspacing="5" cellpadding="0" width=300 style="$message_win"><tr><td>
<div  class=tyuu>$kekkahappyou</div>
購入金額:$soukounyuu円<br>
獲得金額:$kakutokuhyouzi
</td></tr></table><br>
</td></tr>
</table>
</form>

<div align=center><form method=POST action="$this_script">
<input type=hidden name=mode value="keiba">
<input type=hidden name=iesettei_id value="$in{'iesettei_id'}">
<input type=hidden name=name value=$in{'name'}>
<input type=hidden name=pass value=$in{'pass'}>
<input type=hidden name=admin_pass value=$in{'admin_pass'}>
<input type=hidden name=town_no value=$in{'town_no'}>
<input type=hidden name=k_id value="$in{'k_id'}">
<input type=submit value="再挑戦">
</form></div>

EOM
               &hooter("login_view","戻る");
               print "</body></html>";

               $money += $kakutokugaku;
#データ更新
               &temp_routin;
               &log_kousin($my_log_file,$k_temp);
#ランキングファイル更新
               open(KR,"$keibarank_logfile") || &error("Open Error : $keibarank_logfile");
               @keiba_ranking =<KR>;
               close(KR);
               $kizon_flag=0;
               foreach (@keiba_ranking){
                    ($kr_name,$kr_moukegaku,$kr_tounyuugaku,$kr_kakutokugaku,$kr_yobi1,$kr_yobi2,$kr_yobi3,$kr_yobi4)= split(/<>/);
                    if ($name eq "$kr_name"){
                         $kr_tounyuugaku += $soukounyuu;
                         $kr_kakutokugaku += $kakutokugaku;
                         $kr_moukegaku = $kr_kakutokugaku - $kr_tounyuugaku;
                         $kizon_flag=1;
                         $kr_yobi1 = $now_time;
                    }
#                    if ($now_time - $kr_yobi1< 60*60*24*$deleteUser){next;}
                    $kr_rank_temp = "$kr_name<<$kr_moukegaku<<$kr_tounyuugaku<<$kr_kakutokugaku<<$kr_yobi1<<$kr_yobi2<<$kr_yobi3<<$kr_yobi4<<\n";
                    push (@new_keiba_ranking ,$kr_rank_temp);
               }
               if ($kizon_flag == 0){
                    $moukegaku = $kakutokugaku - $soukounyuu;
                    $kr_rank_temp = "$name<<$moukegaku<<$soukounyuu<<$kakutokugaku<<$now_time<<<<<<<<\n";
                    push  (@new_keiba_ranking ,$kr_rank_temp);
               }
               open(KRO,"<$keibarank_logfile")|| &error("Open Error : $keibarank_logfile");
               print KRO @new_keiba_ranking;
               close(KRO);

               &keibaunlock;
#レース続行
          }else{
               print <<"EOM";
※「GO ! GO !」ボタンを押してレースを進めてください。<br>
※この画面の状態で終了させないでください(お金も支払われただけで終わります)。

</td></tr>
</table>
<br><br><div align=center><input type=submit value="GO ! GO !"></div>
</form>
</body></html>
EOM
               open(KB,">$keiba_logfile")|| &error("Open Error : $keiba_logfile");
               print KB @now_race;
               close(KB);
          }
          exit;
     }  #goコマンドの場合の閉じ
}
「kojin_keiba.cgi」ファイルを個人フォルダ内に作成し、レース実行時の内容を保存します。
ゴール時に「kojin_keiba.cgi」ファイルに保存された内容と比較し、一致しない場合はレースを無効します。

前後の内容

俺ペナTOWN
設置方法セキュリティ対策
「掲示板」の不正防止「競馬」の不正防止

野良猫タウン

当サイトでは、「野良猫タウン」として「TOWN」を設置・公開しています。
オリジナル改造を施した「のんびりまったりタウン」です。
100名限定で楽しんで頂ければ、嬉しいです♪

【劇ぱわ改造設置支援サイト】Take it easy ! RYOQUEST presents

『野良猫のCGI講座』は、
【劇ぱわ改造設置支援サイト】Take it easy ! RYOQUEST presents のコンテンツとして、虎猫が公開しています。

「劇空間ぱわふるリーグ2 ver 3.00b(劇ぱわ)」は、
きままなまま』で管理人にーやん様が作成・無料配布されているCGI/Perlによる野球ゲームです。

「TOWN」は、
Brassiere』で配布されているCGI/Perlによるゲームです。
サイト自体は現在休止中ですが、製作されたゲームなどの配布は継続されています。

参考にされた方は、当サイトへリンクを貼って下さい♪
サイト名:Take it easy ! RYOQUEST presents
(サイト名:Take it easy !
URL:http://ryoquest.sakura.ne.jp/
バナーURL:http://ryoquest.sakura.ne.jp/image/tie_8831an.gif
Take it easy !

『旧:野良猫のCGI講座』

以前の『野良猫のCGI講座』をご覧になりたい方は、『旧:野良猫のCGI講座』からアクセスして下さい。
但し、更新は一切していません。
(※「旧:野良猫のCGI講座」には「TOWN」に関する記述はありません。)

ページのトップへ戻る