arg = null; return true; } protected function init() { $general = $this->generalObj; $this->setCity(); $this->setNation(); $this->minConditionConstraints = [ ConstraintHelper::NotBeNeutral(), ConstraintHelper::NotWanderingNation(), ConstraintHelper::OccupiedCity(), ]; $this->fullConditionConstraints = [ ConstraintHelper::NotBeNeutral(), ConstraintHelper::NotWanderingNation(), ConstraintHelper::OccupiedCity(), ConstraintHelper::ReqGeneralCrew(), ConstraintHelper::ReqGeneralTrainMargin(GameConst::$maxTrainByCommand), ]; } public function getCommandDetailTitle(): string { $name = $this->getName(); [$reqGold, $reqRice] = $this->getCost(); $title = "{$name}(통솔경험"; if ($reqGold > 0) { $title .= ", 자금{$reqGold}"; } if ($reqRice > 0) { $title .= ", 군량{$reqRice}"; } $title .= ')'; return $title; } public function getCost(): array { return [0, 0]; } public function getPreReqTurn(): int { return 0; } 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); $score = Util::clamp( Util::round($general->getLeadership() * 100 / $general->getVar('crew') * GameConst::$trainDelta), 0, Util::clamp(GameConst::$maxTrainByCommand - $general->getVar('train'), 0) ); $scoreText = number_format($score, 0); $sideEffect = Util::valueFit(intval($general->getVar('atmos') * GameConst::$atmosSideEffectByTraining), 0); $logger = $general->getLogger(); $logger->pushGeneralActionLog("훈련치가 $scoreText 상승했습니다. <1>$date"); $exp = 100; $ded = 70; $general->increaseVar('train', $score); $general->setVar('atmos', $sideEffect); $general->addDex($general->getCrewTypeObj(), $score, false); $general->addExperience($exp); $general->addDedication($ded); $general->increaseVar('leadership_exp', 1); $this->setResultTurn(new LastTurn(static::getName(), $this->arg)); $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; } }