arg = null; return true; } protected function init(){ $general = $this->generalObj; $this->setCity(); $this->setNation(); [$reqGold, $reqRice] = $this->getCost(); $this->fullConditionConstraints=[ ConstraintHelper::NotBeNeutral(), ConstraintHelper::NotWanderingNation(), ConstraintHelper::OccupiedCity(), ConstraintHelper::ReqGeneralCrew(), ConstraintHelper::ReqGeneralGold($reqGold), ConstraintHelper::ReqGeneralRice($reqRice), ConstraintHelper::ReqGeneralTrainMargin(GameConst::$maxTrainByCommand - 10), ConstraintHelper::ReqGeneralAtmosMargin(GameConst::$maxAtmosByCommand - 10), ]; } public function getCost():array{ $crew = $this->generalObj->getVar('crew'); $techCost = getTechCost($this->nation['tech']); return [Util::round($crew / 100 * 3 * $techCost), 0]; } public function getPreReqTurn():int{ return 3; } public function getPostReqTurn():int{ return 0; } public function run(\Sammo\RandUtil $rng):bool{ if(!$this->hasFullConditionMet()){ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도'); } $db = DB::db(); $general = $this->generalObj; $date = $general->getTurnTime($general::TURNTIME_HM); $lastTurn = $general->getLastTurn(); $turnResult = new LastTurn(static::getName(), $this->arg); $reqTurn = $this->getPreReqTurn(); if($lastTurn->getCommand() != static::getName()){ $turnResult->setTerm(1); } else if($lastTurn->getTerm() == $reqTurn){ $turnResult->setTerm(1); } else if($lastTurn->getTerm() < $reqTurn){ $turnResult->setTerm($lastTurn->getTerm()+1); } else{ throw new MustNotBeReachedException('전투 태세에 올바른 턴이 아님'); } $term = $turnResult->getTerm(); $logger = $general->getLogger(); if($term < 3){ $logger->pushGeneralActionLog("병사들을 열심히 훈련중... ({$term}/3) <1>$date"); $this->setResultTurn($turnResult); $general->applyDB($db); return true; } $logger->pushGeneralActionLog("전투태세 완료! ({$term}/3) <1>$date"); $general->increaseVarWithLimit('train', 0, GameConst::$maxTrainByCommand - 5); //95보다 높으면 '깎이지는 않음' $general->increaseVarWithLimit('atmos', 0, GameConst::$maxAtmosByCommand - 5); $exp = 100 * 3; $ded = 70 * 3; $general->addExperience($exp); $general->addDedication($ded); $crew = $general->getVar('crew'); $general->addDex($general->getCrewTypeObj(), $crew / 100 * 3, false); $general->increaseVar('leadership_exp', 3); $this->setResultTurn($turnResult); $general->checkStatChange(); StaticEventHandler::handleEvent($this->generalObj, $this->destGeneralObj, $this::class, $this->env, $this->arg ?? []); tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general, static::$actionName), $general); $general->applyDB($db); return true; } }