234 lines
9.7 KiB
Perl
Executable File
234 lines
9.7 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# サーバーの環境に合わせて変更して下さい。
|
|
require './ore_config.cgi'; # ore_config.cgi의 패스
|
|
#-----------------------------------------------------------#
|
|
# 罪と罰++ 二律背反 #
|
|
# Copyright(C) 2001-2002 by Vivid Studio. BLANK BOARD #
|
|
# Vivid Studio.[ http://www17.big.or.jp/~obochan/vivid/ ] #
|
|
# BLANK BOARD [ http://www17.big.or.jp/~obochan/chat/ ] #
|
|
#-----------------------------------------------------------#
|
|
# トップページ Version 1.0
|
|
#--- [注意事項] --------------------------------------------#
|
|
# 1.このスクリプトは以下の利用規程に従って配布しています。 #
|
|
# http://www24.big.or.jp/~obo/game/ore_/gild/ #
|
|
#-----------------------------------------------------------#
|
|
|
|
#===============================================================================
|
|
# 設定項目
|
|
$help = "./html/Help.html"; # 사용설명서[PC]
|
|
$help_i = "./html/Help_i.html"; # 사용설명서[MV]
|
|
|
|
#===============================================================================
|
|
# 以下処理 基本的にこれ以下はいじらないように。
|
|
&get_time; # 日時取得
|
|
&axs_check; # アクセスチェック
|
|
&read_data_index; # ログデータ読みsub html_top_pc{
|
|
print <<"EOM";
|
|
|
|
<html>
|
|
<head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>$titleh</title>
|
|
<link rel="stylesheet" type="text/css" href="$css">
|
|
</head>
|
|
|
|
<body class="modern-ui">
|
|
<div class="game-container">
|
|
<div class="card" style="display: flex; flex-direction: row; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 20px;">
|
|
<div class="title-images" style="display: flex; flex-direction: column; align-items: center; gap: 10px;">
|
|
<img src="$imgs/title_text.png" style="max-height: 56px;">
|
|
<img src="$imgs/title_game.png" style="max-height: 52px;">
|
|
</div>
|
|
<img src="$imgs/fairy2_la.jpg" style="border-radius: 8px; max-height: 120px; border: 1px solid var(--border-color);">
|
|
</div>
|
|
|
|
<div class="game-layout">
|
|
<!-- 로그인 폼 및 링크 -->
|
|
<div style="display: flex; flex-direction: column; gap: 20px;">
|
|
<div class="card">
|
|
<div class="card-title">유구한 대지로 로그인</div>
|
|
EOM
|
|
|
|
if($now_nm_cnt>=$play_limit){
|
|
print qq|<div style="color:#ffdd00; font-weight:bold; margin-bottom:15px;">현재 로그인 제한 중</div>|;
|
|
} else {
|
|
print <<"EOM";
|
|
<form method="$method" action="$script" name="ore_" style="display: flex; flex-direction: column; gap: 15px;">
|
|
<input type="hidden" name="mode" value="1">
|
|
<div>
|
|
<label style="display:block; margin-bottom:5px; color:var(--text-secondary); font-size:12px;">유저 ID</label>
|
|
<input type="text" name="id" value="" class="button1" style="width:100%; text-align:left; padding-left:12px; margin-bottom:0;">
|
|
</div>
|
|
<div>
|
|
<label style="display:block; margin-bottom:5px; color:var(--text-secondary); font-size:12px;">비밀번호</label>
|
|
<input type="password" name="pw" value="" class="button1" style="width:100%; text-align:left; padding-left:12px; margin-bottom:0;" maxlength="8">
|
|
</div>
|
|
<input type="submit" value="시작하기 (IN)" class="button1" style="width:100%; margin-top:5px;">
|
|
</form>
|
|
EOM
|
|
}
|
|
|
|
print <<"EOM";
|
|
</div>
|
|
|
|
<!-- 네비게이션 및 메뉴 링크 -->
|
|
<div class="card">
|
|
<div class="card-title">메인 메뉴</div>
|
|
<div style="display: flex; flex-direction: column; gap: 12px;">
|
|
<div>
|
|
<a href="$ore_reg" class="button1" style="width:100%; text-decoration:none; display:block; box-sizing:border-box;">신규 등록</a>
|
|
<div style="font-size:12px; color:var(--text-secondary); margin-top:4px; margin-left:5px;">등록하기 전에 반드시 설명서를 정독해주세요.</div>
|
|
</div>
|
|
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;">
|
|
<a href="$help" class="button1" style="text-decoration:none; padding:8px 5px; display:block; box-sizing:border-box;">사용 설명서</a>
|
|
<a href="$hist?mode=guest" class="button1" style="text-decoration:none; padding:8px 5px; display:block; box-sizing:border-box;">과거의 영광</a>
|
|
<a href="$home" class="button1" style="text-decoration:none; padding:8px 5px; display:block; box-sizing:border-box;">본관 이동</a>
|
|
<a href="$hist_hasya" class="button1" style="text-decoration:none; padding:8px 5px; display:block; box-sizing:border-box;">죄와 벌의 석비</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 플레이어 상태 및 정보 -->
|
|
<div style="display: flex; flex-direction: column; gap: 20px;">
|
|
<div class="card" style="height: 100%; display: flex; flex-direction: column; box-sizing: border-box;">
|
|
<div class="card-title">현재 접속자 [$now_nm_cnt명]</div>
|
|
<div style="flex:1; min-height:180px; max-height:220px; overflow-y:auto; padding:10px; background: rgba(0,0,0,0.25); border-radius: 8px; border: 1px solid var(--border-color); line-height: 1.6;" class="bar">
|
|
$now_nm
|
|
</div>
|
|
|
|
<div style="margin-top:15px; font-size:12px; color:var(--text-secondary); line-height: 1.7;">
|
|
• 현재 등록 인원: <b>$now_sanka명</b> / 최대 <b>$sanka명</b><br>
|
|
• 방치 삭제 기간: <b>$del_limit일</b><br>
|
|
• 플레이 제한 시간: <b>$safe_time</b>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
EOM
|
|
|
|
#-------------------------------------------------------------------------------
|
|
#-------------------------------------------------------------------------------
|
|
# html生成(モバイル)
|
|
sub html_top_mv{
|
|
print <<"EOM";
|
|
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title>$titleh</title>
|
|
</head>
|
|
|
|
<body bgcolor="#000000" text="#aaaaaa" link="#c597ff" vlink="#c597ff" alink="#c597ff">
|
|
$title_i
|
|
<hr color="white">
|
|
그대가 바라는 영원 그것은 유구한 대지에
|
|
<hr color="white">
|
|
<form method="$method" action="$script" name="ore_">
|
|
이어하기<br>
|
|
EOM
|
|
|
|
if($now_nm_cnt>=$play_limit){
|
|
print qq|현재 로그인 제한 중|;
|
|
}
|
|
else{
|
|
print <<"EOM";
|
|
I D:<input type="text" name="id" value="" size="8"><br>
|
|
비밀번호:<input type="text" name="pw" value="" size="2" maxlength="8">
|
|
<input type="hidden" name="mode" value="1">
|
|
<input type="submit" value="IN">
|
|
EOM
|
|
}
|
|
print <<"EOM";
|
|
</form>
|
|
<hr color="white">
|
|
<a href="$ore_reg" ACCESKEY="1">1.신규 등록</a><br>등록하기 전에 반드시 ↓ 내용을 읽어주세요<hr color="white">
|
|
<a href="$help_i" ACCESKEY="2">2.설 명 서</a><br>안 읽으면 도통 이해하기 힘들걸요?<hr color="white">
|
|
<a href="$hist?mode=guest" ACCESKEY="3">3.과거의 영광</a><br>유구한 대지의 역사를 돌아보다<hr color="white">
|
|
<a href="$hist_hasya" ACCESKEY="4">4.죄와 벌++ 석비</a><br>유구한 대지에서 패권을 쥔 자의 이름<hr color="white">
|
|
<a href="$home_i" ACCESKEY="9">9.본관으로 돌아가기</a><hr color="white">
|
|
플레이 중인 캐릭터 $now_nm_cnt명<br>
|
|
$now_nm
|
|
<hr color="white">
|
|
현재 등록 인원[$now_sanka명]<br>
|
|
최대 등록 인원[$sanka 명]<br>
|
|
삭제 방치 기간[$del_limit일]<br>
|
|
플레이 제한 시간대[$safe_time]<br>
|
|
<hr color="white">
|
|
<br>
|
|
|
|
EOM
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# データ読み込み
|
|
# 参加者データ一括読み込み
|
|
sub read_data_index{
|
|
|
|
local @tdat;
|
|
# 参加者データファイル一覧取得/一括読み込み
|
|
&usrdata_read;
|
|
&usrdata_open;
|
|
|
|
$now_sanka=$#tdat+1;
|
|
$now_nm_cnt=0;
|
|
foreach(0 .. $#tdat){
|
|
%DAT = '';
|
|
my @prats = split(/,/,$tdat[$_]);
|
|
foreach $prats (@prats){
|
|
my($key,$v) = split(/;/,$prats);
|
|
$DAT{$key} = $v;
|
|
}
|
|
|
|
# 現在のプレイヤー抽出
|
|
if($player_now>=$time-$DAT{'la'}){
|
|
if($mv_mode eq 'pc'){
|
|
$now_nm .= ($DAT{'sogo'}) ? qq|<div style="color:$color[$DAT{'camp'}]">$DAT{'nm'} [$sogo_p[$DAT{'sogo'}]] [$cmp[$DAT{'camp'}]]</div>| : qq|<div style="color:$color[$DAT{'camp'}]">$DAT{'nm'} [$cmp[$DAT{'camp'}]]</div>| ;
|
|
}else{
|
|
$now_nm .= ($DAT{'sogo'}) ? "$DAT{'nm'} [$sogo_p[$DAT{'sogo'}]]/" : "$DAT{'nm'}/" ;
|
|
}
|
|
$now_nm_cnt++;
|
|
}
|
|
}
|
|
|
|
foreach (0 .. $#safetime){
|
|
$safe_time .= ($safetime[$_]<0) ? "--" : "$safetime[$_],";
|
|
}
|
|
|
|
# 自動バックアップ
|
|
&auto_backup if($backdata);
|
|
|
|
return ($now_nm,$now_sanka,$now_nm_cnt,$safe_time);
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# 自動バップアップ
|
|
sub auto_backup{
|
|
|
|
my $backup_flag1 = "backup_flag1";
|
|
my $backup_flag2 = "backup_flag2";
|
|
|
|
# フラグ消失は作成
|
|
if(!-e "$backdata$backup_flag1" && !-e "$backdata$backup_flag2"){
|
|
open (OUT,">$backdata$backup_flag1");
|
|
print OUT "이 파일은 삭제하거나 이름을 변경하지 마십시오.";
|
|
close(OUT) or die "Can't close : $!";
|
|
chmod($chmod,"$backdata$backup_flag1");
|
|
}
|
|
|
|
# 0時にバックアップ
|
|
if(!$hour){
|
|
if(-e "$backdata$backup_flag1"){
|
|
open (OUT,">$backdata$week[$wday]\.cgi");
|
|
print OUT @tdat;
|
|
close(OUT) or die "Can't close : $!";
|
|
chmod($chmod,"$backdata$week[$wday]\.cgi");
|
|
|
|
rename("$backdata$backup_flag1","$backdata$backup_flag2");
|
|
}
|
|
}else{
|
|
rename("$backdata$backup_flag2","$backdata$backup_flag1");
|
|
}
|
|
}
|