TOP > 野良猫のCGI講座 > 5.「劇ぱわ2」改造方法 > 不正試合防止(当て馬の防止)
凡田クンが教えます! 【初心者コース】 虎猫が教えます♪
『5.「劇ぱわ2」改造方法』

不正試合防止(当て馬の防止)
おことわり
ここに記載してある「セキュリティ対策」「不具合対策」「改造方法」を含む全てのコンテンツの無断転載を禁止します。
参考にされる方の自己責任でご覧下さい。
参考にされた方は、リンクを貼ってくれると嬉しいです♪
『参考:"Take it easy !"』
URL:http://ryoquest.sakura.ne.jp/
バナー:tie_8831an.gif(3611 byte)
当サイトの改造スクリプトを使用された方は、
当サイトトップページにリンクを貼って下さい♪
参考にされる方は、下のリンクからクリック募金をして下さい♪
あなたの善意をクリックにのせて♪
アドバイス!
@コピペ(コピー&ペースト)
改造方法をコピペで写す事は出来るだけ止めましょう。
『500エラー』がよく出ます。
原因は、コピーした時に不要な物(と言うか、あってはならない物)までコピーしてしまう事が有るからです。
例えば、空白(全角)が含まれているとか、HTMLのスクリプトがコピーされちゃったとか^^
面倒だけど、出来るだけ「打つべし!」(間違えない様に♪)
コピペするなら、「1行づつコピペするべし!」(おかしな空白がないか、おかしな改行がないか、気を付けながら♪)
A意味を考えながら、改造法を参考にしましょう
単純にコピペして、改造終了!なんて事は、止めましょう!
改造されたスクリプトの意味を考えながら参考にすれば、参考資料が間違っていても自分で改造できます。
『ちゃんとコピーしたのに動かない!』と嘆く前に、何故、こうすると改造できるのかを考える様にしましょう。
スクリプトの意味や、組み立て方が分かってきます♪
そうすれば、『投手4人制』も自分で改造出来ちゃいます♪
画面下にリンク先を追加する
「劇ぱわ」の下部著作権部分に「Take it easy!」へのリンクを貼って下さい。

##### 著作権表示
sub chosaku{
print <<"_CHOSAKU_";
</center>
<hr size="1">
<div align="right"><a href="http://homepage2.nifty.com/osktaka/" target="_blank" title="気ままなまま"><font size="2">劇空間ぱわふるリーグ2 ver 3.00b (Free)</font></a></div>
<div align="right"><a href="http://ryoquest.sakura.ne.jp/" target="_blank" title="改造:"Take it easy !"RYOQUEST presents(虎猫 presents)">
<font size="2">改造:"Take it easy !"RYOQUEST presents(虎猫 presents)</font></a></div>

<!--広告バナー挿入位置、ページ下部-->
</body>
</html>
_CHOSAKU_
}#end chosaku


すると下記の様に表示されます。

※リンク先名称は「Take it easy !」だけでも構いません^^
不正試合防止(当て馬の防止)
「重複登録の禁止」をしても「登録時の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'}
などのチェックも追加してみる事が有効かもしれません。

※同時に「同一チームへの連敗制限」を追加して不正の無いリーグを運営して欲しいです。
参考にされた方は、リンクを貼ってくれると嬉しいです♪
『参考:"Take it easy !"』
URL:http://ryoquest.sakura.ne.jp/
バナー:tie_8831an.gif(3611 byte)
当サイトの改造スクリプトを使用された方は、
当サイトトップページにリンクを貼って下さい♪
この改造が動作しない場合は、「サポート掲示板」にご連絡下さい。
出来る範囲内でサポートします。
  2010/10/28
 TOP > 野良猫のCGI講座 > 5.「劇ぱわ2」改造方法 > 不正試合防止(当て馬の防止)