arg === null){ return false; } $destNationID = $this->arg['destNationID']??null; if($destNationID === null){ return false; } if(!is_int($destNationID)){ return false; } if($destNationID < 1){ return false; } $this->arg = [ 'destNationID' => $destNationID ]; return true; } protected function init(){ $general = $this->generalObj; $env = $this->env; $this->setCity(); $this->setNation(); $relYear = $env['year'] - $env['startyear']; $this->permissionConstraints=[ ConstraintHelper::ReqEnvValue('join_mode', '!=', 'onlyRandom', '랜덤 임관만 가능합니다') ]; $this->minConditionConstraints=[ ConstraintHelper::ReqEnvValue('join_mode', '!=', 'onlyRandom', '랜덤 임관만 가능합니다'), ConstraintHelper::BeNeutral(), ConstraintHelper::AllowJoinAction() ]; } public function getCommandDetailTitle():string{ return '지정한 국가로 임관'; } public function canDisplay():bool{ return $this->env['join_mode'] !== 'onlyRandom'; } protected function initWithArg() { $destNationID = $this->arg['destNationID']; $this->setDestNation($destNationID, ['gennum', 'scout']); $env = $this->env; $relYear = $env['year'] - $env['startyear']; $this->fullConditionConstraints=[ ConstraintHelper::ReqEnvValue('join_mode', '!=', 'onlyRandom', '랜덤 임관만 가능합니다'), ConstraintHelper::BeNeutral(), ConstraintHelper::ExistsDestNation(), ConstraintHelper::AllowJoinDestNation($relYear), ConstraintHelper::AllowJoinAction() ]; } public function getCost():array{ return [0, 0]; } public function getPreReqTurn():int{ return 0; } public function getPostReqTurn():int{ return 0; } public function getBrief():string{ $commandName = $this->getName(); $destNationName = getNationStaticInfo($this->arg['destNationID'])['name']; $josaRo = JosaUtil::pick($destNationName, '로'); return "【{$destNationName}】{$josaRo} {$commandName}"; } public function run():bool{ if(!$this->hasFullConditionMet()){ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도'); } $db = DB::db(); $env = $this->env; $general = $this->generalObj; $date = $general->getTurnTime($general::TURNTIME_HM); $generalName = $general->getName(); $josaYi = JosaUtil::pick($generalName, '이'); $destNation = $this->destNation; $gennum = $destNation['gennum']; $destNationID = $destNation['nation']; $destNationName = $destNation['name']; $logger = $general->getLogger(); $logger->pushGeneralActionLog("{$destNationName}에 임관했습니다. <1>$date"); $logger->pushGeneralHistoryLog("{$destNationName}에 임관"); $logger->pushGlobalActionLog("{$generalName}{$josaYi} {$destNationName}임관했습니다."); if($gennum < GameConst::$initialNationGenLimit) { $exp = 700; } else { $exp = 100; } $general->setVar('nation', $destNationID); $general->setVar('officer_level', 1); $general->setVar('officer_city', 0); $general->setVar('belong', 1); if($this->destGeneralObj !== null){ $general->setVar('city', $this->destGeneralObj->getCityID()); } else{ $targetCityID = $db->queryFirstField('SELECT city FROM general WHERE nation = %i AND officer_level=12', $destNationID); $general->setVar('city', $targetCityID); } $db->update('nation', [ 'gennum'=>$db->sqleval('gennum + 1') ], 'nation=%i', $destNationID); \sammo\refreshNationStaticInfo(); $relYear = $env['year'] - $env['startyear']; if($general->getNPCType() == 1 || $relYear >= 3){ $joinedNations = $general->getAuxVar('joinedNations')??[]; $joinedNations[] = $destNationID; $general->setAuxVar('joinedNations', $joinedNations); } $general->increaseInheritancePoint('active_action', 1); $general->addExperience($exp); $this->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); tryUniqueItemLottery($general); $general->applyDB($db); return true; } public function getForm(): string { $db = DB::db(); $generalObj = $this->generalObj; $env = $this->env; $joinedNations = $generalObj->getAuxVar('joinedNations')??[]; $nationList = $db->query('SELECT nation,`name`,color,scout,gennum FROM nation'); shuffle($nationList); $nationList = Util::convertArrayToDict($nationList, 'nation'); //NOTE: join 안할것임 $scoutMsgs = KVStorage::getValuesFromInterNamespace($db, 'nation_env', 'scout_msg'); foreach($scoutMsgs as $nationID=>$scoutMsg){ $nationList[$nationID]['scoutmsg'] = $scoutMsg; } $hiddenItems = []; foreach($nationList as &$nation){ if($env['year'] < $env['startyear']+3 && $nation['gennum'] >= GameConst::$initialNationGenLimit){ $nation['availableJoin'] = false; } else if($nation['scout'] == 1) { $nation['availableJoin'] = false; } else{ $nation['availableJoin'] = true; } if(in_array($nation['nation'], $joinedNations)){ $nation['availableJoin'] = false; } if(Util::starts_with($nation['name'], 'ⓤ')){ $hiddenItems[$nation['nation']] = $nation['nation']; } } unset($nation); ob_start(); ?> 국가에 임관합니다.
이미 임관/등용되었던 국가는 다시 임관할 수 없습니다.
바로 군주의 위치로 이동합니다.
임관할 국가를 목록에서 선택하세요.