setReadOnly();
$userID = Session::getUserID();
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
increaseRefresh("토너먼트", 1);
TurnExecutionHelper::executeAllCommand();
$me = $db->queryFirstRow(
'SELECT no,tournament,refresh_score,turntime from `general`
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id where owner=%i', $userID
);
$generalID = $me['no'];
$admin = $gameStor->getValues(['tournament', 'phase', 'turnterm', 'tnmt_msg', 'tnmt_type', 'develcost', 'tnmt_trig']);
$turnTerm = $admin['turnterm'];
$limitState = checkLimit($me['refresh_score']);
if ($limitState >= 2) {
printLimitMsg($me['turntime']);
exit();
}
switch ($admin['tnmt_type']) {
case convertTournamentType('전력전'):
$tnmt_type = "전력전";
$color = 'cyan';
$tp = "total";
$tp2 = "종합";
$tp3 = "total";
break;
case convertTournamentType('통솔전'):
$tnmt_type = "통솔전";
$color = 'cyan';
$tp = "leadership";
$tp2 = "통솔";
$tp3 = "leadership";
break;
case convertTournamentType('일기토'):
$tnmt_type = "일기토";
$color = 'cyan';
$tp = "strength";
$tp2 = "무력";
$tp3 = "strength";
break;
case convertTournamentType('설전'):
$tnmt_type = "설전";
$color = 'cyan';
$tp = "intel";
$tp2 = "지력";
$tp3 = "intel";
break;
default:
throw new \RuntimeException('invalid tnmt_type');
}
$bettingID = $gameStor->last_tournament_betting_id ?? 0;
if ($bettingID != 0) {
$betting = $bettingID != 0 ? new Betting($bettingID) : null;
$info = $betting->getInfo();
} else {
$info = getDummyBettingInfo($tnmt_type);
}
$myBet = [];
$globalBet = [];
if ($bettingID != 0) {
$betting = $bettingID != 0 ? new Betting($bettingID) : null;
$info = $betting->getInfo();
foreach ($db->queryAllLists(
'SELECT general_id, user_id, amount, betting_type FROM ng_betting WHERE betting_id = %i',
$bettingID
) as [$betGeneralID, $userID, $amount, $bettingTypeKey]) {
$bettingKey = Json::decode($bettingTypeKey)[0];
if ($betGeneralID == $generalID) {
$myBet[$bettingKey] = $amount;
}
if (key_exists($bettingKey, $globalBet)) {
$globalBet[$bettingKey] += $amount;
} else {
$globalBet[$bettingKey] = $amount;
}
}
} else {
$info = getDummyBettingInfo($tnmt_type);
}
$myBetTotal = array_sum($myBet);
$globalBetTotal = array_sum($globalBet);
?>
0 && $me['tournament'] == 0 && $admin['tournament'] == 1) : ?>
갱신
운영자 메세지 : = $admin['tnmt_msg'] ?>
= $tnmt_type ?> (= $str1 . $str2 . $str3 ?>)
16강 승자전
";
$generalList = $db->query('SELECT npc,name,win from tournament where grp>=60 order by grp, grp_no LIMIT 1');
while (count($generalList) < 1) {
$generalList[] = [
'name' => '-',
'npc' => 0,
'win' => 0
];
}
foreach ($generalList as $i => $general) {
if ($general['name'] == "") {
$general['name'] = "-";
}
$general['name'] = formatName($general['name'], $general['npc']);
echo "{$general['name']} ";
}
echo "
";
$cent = [];
for ($i = 0; $i < 1; $i++) {
$cent[$i] = "";
}
$line = [];
$gen = [];
$generalList = $db->query('SELECT npc,name,win from tournament where grp>=50 order by grp, grp_no LIMIT 2');
while (count($generalList) < 2) {
$generalList[] = [
'name' => '-',
'npc' => 0,
'win' => 0
];
}
foreach ($generalList as $i => $general) {
if ($general['name'] == "") {
$general['name'] = "-";
}
$general['name'] = formatName($general['name'], $general['npc']);
if ($general['win'] > 0) {
$line[$i] = "";
$cent[intdiv($i, 2)] = "";
} else {
$line[$i] = "";
}
$gen[$i] = $general['name'];
}
for ($i = 0; $i < 1; $i++) {
$cent[$i] = $cent[$i] . "┻" . " ";
$line[$i * 2] = $line[$i * 2] . "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" . " ";
$line[$i * 2 + 1] = $line[$i * 2 + 1] . "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓" . " ";
echo " {$line[$i * 2]}{$cent[$i]}{$line[$i * 2 + 1]} ";
}
echo "
";
for ($i = 0; $i < 2; $i++) {
echo "{$gen[$i]} ";
}
echo "
";
for ($i = 0; $i < 2; $i++) {
$cent[$i] = "";
}
$generalList = $db->query('SELECT npc,name,win from tournament where grp>=40 order by grp, grp_no LIMIT 4');
while (count($generalList) < 4) {
$generalList[] = [
'name' => '-',
'npc' => 0,
'win' => 0
];
}
foreach ($generalList as $i => $general) {
if ($general['name'] == "") {
$general['name'] = "-";
}
$general['name'] = formatName($general['name'], $general['npc']);
if ($general['win'] > 0) {
$line[$i] = "";
$cent[intdiv($i, 2)] = "";
} else {
$line[$i] = "";
}
$gen[$i] = $general['name'];
}
for ($i = 0; $i < 2; $i++) {
$cent[$i] = $cent[$i] . "┻" . " ";
$line[$i * 2] = $line[$i * 2] . "┏━━━━━━━━━━━━━━━━━━" . " ";
$line[$i * 2 + 1] = $line[$i * 2 + 1] . "━━━━━━━━━━━━━━━━━━┓" . " ";
echo " {$line[$i * 2]}{$cent[$i]}{$line[$i * 2 + 1]} ";
}
echo "
";
for ($i = 0; $i < 4; $i++) {
echo "{$gen[$i]} ";
}
echo "
";
for ($i = 0; $i < 4; $i++) {
$cent[$i] = "";
}
$generalList = $db->query('SELECT npc,name,win from tournament where grp>=30 order by grp, grp_no LIMIT 8');
while (count($generalList) < 8) {
$generalList[] = [
'name' => '-',
'npc' => 0,
'win' => 0
];
}
foreach ($generalList as $i => $general) {
if ($general['name'] == "") {
$general['name'] = "-";
}
$general['name'] = formatName($general['name'], $general['npc']);
if ($general['win'] > 0) {
$line[$i] = "";
$cent[intdiv($i, 2)] = "";
} else {
$line[$i] = "";
}
$gen[$i] = $general['name'];
}
for ($i = 0; $i < 4; $i++) {
$cent[$i] = $cent[$i] . "┻" . " ";
$line[$i * 2] = $line[$i * 2] . "┏━━━━━━━━━" . " ";
$line[$i * 2 + 1] = $line[$i * 2 + 1] . "━━━━━━━━━┓" . " ";
echo " {$line[$i * 2]}{$cent[$i]}{$line[$i * 2 + 1]} ";
}
echo "
";
for ($i = 0; $i < 8; $i++) {
echo "{$gen[$i]} ";
}
echo "
";
for ($i = 0; $i < 8; $i++) {
$cent[$i] = "";
}
$generalList = $db->query('SELECT npc,name,win from tournament where grp>=20 order by grp, grp_no LIMIT 16');
while (count($generalList) < 16) {
$generalList[] = [
'name' => '-',
'npc' => 0,
'win' => 0
];
}
foreach ($generalList as $i => $general) {
if ($general['name'] == "") {
$general['name'] = "-";
}
$general['name'] = formatName($general['name'], $general['npc']);
if ($general['win'] > 0) {
$line[$i] = "";
$cent[intdiv($i, 2)] = "";
} else {
$line[$i] = "";
}
$gen[$i] = $general['name'];
}
for ($i = 0; $i < 8; $i++) {
$cent[$i] = $cent[$i] . "┻" . " ";
$line[$i * 2] = $line[$i * 2] . "┏━━━━" . " ";
$line[$i * 2 + 1] = $line[$i * 2 + 1] . "━━━━┓" . " ";
echo " {$line[$i * 2]}{$cent[$i]}{$line[$i * 2 + 1]} ";
}
echo "
";
for ($i = 0; $i < 16; $i++) {
echo "{$gen[$i]} ";
}
echo "
";
$admin = $gameStor->getValues(['tournament', 'phase']);
$bet = [];
$gold = [];
$keyMap = [];
foreach ($info->candidates as $key => $candidate) {
$keyMap[$candidate->aux['idx']] = $key;
}
foreach ($globalBet as $key => $amount) {
if ($amount == 0) {
$bet[$key] = "∞";
$gold[$key] = 0;
} else {
$rewardRatio = round($globalBetTotal / $amount, 2);
$bet[$key] = $rewardRatio;
$gold[$key] = $rewardRatio * ($myBet[$key] ?? 0);
}
}
echo "
";
foreach (range(0, 15) as $i) {
$amount = $bet[$keyMap[$i] ?? -1] ?? 0;
echo "{$amount} ";
}
echo "
배당률이 낮을수록 베팅된 금액이 많고 유저들이 우승후보로 많이 선택한 장수입니다.
";
if ($admin['tournament'] >= 7 || $admin['tournament'] == 0) {
printFighting($admin['tournament'], $admin['phase']);
}
echo "
조별 본선 순위
";
$num = array("一", "二", "三", "四", "五", "六", "七", "八");
for ($i = 0; $i < 8; $i++) {
$grp = $i + 10;
echo "
{$num[$i]}조
순 장수 {$tp2} 경 승 무 패 점 득 ";
$generalList = $db->query('SELECT npc,name,leadership,strength,intel,leadership+strength+intel as total,prmt,win+draw+lose as game,win,draw,lose,gl,win*3+draw as gd from tournament where grp=%i order by gd desc, gl desc, seq', $grp);
foreach ($generalList as $k => $general) {
printRow($k, $general['npc'], $general['name'], $general[$tp], $general['game'], $general['win'], $general['draw'], $general['lose'], $general['gd'], $general['gl'], $general['prmt']);
}
foreach (Util::range(count($generalList), 4) as $idx) {
printRow($idx, 0, '', '', '', '', '', '', '', '', '');
}
echo "
";
}
echo " ";
if ($admin['tournament'] == 4 || $admin['tournament'] == 5) {
printFighting($admin['tournament'], $admin['phase']);
}
echo "
조별 예선 순위
";
for ($i = 0; $i < 8; $i++) {
$grp = $i;
echo "
{$num[$i]}조
순 장수 {$tp2} 경 승 무 패 점 득 ";
$generalList = $db->query('SELECT npc,name,leadership,strength,intel,leadership+strength+intel as total,prmt,win+draw+lose as game,win,draw,lose,gl,win*3+draw as gd from tournament where grp=%i order by gd desc, gl desc, seq', $grp);
foreach ($generalList as $k => $general) {
printRow($k, $general['npc'], $general['name'], $general[$tp], $general['game'], $general['win'], $general['draw'], $general['lose'], $general['gd'], $general['gl'], $general['prmt']);
}
foreach (Util::range(count($generalList), 8) as $idx) {
printRow($idx, 0, '', '', '', '', '', '', '', '', '');
}
echo "
";
}
if ($admin['tournament'] == 2 || $admin['tournament'] == 3) {
printFighting($admin['tournament'], $admin['phase']);
}
?>
ㆍ예선은 홈&어웨이 풀리그로 진행됩니다. (총 14경기)
ㆍ상위 4명이 본선에 진출하게 되며 조추첨을 통해 조가 배정됩니다.
ㆍ각 조1위가 시드1로 랜덤하게 조에 배정되며, 역시 각 조2위가 시드2로 랜덤하게 조에 배정됩니다.
ㆍ그후 남은 3, 4위는 완전 랜덤하게 모든 조에 랜덤하게 배정됩니다.
ㆍ본선은 개인당 3경기를 치르게 되며 승점(승3, 무1, 패0), 득실, 참가순서(시드)에 따라 순위를 매깁니다.
ㆍ각 조 1, 2위는 16강에 지정된 위치에 배정됩니다.
ㆍ16강부터는 1경기 토너먼트로 진행됩니다.
ㆍ참가비는 금20~140이며, 성적에 따라 금과 약간의 명성이 포상으로 주어집니다.
ㆍ16강자 100, 8강자 300, 4강자 600, 준우승자 1200, 우승자 2000 (220년 기준)
ㆍ즐거운 삼토!