setReadOnly(); $userID = Session::getUserID(); $userGrade = Session::getUserGrade(); $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); increaseRefresh("현재도시", 1); $lastExecute = substr($gameStor->turntime, 5, 14); $me = $db->queryFirstRow('SELECT no,nation,officer_level,city from general where owner=%i', $userID); $myNation = $db->queryFirstRow('SELECT nation,level,spy FROM nation WHERE nation=%i', $me['nation']) ?? [ 'nation' => 0, 'level' => 0, 'spy' => '' ]; $templates = new \League\Plates\Engine('templates'); ?> <?= UniqueConst::$serverName ?>: 도시정보
도 시 정 보
도시선택 :

명령 화면에서 도시를 클릭하셔도 됩니다.


"; unset($city); // 첩보된 도시까지만 허용 $showDetailedInfo = false; if ($valid) { $showDetailedInfo = true; } if (!key_exists($citylist, CityConst::all())) { $citylist = $me['city']; $showDetailedInfo = true; $valid = 1; } if ($userGrade >= 6) { $valid = true; $showDetailedInfo = true; } if (!$valid) { $ownCities = Util::convertArrayToSetLike($db->queryFirstColumn('SELECT city FROM city WHERE nation = %i AND nation != 0', $me['nation'])); foreach (array_keys(CityConst::byID($citylist)->path) as $pathID) { if (key_exists($pathID, $ownCities)) { $showDetailedInfo = true; break; } } } $city = $db->queryFirstRow('SELECT * FROM city WHERE city=%i', $citylist); $cityNation = getNationStaticInfo($city['nation']); //태수, 군사, 종사 $officer = [ 4 => ['name' => '-', 'npc' => 0], 3 => ['name' => '-', 'npc' => 0], 2 => ['name' => '-', 'npc' => 0] ]; foreach ($db->query('SELECT `name`, npc, `officer_level` FROM general WHERE `officer_city` = %i', $city['city']) as $officerInfo) { $officer[$officerInfo['officer_level']] = $officerInfo; } if ($city['trade'] === null) { $city['trade'] = "- "; } $dbColumns = General::mergeQueryColumn(['npc', 'defence_train', 'no', 'picture', 'imgsvr', 'name', 'injury', 'leadership', 'strength', 'intel', 'officer_level', 'nation', 'crewtype', 'crew', 'train', 'atmos'])[0]; if ($showDetailedInfo) { $generals = $db->query( 'SELECT %l from general where city=%i order by turntime', Util::formatListOfBackticks($dbColumns), $city['city'] ); } else { $generals = []; } if ($valid) { $city['trustText'] = round($city['trust'], 1); $city['popRateText'] = round($city['pop'] / $city['pop_max'] * 100, 2); } else { $city['agri'] = '?'; $city['comm'] = '?'; $city['pop'] = '?'; $city['secu'] = '?'; $city['trustText'] = '?'; $city['popRateText'] = '?'; if ($city['nation'] != 0) { $city['def'] = '?'; $city['wall'] = '?'; } } $generalTurnList = []; if ($generals) { foreach ($db->queryAllLists( 'SELECT general_id, turn_idx, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC', array_column($generals, 'no') ) as [$generalID, $turnIdx, $brief]) { if (!key_exists($generalID, $generalTurnList)) { $generalTurnList[$generalID] = []; } $generalTurnList[$generalID][$turnIdx] = $brief; } } $nationname = []; $nationlevel = []; foreach (getAllNationStaticInfo() as $nation) { $nationname[$nation['nation']] = $nation['name']; $nationlevel[$nation['nation']] = $nation['level']; } //도시명 오 적군 0/0(0) 병장(총) 0/0(4) 90병장 0/0 60병장 0/0 수비○ 0/0 $generalsFormat = []; foreach ($generals as $general) { $nationInfo = getNationStaticInfo($general['nation']); if ($general['nation'] != 0 && $general['nation'] == $myNation['nation']) { $ourGeneral = true; } else { $ourGeneral = false; } if ($userGrade == 7) { $ourGeneral = true; } $isNPC = $general['npc'] > 1; $wounded = $general['injury']; $name = $general['name']; $nameText = formatName($name, $general['npc']); $leadership = $general['leadership']; $strength = $general['strength']; $intel = $general['intel']; $leadershipText = formatWounded($leadership, $general['injury']); $strengthText = formatWounded($strength, $general['injury']); $intelText = formatWounded($intel, $general['injury']); $officerLevel = $general['officer_level']; $officerLevelText = getOfficerLevelText($officerLevel); $leadershipBonus = calcLeadershipBonus($officerLevel, $nationInfo['level']); $leadershipBonusText = formatLeadershipBonus($leadershipBonus); if ($ourGeneral) { $defenceTrain = $general['defence_train']; $defenceTrainText = formatDefenceTrain($defenceTrain); $crewType = $general['crewtype']; $crewTypeText = GameUnitConst::byId($crewType)->name; $crew = $general['crew']; $train = $general['train']; $atmos = $general['atmos']; } else { $defenceTrain = 0; $defenceTrainText = ''; $crewType = 0; $crewTypeText = ''; $crew = $general['crew']; $train = -1; $atmos = -1; if (!$valid) { $crew = -1; } } $nation = $general['nation']; $nationName = $nationInfo['name']; if ($ourGeneral && !$isNPC) { $turnText = []; foreach ($generalTurnList[$general['no']] as $turnRawIdx => $turn) { $turnIdx = $turnRawIdx + 1; $turnText[] = "{$turnIdx} : $turn"; } $turnText = join('
', $turnText); } else { $turnText = ''; } $generalsFormat[] = [ 'ourGeneral' => $ourGeneral, 'iconPath' => GetImageURL($general['imgsvr']) . '/' . $general['picture'], 'isNPC' => $isNPC, 'npc' => $general['npc'], 'wounded' => $wounded, 'name' => $name, 'nameText' => $nameText, 'leadership' => $leadership, 'leadershipText' => $leadershipText, 'leadershipBonus' => $leadershipBonus, 'leadershipBonusText' => $leadershipBonusText, 'officerLevel' => $officerLevel, 'officerLevelText' => $officerLevelText, 'strength' => $strength, 'strengthText' => $strengthText, 'intel' => $intel, 'intelText' => $intelText, 'defenceTrain' => $defenceTrain, 'defenceTrainText' => $defenceTrainText, 'crewType' => $crewType, 'crewTypeText' => $crewTypeText, 'crew' => $crew, 'train' => $train, 'atmos' => $atmos, 'nation' => $nation, 'nationName' => $nationName, 'turnText' => $turnText ]; } $generalsName = array_map(function ($gen) { return formatName($gen['name'], $gen['npc']); }, $generals); $enemyCrew = 0; $enemyCnt = 0; $enemyArmedCnt = 0; $crew90 = 0; $gen90 = 0; $crew80 = 0; $gen80 = 0; $crew60 = 0; $gen60 = 0; $crewDef = 0; $genDef = 0; $crewTotal = 0; $armedGenTotal = 0; $genTotal = 0; foreach ($generalsFormat as $general) { if (!$general['nation'] || !$myNation['nation']) { continue; } if ($general['nation'] != $myNation['nation']) { $enemyCnt += 1; if ($general['crew'] >= 0) { $enemyCrew += $general['crew']; } if ($general['crew'] > 0) { $enemyArmedCnt += 1; } continue; } $crewTotal += $general['crew']; $genTotal += 1; if ($general['crew'] == 0) { continue; } $armedGenTotal += 1; $minTrain = min($general['train'], $general['atmos']); if ($minTrain >= 90) { $crew90 += $general['crew']; $gen90 += 1; } $chkDef = false; if ($minTrain >= 80) { $crew80 += $general['crew']; $gen80 += 1; } if ($minTrain >= 60) { $crew60 += $general['crew']; $gen60 += 1; } if ($minTrain >= $general['defenceTrain']) { $crewDef += $general['crew']; $genDef += 1; $chkDef = true; } } ?>
; background:'>【 | ; background:' class='center'>
주민 / 농업 / 상업 / 치안 / 수비 / 성벽 /
민심 시세 % 인구 % 태수 군사 종사
도시명 적군 /() 병장(총) /() 90병장 / 60병장 / 수비○ /
장수 알 수 없음' ?>

render('cityGeneral', $general); } ?>
얼 굴 이 름 통솔 무력 지력 관 직 병 종 병 사 훈련 사기 명 령