checkSupply를 검출하기 쉬도록 변경

This commit is contained in:
2018-06-11 03:20:18 +09:00
parent a2d40ecf4a
commit c65d6565df
2 changed files with 41 additions and 33 deletions
+26 -32
View File
@@ -176,48 +176,47 @@ function SetNationFront($nationNo) {
function checkSupply() { function checkSupply() {
$db = DB::db(); $db = DB::db();
$connect=$db->get();
$cities = []; $cities = [];
foreach($db->query('SELECT city, nation FROM city WHERE nation != 0') as $city){ foreach($db->query('SELECT city, nation FROM city WHERE nation != 0') as $city){
$cities[$city['city']] = [ $newCity = new \stdClass();
'id'=>$city['city'], $newCity->id = Util::toInt($city['city']);
'nation'=>$city['nation'], $newCity->nation = Util::toInt($city['nation']);
'supply'=>false $newCity->supply = false;
];
$cities[$newCity->id] = $newCity;
} }
$queue = new \SplQueue(); $queue = new \SplQueue();
foreach($db->query('SELECT capital, nation FROM nation WHERE `level` > 0') as $nation){ foreach($db->queryAllLists('SELECT capital, nation FROM nation WHERE `level` > 0') as list($capitalID, $nationID)){
$capitalID = $nation['capital']; if(!key_exists($capitalID, $cities)){
if(!$capitalID){
continue; continue;
} }
$city = &$cities[$capitalID]; $city = $cities[$capitalID];
if($nation['nation'] != $city['nation']){ if($nationID != $city->nation){
continue; continue;
} }
$city['supply'] = true; $city->supply = true;
$queue->enqueue($city['id']); $queue->enqueue($city);
} }
while(!$queue->isEmpty()){ while(!$queue->isEmpty()){
$cityID = $queue->dequeue(); $cityLink = $queue->dequeue();
$city = &$cities[$cityID]; $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)){ if(!key_exists($connCityID, $cities)){
continue; continue;
} }
$connCity = &$cities[$connCityID]; $connCity = $cities[$connCityID];
if($connCity['nation'] != $city['nation']){ if($connCity->nation != $cityLink->nation){
continue; continue;
} }
if($connCity['supply']){ if($connCity->supply){
continue; continue;
} }
$connCity['supply'] = true; $connCity->supply = true;
$queue->enqueue($connCity['id']); $queue->enqueue($connCity);
} }
} }
@@ -225,15 +224,15 @@ function checkSupply() {
'supply'=>1 'supply'=>1
], 'nation=0'); ], 'nation=0');
$db->update('city',[
'supply'=>0
], 'nation!=0');
$supply = []; $supply = [];
$unsupply = [];
foreach($cities as $city){ foreach($cities as $city){
if($city['supply']){ if($city->supply){
$supply[] = $city['id']; $supply[] = $city->id;
}
else{
$unsupply[] = $city['id'];
} }
} }
@@ -243,11 +242,6 @@ function checkSupply() {
], 'city IN %li', $supply); ], 'city IN %li', $supply);
} }
if($unsupply){
$db->update('city', [
'supply'=>0
], 'city IN %li', $unsupply);
}
} }
+15 -1
View File
@@ -239,7 +239,7 @@ class CityConst{
static::$constID = $constID; static::$constID = $constID;
static::$constName = $constName; static::$constName = $constName;
static::$constRegion = $constRegion; static::$constRegion = $constRegion;
} }
private static $buildInitCommon = [ 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(){ public static function build(){
static::_generate(); static::_generate();
static::test();
$queries = array_map(function(CityInitialDetail $city){ $queries = array_map(function(CityInitialDetail $city){
$initValue = static::$buildInit[$city->level]; $initValue = static::$buildInit[$city->level];