From 687f2b2edf79b7fb4dcc3ecec5a62f6909834802 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Tue, 17 May 2022 23:02:11 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EA=B2=8C=EC=9E=84=20=EC=A7=84=ED=96=89?= =?UTF-8?q?=20=EB=8F=84=EC=A4=91=20=EC=9D=B4=EB=AF=BC=EC=A1=B1=EC=9D=B4=20?= =?UTF-8?q?=EB=B0=9C=EB=8F=99=EB=90=98=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20edg?= =?UTF-8?q?e=20case=20=EC=88=98=EC=A0=95=20-=20=EA=B5=AD=EA=B0=80=20?= =?UTF-8?q?=EC=A4=91=20=ED=95=98=EB=82=98=EA=B0=80=20=EC=9D=B4=EC=84=B1=20?= =?UTF-8?q?=ED=95=98=EB=82=98=EB=A7=8C=20=EB=B3=B4=EC=9C=A0=EC=A4=91?= =?UTF-8?q?=EC=9D=B8=20=EA=B2=BD=EC=9A=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/Event/Action/RaiseInvader.php | 46 +++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/hwe/sammo/Event/Action/RaiseInvader.php b/hwe/sammo/Event/Action/RaiseInvader.php index 880bfc72..11b73632 100644 --- a/hwe/sammo/Event/Action/RaiseInvader.php +++ b/hwe/sammo/Event/Action/RaiseInvader.php @@ -2,6 +2,7 @@ namespace sammo\Event\Action; +use Ds\Set; use sammo\ActionLogger; use sammo\CityConst; use sammo\DB; @@ -45,7 +46,7 @@ class RaiseInvader extends \sammo\Event\Action $this->dex = $dex; } - private function moveCapital() + private function moveCapital(RandUtil $rng): Set { $cities = []; foreach (CityConst::all() as $cityObj) { @@ -55,19 +56,22 @@ class RaiseInvader extends \sammo\Event\Action $cities[] = $cityObj->id; } + $disabledInvaderCity = new Set(); if (count($cities) == 0) { - return [__CLASS__, 0]; + return $disabledInvaderCity; } $db = DB::db(); - - foreach ($db->queryFirstColumn('SELECT capital, nation from nation WHERE capital in %li', $cities) as $row) { - list($oldCapital, $nation) = $row; - $newCapital = $db->queryFirstRow('SELECT city from city where nation=%i and city !=%i \ - order by rand() limit 1', $nation, $oldCapital); + foreach ($db->queryAllLists('SELECT capital, nation from nation WHERE capital in %li', $cities) as $row) { + [$oldCapital, $nation] = $row; + $capitalCandidates = $db->queryFirstColumn('SELECT from city WHERE nation = %i AND city != %i', $nation); + if (!$capitalCandidates) { + $disabledInvaderCity->add($oldCapital); + continue; + } + $newCapital = $rng->choice($capitalCandidates); $db->update('nation', ['capital' => $newCapital], 'nation=%i', $nation); - $db->update('general', ['city' => $newCapital], 'nation=%i and city=%i', $nation, $oldCapital); } @@ -82,6 +86,8 @@ class RaiseInvader extends \sammo\Event\Action 'front' => 0, 'supply' => 1, ], 'city in %li', $cities); + + return $disabledInvaderCity; } public function run(array $env) @@ -125,7 +131,16 @@ class RaiseInvader extends \sammo\Event\Action } $dex = Util::toInt($dex); - $this->moveCapital(); + $year = $env['year']; + $month = $env['month']; + $rng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize( + UniqueConst::$hiddenSeed, + 'RaiseInvader', + $year, + $month, + ))); + + $disabledInvaderCity = $this->moveCapital($rng); $serverID = UniqueConst::$serverID; $existNations = $db->queryFirstColumn("SELECT nation FROM `nation`"); $lastNationID = max( @@ -141,22 +156,15 @@ class RaiseInvader extends \sammo\Event\Action 'rice' => 999999, ], true); - $year = $env['year']; - $month = $env['month']; - - $rng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize( - UniqueConst::$hiddenSeed, - 'RaiseInvader', - $year, - $month, - ))); - $invaderNationIDList = []; refreshNationStaticInfo(); foreach ($cities as $cityObj) { if ($cityObj->level != 4) { continue; } + if($disabledInvaderCity->contains($cityObj->id)){ + continue; + } $lastNationID += 1; $invaderNationID = $lastNationID;