271 lines
7.4 KiB
Perl
Executable File
271 lines
7.4 KiB
Perl
Executable File
#-----------------------------------------------------------#
|
|
# 죄와 벌++ 이율배반 #
|
|
# Copyright(C) 2001-2002 by Vivid Studio. BLANK BOARD #
|
|
# Vivid Studio.[ http://www17.big.or.jp/~obochan/vivid/ ] #
|
|
# BLANK BOARD [ http://pom.to/ ] #
|
|
#-----------------------------------------------------------#
|
|
# 수행 PC용 Version 1.1 #
|
|
#--- [주의사항] --------------------------------------------#
|
|
# 1.이 스크립트는 이하의 이용규정에 따라 배포되고 있습니다. #
|
|
# http://www24.big.or.jp/~obo/game/ore_/gild/ #
|
|
#-----------------------------------------------------------#
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# 수행 메뉴
|
|
sub training{
|
|
|
|
if(!$type){
|
|
|
|
if($hp<4){
|
|
$log .= "체력이 너무 적습니다.<br>\n";
|
|
$tm= $cmd = 0;
|
|
$type='';
|
|
&call_main_st;
|
|
}else{
|
|
$log .= "수행을 시작합니다.<br>\n";
|
|
$tm= $cmd = 0;
|
|
$type = '수행';
|
|
|
|
$log2 .=qq|<form action="$script" method="$method" name="ore_">\n|;
|
|
$log2 .=qq|<td align="center" valign="middle">\n| if($mv_mode eq 'pc');
|
|
$log2 .=qq|<input type="hidden" name="id" value="$id">\n<input type="hidden" name="pw" value="$pw">\n|;
|
|
$log2 .=qq|<select name="cmd" size="1">\n|;
|
|
$log2 .=qq|<option value="1">이전 대전자</option>\n| if($tid);
|
|
$log2 .=qq|<option value="2">목록에서 선택</option>\n|;
|
|
$log2 .=qq|<option value="0">그만둔다</option>\n|;
|
|
$log2 .=qq|</select><br>\n|;
|
|
$log2 .=qq|<input type="submit" $button1 value="NEXT">$td_end</form>\n|;
|
|
}
|
|
}
|
|
&dat_write;
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# 수행 처리1
|
|
sub training_exe{
|
|
|
|
if($cmd==0){
|
|
$log .= "수행을 중단합니다<br>\n";
|
|
$tm = $cmd = 0;
|
|
$type='';
|
|
&call_main_st;
|
|
|
|
}elsif($cmd==1 && !$com){
|
|
|
|
# GET에 의한 부정 처리 페널티
|
|
&penalty if($mv_mode eq 'pc' && $method eq 'POST' && !$post_flag);
|
|
|
|
open(IN,"$usrdata$tid\.cgi") || &error("Open Error : $usrdata$tid\.cgi",1);
|
|
$tdat = <IN>;
|
|
close(IN);
|
|
|
|
%VS = '';
|
|
my @prats = split(/,/,$tdat);
|
|
foreach $prats (@prats){
|
|
my ($u,$q) = split(/;/,$prats);
|
|
$VS{$u} = $q;
|
|
}
|
|
|
|
$tid = $VS{'id'}; # ID
|
|
$tnm = $VS{'nm'}; # 이름
|
|
$tlv = $VS{'lv'}; # 레벨
|
|
$thp = $VS{'max_hp'}; # HP
|
|
$thp_max= $VS{'max_hp'}; # MAX_HP
|
|
$tmp = $VS{'max_mp'}; # MP
|
|
$tua = $VS{'ua'}; # UA
|
|
$tud = $VS{'ud'}; # UD
|
|
$tag = $VS{'ag'}; # AG
|
|
$tcp = $VS{'camp'}; # 소속
|
|
$tsg = $VS{'sogo'}; # 칭호
|
|
|
|
$tdf_a = $VS{'df_a'}; # 방어구
|
|
$tdg_a = $VS{'dg_a'}; # 무구
|
|
|
|
$log .="이전 대전 상대와 수행을 시작합니다.<br>시합 개시!<br>\n";
|
|
$type = '수행중';
|
|
$tm = 0;
|
|
|
|
$cmd =-1;
|
|
# $log2 .=qq|<form action="$script" method="$method" name="ore_"><td align="center" valign="middle">\n|;
|
|
# $log2 .=qq|<input type="hidden" name="id" value="$id">\n<input type="hidden" name="pw" value="$pw">\n|;
|
|
# $log2 .=qq|<input type="hidden" name="cmd" value="-1">\n|;
|
|
# $log2 .=qq|<input type="submit" $button1 value="대결">$td_end</form>\n|;
|
|
|
|
# 행동 세션 가산
|
|
$act_cnt++;
|
|
|
|
# &dat_write;
|
|
|
|
require './inc/ore_sub-battle.cgi'; &bt_st;
|
|
|
|
}else{&sele_list;}
|
|
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# 수행 리스트 표시
|
|
sub sele_list {
|
|
|
|
# GET에 의한 부정 처리 페널티
|
|
&penalty if($mv_mode eq 'pc' && $method eq 'POST' && !$post_flag);
|
|
|
|
local(@usrfile,@BT_LIST,@tdat);
|
|
|
|
# 참가자 데이터 파일 목록 취득
|
|
&usrdata_read;
|
|
|
|
# 표시 참가자 랜덤 선출
|
|
foreach(0 .. $bt_count){
|
|
$bt_list = int(rand($#usrfile));
|
|
|
|
$flag = 0;
|
|
foreach(0 .. $#BT_LIST){
|
|
$flag = 1 if $bt_list eq $BT_LIST[$_];
|
|
}
|
|
push(@BT_LIST,$bt_list) if !$flag;
|
|
}
|
|
@BT_LIST = sort(@BT_LIST);
|
|
|
|
# 랜덤 선출 참가자 데이터 일괄 읽기
|
|
foreach (0 .. $#BT_LIST) {
|
|
open(IN,"$usrdata$usrfile[$BT_LIST[$_]]") || &error("Can't open $usrfile[$BT_LIST[$_]].cgi",1);
|
|
push(@tdat,<IN>);
|
|
close(IN);
|
|
}
|
|
|
|
# 참가자 스탯 취득
|
|
foreach(0 ..$#tdat){
|
|
%R = '';
|
|
my @prats = split(/,/,$tdat[$_]);
|
|
foreach $prats (@prats){
|
|
my($y,$x) = split(/;/,$prats);
|
|
$R{$y} = $x;
|
|
}
|
|
|
|
if($nm ne $R{'nm'}){
|
|
$NM_V{$R{'nm'}} = $R{'nm'}; # 이름
|
|
$HP_MAX_V{$R{'nm'}} = $R{'max_hp'}; # HP
|
|
$MP_MAX_V{$R{'nm'}} = $R{'max_mp'}; # MP
|
|
$LV_V{$R{'nm'}} = $R{'lv'}; # 레벨
|
|
$TM_V{$R{'nm'}} = $R{'tm'}; # 행동
|
|
$UA_V{$R{'nm'}} = $R{'ua'}; # UA
|
|
$UD_V{$R{'nm'}} = $R{'ud'}; # UD
|
|
$LR_V{$R{'nm'}} = $R{'lr'}; # LR
|
|
$AG_V{$R{'nm'}} = $R{'ag'}; # AG
|
|
$CP_V{$R{'nm'}} = $R{'camp'}; # 소속
|
|
$SG_V{$R{'nm'}} = $R{'sogo'}; # 칭호
|
|
$N_M{$R{'nm'}} = $R{'id'}; # ID
|
|
}
|
|
}
|
|
|
|
# 수행 리스트 표시
|
|
if(!$tm){
|
|
|
|
$log .=qq|<form action="$script" method="$method" name="ore_">\n|;
|
|
$log .=qq|<input type="hidden" name="id" value="$id">\n<input type="hidden" name="pw" value="$pw">\n|;
|
|
$log .=qq|<input type="hidden" name="cmd" value="-1">\n|;
|
|
$log .=qq|<table border="0" cellpadding="4" sellpadding="4" width="100%">\n<tr align="center" bgcolor="#ccccee"><td></td><td>순위</td><td>LV</td><td>이름</td><td>체력/정신</td><td>공격/방어/지휘/민첩</td><td>소속</td></tr>\n|;
|
|
|
|
$l = $rk = 1;
|
|
foreach $nm (sort sclv keys(%LV_V)){
|
|
$lv_v = $LV_V{$nm};
|
|
next if($lv_v<=0);
|
|
if($lv_v<$prv_lv){ $rk = $l; }
|
|
|
|
$log .= ($agent !~ /Mac/) ?
|
|
qq|<tr bgcolor="#ccccee" align="center"><td><input type="radio" value="$N_M{$nm}" name="com" class="a5" onClick="location.href='#bt_start'">\n|:
|
|
qq|<tr bgcolor="#ccccee" align="center"><td><input type="radio" value="$N_M{$nm}" name="com" class="a5">\n|;
|
|
|
|
$log .="</td><td>$rk</td><td>$lv_v</td><td>";
|
|
|
|
# 칭호
|
|
$log .= ($SG_V{$nm} > 0) ? "$NM_V{$nm} [$sogo_p[$SG_V{$nm}]]" : "$NM_V{$nm}";
|
|
|
|
$log .=qq|</td><td>$HP_MAX_V{$nm}/$MP_MAX_V{$nm}</td><td>$UA_V{$nm}/$UD_V{$nm}/$LR_V{$nm}/$AG_V{$nm}</td><td>$cmp[$CP_V{$nm}]</td></tr>\n|;
|
|
|
|
$prv_lv = $lv_v;
|
|
$l++;
|
|
}
|
|
$log .="</table>\n";
|
|
$log .="<tt><br></tt><a name=\"bt_start\"><input type=submit value=\"대결\" class=\"button1\">\n";
|
|
$log .="</td></form>\n";
|
|
|
|
$tm=1;
|
|
|
|
# 행동 세션 가산
|
|
$act_cnt++;
|
|
|
|
$layout_flag=1;
|
|
&dat_write;
|
|
}
|
|
|
|
# 대전자 할당
|
|
elsif($tm){
|
|
|
|
if($com){
|
|
open(IN,"$usrdata$com\.cgi") || &error("Open Error : $usrdata$com\.cgi",1);
|
|
$tdat = <IN>;
|
|
close(IN);
|
|
|
|
%VS = '';
|
|
my @prats = split(/,/,$tdat);
|
|
foreach $prats (@prats){
|
|
my ($u,$q) = split(/;/,$prats);
|
|
$VS{$u} = $q;
|
|
}
|
|
|
|
$tid = $VS{'id'}; # ID
|
|
$tnm = $VS{'nm'}; # 이름
|
|
$tlv = $VS{'lv'}; # 레벨
|
|
$thp = $VS{'max_hp'}; # HP
|
|
$thp_max= $VS{'max_hp'}; # MAX_HP
|
|
$tmp = $VS{'max_mp'}; # MP
|
|
$tua = $VS{'ua'}; # UA
|
|
$tud = $VS{'ud'}; # UD
|
|
$tag = $VS{'ag'}; # AG
|
|
$tcp = $VS{'camp'}; # 소속
|
|
$tsg = $VS{'sogo'}; # 칭호
|
|
|
|
$tdf_a = $VS{'df_a'}; # 방어구
|
|
$tdg_a = $VS{'dg_a'}; # 무구
|
|
|
|
$log .="시합 개시!<br>\n";
|
|
$type = '수행중';
|
|
$tm = 0;
|
|
# $log2 .=qq|<input type=submit value="NEXT!!" class="button1">$td_end</form>\n|;
|
|
|
|
require './inc/ore_sub-battle.cgi'; &bt_st;
|
|
}
|
|
elsif(!$com){
|
|
$log .="중단했다…<br>\n";
|
|
$type = '';
|
|
$tm = 0;
|
|
&call_main_st;
|
|
}
|
|
}
|
|
|
|
# &dat_write;
|
|
}
|
|
|
|
# 부정 GET 처리의 페널티
|
|
sub penalty{
|
|
$pr=3600*24*3;
|
|
$sogo=4;
|
|
$camp=0;
|
|
|
|
$tm = $cmd = 0;
|
|
$type='복역중';
|
|
$max_hp =int($max_hp*0.8);
|
|
$max_mp =int($max_mp*0.8);
|
|
$ua =int($ua*0.8);
|
|
$ud =int($ud*0.8);
|
|
$lr =int($lr*0.8);
|
|
$ag =int($ag*0.8);
|
|
|
|
&dat_write;
|
|
|
|
&error("올바르지 않은 처리입니다. 페널티가 발생합니다.",1);
|
|
}
|
|
|
|
1;
|