arg = []; return true; } protected function init() { $general = $this->generalObj; $env = $this->env; $this->setCity(); $this->setNation(); $relYear = $env['year'] - $env['startyear']; $this->fullConditionConstraints=[ ConstraintHelper::BeNeutral(), ConstraintHelper::BeOpeningPart($relYear+1), ConstraintHelper::AllowJoinAction(), ConstraintHelper::NoPenalty(PenaltyKey::NoFoundNation), ]; } 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(); $env = $this->env; $general = $this->generalObj; $date = $general->getTurnTime($general::TURNTIME_HM); $generalName = $general->getName(); $josaYi = JosaUtil::pick($generalName, '이'); $nationName = $generalName; $cityName = $this->city['name']; $logger = $general->getLogger(); $nationNameExistsCnt = $db->queryFirstField('SELECT count(*) FROM nation WHERE name = %s', $nationName); if($nationNameExistsCnt){ $nationName = mb_strimwidth('㉥'.$nationName, 0, 18); } $nationNameExistsCnt = $db->queryFirstField('SELECT count(*) FROM nation WHERE name = %s', $nationName); if($nationNameExistsCnt){ //여전히 중복된다면, 그냥 글자 길이 넘어가든 말든 신경쓰지 말고 넘기기. $nationName = '㉥'.$nationName; } $secretlimit = 3; if($env['scenario']>=1000){ $secretlimit = 1; } DB::db()->insert('nation', [ 'name'=>$nationName, 'color'=>'#330000', 'gold'=>0, 'rice'=>GameConst::$baserice, 'rate'=>20, 'bill'=>100, 'strategic_cmd_limit'=>12, 'surlimit'=>72, 'secretlimit'=>$secretlimit, 'type'=>GameConst::$neutralNationType, 'gennum'=>1 ]); $nationID = DB::db()->insertId(); $diplomacyInit = []; foreach(getAllNationStaticInfo() as $destNation){ $destNationID = $destNation['nation']; if($nationID == $destNationID){ continue; } $diplomacyInit[] = [ 'me'=>$destNationID, 'you'=>$nationID, 'state'=>2, 'term'=>0, ]; $diplomacyInit[] = [ 'me'=>$nationID, 'you'=>$destNationID, 'state'=>2, 'term'=>0, ]; } if($diplomacyInit){ $db->insert('diplomacy', $diplomacyInit); } $turnRows = []; foreach([12, 11] as $chiefLevel){ foreach(Util::range(GameConst::$maxChiefTurn) as $turnIdx){ $turnRows[] = [ 'nation_id'=>$nationID, 'officer_level'=>$chiefLevel, 'turn_idx'=>$turnIdx, 'action'=>'휴식', 'arg'=>null, 'brief'=>'휴식', ]; } } $db->insert('nation_turn', $turnRows); refreshNationStaticInfo(); $logger->pushGeneralActionLog("거병에 성공하였습니다. <1>$date"); $logger->pushGlobalActionLog("{$generalName}{$josaYi} {$cityName}에 거병하였습니다."); $logger->pushGlobalHistoryLog("【거병】{$generalName}{$josaYi} 세력을 결성하였습니다."); $logger->pushGeneralHistoryLog("{$cityName}에서 거병"); $logger->pushNationalHistoryLog("{$generalName}{$josaYi} {$cityName}에서 거병"); $exp = 100; $ded = 100; $general->increaseInheritancePoint(InheritanceKey::active_action, 1); $general->addExperience($exp); $general->addDedication($ded); $general->setVar('belong', 1); $general->setVar('officer_level', 12); $general->setVar('officer_city', 0); $general->setVar('nation', $nationID); $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; } }