Files
ore/inc/ore_sub-bbs.cgi
T
2026-06-22 21:09:26 +09:00

306 lines
8.4 KiB
Perl
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#-----------------------------------------------------------#
# 罪と罰++ 二律背反 #
# Copyright(C) 2001-2002 by Vivid Studio. BLANK BOARD #
# Vivid Studio.[ http://www17.big.or.jp/~obochan/vivid/ ] #
# BLANK BOARD [ http://pom.to/ ] #
#-----------------------------------------------------------#
# 各種掲示板共通設定 Version 1.1
#--- [注意事項] --------------------------------------------#
# 1.このスクリプトは以下の利用規程に従って配布しています。 #
# http://www24.big.or.jp/~obo/game/ore_/gild/ #
#-----------------------------------------------------------#
#===============================================================================
# 各種掲示板共通設定項目
require './jcode.pl'; # jcode.plのパス
$ore_game = './ore_.cgi'; # 罪と罰++本体のパス
$index = './index.cgi'; # 罪と罰++トップページ
$usrdata = "./usrdata/"; # キャラデータ格納ディレクトリ。
$no_window = 1; # 現状維持・拘束時間以外の他窓禁止(0:なし 1:あり)[負荷対策]
# 各国設定情報
@camp_info =( ['無所属', '#eeeeee'],
['アルメリア王国', '#ee9999'],
['フラリン教国', '#00eeee'],
['イギス連合国', '#88ee88'],
['ソーディナ帝国', '#ffccff'],
['ヤマト神国', '#55bbff']);
# 称号
@sogo_p =('----','覇者','英雄','借金王','鬼畜',' ',' ',' ',' ',' ','管理人');
# デバックモード
# なし:PC・モバイル両対応
# pc :PC限定モード(モバイル非対応)
# mv :モバイル固定モード(PC上でモバイル画面をエミュレート表示)
$mv_mode = '';
# 機種別設定
if( $ENV{'HTTP_USER_AGENT'}=~/DoCoMo/ ||
$ENV{'HTTP_USER_AGENT'}=~/UP\.Browser/ ||
$ENV{'HTTP_USER_AGENT'}=~/J-PHONE/ ||
$ENV{'HTTP_USER_AGENT'}=~/ASTEL/ ||
$ENV{'HTTP_X_JPHONE_MSNAME'} || $mv_mode eq 'mv'){
$mv_mode= 'mv'; # モバイル用フラグ(変更不可)
$method = "GET"; # フォームメソッド(モバイル)
}else{
$mv_mode= 'pc'; # PC用フラグ(変更不可)
$method = "POST"; # フォームメソッド(PC)
# スタイルシート
$css =<<EOM;
<style type="text/css">
<!--
.button1{
font-family: "MS Pゴシック", "Osaka"; font-size: 12px; font-weight: 400; color: #bbbbcc;
border: 2px #9999cc ridge; cursor: hand; background-color: #333366;
}
body { font-size: 12pt;}
.mem { font-size: 10pt; color:#ddddee}
.date { font-size: 10pt; color:#dddddd}
.f1{font-size:16pt; font-family:'Symbol','Palatino'; color:#ff99cc;}
-->
</style>
EOM
}
# ホスト名取得モード
# --> 0 : $ENV{'REMOTE_HOST'} で取得できる場合
# --> 1 : gethostbyaddr で取得できる場合
$get_remotehost = 1;
# 他サイトから投稿排除時に指定 (http://から書く)
$base_url = "";
# アクセス制限(ホスト名もしくはIPアドレスを記述)
@deny = (
"anonymizer.com",
"cache*.*.interlog.com",
"",
""
);
#===============================================================================
# 以下処理 基本的にこれ以下はいじらないように。
#-------------------------------------------------------------------------------
# 参加者データ個別読み込み
sub mandata_open{
open(IN,"$usrdata$id\.cgi") || &error("Open Error : $usrdata$id\.cgi");
$dat = <IN>;
close(IN);
%DAT = '';
my @prats = split(/,/,$dat);
foreach (0 .. $#prats){
my($key,$v) = split(/;/,$prats[$_]);
$DAT{$key} = $v;
}
if($pw ne $DAT{'pw'}){ &error("パスワードが間違ってます"); }
if($no_window){
&error("現在のイベントを終了してからご利用ください。") if($DAT{'pr'}<=0 && $DAT{'type'});
}
}
#-------------------------------------------------------------------------------
# デコード処理
sub decode {
local($buffer, @pairs, $name, $value);
$post_flag=0;
if($ENV{'REQUEST_METHOD'} eq "POST"){
$post_flag=1;
&error("投稿量が大きすぎます") if($ENV{'CONTENT_LENGTH'}>8192);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else{
$buffer = $ENV{'QUERY_STRING'};
&error("投稿量が大きすぎます") if(length($buffer)>7500)
}
@pairs = split(/&/, $buffer);
foreach (@pairs) {
($name,$value) = split(/=/);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# 文字コードをシフトJIS変換
&jcode'convert(*value, "sjis", "", "z");
$value =~ s/\&/&amp\;/g;
$value =~ s/\;/&#59\;/g;
$value =~ s/\,/&#44\;/g;
# タグ処理
if ($tagkey) {
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<>/&lt;&gt;/g;
} else {
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\"/&quot;/g;
}
# 改行等処理
if ($name eq "comment" && $br_mode) {
$value =~ s/\r\n/<br>/g;
$value =~ s/\r/<br>/g;
$value =~ s/\n/<br>/g;
} else {
$value =~ s/\r//g;
$value =~ s/\n//g;
}
# 荒らし処理 1
$value =~ s/(<br>){4,}//g;
$value =~ s/( | ){6,}//g;
# 記号置換え
$value =~ s/\//&#47\;/g;
$value =~ s/\./&#46\;/g;
$value =~ s/cgi/&#99\;&#103\;&#105\;/g;
$in{$name} = $value;
}
&no_link($in{'comment'}) if($nolink);
$com = $in{'comment'}; if(length($in{'comment'})>$com_limit) { &error("文字数エラーです 1"); }
$mode = $in{'mode'}; if(length($in{'mode'})>10) { &error("文字数エラーです 2"); }
$pw = $in{'pw'}; if(length($in{'pw'})>8 || !$in{'pw'}) { &error("文字数エラーです 3"); }
$id = $in{'id'}; if(length($in{'id'})>24 || !$in{'id'}) { &error("文字数エラーです 4"); }
$ids = $in{'ids'}; if(length($in{'ids'})>12) { &error("文字数エラーです 5"); }
$rd = $in{'rd'}; if(length($in{'rd'})>1) { &error("文字数エラーです 6"); }
if ($base_url) {
$ref_url = $ENV{'HTTP_REFERER'};
$ref_url =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($ref_url !~ /$base_url/i) { &error("不正なアクセスです"); }
}
}
#-------------------------------------------------------------------------------
# エラー処理
sub error {
if (-e $lockfile) { unlink($lockfile); }
&header(1);
print "<center><hr width='75%'><P><h3>ERROR !</h3>\n";
print "<P><font color=red><B>$_[0]</B></font>\n";
print "<P><hr width='75%'></center>\n";
&copyright;
exit;
}
#-------------------------------------------------------------------------------
# ロックファイルの生成
sub lock {
local($lflag) = 0;
foreach (1 .. 5) {
if (-e $lockfile) { sleep(1); }
else {
open(LOCK,">$lockfile") || &error("Can't create $lockfile");
close(LOCK);
$lflag = 1;
last;
}
}
if ($lflag == 0) { &error("LOCK is BUSY"); }
}
#-------------------------------------------------------------------------------
# アクセスチェック(アクセス拒否)
sub axs_check {
&get_host;
local($flag)=0;
foreach (@deny) {
if (!$_) { next; }
$_ =~ s/\*/\.\*/g;
if ($host =~ /$_/i || $addr =~ /$_/i) { $flag=1; last; }
}
if ($flag) { &error("アクセスを許可されていません"); }
}
#-------------------------------------------------------------------------------
# ホスト情報取得
sub get_host {
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
$agent = $ENV{'HTTP_USER_AGENT'};
if ($get_remotehost) {
if ($host eq "" || $host eq "$addr") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
}
if ($host eq "") { $host = $addr; }
}
#-------------------------------------------------------------------------------
# 時間取得
sub get_time {
$time = time;
($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($time);
$hour= "0$hour" if($hour<10);
$min = "0$min" if($min<10);
$sec = "0$sec" if($sec<10);
$month++;
$month = "0$month" if(month<10);
@week=('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$date = "$month/$mday($week[$wday]) $hour:$min";
srand($time);
}
#-------------------------------------------------------------------------------
# プレイ規制
sub safetime {
foreach (0 .. $#safetime){
&error("プレイ規制時間中です。暫くお待ち下さい。") if $hour eq $safetime[$_];
}
}
#-------------------------------------------------------------------------------
# URL排除
sub no_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<!-- $2 -->/g;
}
#-------------------------------------------------------------------------------
# 削除変更不可 必ず表示すること
#著作権表示(削除・変更不可)
sub copyright{
if($mv_mode eq 'mv'){
print <<"EOM";
<br><hr color="white">
過去の栄光 $ver<br>
<a href="http://pom.to/" target="_blank">BLANK BOARD[ねっと遊園地♪]</a>
</body>
</html>
EOM
}else{
print <<"EOM";
<div align="right" style="font-size:12px">
$ver<br>
<a href="http://www17.big.or.jp/~obochan/vivid/" target="_blank" style="font-size:13px">Vivid Studio.</a><br>
<a href="http://pom.to/" target="_blank" style="font-size:11px">BLANK BOARD[ねっと遊園地♪]</a>
</div>
</body>
</html>
EOM
}
}
1;#削除不可