checkSupply를 검출하기 쉬도록 변경
This commit is contained in:
+26
-32
@@ -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
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user