Translate application to Korean and convert encodings to UTF-8

This commit is contained in:
sanjeok77
2026-06-22 22:22:41 +09:00
parent dc9058e0da
commit f43e7fa915
61 changed files with 11582 additions and 11644 deletions
Regular → Executable
+287 -305
View File
@@ -1,305 +1,287 @@
#-----------------------------------------------------------#
# 罪と罰++ 二律背反 #
# 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;#削除不可
$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;
# 문자 코드를 Shift_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;#삭제 불가