79 lines
1.9 KiB
PHP
79 lines
1.9 KiB
PHP
<?php
|
|
namespace sammo\Event\Action;
|
|
|
|
use sammo\CityConst;
|
|
use sammo\DB;
|
|
use sammo\Util;
|
|
|
|
class UpdateCitySupply extends \sammo\Event\Action{
|
|
public function run(array $env)
|
|
{
|
|
$db = DB::db();
|
|
|
|
$cities = [];
|
|
foreach ($db->query('SELECT city, nation FROM city WHERE nation != 0') as $city) {
|
|
$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->queryAllLists('SELECT capital, nation FROM nation WHERE `level` > 0') as list($capitalID, $nationID)) {
|
|
if (!key_exists($capitalID, $cities)) {
|
|
continue;
|
|
}
|
|
$city = $cities[$capitalID];
|
|
if ($nationID != $city->nation) {
|
|
continue;
|
|
}
|
|
$city->supply = true;
|
|
$queue->enqueue($city);
|
|
}
|
|
|
|
while (!$queue->isEmpty()) {
|
|
$cityLink = $queue->dequeue();
|
|
$city = CityConst::byID($cityLink->id);
|
|
|
|
foreach (array_keys($city->path) as $connCityID) {
|
|
if (!key_exists($connCityID, $cities)) {
|
|
continue;
|
|
}
|
|
$connCity = $cities[$connCityID];
|
|
if ($connCity->nation != $cityLink->nation) {
|
|
continue;
|
|
}
|
|
if ($connCity->supply) {
|
|
continue;
|
|
}
|
|
$connCity->supply = true;
|
|
$queue->enqueue($connCity);
|
|
}
|
|
}
|
|
|
|
$db->update('city', [
|
|
'supply' => 1
|
|
], 'nation=0');
|
|
|
|
$db->update('city', [
|
|
'supply' => 0
|
|
], 'nation!=0');
|
|
|
|
$supply = [];
|
|
|
|
foreach ($cities as $city) {
|
|
if ($city->supply) {
|
|
$supply[] = $city->id;
|
|
}
|
|
}
|
|
|
|
if ($supply) {
|
|
$db->update('city', [
|
|
'supply' => 1
|
|
], 'city IN %li', $supply);
|
|
}
|
|
}
|
|
|
|
} |