getPostReqTurn(); return "적군 도시 소재 시 접경으로 귀환(재사용 대기 {$postReqTurn})"; } protected function init() { $this->setCity(); $this->setNation(); $this->fullConditionConstraints = [ ConstraintHelper::NotBeNeutral(), ConstraintHelper::NotWanderingNation(), ConstraintHelper::NotOccupiedCity() ]; } public function getPreReqTurn(): int { return 0; } public function getPostReqTurn(): int { return 60; } public function getCost(): array { return [0, 0]; } public function run(\Sammo\RandUtil $rng): bool { if (!$this->hasFullConditionMet()) { throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도'); } $db = DB::db(); $general = $this->generalObj; $cityID = $general->getCityID(); $logger = $general->getLogger(); $distanceList = searchDistance($cityID, 3, true); $occupiedCityList = new \Ds\Set($db->queryFirstColumn( 'SELECT city FROM city WHERE nation = %i AND city IN %li AND supply = 1', $general->getNationID(), array_merge(...$distanceList) )); $nearestCityList = []; foreach ($distanceList as $cityList) { foreach ($cityList as $cityID) { if ($occupiedCityList->contains($cityID)) { $nearestCityList[] = $cityID; } } if ($nearestCityList) { break; } } if (!$nearestCityList) { $logger->pushGeneralActionLog("3칸 이내에 아국 도시가 없습니다."); return false; } $destCityID = $rng->choice($nearestCityList); $destCityName = CityConst::byID($destCityID)->name; $date = $general->getTurnTime($general::TURNTIME_HM); $josaRo = JosaUtil::pick($destCityName, '로'); $logger->pushGeneralActionLog("{$destCityName}{$josaRo} 접경귀환했습니다. <1>$date"); $general->setVar('city', $destCityID); $general->applyDB($db); return true; } }