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」に関する記述はありません。)