fix: 토너먼트 warning 제거

This commit is contained in:
2021-12-15 22:27:37 +09:00
parent 06797a78a7
commit 4e20bf1d1c
+781 -183
View File
@@ -1,8 +1,10 @@
<?php <?php
namespace sammo; namespace sammo;
function processTournament() { function processTournament()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
@@ -11,7 +13,9 @@ function processTournament() {
$offset = $now->getTimestamp() - (new \DateTime($admin['tnmt_time']))->getTimestamp(); $offset = $now->getTimestamp() - (new \DateTime($admin['tnmt_time']))->getTimestamp();
//수동일땐 무시 //수동일땐 무시
if($admin['tnmt_auto'] == 0) { return; } if ($admin['tnmt_auto'] == 0) {
return;
}
$type = $admin['tnmt_type']; $type = $admin['tnmt_type'];
$tnmt = $admin['tournament']; $tnmt = $admin['tournament'];
@@ -23,14 +27,29 @@ function processTournament() {
//현시간이 스탬프 지나친경우 //현시간이 스탬프 지나친경우
switch ($admin['tnmt_auto']) { switch ($admin['tnmt_auto']) {
case 1: $unit = 720; break; case 1:
case 2: $unit = 420; break; $unit = 720;
case 3: $unit = 180; break; break;
case 4: $unit = 60; break; case 2:
case 5: $unit = 30; break; $unit = 420;
case 6: $unit = 15; break; break;
case 7: $unit = 5; break; case 3:
default: throw new MustNotBeReachedException(); $unit = 180;
break;
case 4:
$unit = 60;
break;
case 5:
$unit = 30;
break;
case 6:
$unit = 15;
break;
case 7:
$unit = 5;
break;
default:
throw new MustNotBeReachedException();
} }
//업데이트 횟수 //업데이트 횟수
@@ -40,43 +59,71 @@ function processTournament() {
switch ($tnmt) { switch ($tnmt) {
case 1: //신청 마감 case 1: //신청 마감
fillLowGenAll(); fillLowGenAll();
$tnmt = 2; $phase = 0; $tnmt = 2;
$phase = 0;
break; break;
case 2: //예선중 case 2: //예선중
qualify($type, $tnmt, $phase); $phase++; qualify($type, $tnmt, $phase);
if($phase >= 56) { $tnmt = 3; $phase = 0; } $phase++;
if ($phase >= 56) {
$tnmt = 3;
$phase = 0;
}
break; break;
case 3: //추첨중 case 3: //추첨중
selectionAll($type, $tnmt, $phase); $phase+=8; selectionAll($type, $tnmt, $phase);
if($phase >= 32) { $tnmt = 4; $phase = 0; } $phase += 8;
if ($phase >= 32) {
$tnmt = 4;
$phase = 0;
}
break; break;
case 4: //본선중 case 4: //본선중
finallySingle($type, $tnmt, $phase); $phase++; finallySingle($type, $tnmt, $phase);
if($phase >= 6) { $tnmt = 5; $phase = 0; } $phase++;
if ($phase >= 6) {
$tnmt = 5;
$phase = 0;
}
break; break;
case 5: //배정중 case 5: //배정중
final16set(); final16set();
$tnmt = 6; $phase = 0; $tnmt = 6;
$phase = 0;
startBetting(); startBetting();
break; break;
case 6: //베팅중 case 6: //베팅중
$tnmt = 7; $phase = 0; $tnmt = 7;
$phase = 0;
break; break;
case 7: //16강중 case 7: //16강중
finalFight($type, $tnmt, $phase, 16); $phase++; finalFight($type, $tnmt, $phase, 16);
if($phase >= 8) { $tnmt = 8; $phase = 0; } $phase++;
if ($phase >= 8) {
$tnmt = 8;
$phase = 0;
}
break; break;
case 8: //8강중 case 8: //8강중
finalFight($type, $tnmt, $phase, 8); $phase++; finalFight($type, $tnmt, $phase, 8);
if($phase >= 4) { $tnmt = 9; $phase = 0; } $phase++;
if ($phase >= 4) {
$tnmt = 9;
$phase = 0;
}
break; break;
case 9: //4강중 case 9: //4강중
finalFight($type, $tnmt, $phase, 4); $phase++; finalFight($type, $tnmt, $phase, 4);
if($phase >= 2) { $tnmt = 10; $phase = 0; } $phase++;
if ($phase >= 2) {
$tnmt = 10;
$phase = 0;
}
break; break;
case 10: //결승중 case 10: //결승중
finalFight($type, $tnmt, $phase, 2); finalFight($type, $tnmt, $phase, 2);
$tnmt = 0; $phase = 0; $tnmt = 0;
$phase = 0;
setGift($type, $tnmt, $phase); setGift($type, $tnmt, $phase);
$i = $iter; $i = $iter;
break; break;
@@ -85,7 +132,9 @@ function processTournament() {
//베팅은 무조건 60페이즈후 진행(최대 1시간) //베팅은 무조건 60페이즈후 진행(최대 1시간)
if ($tnmt == 6) { if ($tnmt == 6) {
$betTerm = $unit * 60; $betTerm = $unit * 60;
if($betTerm > 3600) { $betTerm = 3600; } if ($betTerm > 3600) {
$betTerm = 3600;
}
//처리 초 더한 날짜 //처리 초 더한 날짜
$dt = date("Y-m-d H:i:s", strtotime($admin['tnmt_time']) + $unit * $i + $betTerm); $dt = date("Y-m-d H:i:s", strtotime($admin['tnmt_time']) + $unit * $i + $betTerm);
$gameStor->tournament = $tnmt; $gameStor->tournament = $tnmt;
@@ -115,46 +164,83 @@ function processTournament() {
$gameStor->tnmt_time = (new \DateTimeImmutable($admin['tnmt_time']))->add(new \DateInterval("PT{$second}S"))->format('Y-m-d H:i:s'); $gameStor->tnmt_time = (new \DateTimeImmutable($admin['tnmt_time']))->add(new \DateInterval("PT{$second}S"))->format('Y-m-d H:i:s');
} }
function getTournamentTerm() { function getTournamentTerm()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
$tnmt_auto = $gameStor->tnmt_auto; $tnmt_auto = $gameStor->tnmt_auto;
switch ($tnmt_auto) { switch ($tnmt_auto) {
case 0: $str = ''; break; case 0:
case 1: $str = "경기당 12분"; break; $str = '';
case 2: $str = "경기당 7분"; break; break;
case 3: $str = "경기당 3분"; break; case 1:
case 4: $str = "경기당 1분"; break; $str = "경기당 12";
case 5: $str = "경기당 30초"; break; break;
case 6: $str = "경기당 15초"; break; case 2:
case 7: $str = "경기당 5초"; break; $str = "경기당 7분";
break;
case 3:
$str = "경기당 3분";
break;
case 4:
$str = "경기당 1분";
break;
case 5:
$str = "경기당 30초";
break;
case 6:
$str = "경기당 15초";
break;
case 7:
$str = "경기당 5초";
break;
} }
return $str; return $str;
} }
function getTournamentTime() { function getTournamentTime()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
list($tnmt, $tnmt_time) = $gameStor->getValuesAsArray(['tournament', 'tnmt_time']); list($tnmt, $tnmt_time) = $gameStor->getValuesAsArray(['tournament', 'tnmt_time']);
$dt = substr($tnmt_time, 11, 5); $dt = substr($tnmt_time, 11, 5);
switch ($tnmt) { switch ($tnmt) {
case 1: $tnmt = "개막시간 {$dt}"; break; case 1:
case 2: $tnmt = "다음경기 {$dt}"; break; $tnmt = "개막시간 {$dt}";
case 3: $tnmt = "다음추첨 {$dt}"; break; break;
case 4: $tnmt = "다음경기 {$dt}"; break; case 2:
case 5: $tnmt = "16강배정 {$dt}"; break; $tnmt = "다음경기 {$dt}";
case 6: $tnmt = "베팅마감 {$dt}"; break; break;
case 7: case 8: case 9: case 10: case 3:
$tnmt = "다음경기 {$dt}"; break; $tnmt = "다음추첨 {$dt}";
default: $tnmt = ""; break; break;
case 4:
$tnmt = "다음경기 {$dt}";
break;
case 5:
$tnmt = "16강배정 {$dt}";
break;
case 6:
$tnmt = "베팅마감 {$dt}";
break;
case 7:
case 8:
case 9:
case 10:
$tnmt = "다음경기 {$dt}";
break;
default:
$tnmt = "";
break;
} }
return $tnmt; return $tnmt;
} }
function getTournament(int $tnmt) { function getTournament(int $tnmt)
{
return [ return [
"<span style='color:magenta;'>경기 없음</span>", "<span style='color:magenta;'>경기 없음</span>",
"<span style='color:orange;'>참가 모집중</span>", "<span style='color:orange;'>참가 모집중</span>",
@@ -170,15 +256,21 @@ function getTournament(int $tnmt) {
][$tnmt] ?? "TOURNAMENT_TYPE_ERR_{$tnmt}"; ][$tnmt] ?? "TOURNAMENT_TYPE_ERR_{$tnmt}";
} }
function printRow($k, $npc, $name, $abil, $tgame, $win, $draw, $lose, $gd, $gl, $prmt) { function printRow($k, $npc, $name, $abil, $tgame, $win, $draw, $lose, $gd, $gl, $prmt)
{
$k += 1; $k += 1;
if($prmt > 0) { $name = "<font color=orange>".$name."</font>"; } if ($prmt > 0) {
elseif($npc >= 2) { $name = "<font color=cyan>".$name."</font>"; } $name = "<font color=orange>" . $name . "</font>";
elseif($npc == 1) { $name = "<font color=skyblue>".$name."</font>"; } } elseif ($npc >= 2) {
$name = "<font color=cyan>" . $name . "</font>";
} elseif ($npc == 1) {
$name = "<font color=skyblue>" . $name . "</font>";
}
echo "<tr align=center><td class='bg2'>$k</td><td style='font-size:80%;'>$name</td><td>$abil</td><td>$tgame</td><td>$win</td><td>$draw</td><td>$lose</td><td>$gd</td><td>$gl</td></tr>"; echo "<tr align=center><td class='bg2'>$k</td><td style='font-size:80%;'>$name</td><td>$abil</td><td>$tgame</td><td>$win</td><td>$draw</td><td>$lose</td><td>$gd</td><td>$gl</td></tr>";
} }
function printFighting($tournament, $phase) { function printFighting($tournament, $phase)
{
$code = $tournament * 100 + $phase; $code = $tournament * 100 + $phase;
if ($code == 0) { if ($code == 0) {
echo "<tr valign=top>"; echo "<tr valign=top>";
@@ -230,21 +322,38 @@ function printFighting($tournament, $phase) {
} }
} }
function startTournament($auto, $type) { function startTournament($auto, $type)
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
eraseTnmtFightLogAll(); eraseTnmtFightLogAll();
switch ($auto) { switch ($auto) {
case 1: $unit = 60; break; case 1:
case 2: $unit = 60; break; $unit = 60;
case 3: $unit = 60; break; break;
case 4: $unit = 60; break; case 2:
case 5: $unit = 30; break; $unit = 60;
case 6: $unit = 15; break; break;
case 7: $unit = 5; break; case 3:
default:$unit = 60; break; $unit = 60;
break;
case 4:
$unit = 60;
break;
case 5:
$unit = 30;
break;
case 6:
$unit = 15;
break;
case 7:
$unit = 5;
break;
default:
$unit = 60;
break;
} }
$admin = $gameStor->getValues(['year', 'month']); $admin = $gameStor->getValues(['year', 'month']);
@@ -285,8 +394,7 @@ function startTournament($auto, $type) {
if ($opener) { if ($opener) {
$openerText = "황제 <Y>{$opener}</>의 명으로 "; $openerText = "황제 <Y>{$opener}</>의 명으로 ";
} } else {
else{
$openerText = ''; $openerText = '';
} }
@@ -303,7 +411,8 @@ function startTournament($auto, $type) {
pushGlobalHistoryLog($history, $admin['year'], $admin['month']); pushGlobalHistoryLog($history, $admin['year'], $admin['month']);
} }
function startBetting(){ function startBetting()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
[$year, $month, $startyear] = $gameStor->getValuesAsArray(['year', 'month', 'startyear']); [$year, $month, $startyear] = $gameStor->getValuesAsArray(['year', 'month', 'startyear']);
@@ -343,7 +452,8 @@ function startBetting(){
} }
} }
function fillLowGenAll() { function fillLowGenAll()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
@@ -449,19 +559,125 @@ function fillLowGenAll() {
//7 8강 //7 8강
//8 4강 //8 4강
//9 결승 //9 결승
function getTwo($tournament, $phase) { function getTwo($tournament, $phase)
{
$cand = []; $cand = [];
switch ($tournament) { switch ($tournament) {
case 2: case 2:
//예선 //예선
switch ($phase % 28) { switch ($phase % 28) {
case 0: $cand[0] = 0; $cand[1] = 1; break; case 1: $cand[0] = 2; $cand[1] = 3; break; case 2: $cand[0] = 4; $cand[1] = 5; break; case 3: $cand[0] = 6; $cand[1] = 7; break; case 0:
case 4: $cand[0] = 0; $cand[1] = 2; break; case 5: $cand[0] = 1; $cand[1] = 3; break; case 6: $cand[0] = 4; $cand[1] = 6; break; case 7: $cand[0] = 5; $cand[1] = 7; break; $cand[0] = 0;
case 8: $cand[0] = 0; $cand[1] = 3; break; case 9: $cand[0] = 1; $cand[1] = 6; break; case 10: $cand[0] = 2; $cand[1] = 5; break; case 11: $cand[0] = 4; $cand[1] = 7; break; $cand[1] = 1;
case 12: $cand[0] = 0; $cand[1] = 4; break; case 13: $cand[0] = 1; $cand[1] = 5; break; case 14: $cand[0] = 2; $cand[1] = 6; break; case 15: $cand[0] = 3; $cand[1] = 7; break; break;
case 16: $cand[0] = 0; $cand[1] = 5; break; case 17: $cand[0] = 1; $cand[1] = 4; break; case 18: $cand[0] = 2; $cand[1] = 7; break; case 19: $cand[0] = 3; $cand[1] = 6; break; case 1:
case 20: $cand[0] = 0; $cand[1] = 6; break; case 21: $cand[0] = 1; $cand[1] = 7; break; case 22: $cand[0] = 2; $cand[1] = 4; break; case 23: $cand[0] = 3; $cand[1] = 5; break; $cand[0] = 2;
case 24: $cand[0] = 0; $cand[1] = 7; break; case 25: $cand[0] = 1; $cand[1] = 2; break; case 26: $cand[0] = 3; $cand[1] = 4; break; case 27: $cand[0] = 5; $cand[1] = 6; break; $cand[1] = 3;
break;
case 2:
$cand[0] = 4;
$cand[1] = 5;
break;
case 3:
$cand[0] = 6;
$cand[1] = 7;
break;
case 4:
$cand[0] = 0;
$cand[1] = 2;
break;
case 5:
$cand[0] = 1;
$cand[1] = 3;
break;
case 6:
$cand[0] = 4;
$cand[1] = 6;
break;
case 7:
$cand[0] = 5;
$cand[1] = 7;
break;
case 8:
$cand[0] = 0;
$cand[1] = 3;
break;
case 9:
$cand[0] = 1;
$cand[1] = 6;
break;
case 10:
$cand[0] = 2;
$cand[1] = 5;
break;
case 11:
$cand[0] = 4;
$cand[1] = 7;
break;
case 12:
$cand[0] = 0;
$cand[1] = 4;
break;
case 13:
$cand[0] = 1;
$cand[1] = 5;
break;
case 14:
$cand[0] = 2;
$cand[1] = 6;
break;
case 15:
$cand[0] = 3;
$cand[1] = 7;
break;
case 16:
$cand[0] = 0;
$cand[1] = 5;
break;
case 17:
$cand[0] = 1;
$cand[1] = 4;
break;
case 18:
$cand[0] = 2;
$cand[1] = 7;
break;
case 19:
$cand[0] = 3;
$cand[1] = 6;
break;
case 20:
$cand[0] = 0;
$cand[1] = 6;
break;
case 21:
$cand[0] = 1;
$cand[1] = 7;
break;
case 22:
$cand[0] = 2;
$cand[1] = 4;
break;
case 23:
$cand[0] = 3;
$cand[1] = 5;
break;
case 24:
$cand[0] = 0;
$cand[1] = 7;
break;
case 25:
$cand[0] = 1;
$cand[1] = 2;
break;
case 26:
$cand[0] = 3;
$cand[1] = 4;
break;
case 27:
$cand[0] = 5;
$cand[1] = 6;
break;
} }
if ($phase >= 28) { if ($phase >= 28) {
$temp = $cand[0]; $temp = $cand[0];
@@ -472,16 +688,38 @@ function getTwo($tournament, $phase) {
case 4: case 4:
//본선 //본선
switch ($phase % 6) { switch ($phase % 6) {
case 0: $cand[0] = 0; $cand[1] = 1; break; case 1: $cand[0] = 2; $cand[1] = 3; break; case 0:
case 2: $cand[0] = 0; $cand[1] = 2; break; case 3: $cand[0] = 1; $cand[1] = 3; break; $cand[0] = 0;
case 4: $cand[0] = 0; $cand[1] = 3; break; case 5: $cand[0] = 1; $cand[1] = 2; break; $cand[1] = 1;
break;
case 1:
$cand[0] = 2;
$cand[1] = 3;
break;
case 2:
$cand[0] = 0;
$cand[1] = 2;
break;
case 3:
$cand[0] = 1;
$cand[1] = 3;
break;
case 4:
$cand[0] = 0;
$cand[1] = 3;
break;
case 5:
$cand[0] = 1;
$cand[1] = 2;
break;
} }
break; break;
} }
return $cand; return $cand;
} }
function qualify($tnmt_type, $tnmt, $phase) { function qualify($tnmt_type, $tnmt, $phase)
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
@@ -511,7 +749,8 @@ function qualify($tnmt_type, $tnmt, $phase) {
} }
} }
function qualifyAll($tnmt_type, $tnmt, $phase) { function qualifyAll($tnmt_type, $tnmt, $phase)
{
$db = DB::db(); $db = DB::db();
$start = $phase; $start = $phase;
@@ -521,23 +760,28 @@ function qualifyAll($tnmt_type, $tnmt, $phase) {
} }
} }
function selection($tnmt_type, $tnmt, $phase) { function selection($tnmt_type, $tnmt, $phase)
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
//시드1 배정 //시드1 배정
if ($phase < 8) { if ($phase < 8) {
$grp = $phase + 10; $grp_no = 0; $grp = $phase + 10;
$grp_no = 0;
$general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt=1 ORDER BY rand() LIMIT 1'); $general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt=1 ORDER BY rand() LIMIT 1');
//시드2 배정 //시드2 배정
} elseif ($phase < 16) { } elseif ($phase < 16) {
$grp = $phase - 8 + 10; $grp_no = 1; $grp = $phase - 8 + 10;
$grp_no = 1;
$general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt=2 ORDER BY rand() LIMIT 1'); $general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt=2 ORDER BY rand() LIMIT 1');
} elseif ($phase < 24) { } elseif ($phase < 24) {
$grp = $phase - 16 + 10; $grp_no = 2; $grp = $phase - 16 + 10;
$grp_no = 2;
$general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt>2 ORDER BY rand() LIMIT 1'); $general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt>2 ORDER BY rand() LIMIT 1');
} else { } else {
$grp = $phase - 24 + 10; $grp_no = 3; $grp = $phase - 24 + 10;
$grp_no = 3;
$general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt>2 ORDER BY rand() LIMIT 1'); $general = $db->queryFirstRow('SELECT * FROM tournament WHERE prmt>2 ORDER BY rand() LIMIT 1');
} }
//해당 시드에서 랜덤 선택 //해당 시드에서 랜덤 선택
@@ -570,7 +814,8 @@ function selection($tnmt_type, $tnmt, $phase) {
} }
} }
function selectionAll($tnmt_type, $tnmt, $phase) { function selectionAll($tnmt_type, $tnmt, $phase)
{
$start = $phase; $start = $phase;
$end = $phase - ($phase % 8) + 8; $end = $phase - ($phase % 8) + 8;
for ($i = $start; $i < $end; $i++) { for ($i = $start; $i < $end; $i++) {
@@ -578,7 +823,8 @@ function selectionAll($tnmt_type, $tnmt, $phase) {
} }
} }
function finallySingle($tnmt_type, $tnmt, $phase) { function finallySingle($tnmt_type, $tnmt, $phase)
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
@@ -608,7 +854,8 @@ function finallySingle($tnmt_type, $tnmt, $phase) {
} }
} }
function finallyAll($tnmt_type, $tnmt, $phase) { function finallyAll($tnmt_type, $tnmt, $phase)
{
$start = $phase; $start = $phase;
$end = $phase - ($phase % 2) + 2; $end = $phase - ($phase % 2) + 2;
for ($i = $start; $i < $end; $i++) { for ($i = $start; $i < $end; $i++) {
@@ -616,13 +863,14 @@ function finallyAll($tnmt_type, $tnmt, $phase) {
} }
} }
function final16set() { function final16set()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
//1조1-5조2, 2조1-6조2, 3조1-7조2, 4조1-8조2, 5조1-1조2, 6조1-2조2, 7조1-3조2, 8조1-4조2 //1조1-5조2, 2조1-6조2, 3조1-7조2, 4조1-8조2, 5조1-1조2, 6조1-2조2, 7조1-3조2, 8조1-4조2
$grp = Array(10, 14, 11, 15, 12, 16, 13, 17, 14, 10, 15, 11, 16, 12, 17, 13); $grp = array(10, 14, 11, 15, 12, 16, 13, 17, 14, 10, 15, 11, 16, 12, 17, 13);
$prmt = Array( 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2); $prmt = array(1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2);
for ($i = 0; $i < 16; $i++) { for ($i = 0; $i < 16; $i++) {
$general = $db->queryFirstRow('SELECT * FROM tournament WHERE grp=%i AND prmt=%i LIMIT 1', $grp[$i], $prmt[$i]); $general = $db->queryFirstRow('SELECT * FROM tournament WHERE grp=%i AND prmt=%i LIMIT 1', $grp[$i], $prmt[$i]);
//16강에 추가 //16강에 추가
@@ -652,16 +900,34 @@ function final16set() {
$gameStor->phase = 0; $gameStor->phase = 0;
} }
function finalFight($tnmt_type, $tnmt, $phase, $type) { function finalFight($tnmt_type, $tnmt, $phase, $type)
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
switch ($type) { switch ($type) {
case 16: $offset = 20; $turn = 7; $next = 7; break; case 16:
case 8: $offset = 30; $turn = 3; $next = 8; break; $offset = 20;
case 4: $offset = 40; $turn = 1; $next = 9; break; $turn = 7;
case 2: $offset = 50; $turn = 0; $next = 0; break; $next = 7;
default: throw new MustNotBeReachedException(); break;
case 8:
$offset = 30;
$turn = 3;
$next = 8;
break;
case 4:
$offset = 40;
$turn = 1;
$next = 9;
break;
case 2:
$offset = 50;
$turn = 0;
$next = 0;
break;
default:
throw new MustNotBeReachedException();
} }
$grp = $phase + $offset; $grp = $phase + $offset;
@@ -694,7 +960,8 @@ function finalFight($tnmt_type, $tnmt, $phase, $type) {
} }
} }
function setGift($tnmt_type, $tnmt, $phase) { function setGift($tnmt_type, $tnmt, $phase)
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
@@ -703,11 +970,24 @@ function setGift($tnmt_type, $tnmt, $phase) {
$resultHelper = []; $resultHelper = [];
switch ($tnmt_type) { switch ($tnmt_type) {
case 0: $tp = "전력전"; $tp2 = "tt"; break; case 0:
case 1: $tp = "통솔전"; $tp2 = "tl"; break; $tp = "전력전";
case 2: $tp = "일기토"; $tp2 = "ts"; break; $tp2 = "tt";
case 3: $tp = "설전"; $tp2 = "ti"; break; break;
default: throw new MustNotBeReachedException(); case 1:
$tp = "통솔전";
$tp2 = "tl";
break;
case 2:
$tp = "일기토";
$tp2 = "ts";
break;
case 3:
$tp = "설전";
$tp2 = "ti";
break;
default:
throw new MustNotBeReachedException();
} }
//16강자 명성 돈 //16강자 명성 돈
@@ -868,7 +1148,8 @@ function setGift($tnmt_type, $tnmt, $phase) {
} }
} }
function setRefund() { function setRefund()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
@@ -889,7 +1170,8 @@ function setRefund() {
} }
//10차이 1.1, 50 차이 1.17, 100차이 1.2 //10차이 1.1, 50 차이 1.17, 100차이 1.2
function getLog($lvl1, $lvl2) { function getLog($lvl1, $lvl2)
{
if ($lvl1 >= $lvl2) { if ($lvl1 >= $lvl2) {
$ratio = 1 + log(1 + $lvl1 - $lvl2, 10) / 10; $ratio = 1 + log(1 + $lvl1 - $lvl2, 10) / 10;
} else { } else {
@@ -899,7 +1181,8 @@ function getLog($lvl1, $lvl2) {
} }
//0 : 승무패, 1 : 승패 //0 : 승무패, 1 : 승패
function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) { function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type)
{
$log = []; $log = [];
$db = DB::db(); $db = DB::db();
@@ -908,14 +1191,26 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
$gen1 = $db->queryFirstRow('SELECT *,(leadership+strength+intel)*7/15 as total,h,w,b from tournament where grp=%i AND grp_no=%i', $group, $g1); $gen1 = $db->queryFirstRow('SELECT *,(leadership+strength+intel)*7/15 as total,h,w,b from tournament where grp=%i AND grp_no=%i', $group, $g1);
$gen2 = $db->queryFirstRow('SELECT *,(leadership+strength+intel)*7/15 as total,h,w,b from tournament where grp=%i AND grp_no=%i', $group, $g2); $gen2 = $db->queryFirstRow('SELECT *,(leadership+strength+intel)*7/15 as total,h,w,b from tournament where grp=%i AND grp_no=%i', $group, $g2);
if($type == 0) { $turn = 10; } if ($type == 0) {
else { $turn = 100; } $turn = 10;
} else {
$turn = 100;
}
if($tnmt_type == 1) { $tp = "leadership"; $tp2 = "tl"; } if ($tnmt_type == 1) {
elseif($tnmt_type == 2) { $tp = "strength"; $tp2 = "ts"; } $tp = "leadership";
elseif($tnmt_type == 3) { $tp = "intel"; $tp2 = "ti"; } $tp2 = "tl";
else /*$tnmt_type == 0*/{ $tp = "total"; $tp2 = "tt"; } } elseif ($tnmt_type == 2) {
$tp = "strength";
$tp2 = "ts";
} elseif ($tnmt_type == 3) {
$tp = "intel";
$tp2 = "ti";
} else /*$tnmt_type == 0*/ {
$tp = "total";
$tp2 = "tt";
}
$e1 = $energy1 = Util::round($gen1[$tp] * getLog($gen1['lvl'], $gen2['lvl']) * 10); $e1 = $energy1 = Util::round($gen1[$tp] * getLog($gen1['lvl'], $gen2['lvl']) * 10);
$e2 = $energy2 = Util::round($gen2[$tp] * getLog($gen1['lvl'], $gen2['lvl']) * 10); $e2 = $energy2 = Util::round($gen2[$tp] * getLog($gen1['lvl'], $gen2['lvl']) * 10);
@@ -934,17 +1229,21 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
switch (rand() % 4) { switch (rand() % 4) {
case 0: case 0:
$josaYi = JosaUtil::pick($itemRawName, '이'); $josaYi = JosaUtil::pick($itemRawName, '이');
$log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 포효합니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 포효합니다!";
break;
case 1: case 1:
$josaYi = JosaUtil::pick($itemRawName, '이'); $josaYi = JosaUtil::pick($itemRawName, '이');
$log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 그 위용을 뽐냅니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 그 위용을 뽐냅니다!";
break;
case 2: case 2:
$josaYi = JosaUtil::pick($gen['name'], '이'); $josaYi = JosaUtil::pick($gen['name'], '이');
$josaUl = JosaUtil::pick($itemRawName, '을'); $josaUl = JosaUtil::pick($itemRawName, '을');
$log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 타고 있습니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 타고 있습니다!";
break;
case 3: case 3:
$josaYi = JosaUtil::pick($itemRawName, '이'); $josaYi = JosaUtil::pick($itemRawName, '이');
$log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 갈기를 휘날립니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 갈기를 휘날립니다!";
break;
} }
} }
if (!$weapon->isBuyable() && ($tnmt_type == 0 || $tnmt_type == 2)) { if (!$weapon->isBuyable() && ($tnmt_type == 0 || $tnmt_type == 2)) {
@@ -953,15 +1252,19 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
switch (rand() % 4) { switch (rand() % 4) {
case 0: case 0:
$josaYi = JosaUtil::pick($itemRawName, '이'); $josaYi = JosaUtil::pick($itemRawName, '이');
$log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 번뜩입니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 번뜩입니다!";
break;
case 1: case 1:
$josaYi = JosaUtil::pick($itemRawName, '이'); $josaYi = JosaUtil::pick($itemRawName, '이');
$log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 푸르게 빛납니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>{$josaYi} 푸르게 빛납니다!";
break;
case 2: case 2:
$log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>에서 살기가 느껴집니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 <S>{$itemName}</>에서 살기가 느껴집니다!";
break;
case 3: case 3:
$josaYi = JosaUtil::pick($itemRawName, '이'); $josaYi = JosaUtil::pick($itemRawName, '이');
$log[] = "<S>●</> <Y>{$gen['name']}</>의 손에는 <S>{$itemName}</>{$josaYi} 쥐어져 있습니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 손에는 <S>{$itemName}</>{$josaYi} 쥐어져 있습니다!";
break;
} }
} }
if (!$book->isBuyable() && ($tnmt_type == 0 || $tnmt_type == 3)) { if (!$book->isBuyable() && ($tnmt_type == 0 || $tnmt_type == 3)) {
@@ -971,26 +1274,32 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
case 0: case 0:
$josaYi = JosaUtil::pick($gen['name'], '이'); $josaYi = JosaUtil::pick($gen['name'], '이');
$josaUl = JosaUtil::pick($itemRawName, '을'); $josaUl = JosaUtil::pick($itemRawName, '을');
$log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 펼쳐듭니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 펼쳐듭니다!";
break;
case 1: case 1:
$josaYi = JosaUtil::pick($gen['name'], '이'); $josaYi = JosaUtil::pick($gen['name'], '이');
$josaUl = JosaUtil::pick($itemRawName, '을'); $josaUl = JosaUtil::pick($itemRawName, '을');
$log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 품에서 꺼냅니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 품에서 꺼냅니다!";
break;
case 2: case 2:
$josaYi = JosaUtil::pick($gen['name'], '이'); $josaYi = JosaUtil::pick($gen['name'], '이');
$josaUl = JosaUtil::pick($itemRawName, '을'); $josaUl = JosaUtil::pick($itemRawName, '을');
$log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 들고 있습니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>{$josaYi} <S>{$itemName}</>{$josaUl} 들고 있습니다!";
break;
case 3: case 3:
$josaYi = JosaUtil::pick($itemRawName, '이'); $josaYi = JosaUtil::pick($itemRawName, '이');
$log[] = "<S>●</> <Y>{$gen['name']}</>의 손에는 <S>{$itemName}</>{$josaYi} 쥐어져 있습니다!"; break; $log[] = "<S>●</> <Y>{$gen['name']}</>의 손에는 <S>{$itemName}</>{$josaYi} 쥐어져 있습니다!";
break;
} }
} }
} }
$log[] = "<S>●</> <Y>{$gen1['name']}</> <C>({$energy1})</> vs <C>({$energy2})</> <Y>{$gen2['name']}</>"; $log[] = "<S>●</> <Y>{$gen1['name']}</> <C>({$energy1})</> vs <C>({$energy2})</> <Y>{$gen2['name']}</>";
$gd1 = 0; $gd2 = 0; $gd1 = 0;
$phase = 0; $sel = 2; $gd2 = 0;
$phase = 0;
$sel = 2;
while ($phase < $turn) { while ($phase < $turn) {
$phase++; $phase++;
//평타 //평타
@@ -998,67 +1307,312 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
$damage2 = Util::round($gen1[$tp] * (rand() % 21 + 90) / 130); // 90~110% $damage2 = Util::round($gen1[$tp] * (rand() % 21 + 90) / 130); // 90~110%
//보너스타 //보너스타
$ratio = rand() % 100; $ratio = rand() % 100;
if($gen1[$tp] >= $ratio) { $damage2 += Util::round($gen1[$tp] * (rand() % 41 + 10) / 130); } // 10~50 if ($gen1[$tp] >= $ratio) {
$damage2 += Util::round($gen1[$tp] * (rand() % 41 + 10) / 130);
} // 10~50
$ratio = rand() % 100; $ratio = rand() % 100;
if($gen2[$tp] >= $ratio) { $damage1 += Util::round($gen2[$tp] * (rand() % 41 + 10) / 130); } // 10~50 if ($gen2[$tp] >= $ratio) {
$critical1 = 0; $critical2 = 0; $damage1 += Util::round($gen2[$tp] * (rand() % 41 + 10) / 130);
} // 10~50
$critical1 = 0;
$critical2 = 0;
//막판 분노 //막판 분노
$ratio = rand() % 300; $ratio = rand() % 300;
if ($e1 / 5 > $energy1 && $damage1 > $damage2 && $gen1[$tp] >= $ratio) { if ($e1 / 5 > $energy1 && $damage1 > $damage2 && $gen1[$tp] >= $ratio) {
$damage2 *= Util::round((rand() % 301 + 200) / 100); // 200 ~ 500% $damage2 *= Util::round((rand() % 301 + 200) / 100); // 200 ~ 500%
$critical1 = 1; $critical1 = 1;
if ($tnmt_type == 0) { switch(rand()%2) { case 0: $str = "전력"; break; case 1: $str = "집중"; break; } } if ($tnmt_type == 0) {
elseif($tnmt_type == 1) { switch(rand()%2) { case 0: $str = "봉시진"; break; case 1: $str = "어린진"; break; } } switch (rand() % 2) {
elseif($tnmt_type == 2) { switch(rand()%2) { case 0: $str = "삼단"; break; case 1: $str = "나선"; break; } } case 0:
elseif($tnmt_type == 3) { switch(rand()%2) { case 0: $str = "독설"; break; case 1: $str = "논파"; break; } } $str = "전력";
break;
case 1:
$str = "집중";
break;
}
} elseif ($tnmt_type == 1) {
switch (rand() % 2) {
case 0:
$str = "봉시진";
break;
case 1:
$str = "어린진";
break;
}
} elseif ($tnmt_type == 2) {
switch (rand() % 2) {
case 0:
$str = "삼단";
break;
case 1:
$str = "나선";
break;
}
} elseif ($tnmt_type == 3) {
switch (rand() % 2) {
case 0:
$str = "독설";
break;
case 1:
$str = "논파";
break;
}
}
$log[] = "<S>●</> <Y>{$gen1['name']}</>의 분노의 <M>{$str}</> 공격!"; $log[] = "<S>●</> <Y>{$gen1['name']}</>의 분노의 <M>{$str}</> 공격!";
} }
$ratio = rand() % 300; $ratio = rand() % 300;
if ($e2 / 5 > $energy2 && $damage2 > $damage1 && $gen2[$tp] >= $ratio) { if ($e2 / 5 > $energy2 && $damage2 > $damage1 && $gen2[$tp] >= $ratio) {
$damage1 *= Util::round((rand() % 301 + 200) / 100); // 200 ~ 500% $damage1 *= Util::round((rand() % 301 + 200) / 100); // 200 ~ 500%
$critical2 = 1; $critical2 = 1;
if($tnmt_type == 0) { switch(rand()%2) { case 0: $str = "전력"; break; case 1: $str = "집중"; break; } } if ($tnmt_type == 0) {
elseif($tnmt_type == 1) { switch(rand()%2) { case 0: $str = "봉시진"; break; case 1: $str = "어린진"; break; } } switch (rand() % 2) {
elseif($tnmt_type == 2) { switch(rand()%2) { case 0: $str = "삼단"; break; case 1: $str = "나선"; break; } } case 0:
elseif($tnmt_type == 3) { switch(rand()%2) { case 0: $str = "독설"; break; case 1: $str = "논파"; break; } } $str = "전력";
break;
case 1:
$str = "집중";
break;
}
} elseif ($tnmt_type == 1) {
switch (rand() % 2) {
case 0:
$str = "봉시진";
break;
case 1:
$str = "어린진";
break;
}
} elseif ($tnmt_type == 2) {
switch (rand() % 2) {
case 0:
$str = "삼단";
break;
case 1:
$str = "나선";
break;
}
} elseif ($tnmt_type == 3) {
switch (rand() % 2) {
case 0:
$str = "독설";
break;
case 1:
$str = "논파";
break;
}
}
$log[] = "<S>●</> <Y>{$gen2['name']}</>의 분노의 <M>{$str}</> 공격!"; $log[] = "<S>●</> <Y>{$gen2['name']}</>의 분노의 <M>{$str}</> 공격!";
} }
//1합 승부 //1합 승부
if ($phase == 1) { if ($phase == 1) {
$ratio = rand() % 400; $ratio = rand() % 400;
if ($gen1[$tp] * 0.9 > $gen2[$tp] && $gen1[$tp] >= $ratio) { if ($gen1[$tp] * 0.9 > $gen2[$tp] && $gen1[$tp] >= $ratio) {
$damage1 = 0; $damage2 = $e2; $damage1 = 0;
if ($tnmt_type == 0) { $log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>압도</>!"; } $damage2 = $e2;
elseif($tnmt_type == 1) { $log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>팔문금쇄진</>!"; } if ($tnmt_type == 0) {
elseif($tnmt_type == 2) { $log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>일격 필살</>!"; } $log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>압도</>!";
elseif($tnmt_type == 3) { $log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>모독 욕설</>!"; } } elseif ($tnmt_type == 1) {
$log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>팔문금쇄진</>!";
} elseif ($tnmt_type == 2) {
$log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>일격 필살</>!";
} elseif ($tnmt_type == 3) {
$log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>모독 욕설</>!";
}
} }
if ($gen2[$tp] * 0.9 > $gen1[$tp] && $gen2[$tp] >= $ratio) { if ($gen2[$tp] * 0.9 > $gen1[$tp] && $gen2[$tp] >= $ratio) {
$damage2 = 0; $damage1 = $e1; $damage2 = 0;
if ($tnmt_type == 0) { $log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>압도</>!"; } $damage1 = $e1;
elseif($tnmt_type == 1) { $log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>팔문금쇄진</>!"; } if ($tnmt_type == 0) {
elseif($tnmt_type == 2) { $log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>일격 필살</>!"; } $log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>압도</>!";
elseif($tnmt_type == 3) { $log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>모독 욕설</>!"; } } elseif ($tnmt_type == 1) {
$log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>팔문금쇄진</>!";
} elseif ($tnmt_type == 2) {
$log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>일격 필살</>!";
} elseif ($tnmt_type == 3) {
$log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>모독 욕설</>!";
}
} }
} else { } else {
$ratio = rand() % 1000; $ratio = rand() % 1000;
if ($critical1 == 0 && $gen1[$tp] >= $ratio) { if ($critical1 == 0 && $gen1[$tp] >= $ratio) {
$damage2 *= Util::randRangeInt(150, 300) / 100; // 150 ~ 300% $damage2 *= Util::randRangeInt(150, 300) / 100; // 150 ~ 300%
$critical1 = 1; $critical1 = 1;
if ($tnmt_type == 0) { switch(rand()%6) { case 0: $str = "참격"; break; case 1: $str = "집중"; break; case 2: $str = "역공"; break; case 3: $str = "반격"; break; case 4: $str = "선제"; break; case 5: $str = "도발"; break; } } if ($tnmt_type == 0) {
elseif($tnmt_type == 1) { switch(rand()%6) { case 0: $str = "추행진"; break; case 1: $str = "학익진"; break; case 2: $str = "장사진"; break; case 3: $str = "형액진"; break; case 4: $str = "기형진"; break; case 5: $str = "구행진"; break; } } switch (rand() % 6) {
elseif($tnmt_type == 2) { switch(rand()%6) { case 0: $str = "기합"; break; case 1: $str = "기염"; break; case 2: $str = "반격"; break; case 3: $str = "역공"; break; case 4: $str = "삼단"; break; case 5: $str = "나선"; break; } } case 0:
elseif($tnmt_type == 3) { switch(rand()%6) { case 0: $str = "논파"; break; case 1: $str = "항변"; break; case 2: $str = "반론"; break; case 3: $str = "반박"; break; case 4: $str = "도발"; break; case 5: $str = "면박"; break; } } $str = "참격";
break;
case 1:
$str = "집중";
break;
case 2:
$str = "역공";
break;
case 3:
$str = "반격";
break;
case 4:
$str = "선제";
break;
case 5:
$str = "도발";
break;
}
} elseif ($tnmt_type == 1) {
switch (rand() % 6) {
case 0:
$str = "추행진";
break;
case 1:
$str = "학익진";
break;
case 2:
$str = "장사진";
break;
case 3:
$str = "형액진";
break;
case 4:
$str = "기형진";
break;
case 5:
$str = "구행진";
break;
}
} elseif ($tnmt_type == 2) {
switch (rand() % 6) {
case 0:
$str = "기합";
break;
case 1:
$str = "기염";
break;
case 2:
$str = "반격";
break;
case 3:
$str = "역공";
break;
case 4:
$str = "삼단";
break;
case 5:
$str = "나선";
break;
}
} elseif ($tnmt_type == 3) {
switch (rand() % 6) {
case 0:
$str = "논파";
break;
case 1:
$str = "항변";
break;
case 2:
$str = "반론";
break;
case 3:
$str = "반박";
break;
case 4:
$str = "도발";
break;
case 5:
$str = "면박";
break;
}
}
$log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>{$str}</>!"; $log[] = "<S>●</> <Y>{$gen1['name']}</>의 <M>{$str}</>!";
} }
$ratio = rand() % 1000; $ratio = rand() % 1000;
if ($critical2 == 0 && $gen2[$tp] >= $ratio) { if ($critical2 == 0 && $gen2[$tp] >= $ratio) {
$damage1 *= Util::randRangeInt(150, 300) / 100; // 150 ~ 300% $damage1 *= Util::randRangeInt(150, 300) / 100; // 150 ~ 300%
$critical2 = 1; $critical2 = 1;
if ($tnmt_type == 0) { switch(rand()%6) { case 0: $str = "참격"; break; case 1: $str = "집중"; break; case 2: $str = "역공"; break; case 3: $str = "반격"; break; case 4: $str = "선제"; break; case 5: $str = "도발"; break; } } if ($tnmt_type == 0) {
elseif($tnmt_type == 1) { switch(rand()%6) { case 0: $str = "추행진"; break; case 1: $str = "학익진"; break; case 2: $str = "장사진"; break; case 3: $str = "형액진"; break; case 4: $str = "기형진"; break; case 5: $str = "구행진"; break; } } switch (rand() % 6) {
elseif($tnmt_type == 2) { switch(rand()%6) { case 0: $str = "기합"; break; case 1: $str = "기염"; break; case 2: $str = "반격"; break; case 3: $str = "역공"; break; case 4: $str = "삼단"; break; case 5: $str = "나선"; break; } } case 0:
elseif($tnmt_type == 3) { switch(rand()%6) { case 0: $str = "논파"; break; case 1: $str = "항변"; break; case 2: $str = "반론"; break; case 3: $str = "반박"; break; case 4: $str = "도발"; break; case 5: $str = "면박"; break; } } $str = "참격";
break;
case 1:
$str = "집중";
break;
case 2:
$str = "역공";
break;
case 3:
$str = "반격";
break;
case 4:
$str = "선제";
break;
case 5:
$str = "도발";
break;
}
} elseif ($tnmt_type == 1) {
switch (rand() % 6) {
case 0:
$str = "추행진";
break;
case 1:
$str = "학익진";
break;
case 2:
$str = "장사진";
break;
case 3:
$str = "형액진";
break;
case 4:
$str = "기형진";
break;
case 5:
$str = "구행진";
break;
}
} elseif ($tnmt_type == 2) {
switch (rand() % 6) {
case 0:
$str = "기합";
break;
case 1:
$str = "기염";
break;
case 2:
$str = "반격";
break;
case 3:
$str = "역공";
break;
case 4:
$str = "삼단";
break;
case 5:
$str = "나선";
break;
}
} elseif ($tnmt_type == 3) {
switch (rand() % 6) {
case 0:
$str = "논파";
break;
case 1:
$str = "항변";
break;
case 2:
$str = "반론";
break;
case 3:
$str = "반박";
break;
case 4:
$str = "도발";
break;
case 5:
$str = "면박";
break;
}
}
$log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>{$str}</>!"; $log[] = "<S>●</> <Y>{$gen2['name']}</>의 <M>{$str}</>!";
} }
} }
@@ -1068,36 +1622,49 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
$energy1 -= $damage1; $energy1 -= $damage1;
$energy2 -= $damage2; $energy2 -= $damage2;
$tDamage1 = $damage1; $tDamage2 = $damage2; $tDamage1 = $damage1;
$tEnergy1 = $energy1; $tEnergy2 = $energy2; $tDamage2 = $damage2;
$tEnergy1 = $energy1;
$tEnergy2 = $energy2;
if ($energy1 <= 0 && $energy2 <= 0) { if ($energy1 <= 0 && $energy2 <= 0) {
$r1 = $tEnergy1 / Util::valueFit($tDamage1, 1); $r1 = $tEnergy1 / Util::valueFit($tDamage1, 1);
$r2 = $tEnergy2 / Util::valueFit($tDamage2, 1); $r2 = $tEnergy2 / Util::valueFit($tDamage2, 1);
if ($r1 > $r2) { if ($r1 > $r2) {
$offset = Util::round($tEnergy2 * $tDamage1 / Util::valueFit($tDamage2, 1)); $offset = Util::round($tEnergy2 * $tDamage1 / Util::valueFit($tDamage2, 1));
$damage1 += $offset; $energy1 -= $offset; $damage1 += $offset;
$damage2 += $tEnergy2; $energy2 = 0; $energy1 -= $offset;
$damage2 += $tEnergy2;
$energy2 = 0;
} else { } else {
$offset = Util::round($tEnergy1 * $tDamage2 / Util::valueFit($tDamage1, 1)); $offset = Util::round($tEnergy1 * $tDamage2 / Util::valueFit($tDamage1, 1));
$damage2 += $offset; $energy2 -= $offset; $damage2 += $offset;
$damage1 += $tEnergy1; $energy1 = 0; $energy2 -= $offset;
$damage1 += $tEnergy1;
$energy1 = 0;
} }
} elseif ($energy1 * $energy2 <= 0) { } elseif ($energy1 * $energy2 <= 0) {
if ($energy2 < 0) { if ($energy2 < 0) {
$offset = Util::round($tEnergy2 * $tDamage1 / Util::valueFit($tDamage2, 1)); $offset = Util::round($tEnergy2 * $tDamage1 / Util::valueFit($tDamage2, 1));
$damage1 += $offset; $energy1 -= $offset; $damage1 += $offset;
$damage2 += $tEnergy2; $energy2 = 0; $energy1 -= $offset;
$damage2 += $tEnergy2;
$energy2 = 0;
} }
if ($energy1 < 0) { if ($energy1 < 0) {
$offset = Util::round($tEnergy1 * $tDamage2 / Util::valueFit($tDamage1, 1)); $offset = Util::round($tEnergy1 * $tDamage2 / Util::valueFit($tDamage1, 1));
$damage2 += $offset; $energy2 -= $offset; $damage2 += $offset;
$damage1 += $tEnergy1; $energy1 = 0; $energy2 -= $offset;
$damage1 += $tEnergy1;
$energy1 = 0;
} }
} }
$gd1 += $damage1; $gd2 += $damage2; $gd1 += $damage1;
$energy1 = Util::round($energy1); $energy2 = Util::round($energy2); $gd2 += $damage2;
$damage1 = Util::round($damage1); $damage2 = Util::round($damage2); $energy1 = Util::round($energy1);
$energy2 = Util::round($energy2);
$damage1 = Util::round($damage1);
$damage2 = Util::round($damage2);
$log[] = '<S>●</> ' $log[] = '<S>●</> '
. StringUtil::padStringAlignRight((string)$phase, 2, "0") . '合 : ' . StringUtil::padStringAlignRight((string)$phase, 2, "0") . '合 : '
@@ -1108,18 +1675,27 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
. '<C>' . StringUtil::padStringAlignRight((string)$energy2, 3, "0") . '</>'; . '<C>' . StringUtil::padStringAlignRight((string)$energy2, 3, "0") . '</>';
if ($energy1 <= 0 && $energy2 <= 0) { if ($energy1 <= 0 && $energy2 <= 0) {
if($type == 0) { $sel = 2; break; } if ($type == 0) {
else { $sel = 2;
$energy1 = Util::round($e1 / 2); $energy2 = Util::round($e2 / 2); break;
} else {
$energy1 = Util::round($e1 / 2);
$energy2 = Util::round($e2 / 2);
$log[] = "<S>●</> <span class='ev_highlight'>재대결</span>!"; $log[] = "<S>●</> <span class='ev_highlight'>재대결</span>!";
} }
} }
if($energy1 <= 0) { $sel = 1; break; } if ($energy1 <= 0) {
if($energy2 <= 0) { $sel = 0; break; } $sel = 1;
break;
}
if ($energy2 <= 0) {
$sel = 0;
break;
}
} }
$general1 = $db->queryFirstRow('SELECT value as gl FROM rank_data WHERE general_id = %i AND type = %s', $gen1['no'], $tp2.'g'); $gen1gl = $db->queryFirstField('SELECT value as gl FROM rank_data WHERE general_id = %i AND type = %s', $gen1['no'], $tp2 . 'g') ?? 0;
$general2 = $db->queryFirstRow('SELECT value as gl FROM rank_data WHERE general_id = %i AND type = %s', $gen2['no'], $tp2.'g'); $gen2gl = $db->queryFirstField('SELECT value as gl FROM rank_data WHERE general_id = %i AND type = %s', $gen2['no'], $tp2 . 'g') ?? 0;
switch ($sel) { switch ($sel) {
case 0: case 0:
@@ -1135,9 +1711,16 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
'gl' => $db->sqleval('gl-%i', $gl) 'gl' => $db->sqleval('gl-%i', $gl)
], 'grp=%i AND grp_no=%i', $group, $g2); ], 'grp=%i AND grp_no=%i', $group, $g2);
if($general1['gl'] > $general2['gl']) { $gl1 = 1; $gl2 = 0; } if ($gen1gl > $gen2gl) {
elseif($general1['gl'] == $general2['gl']) { $gl1 = 2; $gl2 = -1; } $gl1 = 1;
else { $gl1 = 3; $gl2 = -2; } $gl2 = 0;
} elseif ($gen1gl == $gen2gl) {
$gl1 = 2;
$gl2 = -1;
} else {
$gl1 = 3;
$gl2 = -2;
}
$gen1resKey = 'w'; $gen1resKey = 'w';
$gen2resKey = 'l'; $gen2resKey = 'l';
@@ -1155,9 +1738,16 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
'gl' => $db->sqleval('gl+%i', $gl) 'gl' => $db->sqleval('gl+%i', $gl)
], 'grp=%i AND grp_no=%i', $group, $g2); ], 'grp=%i AND grp_no=%i', $group, $g2);
if($general2['gl'] > $general1['gl']) { $gl2 = 1; $gl1 = 0; } if ($gen2gl > $gen1gl) {
elseif($general2['gl'] == $general1['gl']) { $gl2 = 2; $gl1 = -1; } $gl2 = 1;
else { $gl2 = 3; $gl1 = -2; } $gl1 = 0;
} elseif ($gen2gl == $gen1gl) {
$gl2 = 2;
$gl1 = -1;
} else {
$gl2 = 3;
$gl1 = -2;
}
$gen1resKey = 'l'; $gen1resKey = 'l';
$gen2resKey = 'w'; $gen2resKey = 'w';
@@ -1169,14 +1759,22 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
'draw' => $db->sqleval('draw+1') 'draw' => $db->sqleval('draw+1')
], 'grp=%i AND (grp_no=%i OR grp_no=%i)', $group, $g1, $g2); ], 'grp=%i AND (grp_no=%i OR grp_no=%i)', $group, $g1, $g2);
if($general1['gl'] > $general2['gl']) { $gl2 = -1; $gl1 = 1; } if ($gen1gl > $gen2gl) {
elseif($general1['gl'] == $general2['gl']) { $gl2 = 0; $gl1 = 0; } $gl2 = -1;
else { $gl2 = +1; $gl1 = -1; } $gl1 = 1;
} elseif ($gen1gl == $gen2gl) {
$gl2 = 0;
$gl1 = 0;
} else {
$gl2 = +1;
$gl1 = -1;
}
$gen1resKey = 'd'; $gen1resKey = 'd';
$gen2resKey = 'd'; $gen2resKey = 'd';
break; break;
default: throw new MustNotBeReachedException(); default:
throw new MustNotBeReachedException();
} }
$db->update('rank_data', [ $db->update('rank_data', [