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