feat: 토너먼트 베팅에서 모든 NPC가 10원씩 베팅함
- 추가로 베팅 공지
This commit is contained in:
+129
-87
@@ -8,8 +8,7 @@ function processTournament() {
|
|||||||
|
|
||||||
$admin = $gameStor->getValues(['tournament', 'phase', 'tnmt_type', 'tnmt_auto', 'tnmt_time']);
|
$admin = $gameStor->getValues(['tournament', 'phase', 'tnmt_type', 'tnmt_auto', 'tnmt_time']);
|
||||||
$now = new \DateTime();
|
$now = new \DateTime();
|
||||||
$admin['now'] = $now->format('Y-m-d H:i:s');
|
$offset = $now->getTimestamp() - (new \DateTime($admin['tnmt_time']))->getTimestamp();
|
||||||
$admin['offset'] = $now->getTimestamp() - (new \DateTime($admin['tnmt_time']))->getTimestamp();
|
|
||||||
|
|
||||||
//수동일땐 무시
|
//수동일땐 무시
|
||||||
if($admin['tnmt_auto'] == 0) { return; }
|
if($admin['tnmt_auto'] == 0) { return; }
|
||||||
@@ -18,99 +17,102 @@ function processTournament() {
|
|||||||
$tnmt = $admin['tournament'];
|
$tnmt = $admin['tournament'];
|
||||||
$phase = $admin['phase'];
|
$phase = $admin['phase'];
|
||||||
|
|
||||||
|
if($offset < 0){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//현시간이 스탬프 지나친경우
|
//현시간이 스탬프 지나친경우
|
||||||
if($admin['offset'] >= 0) {
|
switch($admin['tnmt_auto']) {
|
||||||
switch($admin['tnmt_auto']) {
|
case 1: $unit = 720; break;
|
||||||
case 1: $unit = 720; break;
|
case 2: $unit = 420; break;
|
||||||
case 2: $unit = 420; break;
|
case 3: $unit = 180; break;
|
||||||
case 3: $unit = 180; break;
|
case 4: $unit = 60; break;
|
||||||
case 4: $unit = 60; break;
|
case 5: $unit = 30; break;
|
||||||
case 5: $unit = 30; break;
|
case 6: $unit = 15; break;
|
||||||
case 6: $unit = 15; break;
|
case 7: $unit = 5; break;
|
||||||
case 7: $unit = 5; break;
|
default: throw new MustNotBeReachedException();
|
||||||
default: throw new MustNotBeReachedException();
|
}
|
||||||
|
|
||||||
|
//업데이트 횟수
|
||||||
|
$iter = intdiv($offset, $unit) + 1;
|
||||||
|
|
||||||
|
for($i=0; $i < $iter; $i++) {
|
||||||
|
switch($tnmt) {
|
||||||
|
case 1: //신청 마감
|
||||||
|
fillLowGenAll();
|
||||||
|
$tnmt = 2; $phase = 0;
|
||||||
|
break;
|
||||||
|
case 2: //예선중
|
||||||
|
qualify($type, $tnmt, $phase); $phase++;
|
||||||
|
if($phase >= 56) { $tnmt = 3; $phase = 0; }
|
||||||
|
break;
|
||||||
|
case 3: //추첨중
|
||||||
|
selectionAll($type, $tnmt, $phase); $phase+=8;
|
||||||
|
if($phase >= 32) { $tnmt = 4; $phase = 0; }
|
||||||
|
break;
|
||||||
|
case 4: //본선중
|
||||||
|
finallySingle($type, $tnmt, $phase); $phase++;
|
||||||
|
if($phase >= 6) { $tnmt = 5; $phase = 0; }
|
||||||
|
break;
|
||||||
|
case 5: //배정중
|
||||||
|
final16set();
|
||||||
|
$tnmt = 6; $phase = 0;
|
||||||
|
startBetting();
|
||||||
|
break;
|
||||||
|
case 6: //베팅중
|
||||||
|
$tnmt = 7; $phase = 0;
|
||||||
|
break;
|
||||||
|
case 7: //16강중
|
||||||
|
finalFight($type, $tnmt, $phase, 16); $phase++;
|
||||||
|
if($phase >= 8) { $tnmt = 8; $phase = 0; }
|
||||||
|
break;
|
||||||
|
case 8: //8강중
|
||||||
|
finalFight($type, $tnmt, $phase, 8); $phase++;
|
||||||
|
if($phase >= 4) { $tnmt = 9; $phase = 0; }
|
||||||
|
break;
|
||||||
|
case 9: //4강중
|
||||||
|
finalFight($type, $tnmt, $phase, 4); $phase++;
|
||||||
|
if($phase >= 2) { $tnmt = 10; $phase = 0; }
|
||||||
|
break;
|
||||||
|
case 10: //결승중
|
||||||
|
finalFight($type, $tnmt, $phase, 2);
|
||||||
|
$tnmt = 0; $phase = 0;
|
||||||
|
setGift($type, $tnmt, $phase);
|
||||||
|
$i = $iter;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//업데이트 횟수
|
//베팅은 무조건 60페이즈후 진행(최대 1시간)
|
||||||
$iter = intdiv($admin['offset'], $unit) + 1;
|
if($tnmt == 6) {
|
||||||
|
$betTerm = $unit * 60;
|
||||||
|
if($betTerm > 3600) { $betTerm = 3600; }
|
||||||
|
//처리 초 더한 날짜
|
||||||
|
$dt = date("Y-m-d H:i:s", strtotime($admin['tnmt_time']) + $unit * $i + $betTerm);
|
||||||
|
$gameStor->tournament = $tnmt;
|
||||||
|
$gameStor->phase = $phase;
|
||||||
|
$gameStor->tnmt_time = $dt;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for($i=0; $i < $iter; $i++) {
|
if($admin['tnmt_auto'] == 1) {
|
||||||
switch($tnmt) {
|
//처리 초 더한 날짜
|
||||||
case 1: //신청 마감
|
$dt = date("Y-m-d H:i:s", strtotime($admin['tnmt_time']) + $unit * $i);
|
||||||
fillLowGenAll();
|
$hr = substr($dt, 11, 2);
|
||||||
$tnmt = 2; $phase = 0;
|
//지정시간대 넘어가면 중단 20~24시
|
||||||
break;
|
if($hr < 20) {
|
||||||
case 2: //예선중
|
$dt = substr($dt, 0, 11)."20:00:00";
|
||||||
qualify($type, $tnmt, $phase); $phase++;
|
|
||||||
if($phase >= 56) { $tnmt = 3; $phase = 0; }
|
|
||||||
break;
|
|
||||||
case 3: //추첨중
|
|
||||||
selectionAll($type, $tnmt, $phase); $phase+=8;
|
|
||||||
if($phase >= 32) { $tnmt = 4; $phase = 0; }
|
|
||||||
break;
|
|
||||||
case 4: //본선중
|
|
||||||
finallySingle($type, $tnmt, $phase); $phase++;
|
|
||||||
if($phase >= 6) { $tnmt = 5; $phase = 0; }
|
|
||||||
break;
|
|
||||||
case 5: //배정중
|
|
||||||
final16set();
|
|
||||||
$tnmt = 6; $phase = 0;
|
|
||||||
break;
|
|
||||||
case 6: //베팅중
|
|
||||||
$tnmt = 7; $phase = 0;
|
|
||||||
break;
|
|
||||||
case 7: //16강중
|
|
||||||
finalFight($type, $tnmt, $phase, 16); $phase++;
|
|
||||||
if($phase >= 8) { $tnmt = 8; $phase = 0; }
|
|
||||||
break;
|
|
||||||
case 8: //8강중
|
|
||||||
finalFight($type, $tnmt, $phase, 8); $phase++;
|
|
||||||
if($phase >= 4) { $tnmt = 9; $phase = 0; }
|
|
||||||
break;
|
|
||||||
case 9: //4강중
|
|
||||||
finalFight($type, $tnmt, $phase, 4); $phase++;
|
|
||||||
if($phase >= 2) { $tnmt = 10; $phase = 0; }
|
|
||||||
break;
|
|
||||||
case 10: //결승중
|
|
||||||
finalFight($type, $tnmt, $phase, 2);
|
|
||||||
$tnmt = 0; $phase = 0;
|
|
||||||
setGift($type, $tnmt, $phase);
|
|
||||||
$i = $iter;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//베팅은 무조건 60페이즈후 진행(최대 1시간)
|
|
||||||
if($tnmt == 6) {
|
|
||||||
$betTerm = $unit * 60;
|
|
||||||
if($betTerm > 3600) { $betTerm = 3600; }
|
|
||||||
//처리 초 더한 날짜
|
|
||||||
$dt = date("Y-m-d H:i:s", strtotime($admin['tnmt_time']) + $unit * $i + $betTerm);
|
|
||||||
$gameStor->tournament = $tnmt;
|
$gameStor->tournament = $tnmt;
|
||||||
$gameStor->phase = $phase;
|
$gameStor->phase = $phase;
|
||||||
$gameStor->tnmt_time = $dt;
|
$gameStor->tnmt_time = $dt;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($admin['tnmt_auto'] == 1) {
|
|
||||||
//처리 초 더한 날짜
|
|
||||||
$dt = date("Y-m-d H:i:s", strtotime($admin['tnmt_time']) + $unit * $i);
|
|
||||||
$hr = substr($dt, 11, 2);
|
|
||||||
//지정시간대 넘어가면 중단 20~24시
|
|
||||||
if($hr < 20) {
|
|
||||||
$dt = substr($dt, 0, 11)."20:00:00";
|
|
||||||
$gameStor->tournament = $tnmt;
|
|
||||||
$gameStor->phase = $phase;
|
|
||||||
$gameStor->tnmt_time = $dt;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$second = $unit * $iter;
|
|
||||||
$gameStor->tournament = $tnmt;
|
|
||||||
$gameStor->phase = $phase;
|
|
||||||
$gameStor->tnmt_time = (new \DateTimeImmutable($admin['tnmt_time']))->add(new \DateInterval("PT{$second}S"))->format('Y-m-d H:i:s');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$second = $unit * $iter;
|
||||||
|
$gameStor->tournament = $tnmt;
|
||||||
|
$gameStor->phase = $phase;
|
||||||
|
$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() {
|
||||||
@@ -296,11 +298,51 @@ function startTournament($auto, $type) {
|
|||||||
['설전','책사'],
|
['설전','책사'],
|
||||||
][$type];
|
][$type];
|
||||||
|
|
||||||
$history[] = "<S>◆</>{$admin['year']}년 {$admin['month']}월:{$openerText}<C>{$typeText}</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>{$genTypeText}</span>들을 모집하고 있습니다!";
|
$history[] = "<S>◆</>{$admin['year']}년 {$admin['month']}월:<B><b>【대회】</b></>{$openerText}<C>{$typeText}</> 대회가 개최됩니다! 천하의 <span class='ev_highlight'>{$genTypeText}</span>들을 모집하고 있습니다!";
|
||||||
|
|
||||||
pushGlobalHistoryLog($history, $admin['year'], $admin['month']);
|
pushGlobalHistoryLog($history, $admin['year'], $admin['month']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function startBetting(){
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
[$year, $month] = $gameStor->getValuesAsArray(['year', 'month']);
|
||||||
|
pushGlobalHistoryLog([
|
||||||
|
"<S>◆</>{$year}년 {$month}월:<B><b>【대회】</b></>우승자를 예상하는 <C>내기</>가 진행중입니다! 호사가의 참여를 기다립니다!"
|
||||||
|
], $year, $month);
|
||||||
|
|
||||||
|
$betGold = 10;
|
||||||
|
|
||||||
|
$npcList = $db->queryFirstColumn('SELECT no FROM general WHERE npc >= 2 AND gold >= (500 + %i)', $betGold);
|
||||||
|
$npcBet = [];
|
||||||
|
$betSum = [
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach($npcList as $npcID){
|
||||||
|
$target = Util::randRangeInt(0, 15);
|
||||||
|
$betSum[$target] += $betGold;
|
||||||
|
$npcBet[] = [$npcID, $target];
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->update('general', [
|
||||||
|
'gold'=>$db->sqleval('gold - %i', $betGold),
|
||||||
|
], 'no IN %li', $npcList);
|
||||||
|
foreach($npcBet as [$npcID, $betTarget]){
|
||||||
|
$targetKey = "bet{$betTarget}";
|
||||||
|
$db->update('betting', [
|
||||||
|
"bet{$betTarget}"=>$db->sqleval('%b + %i', $targetKey, $betGold),
|
||||||
|
], 'general_id = %i', $npcID);
|
||||||
|
}
|
||||||
|
foreach($betSum as $betTarget=>$betSumGold){
|
||||||
|
$targetKey = "bet{$betTarget}";
|
||||||
|
$db->update('betting', [
|
||||||
|
"bet{$betTarget}"=>$db->sqleval('%b + %i', $targetKey, $betSumGold),
|
||||||
|
], 'general_id = 0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function fillLowGenAll() {
|
function fillLowGenAll() {
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
@@ -785,8 +827,8 @@ function setGift($tnmt_type, $tnmt, $phase) {
|
|||||||
$josaYiWinner = JosaUtil::pick($winner['name'], '이');
|
$josaYiWinner = JosaUtil::pick($winner['name'], '이');
|
||||||
$josaYiRunnerUp = JosaUtil::pick($runnerUp['name'], '이');
|
$josaYiRunnerUp = JosaUtil::pick($runnerUp['name'], '이');
|
||||||
|
|
||||||
$winnerLogger->pushGlobalHistoryLog("<C>{$tp}</> 대회에서 <Y>{$winner['name']}</>{$josaYiWinner} <C>우승</>, <Y>{$runnerUp['name']}</>{$josaYiRunnerUp} <C>준우승</>을 차지하여 천하에 이름을 떨칩니다!", ActionLogger::EVENT_YEAR_MONTH);
|
$winnerLogger->pushGlobalHistoryLog("<B><b>【대회】</b></><C>{$tp}</> 대회에서 <Y>{$winner['name']}</>{$josaYiWinner} <C>우승</>, <Y>{$runnerUp['name']}</>{$josaYiRunnerUp} <C>준우승</>을 차지하여 천하에 이름을 떨칩니다!", ActionLogger::EVENT_YEAR_MONTH);
|
||||||
$winnerLogger->pushGlobalHistoryLog("<C>{$tp}</> 대회의 <S>우승자</>에게는 <C>{$winnerRewardText}</>, <S>준우승자</>에겐 <C>{$runnerUpRewardText}</>의 <S>상금</>과 약간의 <S>명성</>이 주어집니다!", ActionLogger::EVENT_YEAR_MONTH);
|
$winnerLogger->pushGlobalHistoryLog("<B><b>【대회】</b></><C>{$tp}</> 대회의 <S>우승자</>에게는 <C>{$winnerRewardText}</>, <S>준우승자</>에겐 <C>{$runnerUpRewardText}</>의 <S>상금</>과 약간의 <S>명성</>이 주어집니다!", ActionLogger::EVENT_YEAR_MONTH);
|
||||||
|
|
||||||
$generalObjList = General::createGeneralObjListFromDB(array_keys($resultHelper));
|
$generalObjList = General::createGeneralObjListFromDB(array_keys($resultHelper));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user