arg)){ return false; } $destNationID = $this->arg['destNationID']; 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; $relYear = $env['year'] - $env['startyear']; $this->setCity(); $this->setNation(); $this->setDestNation($this->arg['destNationID'], null); if($relYear < 3 - 2){ $this->runnableConstraints = [ ConstraintHelper::AlwaysFail('초반제한 해제 2년전부터 가능합니다.') ]; return; } $this->runnableConstraints=[ ConstraintHelper::BeChief(), ConstraintHelper::NotBeNeutral(), ConstraintHelper::OccupiedCity(), ConstraintHelper::SuppliedCity(), ConstraintHelper::ExistsDestNation(), ConstraintHelper::DisallowDiplomacyBetweenStatus([ 0 => '아국과 이미 교전중입니다.', 1 => '아국과 이미 선포중입니다.', 7 => '아국과 불가침중입니다.', ]), ConstraintHelper::DisallowDiplomacyStatus($this->destNation['nation'], [ 3 => '상대국이 외교 진행중입니다.', 5 => '상대국이 외교 진행중입니다.' ]), ]; } public function getCost():array{ return [0, 0]; } public function getPreReqTurn():int{ return 0; } public function getPostReqTurn():int{ return 0; } public function run():bool{ if(!$this->isRunnable()){ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도'); } $db = DB::db(); $env = $this->env; $general = $this->generalObj; $generalName = $general->getName(); $date = substr($general->getVar('turntime'),11,5); $nation = $this->nation; $nationID = $nation['nation']; $nationName = $nation['name']; $destNation = $this->destNation; $destNationID = $destNation['nation']; $destNationName = $destNation['name']; $josaYi = JosaUtil::pick($generalName, '이'); $josaYiNation = JosaUtil::pick($nationName, '이'); $logger = $general->getLogger(); $destLogger = new ActionLogger(0, $destNationID, $env['year'], $env['month']); $logger->pushGeneralActionLog("{$destNationName}으로 선전 포고 했습니다.<1>$date"); $logger->pushNationalHistoryLog("{$generalName}{$josaYi} {$destNationName}에 선전 포고"); $destLogger->pushNationalHistoryLog("{$nationName}{$generalName}{$josaYi} 아국에 선전 포고"); $logger->pushGlobalActionLog("{$generalName}{$josaYi} {$destNationName}선전 포고 하였습니다."); $logger->pushGlobalHistoryLog("【선포】{$nationName}{$josaYiNation} {$destNationName}에 선전 포고 하였습니다."); $db->update('diplomacy', [ 'state'=>1, 'term'=>24 ], '(me=%i AND you=%i) OR (me=%i AND you=%i)', $nationID, $destNationID, $destNationID, $nationID); //국메로 저장 $text = "【외교】{$env['year']}년 {$env['month']}월:{$nationName}에서 {$destNationName}에 선전포고"; $src = new MessageTarget( $general->getID(), $general->getName(), $nationID, $nationName, $nation['color'], GetImageURL($general->getVar('imgsvr'), $general->getVar('picture')) ); $dest = new MessageTarget( 0, '', $destNationID, $destNationName, $destNation['color'] ); $msg = new Message( Message::MSGTYPE_NATIONAL, $src, $dest, $text, new \DateTime($general->getVar('turntime')), new \DateTime('9999-12-31'), [] ); $msg->send(); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->applyDB($db); $destLogger->flush(); return true; } public function getJSFiles(): array { return [ 'js/defaultSelectNationByMap.js' ]; } public function getForm(): string { $form = []; $form[] = \sammo\getMapHtml(); return join("\n",$form); } }