arg === null){ return false; } //NOTE: 사망 직전에 '선양' 턴을 넣을 수 있으므로, 존재하지 않는 장수여도 argTest에서 바로 탈락시키지 않음 if(!key_exists('destGeneralID', $this->arg)){ return false; } $destGeneralID = $this->arg['destGeneralID']; if(!is_int($destGeneralID)){ return false; } if($destGeneralID <= 0){ return false; } if($destGeneralID == $this->generalObj->getID()){ return false; } $this->arg = [ 'destGeneralID'=>$destGeneralID ]; return true; } protected function init(){ $general = $this->generalObj; $this->setNation(); $destGeneral = General::createGeneralObjFromDB($this->arg['destGeneralID'], ['gold', 'nation'], 1); $this->setDestGeneral($destGeneral); $this->runnableConstraints=[ ConstraintHelper::BeLord(), ConstraintHelper::ExistsDestGeneral(), ConstraintHelper::FriendlyDestGeneral(), ConstraintHelper::DisallowDiplomacyStatus( $this->generalObj->getNationID(), [4 => '현재 통합 진행중입니다.'] ) ]; } public function getCost():array{ return [0, 0]; } public function getPreReqTurn():int{ return 0; } public function getPostReqTurn():int{ return 0; } public function getBrief(): string { $destGeneralName = $this->destGeneralObj->getName(); $name = $this->getName(); return "【{$destGeneralName}】에게 {$name}"; } public function run():bool{ if(!$this->isRunnable()){ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도'); } $db = DB::db(); $general = $this->generalObj; $date = $general->getTurnTime($general::TURNTIME_HM); $destGeneral = $this->destGeneralObj; $generalName = $general->getName(); $destGeneralName = $destGeneral->getName(); $nationName = $this->nation['name']; $logger = $general->getLogger(); $destLogger = $destGeneral->getLogger(); $destGeneralLevel = $destGeneral->getVar('level'); $destGeneral->setVar('level', 12); $general->setVar('level', 1); $general->multiplyVar('experience', 0.7); if(2 <= $destGeneralLevel && $destGeneralLevel <= 4){ $db->update('city', [ 'officer'.$destGeneralLevel=>0 ], "officer{$destGeneralLevel}=%i", $destGeneral->getID()); } $josaYi = JosaUtil::pick($generalName, '이'); $logger->pushGlobalHistoryLog("【선양】{$generalName}{$josaYi} {$nationName}의 군주 자리를 {$destGeneralName}에게 선양했습니다."); $logger->pushNationalHistoryLog("{$generalName}{$josaYi} {$destGeneralName}에게 선양"); $logger->pushGeneralActionLog("{$destGeneralName}에게 군주의 자리를 물려줍니다. <1>$date"); $destLogger->pushGeneralActionLog("{$generalName}에게서 군주의 자리를 물려받습니다."); $logger->pushGeneralHistoryLog("{$nationName}의 군주자리를 {$destGeneralName}에게 선양"); $destLogger->pushGeneralHistoryLog("{$nationName}의 군주자리를 물려 받음"); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); $general->applyDB($db); $destGeneral->applyDB($db); return true; } public function getForm(): string { //TODO: 암행부처럼 보여야... $db = DB::db(); $destRawGenerals = $db->query('SELECT no,name,level,npc FROM general WHERE nation != 0 AND nation = %i AND no != %i ORDER BY npc,binary(name)',$this->generalObj->getNationID(), $this->generalObj->getID()); ob_start(); ?> 군주의 자리를 다른 장수에게 물려줍니다.
장수를 선택하세요.