#-----------------------------------------------------------# # 罪と罰++ 二律背反 # # 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.0 #--- [注意事項] --------------------------------------------# # 1.このスクリプトは以下の利用規程に従って配布しています。 # # http://www24.big.or.jp/~obo/game/ore_/gild/ # #-----------------------------------------------------------# #------------------------------------------------------------------------------- # ファイル IN 関連 #---------------------------------------# # 参加者データ全取得 # #---------------------------------------# # 参加者データファイル一覧取得 sub usrdata_read{ opendir(DIR,"$usrdata") || &error("ユーザデータ読みこみエラー",1); @usrfile = grep /\.cgi/,readdir(DIR); closedir(DIR); } # 参加者データ一括読み込み sub usrdata_open{ foreach (0 .. $#usrfile) { open(IN,"$usrdata$usrfile[$_]") || &error("Can't open $usrfile[$_]",1); $line = ; close(IN); push(@tdat,$line); } } #---------------------------------------# # 参加者データ個別取得 # #---------------------------------------# # 参加者データ個別読み込み sub usr_file_open{ open(IN,"$usrdata$id\.cgi") || &error("ユーザーIDが間違っているか、登録されていません。
Open Error : $usrdata$id\.cgi",1); @dat = ; close(IN); %DAT = ''; # chop $dat[0]; my @prats = split(/,/,$dat[0]); foreach (0 .. $#prats){ my($key,$v) = split(/;/,$prats[$_]); $DAT{$key} = $v; } &error("パスワードが間違っています",1) if($pw ne $DAT{'pw'} && $admin_pass ne $pw); &hash_data; # 行動セッションリセット $act_cnt=0 if($time-$la>3600*24); } # ハッシュ割り当て sub hash_data{ $pw = $DAT{'pw'}; # パスワード $gold = $DAT{'gold'}; # お金 $nm = $DAT{'nm'}; # 名前 $lv = $DAT{'lv'}; # レベル $sei = $DAT{'sei'}; # 性別 $hp = $DAT{'hp'}; # 体力 $max_hp = $DAT{'max_hp'}; # 最大体力 $mp = $DAT{'mp'}; # 魔力 $max_mp = $DAT{'max_mp'}; # 最大魔力 $ua = $DAT{'ua'}; # 攻撃力 $ua_bst = $DAT{'ua_bst'}; # 攻撃力マイナス $ud = $DAT{'ud'}; # 防御力 $ud_bst = $DAT{'ud_bst'}; # 防御力マイナス $lr = $DAT{'lr'}; # 指揮力 $ag = $DAT{'ag'}; # 敏捷力 $ag_bst = $DAT{'ag_bst'}; # 敏捷力マイナス $exe = $DAT{'exe'}; # 経験値 $rank = $DAT{'rank'}; # 階級 $rank_exe = $DAT{'rank_exe'}; # 貢献値 $camp = $DAT{'camp'}; # 所属国 $sol = $DAT{'sol'}; # 部隊数 $sol_lv = $DAT{'sol_lv'}; # 部隊訓練度 $nation = $DAT{'nation'}; # 対象国 $we = $DAT{'we'}; # 討伐 回数 $dg_a = $DAT{'dg_a'}; # 武具 $dg_cnt = $DAT{'dg_cnt'}; # 武具 回数 $df_a = $DAT{'df_a'}; # 防具 $df_cnt = $DAT{'df_cnt'}; # 防具 回数 $di_a = $DAT{'di_a'}; # 道具 $di_cnt = $DAT{'di_cnt'}; # 道具 回数 $sogo = $DAT{'sogo'}; # 称号 # 代表 $sogo2 = $DAT{'sogo2'}; # 代表者になったら称号を保持 $ushu = $DAT{'ushu'}; # 支持・不支持を決めた記録 $type = $DAT{'type'}; # 行動判定(行動フラグ) $tm = $DAT{'tm'}; # 行動判定(行動フラグ) $bt = $DAT{'bt'}; # 戦闘時敵キャラ判別(行動フラグ) $bst = $DAT{'bst'}; # 技による能力上昇の判定 $ck = $DAT{'ck'}; # 戦闘判定(行動フラグ) $pr = $DAT{'pr'}; # 拘束時間 残り(行動フラグ) $la = $DAT{'la'}; # 更新時間 $roku = $DAT{'roku'}; # 前回給料が払われた時間(仕官した時間) $mes = $DAT{'mes'}; # メッセージ $team1_lv = $DAT{'team1_lv'}; $team1_exe = $DAT{'team1_exe'}; $team1 = $DAT{'team1'}; $team2_lv = $DAT{'team2_lv'}; $team2_exe = $DAT{'team2_exe'}; $team2 = $DAT{'team2'}; $team3_lv = $DAT{'team3_lv'}; $team3_exe = $DAT{'team3_exe'}; $team3 = $DAT{'team3'}; $team4_lv = $DAT{'team4_lv'}; $team4_exe = $DAT{'team4_exe'}; $team4 = $DAT{'team4'}; $team5_lv = $DAT{'team5_lv'}; $team5_exe = $DAT{'team5_exe'}; $team5 = $DAT{'team5'}; $tnm = $DAT{'tnm'}; # 名前 敵 $tid = $DAT{'tid'}; # ID 敵 $tid2 = $DAT{'tid2'}; # ID 敵 $thp = $DAT{'thp'}; # 体力 敵 $thp_max = $DAT{'thp_max'}; # 最大体力 敵 $tmp = $DAT{'tmp'}; # 魔力 敵 $tlv = $DAT{'tlv'}; # レベル 敵 $tua = $DAT{'tua'}; # 攻撃力 敵 $tud = $DAT{'tud'}; # 防御力 敵 $tlr = $DAT{'tlr'}; # 指揮力 敵 $tag = $DAT{'tag'}; # 敏捷力 敵 $tdf_a = $DAT{'tdf_a'}; # 防具 敵 $tdg_a = $DAT{'tdg_a'}; # 武器 敵 $tcp = $DAT{'tcp'}; # 所属国 敵 $tsol = $DAT{'tsol'}; # 部隊数 敵 $tteam1_lv = $DAT{'tteam1_lv'}; $tteam1 = $DAT{'tteam1'}; $tteam2_lv = $DAT{'tteam2_lv'}; $tteam2 = $DAT{'tteam2'}; $tteam3_lv = $DAT{'tteam3_lv'}; $tteam3 = $DAT{'tteam3'}; $tteam4_lv = $DAT{'tteam4_lv'}; $tteam4 = $DAT{'tteam4'}; $tteam5_lv = $DAT{'tteam5_lv'}; $tteam5 = $DAT{'tteam5'}; $tsg = $DAT{'tsg'}; # 称号 敵 $asid = $DAT{'asid'}; #毒 $kenf = $DAT{'kenf'}; #拳王の塔 $tdmg = $DAT{'tdmg'}; #敵ダメージ $hosp = $DAT{'hosp'}; #病院 $rap = $DAT{'rap'}; # 現在の期 $koken = $DAT{'koken'}; # ラップ貢献度 $tsol_lv = $DAT{'tsol_lv'}; # 敵部隊訓練度 $b_n = $DAT{'b_n'}; # 戦闘限界ターン $b_v = $DAT{'b_v'}; # 現在のターン数 $n = $_; # 配列インデックス $act_cnt = $DAT{'act_cnt'}; # 行動セッション値 $age_time = $DAT{'age_time'}; # 前回のレベルアップ < time式 $info_mes = $DAT{'info_mes'}; # 情報時に表示されるコメント $pr -= $time-$la; $pr = 0 if($pr<0); $let = $DAT{'let'}; # 着信表示 $bonus_cnt = $DAT{'bonus_cnt'}; #ボーナスカウント } # 国データ読み込み sub cdata_open{ open (IN,"$cdatfile") || &error("国データファイルが開けませんでした",1); @cdat = ; close(IN) or die "Can't close : $!"; %CP = ''; my @prats = split(/,/,$cdat[0]); foreach $prats (@prats){ my($k,$v) = split(/;/,$prats); $CP{$k} = $v; } $cn1=$CP{'cn1'};# 国1の国土 $cp1=$CP{'cp1'};# 国1の人口 $ces1=$CP{'ces1'};# 国1の経済力 $cpc1=$CP{'cpc1'};# 国1の生産力 $cg1=$CP{'cg1'};# 国1の財政 $cf1=$CP{'cf1'};# 国1の蓄米 $cs1=$CP{'cs1'};# 国1の予備兵 $ce1=$CP{'ce1'};# 国1の現状 $c1 =$CP{'c1'}; # 国1の参加人数 $c1a=$CP{'c1a'};# 国1の定員数 $ctime1=$CP{'ctime1'}; $cenm1=$CP{'cenm1'}; $cehp1=$CP{'cehp1'}; $cemp1=$CP{'cemp1'}; $cn2=$CP{'cn2'}; $cp2=$CP{'cp2'}; $ces2=$CP{'ces2'}; $cpc2=$CP{'cpc2'}; $cg2=$CP{'cg2'}; $cf2=$CP{'cf2'}; $cs2=$CP{'cs2'}; $ce2=$CP{'ce2'}; $c2 =$CP{'c2'}; $c2a=$CP{'c2a'}; $ctime2=$CP{'ctime2'}; $cenm2=$CP{'cenm2'}; $cehp2=$CP{'cehp2'}; $cemp2=$CP{'cemp2'}; $cn3=$CP{'cn3'}; $cp3=$CP{'cp3'}; $ces3=$CP{'ces3'}; $cpc3=$CP{'cpc3'}; $cg3=$CP{'cg3'}; $cf3=$CP{'cf3'}; $cs3=$CP{'cs3'}; $ce3=$CP{'ce3'}; $c3 =$CP{'c3'}; $c3a=$CP{'c3a'}; $ctime3=$CP{'ctime3'}; $cenm3=$CP{'cenm3'}; $cehp3=$CP{'cehp3'}; $cemp3=$CP{'cemp3'}; $cn4=$CP{'cn4'}; $cp4=$CP{'cp4'}; $ces4=$CP{'ces4'}; $cpc4=$CP{'cpc4'}; $cg4=$CP{'cg4'}; $cf4=$CP{'cf4'}; $cs4=$CP{'cs4'}; $ce4=$CP{'ce4'}; $c4 =$CP{'c4'}; $c4a=$CP{'c4a'}; $ctime4=$CP{'ctime4'}; $cenm4=$CP{'cenm4'}; $cehp4=$CP{'cehp4'}; $cemp4=$CP{'cemp4'}; $cn5=$CP{'cn5'}; $cp5=$CP{'cp5'}; $ces5=$CP{'ces5'}; $cpc5=$CP{'cpc5'}; $cg5=$CP{'cg5'}; $cf5=$CP{'cf5'}; $cs5=$CP{'cs5'}; $ce5=$CP{'ce5'}; $c5 =$CP{'c5'}; $c5a=$CP{'c5a'}; $ctime5=$CP{'ctime5'}; $cenm5=$CP{'cenm5'}; $cehp5=$CP{'cehp5'}; $cemp5=$CP{'cemp5'}; $set=$CP{'set'}; $all_mem=$CP{'all_mem'}; $goal_no=$CP{'goal_no'}; # 現在何期か。 $hasya=$CP{'hasya'}; $hcamp=$CP{'hcamp'}; $wr_mes=$CP{'wr_mes'}; $cshu[1] = $CP{'cshu1'}; $cshu_rank[1] = $CP{'cshu_rank1'}; $cshu[2] = $CP{'cshu2'}; $cshu_rank[2] = $CP{'cshu_rank2'}; $cshu[3] = $CP{'cshu3'}; $cshu_rank[3] = $CP{'cshu_rank3'}; $cshu[4] = $CP{'cshu4'}; $cshu_rank[4] = $CP{'cshu_rank4'}; $cshu[5] = $CP{'cshu5'}; $cshu_rank[5] = $CP{'cshu_rank5'}; $cgen[1] = $CP{'cgen1'}; $cgen[2] = $CP{'cgen2'}; $cgen[3] = $CP{'cgen3'}; $cgen[4] = $CP{'cgen4'}; $cgen[5] = $CP{'cgen5'}; if($camp==1){ $my_cn=$cn1; $my_cp=$cp1; $my_ces=$ces1; $my_cpc=$cpc1; $my_cg=$cg1; $my_cf=$cf1; $my_cs=$cs1; $my_ce=$ce1; $my_ctime=$ctime1; }elsif($camp==2){ $my_cn=$cn2; $my_cp=$cp2; $my_ces=$ces2; $my_cpc=$cpc2; $my_cg=$cg2; $my_cf=$cf2; $my_cs=$cs2; $my_ce=$ce2; $my_ctime=$ctime2; }elsif($camp==3){ $my_cn=$cn3; $my_cp=$cp3; $my_ces=$ces3; $my_cpc=$cpc3; $my_cg=$cg3; $my_cf=$cf3; $my_cs=$cs3; $my_ce=$ce3; $my_ctime=$ctime3; }elsif($camp==4){ $my_cn=$cn4; $my_cp=$cp4; $my_ces=$ces4; $my_cpc=$cpc4; $my_cg=$cg4; $my_cf=$cf4; $my_cs=$cs4; $my_ce=$ce4; $my_ctime=$ctime4; }elsif($camp==5){ $my_cn=$cn5; $my_cp=$cp5; $my_ces=$ces5; $my_cpc=$cpc5; $my_cg=$cg5; $my_cf=$cf5; $my_cs=$cs5; $my_ce=$ce5; $my_ctime=$ctime5; } # 友好度 for ($self=1; $self<6;$self++){ for ($other=1; $other<6;$other++){ $cfs[$self.$other] = $CP{'cfs'.$self.$other}; if ($other<$self){ # 友好度 $cfs[$self.$other] = int(rand(30)+40) if ($cfs[$self.$other]==""); } elsif ($other>$self) { # 条約 # $cfs[$self.$other] = 0; } # 設定値をクリア # $cfs[$self.$other] = ""; } } } # ログデータ読み込み sub read_data{ # キャラデータ読み込み &usr_file_open; # リロード規制 foreach(0 .. $act_limit){ # エラー表示式(リロード抑制を明示的に行いたい方はコチラがオススメ。) # &error("行動は $act_limit[$_][1]秒以上間隔を空けて行なってください",1) if($time<=$la+$act_limit[$_][1] && $hour==$act_limit[$_][0]); # リロード無効式 if($time<=$la+$act_limit[$_][1] && $hour==$act_limit[$_][0]){ print "Status: 204\n\n"; if($mode ne "mes_write"){ &unlock($lock) if $lock_check; } exit; } } # 国データ読み込み &cdata_open; # 代表者 if($cshu[$camp] ne $nm && $sogo == 111){ $sogo = $sogo2; $sogo2 = 0; $log .= qq|代表\の称号を失いました
|; if($cshu[$camp] eq ""){ $log .= qq|現在、代表\者はいません
|; }else{ $log .= qq|現在の代表\者は、$cshu[$camp]です
|; } } $id_p = $id; $pw_p = $pw; $next_lv = int(($lv*$lv)*10); $max_sol = $g_p[$rank]; $sol_lv = 1 if($sol_lv<1); $sol_lv = 100 if($sol_lv>100); $max_hp = 9999 if($max_hp>9999); $max_mp = 9999 if($max_mp>9999); $mp = 1 if($mp<1); $ua = 999 if($ua>999); $ud = 999 if($ud>999); $lr = 999 if($lr>999); $ag = 999 if($ag>999); $rank = 14 if($rank>14); $rank_exe = 0 if($rank_exe<1); $lv = 1 if($lv<1); $hp = $max_hp if($hp>$max_hp); $mp = $max_mp if($mp>$max_mp); $ct1=$CP{'ct1'}=="" ? int(rand(20))+40:$CP{'ct1'};# 民統治 if($pr<1){ &settei;#設定読み込み &status;#ステータス表示 } $bmes="最新情報 ◎ $wr_mes\n" if $wr_mes; $data_reset = int(($cn1+$cn2+$cn3+$cn4+$cn5) * $reset_point); } #------------------------------------------------------------------------------- # ファイル OUT 関連 # 国データ&キャラデータ書き込み sub write_data{ &cdat_write; &dat_write; } # 国データ書き込み sub cdat_write{ # 友好度 $cfs_temp = ""; for ($self=1;$self<6;$self++){ for ($other=1;$other<6;$other++){ $cfs_temp .= "cfs$self$other;$cfs[$self.$other],"; } } $cdat = $cfs_temp; # 友好度 $cdat .= "cshu1;$cshu[1],cshu_rank1;$cshu_rank[1],cgen1;$cgen[1],cshu2;$cshu[2],cshu_rank2;$cshu_rank[2],cgen2;$cgen[2],cshu3;$cshu[3],cshu_rank3;$cshu_rank[3],cgen3;$cgen[3],cshu4;$cshu[4],cshu_rank4;$cshu_rank[4],cgen4;$cgen[4],cshu5;$cshu[5],cshu_rank5;$cshu_rank[5],cgen5;$cgen[5],"; $cdat .= "ct1;$ct1,ct2;$ct2,ct3;$ct3,ct4;$ct4,ct5;$ct5,"; # 民統治 $cdat .= "cn1;$cn1,cp1;$cp1,ces1;$ces1,cpc1;$cpc1,cg1;$cg1,cf1;$cf1,cs1;$cs1,ce1;$ce1,c1;$c1,c1a;$c1a,ctime1;$ctime1,cenm1;$cenm1,cehp1;$cehp1,cemp1;$cemp1,cn2;$cn2,cp2;$cp2,ces2;$ces2,cpc2;$cpc2,cg2;$cg2,cf2;$cf2,cs2;$cs2,ce2;$ce2,c2;$c2,c2a;$c2a,ctime2;$ctime2,cenm2;$cenm2,cehp2;$cehp2,cemp2;$cemp2,cn3;$cn3,cp3;$cp3,ces3;$ces3,cpc3;$cpc3,cg3;$cg3,cf3;$cf3,cs3;$cs3,ce3;$ce3,c3;$c3,c3a;$c3a,ctime3;$ctime3,cenm3;$cenm3,cehp3;$cehp3,cemp3;$cemp3,cn4;$cn4,cp4;$cp4,ces4;$ces4,cpc4;$cpc4,cg4;$cg4,cf4;$cf4,cs4;$cs4,ce4;$ce4,c4;$c4,c4a;$c4a,ctime4;$ctime4,cenm4;$cenm4,cehp4;$cehp4,cemp4;$cemp4,cn5;$cn5,cp5;$cp5,ces5;$ces5,cpc5;$cpc5,cg5;$cg5,cf5;$cf5,cs5;$cs5,ce5;$ce5,c5;$c5,c5a;$c5a,ctime5;$ctime5,cenm5;$cenm5,cehp5;$cehp5,cemp5;$cemp5,set;$set,all_mem;$all_mem,goal_no;$goal_no,hasya;$hasya,hcamp;$hcamp,ad;$addr,ht;$host,date;$date,wr_mes;$wr_mes,\n"; open (OUT,">$cdatfile") || &error("open error:$cdatfile",1); print OUT $cdat; close(OUT) or die "Can't close : $!"; } # キャラデータ書き込み sub dat_write{ &error("open error no such a file!",1) if(!$nm || !$id); # $dat[0] = "la;$time,nm;$nm,pw;$pw,id;$id,sei;$sei,type;$type,age_time;$age_time,act_cnt;$act_cnt,hp;$hp,max_hp;$max_hp,lv;$lv,mp;$mp,max_mp;$max_mp,rank;$rank,ua;$ua,ud;$ud,lr;$lr,ag;$ag,ck;$ck,tm;$tm,bt;$bt,bst;$bst,exe;$exe,rank_exe;$rank_exe,sol;$sol,sol_lv;$sol_lv,nation;$nation,we;$we,camp;$camp,pr;$pr,tnm;$tnm,tid;$tid,tid2;$tid2,thp;$thp,tlr;$tlr,tag;$tag,tsol;$tsol,tsg;$tsg,tsol_lv;$tsol_lv,b_n;$b_n,b_v;$b_v,thp_max;$thp_max,tlv;$tlv,tdg_a;$tdg_a,tdf_a;$tdf_a,tua;$tua,tud;$tud,tmp;$tmp,tcp;$tcp,gold;$gold,roku;$roku,dg_a;$dg_a,dg_cnt;$dg_cnt,df_a;$df_a,df_cnt;$df_cnt,di_a;$di_a,di_cnt;$di_cnt,sogo;$sogo,mes;$mes,info_mes;$info_mes,asid;$asid,kenf;$kenf,tdmg;$tdmg,ua_bst;$ua_bst,ud_bst;$ud_bst,ag_bst;$ag_bst,hosp;$hosp,rap;$rap,koken;$koken,\n"; $dat[0] = "la;$time,nm;$nm,pw;$pw,id;$id,sei;$sei,type;$type,age_time;$age_time,act_cnt;$act_cnt,hp;$hp,max_hp;$max_hp,lv;$lv,mp;$mp,max_mp;$max_mp,rank;$rank,ua;$ua,ud;$ud,lr;$lr,ag;$ag,ck;$ck,tm;$tm,bt;$bt,bst;$bst,exe;$exe,rank_exe;$rank_exe,sol;$sol,sol_lv;$sol_lv,team1_lv;$team1_lv,team1_exe;$team1_exe,team1;$team1,team2_lv;$team2_lv,team2_exe;$team2_exe,team2;$team2,team3_lv;$team3_lv,team3_exe;$team3_exe,team3;$team3,team4_lv;$team4_lv,team4_exe;$team4_exe,team4;$team4,team5_lv;$team5_lv,team5_exe;$team5_exe,team5;$team5,nation;$nation,we;$we,camp;$camp,pr;$pr,tnm;$tnm,tid;$tid,tid2;$tid2,thp;$thp,tlr;$tlr,tag;$tag,tsol;$tsol,tsg;$tsg,tsol_lv;$tsol_lv,tteam1_lv;$tteam1_lv,tteam1;$tteam1,tteam2_lv;$tteam2_lv,tteam2;$tteam2,tteam3_lv;$tteam3_lv,tteam3;$tteam3,tteam4_lv;$tteam4_lv,tteam4;$tteam4,tteam5_lv;$tteam5_lv,tteam5;$tteam5,b_n;$b_n,b_v;$b_v,thp_max;$thp_max,tlv;$tlv,tdg_a;$tdg_a,tdf_a;$tdf_a,tua;$tua,tud;$tud,tmp;$tmp,tcp;$tcp,gold;$gold,roku;$roku,dg_a;$dg_a,dg_cnt;$dg_cnt,df_a;$df_a,df_cnt;$df_cnt,di_a;$di_a,di_cnt;$di_cnt,sogo;$sogo,mes;$mes,info_mes;$info_mes,asid;$asid,kenf;$kenf,tdmg;$tdmg,ua_bst;$ua_bst,ud_bst;$ud_bst,ag_bst;$ag_bst,hosp;$hosp,rap;$rap,koken;$koken,ushu;$ushu,sogo2;$sogo2,let;$let,bonus_cnt;$bonus_cnt"; open (OUT,">$usrdata$id\.cgi") || &error("open error:$usrdata$id\.cgi",1); print OUT @dat; close(OUT) or die "Can't close : $!"; } # 過去の栄光書き込み&バックアップ処理 sub hist_write{ $cdat = "cn1;$cn1,cp1;$cp1,ces1;$ces1,cpc1;$cpc1,cg1;$cg1,cf1;$cf1,cs1;$cs1,ce1;$ce1,c1;$c1,c1a;$c1a,ctime1;$ctime1,cenm1;$cenm1,cehp1;$cehp1,cemp1;$cemp1,cn2;$cn2,cp2;$cp2,ces2;$ces2,cpc2;$cpc2,cg2;$cg2,cf2;$cf2,cs2;$cs2,ce2;$ce2,c2;$c2,c2a;$c2a,ctime2;$ctime2,cenm2;$cenm2,cehp2;$cehp2,cemp2;$cemp2,cn3;$cn3,cp3;$cp3,ces3;$ces3,cpc3;$cpc3,cg3;$cg3,cf3;$cf3,cs3;$cs3,ce3;$ce3,c3;$c3,c3a;$c3a,ctime3;$ctime3,cenm3;$cenm3,cehp3;$cehp3,cemp3;$cemp3,cn4;$cn4,cp4;$cp4,ces4;$ces4,cpc4;$cpc4,cg4;$cg4,cf4;$cf4,cs4;$cs4,ce4;$ce4,c4;$c4,c4a;$c4a,ctime4;$ctime4,cenm4;$cenm4,cehp4;$cehp4,cemp4;$cemp4,cn5;$cn5,cp5;$cp5,ces5;$ces5,cpc5;$cpc5,cg5;$cg5,cf5;$cf5,cs5;$cs5,ce5;$ce5,c5;$c5,c5a;$c5a,ctime5;$ctime5,cenm5;$cenm5,cehp5;$cehp5,cemp5;$cemp5,set;$set,all_mem;$all_mem,goal_no;$goal_no,hasya;$hasya,hcamp;$hcamp,ad;$addr,ht;$host,date;$date,wr_mes;$wr_mes,\n"; open (DB,">>$histfile") || &error("open error:$histfile",1); print DB $cdat; close(DB) or die "Can't close : $!"; # 統一時は石碑に刻む if($touitu_flag==1){ &stone_write; } } sub stone_write{ open (DB2,">>$stonefile") || &error("open error:$stonefile",1); print DB2 $cdat; close(DB2) or die "Can't close : $!"; } # 覇者の石板書き込み&バックアップ処理 sub champ_write{ $cdat = "cn1;$cn1,cp1;$cp1,ces1;$ces1,cpc1;$cpc1,cg1;$cg1,cf1;$cf1,cs1;$cs1,ce1;$ce1,c1;$c1,c1a;$c1a,ctime1;$ctime1,cenm1;$cenm1,cehp1;$cehp1,cemp1;$cemp1,cn2;$cn2,cp2;$cp2,ces2;$ces2,cpc2;$cpc2,cg2;$cg2,cf2;$cf2,cs2;$cs2,ce2;$ce2,c2;$c2,c2a;$c2a,ctime2;$ctime2,cenm2;$cenm2,cehp2;$cehp2,cemp2;$cemp2,cn3;$cn3,cp3;$cp3,ces3;$ces3,cpc3;$cpc3,cg3;$cg3,cf3;$cf3,cs3;$cs3,ce3;$ce3,c3;$c3,c3a;$c3a,ctime3;$ctime3,cenm3;$cenm3,cehp3;$cehp3,cemp3;$cemp3,cn4;$cn4,cp4;$cp4,ces4;$ces4,cpc4;$cpc4,cg4;$cg4,cf4;$cf4,cs4;$cs4,ce4;$ce4,c4;$c4,c4a;$c4a,ctime4;$ctime4,cenm4;$cenm4,cehp4;$cehp4,cemp4;$cemp4,cn5;$cn5,cp5;$cp5,ces5;$ces5,cpc5;$cpc5,cg5;$cg5,cf5;$cf5,cs5;$cs5,ce5;$ce5,c5;$c5,c5a;$c5a,ctime5;$ctime5,cenm5;$cenm5,cehp5;$cehp5,cemp5;$cemp5,set;$set,all_mem;$all_mem,goal_no;$goal_no,hasya;$hasya,hcamp;$hcamp,ad;$addr,ht;$host,date;$date,wr_mes;$wr_mes,\n"; open (DB,">>$champfile") || &error("open error:$champfile",1); print DB $cdat; close(DB) or die "Can't close : $!"; } #------------------------------------------------------------------------------- # ファイルロック関連(rename式) # $lock = &lock if($lock_check); # &unlock($lock) if($lock_check); # -----ロック----- sub lock { my %lock = (dir => "$lockdir", basename => "$lockfile", timeout => 30, trytime => 10, @_); $lock{path} = $lock{dir} . $lock{basename}; for (my $i = 0; $i < $lock{trytime}; $i++, sleep 1) { return \%lock if (rename($lock{path}, $lock{current} = $lock{path} . time)); } opendir(LOCKDIR, $lock{dir}); my @filelist = readdir(LOCKDIR); closedir(LOCKDIR); foreach (@filelist) { if (/^$lock{basename}(\d+)/) { return \%lock if (time - $1 > $lock{timeout} and rename($lock{dir} . $_, $lock{current} = $lock{path} . time)); last; } } undef; &error("ファイルがロックされています"); } # -----ロック解除----- sub unlock { rename($_[0]->{current}, $_[0]->{path}); } #------------------------------------------------------------------------------- # フォームデータ関連 # フォームデコード処理 sub decode { local($buffer, @pairs, $name, $value); $post_flag=0; if($ENV{'REQUEST_METHOD'} eq "POST"){ $post_flag=1; &error("投稿量が大きすぎます") if($ENV{'CONTENT_LENGTH'}>1024); read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }else{ $buffer = $ENV{'QUERY_STRING'}; &error("投稿量が大きすぎます") if(length($buffer)>800) } @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; # 記号置換え $value =~ s/&/&/g; $value =~ s/\;/;\;/g; $value =~ s/,/,\;/g; $value =~ s//>/g; $value =~ s/"/"/g; $value =~ s/\///\;/g; $value =~ s/\./.\;/g; $value =~ s/cgi/c\;g\;i\;/g; # 改行等処理 $value =~ s/\r\n//g; $value =~ s/\r//g; $value =~ s/\n//g; # 文字コードをシフトJIS変換 &jcode'convert(*value, "sjis", "", "z"); $in{$name} = $value; # 一括削除用 if ($name eq "usr_del") { push(@USR_DEL,$value); } } $pw = $in{'pw'}; $cmd = $in{'cmd'}; $com = $in{'com'}; $id = $in{'id'}; $mode = $in{'mode'}; } #------------------------------------------------------------------------------- # アクセス制御関連 # アクセスチェック(アクセス拒否) 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); $min = "0$min" if($min<10); $sec = "0$sec" if($sec<10); $month++; @week=('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $date = "$month/$mday $hour:$min:$sec"; srand($time); } # プレイ規制 sub safetime { foreach (0 .. $#safetime){ &error("プレイ規制時間中です。暫くお待ち下さい。") if $hour eq $safetime[$_]; } } #------------------------------------------------------------------------------- # 表示関連 # 圧縮転送 sub content_type { if($gzip){ $|=1; if($ENV{'HTTP_ACCEPT_ENCODING'}=~/gzip/ ){ print "Content-type: text/html; charset=shift_jis\n"; print "Content-encoding: gzip\n\n"; open(STDOUT,"| $gzip -1 -c"); }else{ print "Content-type: text/html; charset=shift_jis\n\n"; } print "\n"; } else { print "Content-type: text/html; charset=shift_jis\n\n"; print "\n"; } } #著作権表示(削除・変更不可) sub copyright{ if($mv_mode eq 'mv'){ print qq|
罪と罰++ 二律背反 $ver
BLANK BOARD[ねっと遊園地♪]| if(!$tm && !$log); print qq||; }else{ print <<"EOM";
罪と罰++ 二律背反 $ver
Vivid Studio.
BLANK BOARD[ねっと遊園地♪]
BLANK BOARD[ねっと遊園地♪]
EOM } } # エラー表示 sub error{ print "Content-type: text/html\n\n"; print "CGI Error\n"; print "

CGI Error

\n"; print "

This program encountered an internal error.

"; print "

Error: $_[0]

\n"; print ""; if ($_[1] && $lock_check) { &unlock($lock); } exit; } 1;#削除不可