cookbook|||2001/09/18/Tue|||15:31:41|||aapGzN/cox4tk|||レイアウト|||ARMS|||d-kei@edogawa.home.ne.jp||||||http://|||10|||プレイ中簡易型ログイン履歴|||まずはsub_7.cgiのsub LGIN_RIREKI2というサブルーチンを引っ張ってきます。(削除はしないでね)
sub_3.cgiのsub STATUS内の
&HEADER;
print "a name=#top>";の下に
print "table cellpadding=0 cellspacing=0 border=0>tr>td>";#これを追加する(セルを増やしてrowspanでも構わない)
print
の『上』にてsub LGIN_RIREKI2の内容をペーストします。
# ×
&DBM_INPORT(L);
print tr>
td align=center>
table cellspacing=? cellpadding=? bgcolor="#666666" border=1 bordercolor=?? style="font-size:10px;">
tr>td colspan=? align=center>b style=font-size:14px;color:red>ログイン履歴/b>/td>/tr>
-----END-----
foreach $t(sort {$b $a} keys %L){$lc++;
if ($lc td nowrap> ".&DATE_DECORD2($t);#時間取得はオリジナルで。
print " $lgn[0] /td>/tr>\n";
}
}
print "/table>/td>/tr>/table>";
$lgn[0]はパイロットネーム
$lgn[1]はホストアドレス
$lgn[2]はホスト情報
配列内の[1]や[2]をのみを使うと状況によって重複者を証拠付きで簡単に発見できるので便利かも。
繰り返し文下にある★の部分14は表示させる行数です。
適度に増やしてください。
ちなみにマシマロ氏の公開しているタイマーの条件を入れると
指定時間内でログインした人間のみを表示させれます。
この処理を入れるとSUBのリロード回数が増えます(^^;)
ですからマシマロさんのスクリプトのほうが素敵かも。
実行ファイルにしているので×の部分にiframeタグで履歴を挿入すると負荷軽減にもなりますし、チャットのようなオートリロードも入れると便利です。
!注意
アクティブに戦闘を制限する物ではありませんのですが、ログイン表に載っている人間を攻撃しないでとかの参加者内で暗黙のルールが自然と生まれてしまいます。チャットで喧嘩なども出てましたので、参考程度に使うと良いかな。
ウチは今日中にログイン履歴を撤去する事態になりましたが(涙)
||||||プレイ中にログイン履歴を表示させましょう。|||end|||
cookbook|||2001/09/18/Tue|||22:10:56|||aa5EM4rGklPVk|||バランス|||マシマロ||||||さすらい|||http://members.jcom.home.ne.jp/masimaro/|||10|||建国可能国数 参加人数自動比例|||ebs_sub2.cgi subLOGO1
#-----------
dbmopen (%P,"$DBM_P",0666); @ENTRy=keys %P; dbmclose %L;
$ENTRYS=@ENTRy;$COUNTRY_MAX = int($ENTRYS/10+2);
#現登録人数の表示の手前
ebs_sub5.cgi sub MAKE_C2
#-----------
&LOCK;&DBM_INPORT('C');
dbmopen (%P,"$DBM_P",0666); @ENTRy=keys %P; dbmclose %L;
$ENTRYS=@ENTRy;$COUNTRY_MAX = int($ENTRYS/10+2);
&UNLOCK;
#先頭部分
これで、50人参加なら5+2国。100人参加なら10+2国となります。0人〜9人のときも2国つくれます。||||||国数のバランスって難しいですよね。多すぎても少な過ぎてもダメ。
でもその数は、参加者の人数によって変わりますよね。参加者が増えるごとにその設定を一々変えるというのも面倒だし、難しいです。
そこで、参加者の人数に最大国存在数を比例させましょう。|||end|||
cookbook|||2001/09/18/Tue|||22:28:29|||aatR90GetxMLI|||サイト|||悠紀|||||||||http://|||10|||管理手助け?|||#
open(IN,"./sanka.cgi");
@chara_sanka = ;
close(IN);
@new_sanka=();$hit=0;
foreach(@chara_sanka){
($name,$pass,$Dtime,$Ptime,$IP) = split(//);
if($FORM{'pname'} eq "$name"){$hit=1;$time=&DATE_DECORD($PL_VALUES[26]);
unshift(@new_sanka,"$FORM{'pname'}$FORM{'pass'}$time$PL_VALUES[26]$ENV{'REMOTE_ADDR'}\n");
}else{push(@new_sanka,"$_");
}
}
unshift(@new_sanka,"$FORM{'pname'}$FORM{'pass'}$time$PL_VALUES[26]$ENV{'REMOTE_ADDR'}\n") if !$hit;
open(OUT,">./sanka.cgi");
print OUT @new_sanka;
close(OUT);
#
管理画面だと一定時間たつと消えてしまうの・・・とかいうのが前に話に出てた気がするので
ID、pass(デコード済み)、最終戦闘時間(デコード済み)、最終戦闘時間、IP
となってます
ebs_sub4.cgiに適当に挿入(例えば武器を拾う処理の後ろ等)して、このままならsanka.cgiをebs.cgiとどうフォルダ内にパーミッション666で作成しといてください。
sanka.cgiに情報が書き込まれます(絶対にsanka.cgiのファイル名を変えて、sanka.cgiの部分をソレに変えてください)
ちなみに、ebs_sub1.cgiのsub FOOTER内のライセンス表示のうえに
#
print "☆現在の参加者☆";
open(IN,"./sanka.cgi");
@chara_sanka = ;
close(IN);
foreach(@chara_sanka){
($name,$pass,$Dtime,$Ptime,$IP) = split(//);
if ($Ptime >= time - 600){print " $name /";}
else{last;}
}
#
なんて打てば画面下のライセンス表示のうえ辺りに600秒以内の戦闘者が出ます。まぁポロポロさんのがあるので必要ないですが(爆
||||||pass表示、最終戦闘時間表示、IP表示|||end|||
cookbook|||2001/09/19/Wed|||02:01:09|||aanHBaQ0dLDAU|||その他|||クレアたん||||||Tactics Ogre de Endless Battle|||http://ogre.s1.xrea.com/|||10|||プロクシ制限 荒らし対策(10/27修正)|||まず、config.cgiの85行目に
$PROXYCHECK= 1; # 以下のプロクシ弾きをする? 1=する/0=しない
$IP_JP= 1; # ホスト名が無い(IPアドレスだけの)人か、.JPの人だけ通す。 1=はい/0=いいえ
$YAHOOBB= 1; # プロクシ変数を吐いていなければ通してやる?(一部、ホスト名にJPが付かないプロバイダがあるので…) 1=はい/0=いいえ
$BENKYOSHIRO= 0; # 学校・教育機関からのアクセスを拒否。 1=はい/0=いいえ
$SHIGOTOSHIRO= 0; # 会社・政府機関からのアクセスを拒否。 1=はい/0=いいえ
$FIRE_WALL= 0; # ファイアウォール内からのアクセスを拒否。 1=はい/0=いいえ
# (一部の学校や会社からのアクセスを拒否するにはこのチェックを入れなきゃ駄目。
# でも、一部の CATVインターネットの人も弾いてしまうので注意!)
$BAREBARE= 0; # プロクシっぽいホスト名の人のアクセスを拒否。 1=はい/0=いいえ
$HAITERU= 0; # プロクシ変数を吐いている人のアクセスを拒否。 0=拒否しない/1=軽く拒否/2=厳密に拒否
# 日本語をサポートしていないブラウザの人を拒否。
# 0=拒否しない、1=日本語に非対応なら拒否、2=中国語、韓国語を表示可能なら拒否(藁
$JP_ONLY= 1;
を挿入します。
次に、ebs.cgiの17行目に
if ($PROXYCHECK && $SUB ne 'MY_LIST' && $SUB ne 'C_LIST') {
$addr = $ENV{'REMOTE_ADDR'};
$host = $ENV{'REMOTE_HOST'};
if (($host eq $addr) || ($host eq '')) {$host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr;}
$agent = $ENV{'HTTP_USER_AGENT'};
$accept_lan = $ENV{'HTTP_ACCEPT_LANGUAGE'};
if ($IP_JP && !(($host =~ /jp$/i) || ($host =~s/^(\d+)\.(\d+)\.(\d+)\.(\d+)(\D*).*/$1.$2.$3.$4/))) {
if ($YAHOOBB==0 || ($host !~ /com$|net$|org$/i) || ($ENV{'HTTP_VIA'} ne "") || ($agent=~ /via|squid|delegate|httpd|proxy|cache/i) || ($ENV{'HTTP_CACHE_CONTROL'} ne "") || ($ENV{'HTTP_CACHE_INFO'} ne "")){&ERROR('アクセス制限中','海外からのアクセスは禁止です。');}
}
if ($BENKYOSHIRO && ($host =~ /.ac.jp$|.ed.jp$|edu$/i)) {&ERROR('アクセス制限中','学校・教育機関からのアクセスは禁止です。勉強しなさい(笑');}
if ($SHIGOTOSHIRO && ($host =~ /.co.jp$|.go.jp$|.gr.jp$|.or.jp$|com$|gov$|int$|org$|mil$/i)) {&ERROR('アクセス制限中','会社・政府機関からのアクセスは禁止です。仕事しなさい(笑');}
if ($FIRE_WALL && (($host =~ /^firewall|^fw.|delegate/i) || ($agent =~ /delegate/i))) {&ERROR('アクセス制限中','ファイアウォール内からのアクセスは禁止です。');}
if ($BAREBARE && ($host =~ /squid|^firewall|^fw.|anonymizer|proxy|cache|delegate|^dns|keeper|^mail|^www|^ns\d{0,2}\.|us$|uk$|edu$|com$|org$|net$|at$|au$|ca$|ch$|de$|dk$|fi$|fr$|it$|il$|kr$|nl$|pt$|tw$/i)) {&ERROR('アクセス制限中','プロクシ経由のアクセス禁止です。いかにも Proxyといったホスト名です。');}
if ($HAITERU==1 && (($ENV{'HTTP_VIA'} ne "") || ($agent=~ /via|squid|delegate|httpd|proxy|cache/i) || ($ENV{'HTTP_CACHE_INFO'} ne ""))) {&ERROR('アクセス制限中','プロクシ経由のアクセス禁止です。Proxy変数が出ています。');}
if ($HAITERU==2 && (($ENV{'HTTP_VIA'} ne "") || ($agent=~ /via|squid|delegate|httpd|proxy|cache/i) || ($ENV{'HTTP_CACHE_CONTROL'} ne "") || ($ENV{'HTTP_PROXY_CONNECTION'} ne "") || ($ENV{'HTTP_CACHE_INFO'} ne ""))) {&ERROR('アクセス制限中','プロクシ経由のアクセス禁止です。Proxy変数が出ています。');}
if ($JP_ONLY==1 && ($accept_lan !~ /ja/i)) {&ERROR('アクセス制限中','Sorry, Only in Japanese.');}
if ($JP_ONLY==2 && (($accept_lan !~ /ja/i) || ($accept_lan =~ /zh|ko/i))) {&ERROR('アクセス制限中','Sorry, Only in Japanese.');}
}
を挿入します。これで終わりです。
〜〜〜以下補足説明〜〜
$PROXYCHECK= 1; # 以下のプロクシ弾きをする? 1=する/0=しない
このプロクシ制限機能を利用するかどうかを指定。
$IP_JP= 1; # ホスト名が無い(IPアドレスだけの)人か、.JPの人だけ通す。 1=はい/0=いいえ
210.123.45.67のような ホスト名の無い IPアドレスだけの人か、
p1234.xxxx-xxxx.ocn.ne.jpのような、最後に.jpの付くホスト名の人だけを通す。
$YAHOOBB= 1; # プロクシ変数を吐いていなければ通してやる? 1=はい/0=いいえ
YahooBBxxxxxxxxxx.bbtec.netのようなホスト名にJPが無い人でも、プロクシ変数を出していなければ通す。
$BENKYOSHIRO= 0; # 学校・教育機関からのアクセスを拒否。 1=はい/0=いいえ
ホスト名に 「.ac.jp」(学術、研究機関…大学など)、「.ed.jp」(教育機関…高校以下)、「.edu」(教育組織)の付く人を拒否します。
$SHIGOTOSHIRO= 0; # 会社・政府機関からのアクセスを拒否。 1=はい/0=いいえ
同様にホスト名に「.co.jp」「.com」(企業組織)「.go.jp」(政府機関)などの付く人を拒否します。
# 日本語をサポートしていないブラウザの人を拒否。
# 0=拒否しない、1=日本語に非対応なら拒否、2=中国語、韓国語を表示可能なら拒否(藁
$JP_ONLY= 1;
某国の方々に荒らされて困っている人は2を指定してください。
基本的に、$IP_JP= 1;、$YAHOOBB= 1;、$JP_ONLY= 1;
を指定しておけば大抵の荒らしは防げると思います。
追記、修正前のものを使っている人は、差し替えておいてください。||||||最近、プロクシの匿名性を利用した荒らしが増えています。
また、某国の方々による荒らしも相変わらず続いているようです(^^;
そこで、プロクシ経由&某国の方々のアクセスを制限しちゃいましょう!|||end|||
cookbook|||2001/09/19/Wed|||02:11:04|||aaqPiZY5xR5l.|||戦闘|||ポロポロ|||iet_hot@hotmail.com||||||http://|||10|||戦闘・自国・情報表示時の参加者表示|||ebs_sub1.cgiの最後の「1;」の手前に下記を追加
sub LOGIN_CHECK{
my($char_name, $timer1, $timer2, @char_value, $login_flg, @log_data, %L_buff);
$char_name = $_[0];
$timer1 = 2; #分指定(戦闘時間からの経過分)
$timer2 = 10; #分指定(ログイン時間からの経過分)
if(!defined %P){ &DBM_INPORT(P); }
@char_value = split(/\s/,$P{"$char_name"});
if($char_value[26] >= time - $timer1 * 60){ $login_flg = 1; }
else{ $login_flg = 0; }
if($login_flg == 0){
if(!defined %L){ &DBM_INPORT(L); }
%L_buff = %L;
foreach $login_time (sort {$b <=> $a} keys %L_buff){
if($login_time < time - $timer2 * 60){ last; }
@log_data=split(/!/, $L_buff{"$login_time"});
if($log_data[0] eq $char_name){ $login_flg = 1;}
}
}
return $login_flg;
}
ebs_sub4.cgiのsub FILTINGを変更
sub FILTING {
$PlMs++;
$IconTag=$Guarder='';
if ($PlMs==1){$rc='checked';}else{$rc='';}
$IconTag="<img src=\"$IMG_FOLDER2/$VS_VALUES[27].gif\" style=\"filter:fliph();\">";
print "<tr><td bgcolor=\"$CL_VALUE[0]\" align=center> </td>";
print "<td bgcolor=\"$TABLE_COLOR1\"><input type=radio name=vsname value=\"$Key\" $rc onClick=\"location.replace('#sbm')\">";
print "<span style=\"font-size:18px;color:$VS_VALUES[13];\">$Key</span>";
print "<span style=\"font-size:15px;\"><b>".&RANK($VS_VALUES[0],$VS_VALUES[5],$VS_VALUES[6])."</b></font></td>";
print "<td bgcolor=\"$TABLE_COLOR1\">$IconTag<font color=\"$VS_VALUES[13]\">$VS_VALUES[3]</font></td>";
print "<td bgcolor=\"$TABLE_COLOR1\">".&STATUS_CONVERT("$VS_VALUES[24]",'j');
#----- 追加 -----
print "</font></b></td>";
print "<td bgcolor=\"$TABLE_COLOR1\">";
if(LOGIN_CHECK($Key)){ print "参戦中"; }
else{ print "休戦中"; }
print "</td></tr>";
#----- /追加 -----
#print "</font></b></td></tr>"; ←使わないのでコメントアウト
}
ebs_sub2.cgiのsub MY_LIST2を変更
143行目のsub TRを下記のように変更
sub TR {$VALUES[7]='No-Comment'if !$VALUES[7];"<tr><td nowrap style=\"color:$VALUES[13];\">$Key</td><td>".&RANK($VALUES[0],$VALUES[5],$VALUES[6])."</td><td><img src=$IMG_FOLDER2/$VALUES[27].gif width=32 height=32></td><td style=\"color:$VALUES[13];\">$VALUES[7]</td><td style=\"color:$VALUES[13];\">".(&LOGIN_CHECK($Key) ? "参戦中":"休戦中")."</td></tr>"}
ebs_sub3.cgiのsub CNTRY_LISTを変更
210行目を下記のように変更
"<tr><td nowrap style=\"color:$VALUES[13];\">$Key</td><td>".&RANK($VALUES[0],$VALUES[5],$VALUES[6])."</td><td><img src=$IMG_FOLDER2/$VALUES[27].gif width=32 height=32></td><td align=center>".&STATUS_CONVERT("$VALUES[19]",'s')."</td><td align=center>".&STATUS_CONVERT("$VALUES[20]",'s')."</td><td align=center>".&STATUS_CONVERT("$VALUES[21]",'s')."</td><td align=center>".&STATUS_CONVERT("$VALUES[22]",'s')."</td><td align=center>".&STATUS_CONVERT("$VALUES[24]",'j')."</td><td><b>".$WN_sA[0]."(LV$WLV_A)</b></td><td align=center>".(&LOGIN_CHECK($Key) ? "参戦中":"休戦中")."</td></tr>"}
229行目を下記のように変更
print "<tr><td>Name</td><td>Rank</td><td> </td><td>$STATUS_NAME[0]</td><td>$STATUS_NAME[1]</td><td>$STATUS_NAME[2]</td><td>$STATUS_NAME[3]</td><td>熟</td><td>Weapon</td><td>状況</td></tr>";
最後にebs_sub2.cgiのsub MY_LIST2内、ebs_sub3.cgiのsub CNTRY_LIST内、ebs_sub4.cgiのsub BATTLE1内の各colspanの値を+1すればOKです。
例)
colspan=4 → colspan=5
### 補足説明 ###
上記ではログイン後10分以内、または戦闘後2分以内の
キャラを「参戦中」と表示しています。
時間を変更する場合は$timer1、$timer2の値を変更してください。
前回の投稿で改造されて、sub LOGIN_CHECKをebs_sub4.cgiに記述
された方はebs_sub1.cgiに移動させてください。
||||||戦闘時の参加者表示を、戦闘・自国・情報表示時に参加者が表示されるように記述を追加しました。
一定時間内にログインした人と戦闘を行った人が戦闘・自国・情報表示時に分かるようになります。
各キャラの横に参戦中、休戦中の表示が出ます。
|||end|||