#----------------------------------------------------------------------
# 箱庭諸島 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(); # 島の情報
# ○○島ローカル掲示板
if($HuseLbbs) {
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(); # 「開発計画」
# ○○島ローカル掲示板
if($HuseLbbs) {
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 = "";
$mStr2 = "資金:$island->{'money'}$HunitMoney
";
} elsif($HhideMoneyMode == 2) {
my($mTmp) = aboutMoney($island->{'money'});
# 1000億単位モード
$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(<