#---------------------------------------------------------------------- # Hakoniwa系 IPゲッター&重複自動制限(差分) # KEI PAGE: http://www5b.biglobe.ne.jp/~k-e-i/ # 改造は自己責任で。管理人は責任もてません。 # 改造の前には必ずバックアップ! #---------------------------------------------------------------------- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main #-----ここから追加----------------------------------------------------------------- # IP重複登録自動カット?(0:OFF、1:ON)…登録時に既存の島とかぶるIPは登録できなくなります。 $IPcut = 1; #-----ここまで追加----------------------------------------------------------------- #---------------------------------------- # 資金、食料などの設定値と単位 #---------------------------------------- # 初期資金 $HinitialMoney = 2000; # 初期食料 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main } elsif($HmainMode eq 'change') { # 情報変更モード require('hako-turn.cgi'); require('hako-top.cgi'); changeMain(); #-----ここから追加----------------------------------------------------------------- } elsif($HmainMode eq 'ipinfo') { # IP情報モード if($HoldPassword eq $masterPassword) { # マスターパスワード require('hako-top2.cgi'); topPageMain(); } else { require('hako-top.cgi'); topPageMain(); } #-----ここまで追加----------------------------------------------------------------- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main # 全島データ読みこみ sub readIslandsFile { my($num) = @_; # 0だと地形読みこまず # -1だと全地形を読む # 番号だとその島の地形だけは読みこむ # データファイルを開く if(!open(IN, "${HdirName}/hakojima.dat")) { rename("${HdirName}/hakojima.tmp", "${HdirName}/hakojima.dat"); if(!open(IN, "${HdirName}/hakojima.dat")) { return 0; } } #-----ここから追加----------------------------------------------------------------- open(PIN, "${HdirName}/ips.dat"); # 各パラメータの読みこみ   ・   ・   ・   ・ # ファイルを閉じる close(IN); close(PIN); # 追加 #-----ここまで追加----------------------------------------------------------------- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main #-----ここから追加----------------------------------------------------------------- $ipname = ; chomp($ipname); $ip0 = ; chomp($ip0); $ip1 = ; chomp($ip1); $ip2 = ; chomp($ip2); $ip3 = ; chomp($ip3); $ip4 = ; chomp($ip4); $ip5 = ; chomp($ip5); $ip6 = ; chomp($ip6); $ip7 = ; chomp($ip7); $ip8 = int(); $ip9 = int(); $etc0 = int(); $etc1 = int(); $etc2 = int(); $etc3 = int(); $etc4 = int(); $etc5 = int(); $etc6 = int(); $etc7 = int(); $etc8 = int(); $etc9 = int(); #-----ここまで追加----------------------------------------------------------------- $prize = ; # 受賞 chomp($prize); $absent = int(); # 連続資金繰り数 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main close(IIN); } # 島型にして返す return { 'name' => $name, 'ownername' => $ownername, 'id' => $id, 'id1' => $id1, 'score' => $score, 'prize' => $prize, 'absent' => $absent, 'comment' => $comment, 'password' => $password, 'money' => $money, 'food' => $food, 'pop' => $pop, 'area' => $area, 'farm' => $farm, 'factory' => $factory, 'mountain' => $mountain, #-----ここから追加----------------------------------------------------------------- 'ipname' => $ipname, 'ip0' => $ip0, 'ip1' => $ip1, 'ip2' => $ip2, 'ip3' => $ip3, 'ip4' => $ip4, 'ip5' => $ip5, 'ip6' => $ip6, 'ip7' => $ip7, 'ip8' => $ip8, 'ip9' => $ip9, 'etc0' => $etc0, 'etc1' => $etc1, 'etc2' => $etc2, 'etc3' => $etc3, 'etc4' => $etc4, 'etc5' => $etc5, 'etc6' => $etc6, 'etc7' => $etc7, 'etc8' => $etc8, 'etc9' => $etc9, #-----ここまで追加----------------------------------------------------------------- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main #-----ここから追加----------------------------------------------------------------- # 全島データ書き込み sub writeIslandsFile { my($num) = @_; # ファイルを開く open(OUT, ">${HdirName}/hakojima.tmp"); open(POUT, ">${HdirName}/ips.tmp"); # 追加 # 各パラメータ書き込み   ・   ・   ・   ・   ・ # ファイルを閉じる close(OUT); close(POUT); # 追加 # 本来の名前にする unlink("${HdirName}/hakojima.dat"); rename("${HdirName}/hakojima.tmp", "${HdirName}/hakojima.dat"); unlink("${HdirName}/ips.dat"); # 追加 rename("${HdirName}/ips.tmp", "${HdirName}/ips.dat"); # 追加 } # 島ひとつ書き込み sub writeIsland { my($island, $num) = @_; my($score); $score = int($island->{'score'}); print OUT $island->{'name'} . ",$score\n"; print OUT $island->{'id'} . "\n"; print OUT $island->{'prize'} . "\n"; print OUT $island->{'absent'} . "\n"; print OUT $island->{'comment'} . "\n"; print OUT $island->{'password'} . "\n"; print OUT $island->{'money'} . "\n"; print OUT $island->{'food'} . "\n"; print OUT $island->{'pop'} . "\n"; print OUT $island->{'area'} . "\n"; print OUT $island->{'farm'} . "\n"; print OUT $island->{'factory'} . "\n"; print OUT $island->{'mountain'} . "\n"; #-----ここから追加----------------------------------------------------------------- print POUT $island->{'name'} . "\n"; print POUT $island->{'ip0'} . "\n"; print POUT $island->{'ip1'} . "\n"; print POUT $island->{'ip2'} . "\n"; print POUT $island->{'ip3'} . "\n"; print POUT $island->{'ip4'} . "\n"; print POUT $island->{'ip5'} . "\n"; print POUT $island->{'ip6'} . "\n"; print POUT $island->{'ip7'} . "\n"; print POUT $island->{'ip8'} . "\n"; print POUT $island->{'ip9'} . "\n"; print POUT $island->{'etc0'} . "\n"; print POUT $island->{'etc1'} . "\n"; print POUT $island->{'etc2'} . "\n"; print POUT $island->{'etc3'} . "\n"; print POUT $island->{'etc4'} . "\n"; print POUT $island->{'etc5'} . "\n"; print POUT $island->{'etc6'} . "\n"; print POUT $island->{'etc7'} . "\n"; print POUT $island->{'etc8'} . "\n"; print POUT $island->{'etc9'} . "\n"; #-----ここまで追加----------------------------------------------------------------- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main #-----ここから追加----------------------------------------------------------------- # 削除かもしれないので、番号を取得 $line =~ /NUMBER=([^\&]*)\&/; $HcommandPlanNumber = $1; } elsif($line =~ /ChangeInfoButton/) { $HmainMode = 'change'; } elsif($line =~ /IPInfoButton/) { # 追加 $HmainMode = 'ipinfo'; # 追加 } elsif($line =~ /MessageButton([0-9]*)/) { $HmainMode = 'comment'; $HcurrentID = $1; #-----ここまで追加----------------------------------------------------------------- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main # 島の名前から番号を得る(IDじゃなくて番号) sub nameToNumber { my($name) = @_; # 全島から探す my($i); for($i = 0; $i < $HislandNumber; $i++) { if($Hislands[$i]->{'name'} eq $name) { return $i; } } # 見つからなかった場合 return -1; } #-----ここから追加----------------------------------------------------------------- sub ipToNumber { my($ip0) = @_; # 全島から探す my($i); for($i = 0; $i < $HislandNumber; $i++) { if($Hislands[$i]->{'ip0'} eq $ip0) { return $i; } } my($ip1) = @_; # 全島から探す my($i); for($i = 0; $i < $HislandNumber; $i++) { if($Hislands[$i]->{'ip1'} eq $ip1) { return $i; } } my($ip2) = @_; # 全島から探す my($i); for($i = 0; $i < $HislandNumber; $i++) { if($Hislands[$i]->{'ip2'} eq $ip2) { return $i; } } my($ip3) = @_; # 全島から探す my($i); for($i = 0; $i < $HislandNumber; $i++) { if($Hislands[$i]->{'ip3'} eq $ip3) { return $i; } } my($ip4) = @_; # 全島から探す my($i); for($i = 0; $i < $HislandNumber; $i++) { if($Hislands[$i]->{'ip4'} eq $ip4) { return $i; } } my($ip5) = @_; # 全島から探す my($i); for($i = 0; $i < $HislandNumber; $i++) { if($Hislands[$i]->{'ip5'} eq $ip5) { return $i; } } # 見つからなかった場合 return -1; } #-----ここまで追加----------------------------------------------------------------- # 怪獣の情報 sub monsterSpec { my($lv) = @_; ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-main # 何か問題発生 sub tempProblem { out(<[$HcommandPlanNumber] = { 'kind' => $HcommandKind, 'target' => $HcommandTarget, 'x' => $HcommandX, 'y' => $HcommandY, 'arg' => $HcommandArg }; } #-----ここから追加----------------------------------------------------------------- # IP登録されてない場合、この時引き抜き $speaker = $ENV{'REMOTE_HOST'}; $speaker = $ENV{'REMOTE_ADDR'} if ($speaker eq ''); if($island->{'ip0'} eq '0') { # IPゲット $island->{'ip0'} = "$speaker"; $island->{'ip1'} = "$speaker"; $island->{'ip2'} = "$speaker"; $island->{'ip3'} = "$speaker"; $island->{'ip4'} = "$speaker"; $island->{'ip5'} = "$speaker"; $island->{'ip6'} = 0; $island->{'ip7'} = 0; $island->{'ip8'} = 0; $island->{'ip9'} = 0; } if($island->{'ip0'} eq '') { # IPゲット $island->{'ip0'} = "$speaker"; $island->{'ip1'} = "$speaker"; $island->{'ip2'} = "$speaker"; $island->{'ip3'} = "$speaker"; $island->{'ip4'} = "$speaker"; $island->{'ip5'} = "$speaker"; $island->{'ip6'} = 0; $island->{'ip7'} = 0; $island->{'ip8'} = 0; $island->{'ip9'} = 0; } if($island->{'ip5'} != "$speaker") { # IPゲット $island->{'ip1'} = $island->{'ip2'}; $island->{'ip2'} = $island->{'ip3'}; $island->{'ip3'} = $island->{'ip4'}; $island->{'ip4'} = $island->{'ip5'}; $island->{'ip5'} = "$speaker"; $island->{'ip6'} = 0; $island->{'ip7'} = 0; $island->{'ip8'}++; $island->{'ip9'}++; } #-----ここまで追加----------------------------------------------------------------- # データの書き出し writeIslandsFile($HcurrentID); # owner modeへ ownerMain(); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-top #-----ここから追加----------------------------------------------------------------- out(<

${HtagHeader_}島の名前とパスワードの変更${H_tagHeader}

(注意)名前の変更には$HcostChangeName${HunitMoney}かかります。

どの島ですか?

どんな名前に変えますか?(変更する場合のみ)

オーナー名は?(変更する場合のみ)

パスワードは?(必須)

新しいパスワードは?(変更する時のみ)

念のためパスワードをもう一回(変更する時のみ)

# 追加 #-----ここまで追加----------------------------------------------------------------- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-turn # passwordの存在判定 if($HinputPassword eq '') { # password無し unlock(); tempNewIslandNoPassword(); return; } # 確認用パスワード if($HinputPassword2 ne $HinputPassword) { # password間違い unlock(); tempWrongPassword(); return; } #-----ここから追加----------------------------------------------------------------- # IPゲット $speaker = $ENV{'REMOTE_HOST'}; $speaker = $ENV{'REMOTE_ADDR'} if ($speaker eq ''); # IPの重複チェック if($IPcut == 1) { if(ipToNumber($speaker) != -1) { # すでに発見ずみ unlock(); tempIPIslandAlready(); return; } } #-----ここまで追加----------------------------------------------------------------- # 新しい島の番号を決める $HcurrentNumber = $HislandNumber; $HislandNumber++; $Hislands[$HcurrentNumber] = makeNewIsland(); my($island) = $Hislands[$HcurrentNumber]; # 各種の値を設定 $island->{'name'} = $HcurrentName; $island->{'id'} = $HislandNextID; $HislandNextID ++; $island->{'absent'} = $HgiveupTurn - 3; $island->{'comment'} = '(未登録)'; $island->{'password'} = encode($HinputPassword);   ・   ・   ・   ・   ・   ・ #-----ここから追加----------------------------------------------------------------- $island->{'ipname'} = $HcurrentName; $island->{'ip0'} = "$speaker"; $island->{'ip1'} = "$speaker"; $island->{'ip2'} = "$speaker"; $island->{'ip3'} = "$speaker"; $island->{'ip4'} = "$speaker"; $island->{'ip5'} = "$speaker"; $island->{'ip6'} = 0; $island->{'ip7'} = 0; $island->{'ip8'} = 0; $island->{'ip9'} = 0; $island->{'etc0'} = 0; $island->{'etc1'} = 0; $island->{'etc2'} = 0; $island->{'etc3'} = 0; $island->{'etc4'} = 0; $island->{'etc5'} = 0; $island->{'etc6'} = 0; $island->{'etc7'} = 0; $island->{'etc8'} = 0; $island->{'etc9'} = 0; #-----ここまで追加----------------------------------------------------------------- # 人口その他算出 estimate($HcurrentNumber); # データ書き出し writeIslandsFile($island->{'id'}); logDiscover($HcurrentName); # ログ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-turn #-----ここから追加----------------------------------------------------------------- if(($HislandTurn % 100) == 0) { $island->{'ip8'} = 0; } #-----ここまで追加----------------------------------------------------------------- # 地震判定 if(random(1000) < (($island->{'prepare2'} + 1) * $HdisEarthquake)-int($island->{'eis2'}/15)) { # 地震発生 logEarthquake($id, $name); my($x, $y, $landKind, $lv, $i); for($i = 0; $i < $HpointNumber; $i++) { $x = $Hrpx[$i]; ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー # hako-turn # 新規で名前が不正な場合 sub tempNewIslandBadName { out(<\$'とか入ってたり、「無人島」とかいった変な名前はやめましょうよ〜${H_tagBig}$HtempBack END } # すでにその名前の島がある場合 sub tempNewIslandAlready { out(<重複登録防止にご協力ください。${H_tagBig}$HtempBack END } #-----ここまで追加-----------------------------------------------------------------