arg = null; return true; } protected function init(){ $general = $this->generalObj; $this->setCity(); $this->setNation(); [$reqGold, $reqRice] = $this->getCost(); $this->runnableConstraints=[ ConstraintHelper::NotBeNeutral(), ConstraintHelper::ReqGeneralCrew(), ConstraintHelper::ReqGeneralValue('train', '훈련', '<', GameConst::$defaultTrainHigh), ConstraintHelper::ReqGeneralValue('atmos', '사기', '<', GameConst::$defaultAtmosHigh), ConstraintHelper::ReqGeneralGold($reqGold), ConstraintHelper::ReqGeneralRice($reqRice), ]; } public function getCost():array{ $env = $this->env; return [$env['develcost'], $env['develcost']]; } 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(); $general = $this->generalObj; $date = substr($general->getVar('turntime'),11,5); [$pick, $multiplier] = Util::choiceRandomUsingWeightPair([ [['success', 3], 0.34], [['normal', 2], 0.33], [['fail', 1], 0.33] ]); $score = Util::round($general->getVar('crew') * $general->getVar('train') * $general->getVar('atmos') / 20 / 10000); $score *= $multiplier; $scoreText = number_format($score, 0); $armTypeText = GameUnitConst::allType()[$general->getCrewTypeObj()->armType]; $logger = $general->getLogger(); if($pick == 'fail'){ $logger->pushGeneralActionLog("단련이 지지부진하여 {$armTypeText} 숙련도가 {$scoreText} 향상되었습니다. <1>$date"); } else if($pick == 'success'){ $logger->pushGeneralActionLog("단련이 일취월장하여 {$armTypeText} 숙련도가 {$scoreText} 향상되었습니다. <1>$date"); } else{ $logger->pushGeneralActionLog("{$armTypeText} 숙련도가 {$scoreText} 향상되었습니다. <1>$date"); } $exp = $general->getVar('crew') / 400; $exp = $general->onCalcStat($general, 'experience', $exp); $general->addDex($general->getCrewTypeObj(), $score, false); $incStat = Util::choiceRandomUsingWeight([ 'leader2'=>$general->getLeadership(false, false, false, false), 'power2'=>$general->getPower(false, false, false, false), 'intel2'=>$general->getIntel(false, false, false, false) ]); [$reqGold, $reqRice] = $this->getCost(); $general->increaseVarWithLimit('gold', -$reqGold, 0); $general->increaseVarWithLimit('rice', -$reqRice, 0); $general->increaseVar('experience', $exp); $general->increaseVar($incStat, 1); $general->setResultTurn(new LastTurn(static::getName(), $this->arg)); $general->checkStatChange(); tryUniqueItemLottery($general); $general->applyDB($db); return true; } }