function editMap($hako, $data) { global $init; // パスワード if (!Util::checkPassword("", $data['PASSWORD'])) { // password間違い HakoError::wrongPassword(); return; } $html = new HtmlMap(); $id = $data['ISLANDID']; $number = $hako->idToNumber[$id]; $island = $hako->islands[$number]; // 地形リストを生成 $landList = array("{$init->landSea}", "{$init->landSeaSide}", "{$init->landWaste}", "{$init->landPoll}", "{$init->landPlains}", "{$init->landForest}", "{$init->landTown}", "{$init->landProcity}", "{$init->landNewtown}", "{$init->landBigtown}", "{$init->landSeaCity}", "{$init->landFroCity}", "{$init->landPort}", "{$init->landShip}", "{$init->landRail}", "{$init->landStat}", "{$init->landTrain}", "{$init->landFusya}", "{$init->landSyoubou}", "{$init->landSsyoubou}", "{$init->landFarm}", "{$init->landSfarm}", "{$init->landNursery}", "{$init->landFactory}", "{$init->landCommerce}", "{$init->landMountain}", "{$init->landHatuden}", "{$init->landBase}", "{$init->landHaribote}", "{$init->landDefence}", "{$init->landSbase}", "{$init->landSdefence}", "{$init->landMyhome}", "{$init->landSoukoM}", "{$init->landSoukoF}", "{$init->landMonument}", "{$init->landSoccer}", "{$init->landPark}", "{$init->landSeaResort}", "{$init->landOil}", "{$init->landBank}", "{$init->landMonster}", "{$init->landSleeper}", "{$init->landZorasu}"); // 地形リスト名称を生成 $landName = array("海、浅瀬", "砂浜", "荒地", "汚染土壌", "平地", "森", "村、町、都市", "防災都市", "ニュータウン", "現代都市", "海底都市", "海上都市", "港", "船舶", "線路", "駅", "電車", "風車", "消防署", "海底消防署", "農場", "海底農場", "養殖場", "工場", "商業ビル", "山、採掘場", "発電所", "ミサイル基地", "ハリボテ", "防衛施設", "海底基地", "海底防衛施設", "マイホーム", "金庫", "食料庫", "記念碑", "スタジアム", "遊園地", "海の家", "海底油田", "銀行", "怪獣", "怪獣(睡眠中)", "ぞらす"); echo <<<END <script type="text/javascript"> function ps(x, y, ld, lv) { \tdocument.InputPlan.POINTX.options[x].selected = true; \tdocument.InputPlan.POINTY.options[y].selected = true; \tdocument.InputPlan.LAND.options[ld].selected = true; \tif(ld == {$init->landMonster} || ld == {$init->landSleeper}) { \t\tmn = Math.floor(lv / 10); \t\tlv = lv - mn * 10; \t\tdocument.InputPlan.MONSTER.options[mn].selected = true; \t\tdocument.InputPlan.LEVEL.options[lv].selected = true; \t} else { \t\tdocument.InputPlan.LEVEL.options[lv].selected = true; \t} \treturn true; } </script> <div class="text-center"> \t{$init->tagBig_}{$init->tagName_}{$island['name']}{$init->nameSuffix}{$init->_tagName} マップ・エディタ{$init->_tagBig}<br> </div> <form name="TOP" action="{$GLOBALS['THIS_FILE']}" method="post"> \t<input type="hidden" name="PASSWORD" value="{$data['PASSWORD']}"> \t<input type="hidden" name="mode" value="list"> </form> END; // 島の情報を表示 $html->islandInfo($island, $number, 1); // 説明文を表示 echo <<<END <div class="text-center"> <table class="table table-bordered"> <tr valign="top"> <td {$init->bgCommandCell}> \t<b>レベルについて</b> \t<ul> \t\t<li><b>海、浅瀬</b><br>レベル 0 のとき海<br>1 のとき浅瀬<br>それ以外 のとき財宝 \t\t<li><b>荒地</b><br>レベル 1 のとき着弾点 \t\t<li><b>村、町、都市</b><br>レベル 30 未満が村<br>レベル 100 未満が町<br>レベル 200 未満が都市 \t\t<li><b>ミサイル基地</b><br>経験値 \t\t<li><b>山、採掘場</b><br>レベル 1 以上のとき採掘場 \t\t<li><b>怪獣</b><br>各怪獣の最大レベルを超える<br>設定はできません \t\t<li><b>海底基地</b><br>経験値 \t</ul> </td> <td {$init->bgMapCell}> END; // 地形出力 $html->islandMap($hako, $island, 1); // エディタ領域の表示 echo <<<END </td> <td {$init->bgInputCell}> <div class="text-center"> \t<form action="{$GLOBALS['THIS_FILE']}" method="post" name="InputPlan"> \t\t<input type="hidden" name="mode" value="regist"> \t\t<input type="hidden" name="ISLANDID" value="{$island['id']}"> \t\t<input type="hidden" name="PASSWORD" value="{$data['PASSWORD']}"> \t\t<strong>マップ・エディタ</strong><br> \t\t<hr> \t\t<strong>座標(</strong> \t\t<select name="POINTX"> END; for ($i = 0; $i < $init->islandSize; $i++) { if ($i == $data['defaultX']) { echo "<option value=\"{$i}\" selected>{$i}</option>\n"; } else { echo "<option value=\"{$i}\">{$i}</option>\n"; } } echo "</select>, <select name=\"POINTY\">"; for ($i = 0; $i < $init->islandSize; $i++) { if ($i == $data['defaultY']) { echo "<option value=\"{$i}\" selected>{$i}</option>\n"; } else { echo "<option value=\"{$i}\">{$i}</option>\n"; } } echo <<<END \t\t</select><strong>)</strong> \t\t<hr> \t\t<strong>地形</strong> \t\t<select name="LAND"> END; for ($i = 0; $i < count($landList); $i++) { if ($landList[$i] == $data['defaultLAND']) { echo "<option value=\"{$landList[$i]}\" selected>{$landName[$i]}</option>\n"; } else { echo "<option value=\"{$landList[$i]}\">{$landName[$i]}</option>\n"; } } echo <<<END \t\t</select> \t\t<hr> \t\t<strong>怪獣の種類</strong> \t\t<select name="MONSTER"> END; for ($i = 0; $i < $init->monsterNumber; $i++) { if ($i == $data['defaultMONSTER']) { echo "<option value=\"{$i}\" selected>{$init->monsterName[$i]}</option>\n"; } else { echo "<option value=\"{$i}\">{$init->monsterName[$i]}</option>\n"; } } echo <<<END \t\t</select> \t\t<hr> \t\t<strong>船舶の種類</strong> \t\t<select name="SHIP"> END; for ($i = 0; $i < 15; $i++) { if ($init->shipName[$i] != "") { if ($i == $data['defaultSHIP']) { echo "<option value=\"{$i}\" selected>{$init->shipName[$i]}</option>\n"; } else { echo "<option value=\"{$i}\">{$init->shipName[$i]}</option>\n"; } } } echo <<<END \t\t</select> \t\t<hr> \t\t<strong>レベル</strong> \t\t<input type="number" min="0" max="1048575" size="8" maxlength="7" name="LEVEL" value="{$data['defaultLEVEL']}"> \t\t<hr> \t\t<input type="submit" value="登録"> \t</form> </div> <ul> \t<li>登録するときは十分注意願います。 \t<li>データを破壊する場合があります。 \t<li>バックアップを行ってから<br>行う様にしましょう。 \t<li>地形データを変更するのみで、<br>他のデータは変更されません。<br> \tターン更新で他のデータへ反映されます。 </ul> </td> </tr> </table> </div> END; }
function newIsland($hako, $data) { global $init; $log = new Log(); if ($hako->islandNumber >= $init->maxIsland) { HakoError::newIslandFull(); return; } if (empty($data['ISLANDNAME'])) { HakoError::newIslandNoName(); return; } // 名前が正当化チェック if (preg_match("/[,?()<>\$]/", $data['ISLANDNAME']) || strcmp($data['ISLANDNAME'], "無人") == 0) { HakoError::newIslandBadName(); return; } // 名前の重複チェック if (Util::nameToNumber($hako, $data['ISLANDNAME']) != -1) { HakoError::newIslandAlready(); return; } // パスワードの存在判定 if (empty($data['PASSWORD'])) { HakoError::newIslandNoPassword(); return; } if (strcmp($data['PASSWORD'], $data['PASSWORD2']) != 0) { HakoError::wrongPassword(); return; } // 新しい島の番号を決める $newNumber = $hako->islandNumber; $hako->islandNumber++; $hako->islandNumberNoBF++; $hako->islandNumberNoKP++; $island = $this->makeNewIsland(); // 島の番号の使いまわし $safety = 0; while (isset($hako->idToNumber[$hako->islandNextID])) { $hako->islandNextID++; if ($hako->islandNextID > 250) { $hako->islandNextID = 1; } $safety++; if ($safety == 250) { break; } } // 各種の値を設定 $island['name'] = htmlspecialchars($data['ISLANDNAME']); $island['owner'] = htmlspecialchars($data['OWNERNAME']); $island['id'] = $hako->islandNextID; $hako->islandNextID++; $island['starturn'] = $hako->islandTurn; $island['isBF'] = $island['keep'] = 0; $island['absent'] = $init->giveupTurn - 3; $island['comment'] = '(未登録)'; $island['comment_turn'] = $hako->islandTurn; $island['password'] = Util::encode($data['PASSWORD']); $island['tenki'] = 1; $island['team'] = $island['shiai'] = $island['kachi'] = $island['make'] = $island['hikiwake'] = $island['kougeki'] = $island['bougyo'] = $island['tokuten'] = $island['shitten'] = 0; Turn::estimate($hako, $island); if ($hako->islandNumberBF > 0) { for ($i = 0; $i < $hako->islandNumberBF; $i++) { $hako->islands[$newNumber - $i] = $hako->islands[$newNumber - $i - 1]; } $hako->islands[$newNumber - $hako->islandNumberBF] = $island; } else { $hako->islands[$newNumber] = $island; } $hako->writeIslandsFile($island['id']); $log->discover($island['id'], $island['name']); $htmlMap = new HtmlMap(); $htmlMap->newIslandHead($island['name']); $htmlMap->islandInfo($island, $newNumber); $htmlMap->islandMap($hako, $island, 1, $data); }