|
「重複登録の禁止」をしても「登録時のIPアドレスが違えば、重複登録が可能」となってしまいます。
その為に重複登録して「当て馬」を使って自分のチームの成績を上げる不正参加者が現れてしまいます。
この「当て馬」行為の回避策として、
「同一IPアドレスでの参加者同士の試合を禁止」とします。
■概要■
- 「gekipawa.ini」の変更(1ヶ所)
- 「geki_game.cgi」の変更(3ヶ所)
■「gekipawa.ini」の変更(1ヶ所)
・任意の場所に下記を追加して下さい。
$ateuma = '1'; # 不正試合防止(1:当て馬防止、0:規制無し)
■「geki_game.cgi」の変更
1.下記部分を探して下さい。(無改造の場合は、18行目〜2行目)
##### 試合結果画面
sub playlog{
$userdata = &user_check;
($saku[0], $pass[0], $home[0], $team[0], $icon[0], $date[0], $ip[0], $teamdata[0], $pointdata[0], $bosstype,
$charadata, $gamedata[0], $campflag[0]) = split(/<p>/, $userdata);
・ここに下記赤字部分を追加します。
(試合を仕掛けたチームの現在のIPアドレスを取得します。)
##### 試合結果画面
sub playlog{
$host = $ENV{'REMOTE_HOST'} || $ENV{'REMOTE_ADDR'}; # 不正試合防止(当て馬防止)リモートホスト取得
$userdata = &user_check;
($saku[0], $pass[0], $home[0], $team[0], $icon[0], $date[0], $ip[0], $teamdata[0], $pointdata[0], $bosstype,
$charadata, $gamedata[0], $campflag[0]) = split(/<p>/, $userdata);
2.下記部分を探して下さい。(無改造の場合は、43行目〜47行目)
$charadata[0] = join('', @{$player[0]});
$userdata[0] = "$saku[0]<p>$pass[0]<p>$home[0]<p>$team[0]<p>$icon[0]<p>$date[0]<p>$ip[0]<p>$teamdata[0]<p>$pointdata[0]<p>
$bosstype[0]<p>$charadata[0]<p>$gamedata[0]<p>$campflag[0]<p>\n";
open(WN,"$leaguefold/$winfile") || &error('指定されたファイルが開けません。');
・上記青色部分を下記赤字部分に修正します。
(試合を仕掛けたチームのIPアドレスを現在のものと置き換えます。)
$charadata[0] = join('', @{$player[0]});
$userdata[0] = "$saku[0]<p>$pass[0]<p>$home[0]<p>$team[0]<p>$icon[0]<p>$date[0]<p>$host<p>$teamdata[0]<p>$pointdata[0]<p>
$bosstype[0]<p>$charadata[0]<p>$gamedata[0]<p>$campflag[0]<p>\n";
open(WN,"$leaguefold/$winfile") || &error('指定されたファイルが開けません。');
3.下記部分を探して下さい。(無改造の場合は、52行目〜64行目)
if(!$winners[0]){
open(WN,"+<$leaguefold/$winfile") || &error('指定されたファイルが開けません。');
truncate (WN, 0);
seek(WN,0,0); print WN $userdata[0];
close(WN);
&error('現在の勝利者がいないため、試合を行えませんでした。');
}
($saku[1], $pass[1], $home[1], $team[1], $icon[1], $date[1], $ip[1], $teamdata[1], $pointdata[1], $bosstype[1],
$charadata[1], $gamedata[1], $campflag[1]) = split(/<p>/, $winners[0]);
if($saku[1] eq $saku[0] && $pass[1] eq $pass[0]){ &error('自分のチームとは対戦できないよ。'); }
($lastjun[1], $win[1], $wincon[1], $winmax[1], $lose[1], $kaio[1], $kaid[1], $get[1], $loss[1], $t_jiseki[1],
$boxsum[1], $hitsum[1], $hrsum[1], $stesum[1], $errsum[1]) = split(/<>/, $teamdata[1]);
・ここに下記赤字部分を追加します。
(IPアドレスを比較して不正試合はエラーを返します。)
if(!$winners[0]){
open(WN,"+<$leaguefold/$winfile") || &error('指定されたファイルが開けません。');
truncate (WN, 0);
seek(WN,0,0); print WN $userdata[0];
close(WN);
&error('現在の勝利者がいないため、試合を行えませんでした。');
}
($saku[1], $pass[1], $home[1], $team[1], $icon[1], $date[1], $ip[1], $teamdata[1], $pointdata[1], $bosstype[1],
$charadata[1], $gamedata[1], $campflag[1]) = split(/<p>/, $winners[0]);
if($saku[1] eq $saku[0] && $pass[1] eq $pass[0]){ &error('自分のチームとは対戦できないよ。'); }
# 不正試合防止(当て馬防止)ここから
if($ateuma){
if($ip[0] eq $ip[1]){
&error('不正試合防止のため、この対戦は許可できません!'); # 前回のIPと同じため試合禁止
}elsif($host eq $ip[1]){
&error('不正試合防止のため、この対戦は許可できません!'); # 現在のIPと同じため試合禁止
}
}
$ip[0] = $host; # 仕掛けたチームのIPを現在のものと置き換えます
# 不正試合防止(当て馬防止)ここまで
($lastjun[1], $win[1], $wincon[1], $winmax[1], $lose[1], $kaio[1], $kaid[1], $get[1], $loss[1], $t_jiseki[1], $boxsum[1],
$hitsum[1], $hrsum[1], $stesum[1], $errsum[1]) = split(/<>/, $teamdata[1]);
これで「不正試合(当て馬)」はある程度防止できると思います。
また、チームに記録されるIPアドレスは最終試合を行った時のものと入れ替わりますので、新規登録での重複防止にも有効と思います。
更に規制を強化したい場合は、
$ENV{'HTTP_X_FORWARDED_FOR'}
$ENV{'HTTP_CLIENT_IP'};
$ENV{'HTTP_X_CISCO_BBSM_CLIENTIP'}
などのチェックも追加してみる事が有効かもしれません。
※同時に「同一チームへの連敗制限」を追加して不正の無いリーグを運営して欲しいです。
|