function doIslandProcess($hako, &$island) { global $init; // 導出値 $name = $island['name']; $id = $island['id']; $land = $island['land']; $landValue = $island['landValue']; $presentItem = isset($island['present']['item']) ? $island['present']['item'] : 0; // 収入ログ if (isset($island['oilincome'])) { if ($island['oilincome'] > 0) { $this->log->oilMoney($id, $name, "海底油田", "", "総額{$island['oilincome']}{$init->unitMoney}"); } } // 収入ログ if (isset($island['bank'])) { if ($island['bank'] > 0) { $value = (int) ($island['money'] * 0.005); $island['money'] += $value; $this->log->oilMoney($id, $name, "銀行", "", "総額{$value}{$init->unitMoney}"); } } // 天気判定 if (isset($island['tenki'])) { if ($island['tenki'] > 0) { $rnd = Util::random(100); if ($rnd < 5) { $island['tenki'] = 5; } elseif ($rnd < 10) { $island['tenki'] = 4; } elseif ($rnd < 15) { $island['tenki'] = 3; } elseif ($rnd < 20) { $island['tenki'] = 2; } else { $island['tenki'] = 1; } } else { $island['tenki'] = 1; } } // 日照り判定 if (isset($island['tenki'])) { if (Util::random(1000) < $init->disTenki && $island['tenki'] == 1) { // 日照り発生 $this->log->Hideri($id, $name); for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landTown && $landValue[$x][$y] > 100) { // 人口が減る $people = Util::random(2) + 1; $landValue[$x][$y] -= $people; } } } } // にわか雨判定 if (isset($island['tenki'])) { if (Util::random(1000) < $init->disTenki && $island['tenki'] == 3) { // にわか雨発生 $this->log->Niwakaame($id, $name); for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landForest) { // 木が増える $tree = Util::random(5) + 1; $landValue[$x][$y] += $tree; if ($landValue[$x][$y] > 200) { $landValue[$x][$y] = 200; } } } } } // 宝くじ判定 if ($hako->islandTurn % $init->lottery == 0) { if (Util::random(500) < $island['lot'] && $island['lot'] > 0) { // 何等賞に当選するか? $syo = Util::random(2) + 1; $value = $init->lotmoney / $syo; $island['money'] += $value; $str = "{$value}{$init->unitMoney}"; // 収入ログ $this->log->LotteryMoney($id, $name, $str, $syo); } // 宝くじの枚数リセット $island['lot'] = 0; } // 暴動判定 $island['pop'] = $island['pop'] <= 0 ? 1 : $island['pop']; $unemployed = ($island['pop'] - ($island['farm'] + $island['factory'] + $island['commerce'] + $island['mountain'] + $island['hatuden']) * 10) / $island['pop'] * 100; if ($island['isBF'] != 1 && Util::random(1000) < $unemployed && $unemployed > $init->disPoo && $island['pop'] >= $init->disPooPop) { // 暴動発生 $this->log->pooriot($id, $name); for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landTown || $landKind == $init->landSeaCity || $landKind == $init->landNewtown || $landKind == $init->landBigtown || $landKind == $init->landProcity || $landKind == $init->landFroCity) { // 1/4で人口が減る if (Util::random(4) == 0) { $landValue[$x][$y] -= Util::random($unemployed); if ($landValue[$x][$y] > 0) { // 人口減 $this->log->riotDamage1($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); } else { // 壊滅 if ($landKind == $init->landSeaCity || $landKind == $init->landFroCity) { $land[$x][$y] = $init->landSea; } else { $land[$x][$y] = $init->landWaste; } $landValue[$x][$y] = 0; $this->log->riotDamage2($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); } } } } } // 地震判定 $prepare2 = isset($island['prepare2']) ? (int) $island['prepare2'] : 0; if (Util::random(1000) < ($prepare2 + 1) * $init->disEarthquake - (int) ($island['eisei'][1] / 15) || $presentItem == 1) { // 地震発生 $this->log->earthquake($id, $name); for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landTown && $lv >= 100 || $landKind == $init->landProcity && $lv < 130 || $landKind == $init->landSfarm && $lv < 20 || $landKind == $init->landFactory && $lv < 100 || $landKind == $init->landHatuden && $lv < 100 || $landKind == $init->landHaribote || $landKind == $init->landSeaResort || $landKind == $init->landSeaSide || $landKind == $init->landSeaCity || $landKind == $init->landFroCity) { // 1/4で壊滅 if (Util::random(4) == 0) { $this->log->eQDamage($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); if ($landKind == $init->landSeaCity || $landKind == $init->landFroCity || $landKind == $init->landSfarm) { $land[$x][$y] = $init->landSea; } else { $land[$x][$y] = $init->landWaste; } $landValue[$x][$y] = 0; } } if ($landKind == $init->landBigtown && $lv >= 100 || $landKind == $init->landNewtown && $lv >= 100) { // 1/3で壊滅 if (Util::random(3) == 0) { $this->log->eQDamagenot($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); $landValue[$x][$y] -= Util::random(100) + 50; } if ($landValue[$x][$y] <= 0) { $land[$x][$y] = $init->landWaste; $landValue[$x][$y] = 0; $this->log->eQDamage($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); continue; } } } } // 食料不足 if ($island['food'] <= 0) { // 不足メッセージ $this->log->starve($id, $name); $island['food'] = 0; for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landFarm || $landKind == $init->landSfarm || $landKind == $init->landFactory || $landKind == $init->landCommerce || $landKind == $init->landHatuden || $landKind == $init->landBase || $landKind == $init->landDefence) { // 1/4で壊滅 if (Util::random(4) == 0) { $this->log->svDamage($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); $land[$x][$y] = $init->landWaste; $landValue[$x][$y] = 0; // でも養殖場なら浅瀬 if ($landKind == $init->landNursery) { $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 1; } elseif ($landKind == $init->landSfarm) { $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 0; } } } } } // 座礁判定 if (Util::random(1000) < $init->disRunAground1) { for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landShip && Util::random(1000) < $init->disRunAground2) { $this->log->RunAground($id, $name, $this->landName($landKind, $lv), "({$x},{$y})"); $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 0; } } } // 海賊船判定 $ownShip = 0; for ($i = 0; $i < 10; $i++) { $ownShip += $island['ship'][$i]; } if (Util::random(1000) < $init->disViking * $ownShip) { // どこに現れるか決める for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landSea && $lv == 0) { // 海賊船登場 $land[$x][$y] = $init->landShip; $landValue[$x][$y] = Util::navyPack(0, 10, $init->shipHP[10], 0, 0); $this->log->VikingCome($id, $name, "({$x},{$y})"); break; } } } // 電車判定 if (Util::random(1000) < $init->disTrain && $island['stat'] >= 2 && $island['train'] < $island['stat'] && $island['pop'] >= 2000) { // どこに現れるか決める for ($i = 0; $i < $init->pointNumber; $i++) { $bx = $this->rpx[$i]; $by = $this->rpy[$i]; $landKind = $land[$bx][$by]; $lv = $landValue[$bx][$by]; if ($landKind == $init->landRail) { // 電車登場 $land[$bx][$by] = $init->landTrain; break; } } } // ぞらす判定 if ($island['money'] >= 10000) { $smo = Util::random(800); } else { $smo = Util::random(1000); } if ($smo < $init->disZorasu && $island['taiji'] >= 50 && $island['pop'] >= 2000) { // どこに現れるか決める for ($i = 0; $i < $init->pointNumber; $i++) { $bx = $this->rpx[$i]; $by = $this->rpy[$i]; $landKind = $land[$bx][$by]; $lv = $landValue[$bx][$by]; if ($landKind == $init->landSea && $lv == 0) { // ぞらす登場 $land[$bx][$by] = $init->landZorasu; $landValue[$bx][$by] = Util::random(200); $this->log->ZorasuCome($id, $name, "({$x},{$y})"); break; } } } // 津波判定 if (Util::random(1000) < $init->disTsunami - (int) ($island['eisei'][1] / 15) || $presentItem == 2) { // 津波発生 $this->log->tsunami($id, $name); for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landTown || $landKind == $init->landProcity && $lv < 110 || $landKind == $init->landNewtown || $landKind == $init->landBigtown || $landKind == $init->landFarm && $lv < 25 || $landKind == $init->landNursery || $landKind == $init->landFactory || $landKind == $init->landHatuden || $landKind == $init->landBase || $landKind == $init->landDefence || $landKind == $init->landSeaSide || $landKind == $init->landSeaResort || $landKind == $init->landPort || $landKind == $init->landShip || $landKind == $init->landHaribote) { // 1d12 <= (周囲の海 - 1) で崩壊 if (Util::random(12) < Turn::countAround($land, $x, $y, 7, array($init->landOil, $init->landSbase, $init->landSea)) - 1) { $this->log->tsunamiDamage($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); if ($landKind == $init->landSeaSide || $landKind == $init->landNursery || $landKind == $init->landPort) { //砂浜か養殖場か港なら浅瀬に $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 1; } elseif ($landKind == $init->landShip) { //船なら水没、海に $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 0; } else { $land[$x][$y] = $init->landWaste; $landValue[$x][$y] = 0; } } } } } // 怪獣判定 if ($island['isBF'] == 1) { $r = Util::random(500); $pop = $island['pop']; } else { $r = Util::random(10000); $pop = $island['pop']; } $isMons = $presentItem == 3 && $pop >= $init->disMonsBorder1; if (!isset($island['monstersend'])) { $island['monstersend'] = 0; } do { if ($r < $init->disMonster * $island['area'] && $pop >= $init->disMonsBorder1 || $isMons || $island['monstersend'] > 0) { // 怪獣出現 // 種類を決める if ($island['monstersend'] > 0) { // 人造 $kind = 0; $island['monstersend']--; } elseif ($pop >= $init->disMonsBorder5) { // level5まで $kind = Util::random($init->monsterLevel5) + 1; } elseif ($pop >= $init->disMonsBorder4) { // level4まで $kind = Util::random($init->monsterLevel4) + 1; } elseif ($pop >= $init->disMonsBorder3) { // level3まで $kind = Util::random($init->monsterLevel3) + 1; } elseif ($pop >= $init->disMonsBorder2) { // level2まで $kind = Util::random($init->monsterLevel2) + 1; } else { // level1のみ $kind = Util::random($init->monsterLevel1) + 1; } // lvの値を決める $lv = $kind * 100 + $init->monsterBHP[$kind] + Util::random($init->monsterDHP[$kind]); // どこに現れるか決める for ($i = 0; $i < $init->pointNumber; $i++) { $bx = $this->rpx[$i]; $by = $this->rpy[$i]; if ($land[$bx][$by] == $init->landTown || $land[$bx][$by] == $init->landBigtown || $land[$bx][$by] == $init->landNewtown) { // 地形名 $lName = $this->landName($init->landTown, $landValue[$bx][$by]); // そのヘックスを怪獣に $land[$bx][$by] = $init->landMonster; $landValue[$bx][$by] = $lv; // 怪獣情報 $monsSpec = Util::monsterSpec($lv); $mName = $monsSpec['name']; // メッセージ $this->log->monsCome($id, $name, $mName, "({$bx}, {$by})", $lName); break; } } } } while ($island['monstersend'] > 0); // 地盤沈下判定 if ($island['area'] > $init->disFallBorder && (Util::random(1000) < $init->disFalldown && $island['isBF'] != 1 || $presentItem == 4)) { $this->log->falldown($id, $name); for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind != $init->landSea && $landKind != $init->landSbase && $landKind != $init->landSdefence && $landKind != $init->landSfarm && $landKind != $init->landOil && $landKind != $init->landMountain) { // 周囲に海があれば、値を-1に if (Turn::countAround($land, $x, $y, 7, array($init->landSea, $init->landSbase))) { $land[$x][$y] = -1; $landValue[$x][$y] = 0; $this->log->falldownLand($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); } } } for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; if ($landKind == -1) { // -1になっている所を浅瀬に $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 1; } elseif ($landKind == $init->landSea) { // 浅瀬は海に $landValue[$x][$y] = 0; } } } // 台風判定 if (Util::random(1000) < $init->disTyphoon - (int) ($island['eisei'][0] / 10) && ($island['tenki'] == 2 || $island['tenki'] == 3) || $presentItem == 5) { // 台風発生 $this->log->typhoon($id, $name); for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landFarm && $lv < 25 || $landKind == $init->landSfarm && $lv < 20 || $landKind == $init->landNursery || $landKind == $init->landSeaSide || $landKind == $init->landHaribote) { // 1d12 <= (6 - 周囲の森) で崩壊 if (Util::random(12) < 6 - Turn::countAround($land, $x, $y, 7, array($init->landForest, $init->landFusy, $init->landMonument))) { $this->log->typhoonDamage($id, $name, $this->landName($landKind, $lv), "({$x}, {$y})"); if ($landKind == $init->landSeaSide || $landKind == $init->landNursery) { //砂浜か養殖場ならは浅瀬 $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 1; } elseif ($landKind == $init->landSfarm) { $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 0; } else { //その他は平地に $land[$x][$y] = $init->landPlains; $landValue[$x][$y] = 0; } } } } } // 巨大隕石判定 if (Util::random(1000) < $init->disHugeMeteo - (int) ($island['eisei'][2] / 50) && $island['id'] != 1 || $presentItem == 6) { // 落下 if ($presentItem == 6) { $x = $island['present']['px']; $y = $island['present']['py']; } else { $x = Util::random($init->islandSize); $y = Util::random($init->islandSize); } $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; $point = "({$x}, {$y})"; // メッセージ $this->log->hugeMeteo($id, $name, $point); // 広域被害ルーチン $this->wideDamage($id, $name, $land, $landValue, $x, $y); } // 巨大ミサイル判定 if (isset($island['bigmissile'])) { while ($island['bigmissile'] > 0) { $island['bigmissile']--; // 家族の力 for ($i = 0; $i < $init->pointNumber; $i++) { $x = $this->rpx[$i]; $y = $this->rpy[$i]; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; if ($landKind == $init->landMyhome && Util::random(100) < $lv * 10) { // 自宅があったとき $power = 1; if ($lv > 1) { // 家族が1人死ぬ $landValue[$x][$y]--; $this->log->kazokuPower($id, $name, "家族の力"); break; } else { // 全滅… $land[$x][$y] = $init->landWaste; $landValue[$x][$y] = 0; $this->log->kazokuPower($id, $name, "独身の底力"); break; } } } if ($power != 1) { // 落下 $x = Util::random($init->islandSize); $y = Util::random($init->islandSize); $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; $point = "({$x}, {$y})"; // メッセージ $this->log->monDamage($id, $name, $point); // 広域被害ルーチン $this->wideDamage($id, $name, $land, $landValue, $x, $y); } } } // 隕石判定 if (Util::random(1000) < $init->disMeteo - (int) ($island['eisei'][2] / 40) || $presentItem == 7) { $first = 1; while (Util::random(2) == 0 || $first == 1) { $first = 0; // 落下 if ($presentItem == 7 && $first == 1) { $x = $island['present']['px']; $y = $island['present']['py']; } else { $x = Util::random($init->islandSize); $y = Util::random($init->islandSize); } $first = 0; $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; $point = "({$x}, {$y})"; if ($landKind == $init->landSea && $lv == 0) { // 海ポチャ $this->log->meteoSea($id, $name, $this->landName($landKind, $lv), $point); } elseif ($landKind == $init->landMountain) { // 山破壊 $this->log->meteoMountain($id, $name, $this->landName($landKind, $lv), $point); $land[$x][$y] = $init->landWaste; $landValue[$x][$y] = 0; continue; } elseif ($landKind == $init->landSbase || $landKind == $init->landSfarm || $landKind == $init->landSeaCity || $landKind == $init->landFroCity || $landKind == $init->landSdefence) { $this->log->meteoSbase($id, $name, $this->landName($landKind, $lv), $point); } elseif ($landKind == $init->landMonster || $landKind == $init->landSleeper) { $this->log->meteoMonster($id, $name, $this->landName($landKind, $lv), $point); } elseif ($landKind == $init->landSea) { // 浅瀬 $this->log->meteoSea1($id, $name, $this->landName($landKind, $lv), $point); } else { $this->log->meteoNormal($id, $name, $this->landName($landKind, $lv), $point); } $land[$x][$y] = $init->landSea; $landValue[$x][$y] = 0; } } // 噴火判定 if (Util::random(1000) < $init->disEruption - (int) ($island['eisei'][1] / 40) || $presentItem == 8) { if ($presentItem == 8) { $x = $island['present']['px']; $y = $island['present']['py']; } else { $x = Util::random($init->islandSize); $y = Util::random($init->islandSize); } $landKind = $land[$x][$y]; $lv = $landValue[$x][$y]; $point = "({$x}, {$y})"; $this->log->eruption($id, $name, $this->landName($landKind, $lv), $point); $land[$x][$y] = $init->landMountain; $landValue[$x][$y] = 0; for ($i = 1; $i < 7; $i++) { $sx = $x + $init->ax[$i]; $sy = $y + $init->ay[$i]; // 行による位置調整 if ($sy % 2 == 0 && $y % 2 == 1) { $sx--; } $landKind = $land[$sx][$sy]; $lv = $landValue[$sx][$sy]; $point = "({$sx}, {$sy})"; if ($sx < 0 || $sx >= $init->islandSize || $sy < 0 || $sy >= $init->islandSize) { } else { // 範囲内の場合 $landKind = $land[$sx][$sy]; $lv = $landValue[$sx][$sy]; $point = "({$sx}, {$sy})"; if ($landKind == $init->landSea || $landKind == $init->landOil || $landKind == $init->landSeaCity || $landKind == $init->landFroCity || $landKind == $init->landSsyoubou || $landKind == $init->landSfarm || $landKind == $init->landSdefence || $landKind == $init->landSbase) { // 海の場合 if ($lv == 1) { // 浅瀬 $this->log->eruptionSea1($id, $name, $this->landName($landKind, $lv), $point); } else { $land[$sx][$sy] = $init->landSea; $landValue[$sx][$sy] = 1; $this->log->eruptionSea($id, $name, $this->landName($landKind, $lv), $point); continue; } } elseif ($landKind == $init->landMountain || $landKind == $init->landMonster || $landKind == $init->landSleeper || $landKind == $init->landWaste) { continue; } else { // それ以外の場合 $this->log->eruptionNormal($id, $name, $this->landName($landKind, $lv), $point); } $land[$sx][$sy] = $init->landWaste; $landValue[$sx][$sy] = 0; } } } // 人工衛星エネルギー減少 for ($i = 0; $i < 6; $i++) { if ($island['eisei'][$i]) { $island['eisei'][$i] -= Util::random(2); if ($island['eisei'][$i] < 1) { $island['eisei'][$i] = 0; $this->log->EiseiEnd($id, $name, $init->EiseiName[$i]); } } } // 変更された可能性のある変数を書き戻す $island['land'] = $land; $island['landValue'] = $landValue; $island['gold'] = $island['money'] - $island['oldMoney']; $island['rice'] = $island['food'] - $island['oldFood']; // 食料があふれてたら換金 if ($island['food'] > $init->maxFood) { $island['money'] += round(($island['food'] - $init->maxFood) / 10); $island['food'] = $init->maxFood; } // 金があふれてたら切り捨て if ($island['money'] > $init->maxMoney) { $island['money'] = $init->maxMoney; } // 各種の値を計算 Turn::estimate($hako, $island); // 繁栄、災難賞 $pop = $island['pop']; $damage = $island['oldPop'] - $pop; $prize = $island['prize']; list($flags, $monsters, $turns) = explode(",", $prize, 3); $island['peop'] = $island['pop'] - $island['oldPop']; $island['pots'] = $island['point'] - $island['oldPoint']; // 繁栄賞 if (!($flags & 1) && $pop >= 3000 * 100) { $flags |= 1; $this->log->prize($id, $name, $init->prizeName[1]); } elseif (!($flags & 2) && $pop >= 5000 * 100) { $flags |= 2; $this->log->prize($id, $name, $init->prizeName[2]); } elseif (!($flags & 4) && $pop >= 10000 * 100) { $flags |= 4; $this->log->prize($id, $name, $init->prizeName[3]); } // 災難賞 if (!($flags & 64) && $damage >= 500 * 100) { $flags |= 64; $this->log->prize($id, $name, $init->prizeName[7]); } elseif (!($flags & 128) && $damage >= 1000 * 100) { $flags |= 128; $this->log->prize($id, $name, $init->prizeName[8]); } elseif (!($flags & 256) && $damage >= 2000 * 100) { $flags |= 256; $this->log->prize($id, $name, $init->prizeName[9]); } $island['prize'] = "{$flags},{$monsters},{$turns}"; }
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); }