From c65d6565df4b8f7cea42b53fd700de5f87f7124d Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 11 Jun 2018 03:20:18 +0900 Subject: [PATCH] =?UTF-8?q?checkSupply=EB=A5=BC=20=EA=B2=80=EC=B6=9C?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=89=AC=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_gamerule.php | 58 ++++++++++++++++++----------------------- hwe/sammo/CityConst.php | 16 +++++++++++- 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 083e1473..673fbb6b 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -176,48 +176,47 @@ function SetNationFront($nationNo) { function checkSupply() { $db = DB::db(); - $connect=$db->get(); $cities = []; foreach($db->query('SELECT city, nation FROM city WHERE nation != 0') as $city){ - $cities[$city['city']] = [ - 'id'=>$city['city'], - 'nation'=>$city['nation'], - 'supply'=>false - ]; + $newCity = new \stdClass(); + $newCity->id = Util::toInt($city['city']); + $newCity->nation = Util::toInt($city['nation']); + $newCity->supply = false; + + $cities[$newCity->id] = $newCity; } $queue = new \SplQueue(); - foreach($db->query('SELECT capital, nation FROM nation WHERE `level` > 0') as $nation){ - $capitalID = $nation['capital']; - if(!$capitalID){ + foreach($db->queryAllLists('SELECT capital, nation FROM nation WHERE `level` > 0') as list($capitalID, $nationID)){ + if(!key_exists($capitalID, $cities)){ continue; } - $city = &$cities[$capitalID]; - if($nation['nation'] != $city['nation']){ + $city = $cities[$capitalID]; + if($nationID != $city->nation){ continue; } - $city['supply'] = true; - $queue->enqueue($city['id']); + $city->supply = true; + $queue->enqueue($city); } while(!$queue->isEmpty()){ - $cityID = $queue->dequeue(); - $city = &$cities[$cityID]; + $cityLink = $queue->dequeue(); + $city = CityConst::byID($cityLink->id); - foreach(array_keys(CityConst::byID($cityID)->path) as $connCityID){ + foreach(array_keys($city->path) as $connCityID){ if(!key_exists($connCityID, $cities)){ continue; } - $connCity = &$cities[$connCityID]; - if($connCity['nation'] != $city['nation']){ + $connCity = $cities[$connCityID]; + if($connCity->nation != $cityLink->nation){ continue; } - if($connCity['supply']){ + if($connCity->supply){ continue; } - $connCity['supply'] = true; - $queue->enqueue($connCity['id']); + $connCity->supply = true; + $queue->enqueue($connCity); } } @@ -225,15 +224,15 @@ function checkSupply() { 'supply'=>1 ], 'nation=0'); + $db->update('city',[ + 'supply'=>0 + ], 'nation!=0'); + $supply = []; - $unsupply = []; foreach($cities as $city){ - if($city['supply']){ - $supply[] = $city['id']; - } - else{ - $unsupply[] = $city['id']; + if($city->supply){ + $supply[] = $city->id; } } @@ -243,11 +242,6 @@ function checkSupply() { ], 'city IN %li', $supply); } - if($unsupply){ - $db->update('city', [ - 'supply'=>0 - ], 'city IN %li', $unsupply); - } } diff --git a/hwe/sammo/CityConst.php b/hwe/sammo/CityConst.php index d1b9d7ab..de75f8af 100644 --- a/hwe/sammo/CityConst.php +++ b/hwe/sammo/CityConst.php @@ -239,7 +239,7 @@ class CityConst{ static::$constID = $constID; static::$constName = $constName; static::$constRegion = $constRegion; - + } private static $buildInitCommon = [ @@ -317,8 +317,22 @@ class CityConst{ ] ]; + private static function test(){ + static::_generate(); + + foreach(static::all() as $id=>$city){ + foreach($city->path as $connId=>$connCityText){ + $connCity = static::byID($connId); + if(!key_exists($id, $connCity->path)){ + throw new \RuntimeException(sprintf('도시 연결이 올바르지 않음! %s <=> %s', $city->name, $connCity->name)); + } + } + } + } + public static function build(){ static::_generate(); + static::test(); $queries = array_map(function(CityInitialDetail $city){ $initValue = static::$buildInit[$city->level];