#---------------------------------------------------------------------- # 箱庭諸島 ver2.30 # 地図モードモジュール(ver1.00) # 使用条件、使用方法等は、hako-readme.txtファイルを参照 # # 箱庭諸島のページ: http://www.bekkoame.ne.jp/~tokuoka/hakoniwa.html #---------------------------------------------------------------------- #---------------------------------------------------------------------- # 観光モード #---------------------------------------------------------------------- # メイン sub printIslandMain { # 開放 unlock(); # idから島番号を取得 $HcurrentNumber = $HidToNumber{$HcurrentID}; # なぜかその島がない場合 if($HcurrentNumber eq '') { tempProblem(); return; } # 名前の取得 $HcurrentName = $Hislands[$HcurrentNumber]->{'name'}; # 観光画面 tempPrintIslandHead(); # ようこそ!! islandInfo(); # 島の情報 islandMap(0); # 島の地図、観光モード # ○○島ローカル掲示板 # tempLbbsHead(); # ローカル掲示板 # tempLbbsInput(); # 書き込みフォーム # tempLbbsContents(); # 掲示板内容 # 近況 tempRecent(0); } #---------------------------------------------------------------------- # 開発モード #---------------------------------------------------------------------- # メイン sub ownerMain { # 開放 unlock(); # モードを明示 $HmainMode = 'owner'; # idから島を取得 $HcurrentNumber = $HidToNumber{$HcurrentID}; my($island) = $Hislands[$HcurrentNumber]; $HcurrentName = $island->{'name'}; # パスワード if(!checkPassword($island->{'password'},$HinputPassword)) { # password間違い tempWrongPassword(); return; } # 開発画面 tempOwner(); # 「開発計画」 # ○○島ローカル掲示板 # tempLbbsHead(); # ローカル掲示板 # tempLbbsInputOW(); # 書き込みフォーム # tempLbbsContents(); # 掲示板内容 # 近況 tempRecent(1); } #---------------------------------------------------------------------- # コマンドモード #---------------------------------------------------------------------- # メイン sub commandMain { # idから島を取得 $HcurrentNumber = $HidToNumber{$HcurrentID}; my($island) = $Hislands[$HcurrentNumber]; $HcurrentName = $island->{'name'}; # パスワード if(!checkPassword($island->{'password'},$HinputPassword)) { # password間違い unlock(); tempWrongPassword(); return; } # モードで分岐 my($command) = $island->{'command'}; if($HcommandMode eq 'delete') { slideFront($command, $HcommandPlanNumber); tempCommandDelete(); } elsif(($HcommandKind == $HcomAutoPrepare) || ($HcommandKind == $HcomAutoPrepare2)) { # フル整地、フル地ならし # 座標配列を作る makeRandomPointArray(); my($land) = $island->{'land'}; # コマンドの種類決定 my($kind) = $HcomPrepare; if($HcommandKind == $HcomAutoPrepare2) { $kind = $HcomPrepare2; } my($i) = 0; my($j) = 0; while(($j < $HpointNumber) && ($i < $HcommandMax)) { my($x) = $Hrpx[$j]; my($y) = $Hrpy[$j]; if($land->[$x][$y] == $HlandWaste) { slideBack($command, $HcommandPlanNumber); $command->[$HcommandPlanNumber] = { 'kind' => $kind, 'target' => 0, 'x' => $x, 'y' => $y, 'arg' => 0 }; $i++; } $j++; } tempCommandAdd(); } elsif($HcommandKind == $HcomAutoDelete) { # 全消し my($i); for($i = 0; $i < $HcommandMax; $i++) { slideFront($command, $HcommandPlanNumber); } tempCommandDelete(); } else { if($HcommandMode eq 'insert') { slideBack($command, $HcommandPlanNumber); } tempCommandAdd(); # コマンドを登録 $command->[$HcommandPlanNumber] = { 'kind' => $HcommandKind, 'target' => $HcommandTarget, 'x' => $HcommandX, 'y' => $HcommandY, 'arg' => $HcommandArg }; } # データの書き出し writeIslandsFile($HcurrentID); # owner modeへ ownerMain(); } #---------------------------------------------------------------------- # コメント入力モード #---------------------------------------------------------------------- # メイン sub commentMain { # idから島を取得 $HcurrentNumber = $HidToNumber{$HcurrentID}; my($island) = $Hislands[$HcurrentNumber]; $HcurrentName = $island->{'name'}; # パスワード if(!checkPassword($island->{'password'},$HinputPassword)) { # password間違い unlock(); tempWrongPassword(); return; } # メッセージを更新 $island->{'comment'} = htmlEscape($Hmessage); # データの書き出し writeIslandsFile($HcurrentID); # コメント更新メッセージ tempComment(); # owner modeへ ownerMain(); } #---------------------------------------------------------------------- # ローカル掲示板モード #---------------------------------------------------------------------- # メイン sub localBbsMain { # idから島番号を取得 $HcurrentNumber = $HidToNumber{$HcurrentID}; my($island) = $Hislands[$HcurrentNumber]; # なぜかその島がない場合 if($HcurrentNumber eq '') { unlock(); tempProblem(); return; } # 削除モードじゃなくて名前かメッセージがない場合 if($HlbbsMode != 2) { if(($HlbbsName eq '') || ($HlbbsName eq '')) { unlock(); tempLbbsNoMessage(); return; } } # 観光者モードじゃない時はパスワードチェック if($HlbbsMode != 0) { if(!checkPassword($island->{'password'},$HinputPassword)) { # password間違い unlock(); tempWrongPassword(); return; } } my($lbbs); $lbbs = $island->{'lbbs'}; # モードで分岐 if($HlbbsMode == 2) { # 削除モード # メッセージを前にずらす slideBackLbbsMessage($lbbs, $HcommandPlanNumber); tempLbbsDelete(); } else { # 記帳モード # メッセージを後ろにずらす slideLbbsMessage($lbbs); # メッセージ書き込み my($message); if($HlbbsMode == 0) { $message = '0'; } else { $message = '1'; } $HlbbsName = "$HislandTurn:" . htmlEscape($HlbbsName); $HlbbsMessage = htmlEscape($HlbbsMessage); $lbbs->[0] = "$message>$HlbbsName>$HlbbsMessage"; tempLbbsAdd(); } # データ書き出し writeIslandsFile($HcurrentID); # もとのモードへ if($HlbbsMode == 0) { printIslandMain(); } else { ownerMain(); } } # ローカル掲示板のメッセージを一つ後ろにずらす sub slideLbbsMessage { my($lbbs) = @_; my($i); # pop(@$lbbs); # push(@$lbbs, $lbbs->[0]); pop(@$lbbs); unshift(@$lbbs, $lbbs->[0]); } # ローカル掲示板のメッセージを一つ前にずらす sub slideBackLbbsMessage { my($lbbs, $number) = @_; my($i); splice(@$lbbs, $number, 1); $lbbs->[$HlbbsMax - 1] = '0>>'; } #---------------------------------------------------------------------- # 島の地図 #---------------------------------------------------------------------- # 情報の表示 sub islandInfo { my($island) = $Hislands[$HcurrentNumber]; # 情報表示 my($rank) = $HcurrentNumber + 1; my($farm) = $island->{'farm'}; my($factory) = $island->{'factory'}; my($mountain) = $island->{'mountain'}; $farm = ($farm == 0) ? "保有せず" : "${farm}0$HunitPop"; $factory = ($factory == 0) ? "保有せず" : "${factory}0$HunitPop"; $mountain = ($mountain == 0) ? "保有せず" : "${mountain}0$HunitPop"; my($mStr1) = ''; my($mStr2) = ''; if(($HhideMoneyMode == 1) || ($HmainMode eq 'owner')) { # 無条件またはownerモード $mStr1 = "
|
END
# 地形、地形値を取得
my($land) = $island->{'land'};
my($landValue) = $island->{'landValue'};
my($l, $lv);
# コマンド取得
my($command) = $island->{'command'};
my($com, @comStr, $i);
if($HmainMode eq 'owner') {
for($i = 0; $i < $HcommandMax; $i++) {
my($j) = $i + 1;
$com = $command->[$i];
if($com->{'kind'} < 20) {
$comStr[$com->{'x'}][$com->{'y'}] .=
" [${j}]$HcomName[$com->{'kind'}]";
}
}
}
# 座標(上)を出力
out(" "); # 各地形および改行を出力 my($x, $y); for($y = 0; $y < $HislandSize; $y++) { # 偶数行目なら番号を出力 if(($y % 2) == 0) { out(" "); } out(" |
|
|
END
islandMap(1); # 島の地図、所有者モード
out(<|
END
for($i = 0; $i < $HcommandMax; $i++) {
tempCommand($i, $Hislands[$HcurrentNumber]->{'command'}->[$i]);
}
out(< | |
| 番号 | 記帳内容 |
|---|---|
| $HtagNumber_$j$H_tagNumber | "); if($1 == 0) { # 観光者 out("$HtagLbbsSS_$2 > $3$H_tagLbbsSS | $HtagLbbsOW_$2 > $3$H_tagLbbsOW | "); } } } out(<