#!jperl #!/usr/local/bin/perl # ↑はサーバーに合わせて変更して下さい。 #---------------------------------------------------------------------- # 箱庭諸島 ver2.30 # メンテナンスツール(ver1.00) # 使用条件、使用方法等は、hako-readme.txtファイルを参照 # # 箱庭諸島のページ: http://t.pos.to/hako #---------------------------------------------------------------------- # 「怪獣大作戦」 ver1.0.0 by おじー http://t.pos.to/ozzy/ # 使用条件は箱庭諸島に準ずる.詳しくは付属のreadme.txtファイルを参照 #---------------------------------------------------------------------- # ―――――――――――――――――――――――――――――― # 各種設定値 # ―――――――――――――――――――――――――――――― require('hako-env.cgi'); # 1ターンが何秒か my($unitTime) = 10800; # 6時間 # use Time::Localが使えない環境では、'use Time::Local'の行を消して下さい。 # ただし、更新時間の変更が'秒指定で変更'しかできなくなります。 use Time::Local; # ―――――――――――――――――――――――――――――― # 設定項目は以上 # ―――――――――――――――――――――――――――――― # 各種変数 my($mainMode); my($inputPass); my($deleteID); my($currentID); my($ctYear); my($ctMon); my($ctDate); my($ctHour); my($ctMin); my($ctSec); print < 箱島2 メンテナンスツール END cgiInput(); if($mainMode eq 'delete') { if(passCheck()) { deleteMode(); } } elsif($mainMode eq 'current') { if(passCheck()) { currentMode(); } } elsif($mainMode eq 'time') { if(passCheck()) { timeMode(); } } elsif($mainMode eq 'stime') { if(passCheck()) { stimeMode(); } } elsif($mainMode eq 'new') { if(passCheck()) { newMode(); } } mainMode(); print < END sub myrmtree { my($dn) = @_; opendir(DIN, "$dn/"); my($fileName); while($fileName = readdir(DIN)) { unlink("$dn/$fileName"); } closedir(DIN); rmdir($dn); } sub currentMode { myrmtree "${HEnvDirName}"; mkdir("${HEnvDirName}", $HEnvDirMode); opendir(DIN, "${HEnvDirName}.bak$currentID/"); my($fileName); while($fileName = readdir(DIN)) { fileCopy("${HEnvDirName}.bak$currentID/$fileName", "${HEnvDirName}/$fileName"); } closedir(DIN); } sub deleteMode { if($deleteID eq '') { myrmtree "${HEnvDirName}"; } else { myrmtree "${HEnvDirName}.bak$deleteID"; } } sub newMode { mkdir($HEnvDirName, $HEnvDirMode); # 現在の時間を取得 my($now) = time; $now = $now - ($now % ($unitTime)); open(OUT, ">$HEnvDirName/hakojima.dat"); # ファイルを開く print OUT "1\n"; # ターン数1 print OUT "$now\n"; # 開始時間 print OUT "0\n"; # 島の数 print OUT "1\n"; # 次に割り当てるID print OUT "\n"; # 拡張データ領域(メイン) # ファイルを閉じる close(OUT); } sub timeMode { $ctMon--; $ctYear -= 1900; $ctSec = timelocal($ctSec, $ctMin, $ctHour, $ctDate, $ctMon, $ctYear); stimeMode(); } sub stimeMode { my($t) = $ctSec; open(IN, "${HEnvDirName}/hakojima.dat"); my(@lines); @lines = ; close(IN); $lines[1] = "$t\n"; open(OUT, ">${HEnvDirName}/hakojima.dat"); print OUT @lines; close(OUT); } sub mainMode { opendir(DIN, "./"); print <

箱島2 メンテナンスツール

パスワード: END # 現役データ if(-d "${HEnvDirName}") { dataPrint(""); } else { print < END } # バックアップデータ my($dn); while($dn = readdir(DIN)) { if($dn =~ /^${HEnvDirName}.bak(.*)/) { dataPrint($1); } } closedir(DIN); } # 表示モード sub dataPrint { my($suf) = @_; print "
"; if($suf eq "") { open(IN, "${HEnvDirName}/hakojima.dat"); print "

現役データ

"; } else { open(IN, "${HEnvDirName}.bak$suf/hakojima.dat"); print "

バックアップ$suf

"; } my($lastTurn); $lastTurn = ; my($lastTime); $lastTime = ; my($timeString) = timeToString($lastTime); print <ターン$lastTurn
最終更新時間:$timeString
最終更新時間(秒数表示):1970年1月1日から$lastTime 秒
END if($suf eq "") { my($sec, $min, $hour, $date, $mon, $year, $day, $yday, $dummy) = localtime($lastTime); $mon++; $year += 1900; print <最終更新時間の変更
1970年1月1日から END } else { print < END } } sub timeToString { my($sec, $min, $hour, $date, $mon, $year, $day, $yday, $dummy) = localtime($_[0]); $mon++; $year += 1900; return "${year}年 ${mon}月 ${date}日 ${hour}時 ${min}分 ${sec}秒"; } # CGIの読みこみ sub cgiInput { my($line); # 入力を受け取る $line = <>; $line =~ tr/+/ /; $line =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if($line =~ /DELETE([0-9]*)/) { $mainMode = 'delete'; $deleteID = $1; } elsif($line =~ /CURRENT([0-9]*)/) { $mainMode = 'current'; $currentID = $1; } elsif($line =~ /NEW/) { $mainMode = 'new'; } elsif($line =~ /NTIME/) { $mainMode = 'time'; if($line =~ /YEAR=([0-9]*)/) { $ctYear = $1; } if($line =~ /MON=([0-9]*)/) { $ctMon = $1; } if($line =~ /DATE=([0-9]*)/) { $ctDate = $1; } if($line =~ /HOUR=([0-9]*)/) { $ctHour = $1; } if($line =~ /MIN=([0-9]*)/) { $ctMin = $1; } if($line =~ /NSEC=([0-9]*)/) { $ctSec = $1; } } elsif($line =~ /STIME/) { $mainMode = 'stime'; if($line =~ /SSEC=([0-9]*)/) { $ctSec = $1; } } if($line =~ /PASSWORD=([^\&]*)\&/) { $inputPass = $1; } } # ファイルのコピー sub fileCopy { my($src, $dist) = @_; open(IN, $src); open(OUT, ">$dist"); while() { print OUT; } close(IN); close(OUT); } # パスチェック sub passCheck { if($inputPass eq $HEnvMasterPassword) { return 1; } else { print <パスワードが違います。 END return 0; } } 1;