npcCount = $npcCount; } protected function generateNPC($env){ $pickTypeList = ['무'=>1, '지'=>1]; $pickType = Util::choiceRandomUsingWeight($pickTypeList); $totalStat = GameConst::$defaultStatNPCTotal; $minStat = GameConst::$defaultStatNPCMin; $mainStat = GameConst::$defaultStatNPCMax - Util::randRangeInt(0, GameConst::$defaultStatNPCMin); $otherStat = $minStat + Util::randRangeInt(0, Util::toInt(GameConst::$defaultStatNPCMin/2)); $subStat = $totalStat - $mainStat - $otherStat; if ($subStat < $minStat) { $subStat = $otherStat; $otherStat = $minStat; $mainStat = $totalStat - $subStat - $otherStat; if ($mainStat) { throw new \LogicException('기본 스탯 설정값이 잘못되어 있음'); } } if($pickType == '무'){ $leadership = $subStat; $strength = $mainStat; $intel = $otherStat; } else if($pickType == '지'){ $leadership = $subStat; $strength = $otherStat; $intel = $mainStat; } else{ $leadership = $otherStat; $strength = $subStat; $intel = $mainStat; } $leadership = Util::round($leadership); $strength = Util::round($strength); $intel = Util::round($intel); $age = Util::randRangeInt(20, 25); $birthYear = $env['year'] - $age; $deathYear = $env['year'] + Util::randRangeInt(10, 50); $cityID = Util::choiceRandom(array_keys(\sammo\CityConst::all())); $newNPC = new \sammo\Scenario\NPC( Util::randRangeInt(1, 150), \sammo\getRandGenName(), null, 0, $cityID, $leadership, $strength, $intel, 0, $birthYear, $deathYear, null, null ); $newNPC->npc = 3; $newNPC->setMoney(1000, 1000); $newNPC->setExpDed(0, 0); $newNPC->setSpecYear( Util::round((GameConst::$retirementYear - $age) / 12) + $age, Util::round((GameConst::$retirementYear - $age) / 3) + $age ); $newNPC->build($env); return [$newNPC->realName, $newNPC->generalID]; } public function run($env=null){ if($this->npcCount <= 0){ return [__CLASS__, []]; } $result = []; foreach(Util::range($this->npcCount) as $idx){ $result[] = $this->generateNPC($env); } $logger = new \sammo\ActionLogger(0, 0, $env['year'], $env['month']); $genCnt = count($result); if($genCnt == 1){ $npcName = $result[0][0]; $josaRa = \sammo\JosaUtil::pick($npcName, '라'); $logger->pushGlobalActionLog("$npcName{$josaRa}는 장수가 등장하였습니다."); } else{ $logger->pushGlobalActionLog("장수 {$genCnt}명이 등장하였습니다."); } $logger->pushGlobalHistoryLog("장수 {$genCnt}명이 등장했습니다.", \sammo\ActionLogger::NOTICE_YEAR_MONTH); $logger->flush(); return [__CLASS__, $result]; } }