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() {
$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);
}
}
+15 -1
View File
@@ -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];