유저장은 자동 사령턴 켬끔 가능

This commit is contained in:
2020-06-06 13:20:01 +09:00
parent ac5d2268e5
commit 522f5c8a86
5 changed files with 855 additions and 839 deletions
+161 -154
View File
@@ -1,154 +1,161 @@
<?php <?php
namespace sammo; namespace sammo;
include "lib.php"; include "lib.php";
include "func.php"; include "func.php";
$showDieImmediatelyBtn = false; $showDieImmediatelyBtn = false;
$availableDieImmediately = false; $availableDieImmediately = false;
//로그인 검사 //로그인 검사
$session = Session::requireGameLogin()->setReadOnly(); $session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID(); $userID = Session::getUserID();
$generalID = $session->generalID; $generalID = $session->generalID;
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
$gameStor->cacheValues(['turntime', 'opentime', 'autorun_user']);
increaseRefresh("내정보", 1);
increaseRefresh("내정보", 1);
$me = General::createGeneralObjFromDB($generalID);
$me = General::createGeneralObjFromDB($generalID);
$myset = $me->getVar('myset');
if ($myset > 0) { $myset = $me->getVar('myset');
$submit = 'button'; if ($myset > 0) {
} else { $submit = 'button';
$submit = 'hidden'; } else {
} $submit = 'hidden';
}
$targetTime = addTurn($me->getVar('lastrefresh'), $gameStor->turnterm, 2);
if($gameStor->turntime <= $gameStor->opentime){ $targetTime = addTurn($me->getVar('lastrefresh'), $gameStor->turnterm, 2);
//서버 가오픈시 할 수 있는 행동 if($gameStor->turntime <= $gameStor->opentime){
if($me->getNPCType() == 0){ //서버 가오픈시 할 수 있는 행동
$showDieImmediatelyBtn = true; if($me->getNPCType() == 0){
if($targetTime <= TimeUtil::now()){ $showDieImmediatelyBtn = true;
$availableDieImmediately = true; if($targetTime <= TimeUtil::now()){
} $availableDieImmediately = true;
} }
} }
}
$use_treatment = $me->getAuxVar('use_treatment')??10;
$use_treatment = $me->getAuxVar('use_treatment')??10;
?> $use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn')??1;
<!DOCTYPE html> ?>
<html> <!DOCTYPE html>
<head> <html>
<meta charset="UTF-8"> <head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta charset="UTF-8">
<meta name="viewport" content="width=1024" /> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<title><?=UniqueConst::$serverName?>: 내정보</title> <meta name="viewport" content="width=1024" />
<script> <title><?=UniqueConst::$serverName?>: 내정보</title>
var availableDieImmediately = <?=$availableDieImmediately?'true':'false'?>; <script>
</script> var availableDieImmediately = <?=$availableDieImmediately?'true':'false'?>;
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?> </script>
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?> <?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
<?=WebUtil::printJS('js/common.js')?> <?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
<?=WebUtil::printJS('js/myPage.js')?> <?=WebUtil::printJS('js/common.js')?>
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?> <?=WebUtil::printJS('js/myPage.js')?>
<?=WebUtil::printCSS('../d_shared/common.css')?> <?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
<?=WebUtil::printCSS('css/common.css')?> <?=WebUtil::printCSS('../d_shared/common.css')?>
</head> <?=WebUtil::printCSS('css/common.css')?>
</head>
<body>
<table align=center width=1000 class='tb_layout bg0'> <body>
<tr><td>내 정 보<br><?=backButton()?></td></tr> <table align=center width=1000 class='tb_layout bg0'>
</table> <tr><td>내 정 보<br><?=backButton()?></td></tr>
<table align=center width=1000 class='tb_layout bg0'> </table>
<tr> <table align=center width=1000 class='tb_layout bg0'>
<td width=50%> <tr>
<?php generalInfo($me); ?> <td width=50%>
<?php generalInfo2($me); ?> <?php generalInfo($me); ?>
</td> <?php generalInfo2($me); ?>
<td width=50% valign=top style="padding-left:4ch;"> </td>
토너먼트 【 <td width=50% valign=top style="padding-left:4ch;">
<input type=radio class='tnmt' name=tnmt value=0 <?=$me->getVar('tnmt')==0?"checked":""; ?>>수동참여 토너먼트 【
<input type=radio class='tnmt' name=tnmt value=1 <?=$me->getVar('tnmt')==1?"checked":""; ?>>동참여 <input type=radio class='tnmt' name=tnmt value=0 <?=$me->getVar('tnmt')==0?"checked":""; ?>>동참여
】<br> <input type=radio class='tnmt' name=tnmt value=1 <?=$me->getVar('tnmt')==1?"checked":""; ?>>자동참여
∞<span style='color:orange'>개막직전 남는자리가 있을경우 랜덤하게 참여합니다.</span><br><br> <br>
∞<span style='color:orange'>개막직전 남는자리가 있을경우 랜덤하게 참여합니다.</span><br><br>
환약 사용 【<select id='use_treatment' name='use_treatment'>
<option value=10 <?=$use_treatment==10?"selected":""; ?>>경상</option> 환약 사용 【<select id='use_treatment' name='use_treatment'>
<option value=20 <?=$use_treatment==21?"selected":""; ?>>상</option> <option value=10 <?=$use_treatment==10?"selected":""; ?>>상</option>
<option value=40 <?=$use_treatment==41?"selected":""; ?>>심각</option> <option value=20 <?=$use_treatment==21?"selected":""; ?>>중상</option>
<option value=60 <?=$use_treatment==61?"selected":""; ?>>위독</option> <option value=40 <?=$use_treatment==41?"selected":""; ?>>심각</option>
<option value=100 <?=$use_treatment==100?"selected":""; ?>>사용안함</option> <option value=60 <?=$use_treatment==61?"selected":""; ?>>위독</option>
</select>】<br> <option value=100 <?=$use_treatment==100?"selected":""; ?>>사용안함</option>
∞<span style='color:orange'>부상을 입었을 때 환약을 사용하는 기준입니다.</span><br><br> </select>】<br>
∞<span style='color:orange'>부상을 입었을 때 환약을 사용하는 기준입니다.</span><br><br>
수비 【<select id='defence_train' name='defence_train'> <?php if(($gameStor->autorun_user['options']['chief'])??false) : ?>
<option value=90 <?=$me->getVar('defence_train')==90?"selected":""; ?>>☆(훈사90)</option> 자동 사령턴 허용 【<select id='use_auto_nation_turn' name='use_auto_nation_turn'>
<option value=80 <?=$me->getVar('defence_train')==80?"selected":""; ?>>◎(훈사80)</option> <option value=1 <?=$use_auto_nation_turn?"selected":""; ?>>허용</option>
<option value=60 <?=$me->getVar('defence_train')==60?"selected":""; ?>>○(훈사60)</option> <option value=0 <?=(!$use_auto_nation_turn)?"selected":""; ?>>허용 안함</option>
<option value=40 <?=$me->getVar('defence_train')==40?"selected":""; ?>>△(훈사40)</option> </select>】<br>
<option value=999 <?=$me->getVar('defence_train')==999?"selected":""; ?>>×[훈련, 사기 -3]</option> ∞<span style='color:orange'>수뇌가 되었을 때 휴식 턴이어도 적당한 턴을 알아서 넣는 것을 허용합니다.</span><br><br>
</select> <?php endif; ?>
】<br><br> 수비 【<select id='defence_train' name='defence_train'>
<input type=<?=$submit?> id='set_my_setting' name=btn style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px; value=설정저장><br> <option value=90 <?=$me->getVar('defence_train')==90?"selected":""; ?>>☆(훈사90)</option>
∞<span style='color:orange'>설정저장은 이달중 <?=$myset?>회 남았습니다.</span><br><br> <option value=80 <?=$me->getVar('defence_train')==80?"selected":""; ?>>◎(훈사80)</option>
<?php if(!($gameStor->autorun_user['limit_minutes']??false)): ?> <option value=60 <?=$me->getVar('defence_train')==60?"selected":""; ?>>○(훈사60)</option>
휴 가 신 청<br> <option value=40 <?=$me->getVar('defence_train')==40?"selected":""; ?>>△(훈사40)</option>
<button type="button" id='vacation' style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>휴가 신청</button><br><br> <option value=999 <?=$me->getVar('defence_train')==999?"selected":""; ?>>×[훈련, 사기 -3]</option>
<?php endif; ?> </select>
<!--빙의 해제용 삭턴 조절<br> 】<br><br>
<a href="b_myPage.php?detachNPC=1"><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>빙의 해체 요청</button></a>--> <input type=<?=$submit?> id='set_my_setting' name=btn style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px; value=설정저장><br>
∞<span style='color:orange'>설정저장은 이달중 <?=$myset?>회 남았습니다.</span><br><br>
<?php if($showDieImmediatelyBtn): ?> <?php if(!($gameStor->autorun_user['limit_minutes']??false)): ?>
가오픈 기간 내 장수 삭제 (<?=substr($targetTime, 0, 19)?> 부터)<br> 휴 가 신 청<br>
<a href="c_die_immediately.php" id='die_immediately'><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>장수 삭제</button></a><br><br> <button type="button" id='vacation' style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>휴가 신청</button><br><br>
<?php endif; ?> <?php endif; ?>
<!--빙의 해제용 삭턴 조절<br>
개인용 CSS<br> <a href="b_myPage.php?detachNPC=1"><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>빙의 해체 요청</button></a>-->
<textarea id='custom_css' style='color:white;background-color:black;width:420px;height:150px;'></textarea>
</td> <?php if($showDieImmediatelyBtn): ?>
</tr> 가오픈 기간 내 장수 삭제 (<?=substr($targetTime, 0, 19)?> 부터)<br>
<tr> <a href="c_die_immediately.php" id='die_immediately'><button type="button" style=background-color:<?=GameConst::$basecolor2?>;color:white;width:160px;height:30px;font-size:13px;>장수 삭제</button></a><br><br>
<td align=center id=bg1><font color=skyblue size=3>개인 기록</font></td> <?php endif; ?>
<td align=center id=bg1><font color=orange size=3>전투 기록</font></td>
</tr> 개인용 CSS<br>
<tr> <textarea id='custom_css' style='color:white;background-color:black;width:420px;height:150px;'></textarea>
<td valign=top> </td>
<div id='generalActionPlate'> </tr>
<?=formatHistoryToHTML(getGeneralActionLogRecent($generalID, 24), 'generalAction')?> <tr>
</div> <td align=center id=bg1><font color=skyblue size=3>개인 기록</font></td>
<button type="button" class="load_old_log btn btn-secondary btn-block" data-log_type="generalAction">이전 로그 불러오기</button> <td align=center id=bg1><font color=orange size=3>전투 기록</font></td>
</td> </tr>
<td valign=top> <tr>
<div id='battleDetailPlate'> <td valign=top>
<?=formatHistoryToHTML(getBattleDetailLogRecent($generalID, 24), 'battleDetail')?> <div id='generalActionPlate'>
</div> <?=formatHistoryToHTML(getGeneralActionLogRecent($generalID, 24), 'generalAction')?>
<button type="button" class="load_old_log btn btn-secondary btn-block" data-log_type="battleDetail">이전 로그 불러오기</button> </div>
</td> <button type="button" class="load_old_log btn btn-secondary btn-block" data-log_type="generalAction">이전 로그 불러오기</button>
</tr> </td>
<tr> <td valign=top>
<td align=center id=bg1><font color=skyblue size=3>장수 열전</font></td> <div id='battleDetailPlate'>
<td align=center id=bg1><font color=orange size=3>전투 결과</font></td> <?=formatHistoryToHTML(getBattleDetailLogRecent($generalID, 24), 'battleDetail')?>
</tr> </div>
<tr> <button type="button" class="load_old_log btn btn-secondary btn-block" data-log_type="battleDetail">이전 로그 불러오기</button>
<td valign=top> </td>
<?=formatHistoryToHTML(getGeneralHistoryLogAll($generalID))?> </tr>
</td> <tr>
<td valign=top> <td align=center id=bg1><font color=skyblue size=3>장수 열전</font></td>
<div id='battleResultPlate'> <td align=center id=bg1><font color=orange size=3>전투 결과</font></td>
<?=formatHistoryToHTML(getBattleResultRecent($generalID, 24), 'battleResult')?> </tr>
</div> <tr>
<button type="button" class="load_old_log btn btn-secondary btn-block" data-log_type="battleResult">이전 로그 불러오기</button> <td valign=top>
</td> <?=formatHistoryToHTML(getGeneralHistoryLogAll($generalID))?>
</tr> </td>
</table> <td valign=top>
<table align=center width=1000 class='tb_layout bg0'> <div id='battleResultPlate'>
<tr><td><?=backButton()?></td></tr> <?=formatHistoryToHTML(getBattleResultRecent($generalID, 24), 'battleResult')?>
<tr><td><?=banner()?></td></tr> </div>
</table> <button type="button" class="load_old_log btn btn-secondary btn-block" data-log_type="battleResult">이전 로그 불러오기</button>
</body> </td>
</html> </tr>
</table>
<table align=center width=1000 class='tb_layout bg0'>
<tr><td><?=backButton()?></td></tr>
<tr><td><?=banner()?></td></tr>
</table>
</body>
</html>
+81 -76
View File
@@ -1,77 +1,82 @@
<?php <?php
namespace sammo; namespace sammo;
include "lib.php"; include "lib.php";
include "func.php"; include "func.php";
WebUtil::requireAJAX(); WebUtil::requireAJAX();
$session = Session::requireGameLogin([])->setReadOnly(); $session = Session::requireGameLogin([])->setReadOnly();
$userID = Session::getUserID(); $userID = Session::getUserID();
$generalID = $session->generalID; $generalID = $session->generalID;
increaseRefresh("내정보 수정", 0); increaseRefresh("내정보 수정", 0);
$action = Util::getPost('action'); $action = Util::getPost('action');
$tnmt = Util::getPost('tnmt', 'int', 1); $tnmt = Util::getPost('tnmt', 'int', 1);
$defence_train = Util::getPost('defence_train', 'int', 80); $defence_train = Util::getPost('defence_train', 'int', 80);
$use_treatment = Util::getPost('use_treatment', 'int', 10); $use_treatment = Util::getPost('use_treatment', 'int', 10);
//$detachNPC = Util::getPost('detachNPC', 'bool'); $use_auto_nation_turn = Util::getPost('use_auto_nation_turn', 'int', 1);
$detachNPC = false; //$detachNPC = Util::getPost('detachNPC', 'bool');
$detachNPC = false;
if ($defence_train <= 40) {
$defence_train = 40; if ($defence_train <= 40) {
} $defence_train = 40;
}
if($defence_train <= 90){
$defence_train = Util::round($defence_train, -1); if($defence_train <= 90){
} $defence_train = Util::round($defence_train, -1);
else{ }
$defence_train = 999; else{
} $defence_train = 999;
}
if($tnmt < 0 || $tnmt > 1){
$tnmt = 1; if($tnmt < 0 || $tnmt > 1){
} $tnmt = 1;
}
$db = DB::db();
$me = General::createGeneralObjFromDB($generalID); $db = DB::db();
$me = General::createGeneralObjFromDB($generalID);
if($defence_train != $me->getVar('defence_train')){
if($defence_train == 999){ if($defence_train != $me->getVar('defence_train')){
$me->increaseVar('myset', -1); if($defence_train == 999){
$me->setVar('defence_train', $defence_train); $me->increaseVar('myset', -1);
$me->increaseVar('train', -3); $me->setVar('defence_train', $defence_train);
$me->increaseVar('atmos', -3); $me->increaseVar('train', -3);
} $me->increaseVar('atmos', -3);
else{ }
$me->increaseVar('myset', -1); else{
$me->setVar('defence_train', $defence_train); $me->increaseVar('myset', -1);
} $me->setVar('defence_train', $defence_train);
} }
}
$me->setAuxVar('use_treatment', Util::valueFit($use_treatment, 10, 100));
if($use_auto_nation_turn != $me->getAuxVar('use_auto_nation_turn')){
if($me->getVar('tnmt') != $tnmt){ $me->setAuxVar('use_auto_nation_turn', $use_auto_nation_turn);
$me->setVar('tnmt', $tnmt); }
}
$me->setAuxVar('use_treatment', Util::valueFit($use_treatment, 10, 100));
if($me->getNPCType() == 1 && $detachNPC){
$turnterm = $gameStor->turnterm; if($me->getVar('tnmt') != $tnmt){
$me->setVar('tnmt', $tnmt);
if($turnterm < 10){ }
$targetKillTurn = 30 / $turnterm;
} if($me->getNPCType() == 1 && $detachNPC){
else{ $turnterm = $gameStor->turnterm;
$targetKillTurn = 60 / $turnterm;
} if($turnterm < 10){
$me->setVar('killturn', $targetKillTurn); $targetKillTurn = 30 / $turnterm;
} }
else{
$me->applyDB($db); $targetKillTurn = 60 / $turnterm;
}
Json::die([ $me->setVar('killturn', $targetKillTurn);
'result'=>true, }
'reason'=>'success'
$me->applyDB($db);
Json::die([
'result'=>true,
'reason'=>'success'
]); ]);
+166 -165
View File
@@ -1,166 +1,167 @@
jQuery(function($){ jQuery(function($) {
var initCustomCSSForm = function(){ var initCustomCSSForm = function() {
var lastTimeOut = null; var lastTimeOut = null;
var $obj = $('#custom_css'); var $obj = $('#custom_css');
var key = 'sam_customCSS'; var key = 'sam_customCSS';
var text = localStorage.getItem(key); var text = localStorage.getItem(key);
if(text){ if (text) {
$obj.val(text); $obj.val(text);
console.log(text); console.log(text);
} }
if($obj.on('change keyup paste', function(){ if ($obj.on('change keyup paste', function() {
var newText = $obj.val(); var newText = $obj.val();
if(text == newText){ if (text == newText) {
return; return;
} }
if(lastTimeOut){ if (lastTimeOut) {
clearTimeout(lastTimeOut); clearTimeout(lastTimeOut);
} }
$obj.css('background-color', '#222222'); $obj.css('background-color', '#222222');
lastTimeOut = setTimeout(function(){ lastTimeOut = setTimeout(function() {
text = $obj.val(); text = $obj.val();
localStorage.setItem(key, text); localStorage.setItem(key, text);
$obj.css('background-color', 'black'); $obj.css('background-color', 'black');
}, 500); }, 500);
})); }));
} }
$('.load_old_log').click(function(){ $('.load_old_log').click(function() {
var $thisBtn = $(this); var $thisBtn = $(this);
var logType = $thisBtn.data('log_type'); var logType = $thisBtn.data('log_type');
var $last = $('.log_{0}:last'.format(logType)); var $last = $('.log_{0}:last'.format(logType));
var reqTo = null; var reqTo = null;
if($last.length){ if ($last.length) {
reqTo = $last.data('seq'); reqTo = $last.data('seq');
} }
$.post({ $.post({
url:'j_general_log_old.php', url: 'j_general_log_old.php',
dataType:'json', dataType: 'json',
data:{ data: {
to:reqTo, to: reqTo,
type:logType type: logType
} }
}).then(function(data){ }).then(function(data) {
if(!data){ if (!data) {
return quickReject('로그를 받아오지 못했습니다.'); return quickReject('로그를 받아오지 못했습니다.');
} }
if(!data.result){ if (!data.result) {
return quickReject('로그를 받아오지 못했습니다. : '+data.reason); return quickReject('로그를 받아오지 못했습니다. : ' + data.reason);
} }
var keys = Object.keys(data.log); var keys = Object.keys(data.log);
if(keys.length > 1 && keys[0] < keys[1]){ if (keys.length > 1 && keys[0] < keys[1]) {
keys.reverse(); keys.reverse();
} }
if(keys == 0){ if (keys == 0) {
$thisBtn.hide(); $thisBtn.hide();
return; return;
} }
var html = []; var html = [];
$.each(keys, function(_, key){ $.each(keys, function(_, key) {
if($('#log_{0}_{1}'.format(logType, key)).length){ if ($('#log_{0}_{1}'.format(logType, key)).length) {
return true; return true;
} }
var item = data.log[key]; var item = data.log[key];
html.push("<div class='log_{0}' id='log_{0}_{1}' data-seq='{1}'>{2}</div>".format(logType, key, item)); html.push("<div class='log_{0}' id='log_{0}_{1}' data-seq='{1}'>{2}</div>".format(logType, key, item));
}); });
$('#{0}Plate'.format(logType)).append(html); $('#{0}Plate'.format(logType)).append(html);
}, errUnknown) }, errUnknown)
.fail(function(reason){ .fail(function(reason) {
alert(reason); alert(reason);
location.reload(); location.reload();
}); });
}) })
initCustomCSSForm(); initCustomCSSForm();
$('#die_immediately').click(function(){ $('#die_immediately').click(function() {
if(!confirm('정말로 삭제하시겠습니까?')){ if (!confirm('정말로 삭제하시겠습니까?')) {
return false; return false;
} }
$.post({ $.post({
url:'j_die_immediately.php', url: 'j_die_immediately.php',
dataType:'json', dataType: 'json',
}).then(function(data){ }).then(function(data) {
if(!data){ if (!data) {
return quickReject('실패했습니다.'); return quickReject('실패했습니다.');
} }
if(!data.result){ if (!data.result) {
return quickReject(data.reason); return quickReject(data.reason);
} }
location.replace('..'); location.replace('..');
}, errUnknown) }, errUnknown)
.fail(function(reason){ .fail(function(reason) {
alert(reason); alert(reason);
location.reload(); location.reload();
}); });
return false; return false;
return false; return false;
}); });
$('#vacation').click(function(){ $('#vacation').click(function() {
if(!confirm('휴가 기능을 신청할까요?')){ if (!confirm('휴가 기능을 신청할까요?')) {
return false; return false;
} }
$.post({ $.post({
url:'j_vacation.php', url: 'j_vacation.php',
dataType:'json', dataType: 'json',
}).then(function(data){ }).then(function(data) {
if(!data){ if (!data) {
return quickReject('실패했습니다.'); return quickReject('실패했습니다.');
} }
if(!data.result){ if (!data.result) {
return quickReject(data.reason); return quickReject(data.reason);
} }
location.reload(); location.reload();
}, errUnknown) }, errUnknown)
.fail(function(reason){ .fail(function(reason) {
alert(reason); alert(reason);
location.reload(); location.reload();
}); });
return false; return false;
return false; return false;
}); });
$('#set_my_setting').click(function(){ $('#set_my_setting').click(function() {
$.post({ $.post({
url:'j_set_my_setting.php', url: 'j_set_my_setting.php',
dataType:'json', dataType: 'json',
data:{ data: {
tnmt:$('.tnmt:checked').val(), tnmt: $('.tnmt:checked').val(),
defence_train:$('#defence_train').val(), defence_train: $('#defence_train').val(),
use_treatment:$('#use_treatment').val(), use_treatment: $('#use_treatment').val(),
} use_auto_nation_turn: $('#use_auto_nation_turn').val(),
}).then(function(data){ }
if(!data){ }).then(function(data) {
return quickReject('실패했습니다.'); if (!data) {
} return quickReject('실패했습니다.');
if(!data.result){ }
return quickReject(data.reason); if (!data.result) {
} return quickReject(data.reason);
}
location.reload();
location.reload();
}, errUnknown)
.fail(function(reason){ }, errUnknown)
alert(reason); .fail(function(reason) {
location.reload(); alert(reason);
}); location.reload();
return false; });
return false; return false;
}); return false;
});
}); });
+3
View File
@@ -3251,6 +3251,9 @@ class GeneralAI
$month = $this->env['month']; $month = $this->env['month'];
if($npcType >= 2){ if($npcType >= 2){
if(!($general->getAuxVar('use_auto_nation_turn')??1)){
$general->setAuxVar('use_auto_nation_turn', 1);
}
if($general->getVar('officer_level') == 12){ if($general->getVar('officer_level') == 12){
if (in_array($month, [3, 6, 9, 12])) { if (in_array($month, [3, 6, 9, 12])) {
$this->choosePromotion(); $this->choosePromotion();
+444 -444
View File
@@ -1,445 +1,445 @@
<?php <?php
namespace sammo; namespace sammo;
use \Symfony\Component\Lock; use \Symfony\Component\Lock;
class TurnExecutionHelper class TurnExecutionHelper
{ {
/** @var General*/ /** @var General*/
protected $generalObj; protected $generalObj;
public function __construct(General $general) public function __construct(General $general)
{ {
$this->generalObj = $general; $this->generalObj = $general;
} }
public function __destruct() public function __destruct()
{ {
$this->applyDB(); $this->applyDB();
} }
public function applyDB(){ public function applyDB(){
$db = DB::db(); $db = DB::db();
$this->generalObj->applyDB($db); $this->generalObj->applyDB($db);
} }
public function getGeneral():General{ public function getGeneral():General{
return $this->generalObj; return $this->generalObj;
} }
public function preprocessCommand(array $env){ public function preprocessCommand(array $env){
$general = $this->getGeneral(); $general = $this->getGeneral();
$caller = $general->getPreTurnExecuteTriggerList($general); $caller = $general->getPreTurnExecuteTriggerList($general);
$caller->merge(new GeneralTriggerCaller( $caller->merge(new GeneralTriggerCaller(
new GeneralTrigger\che_부상경감($general), new GeneralTrigger\che_부상경감($general),
new GeneralTrigger\che_병력군량소모($general) new GeneralTrigger\che_병력군량소모($general)
)); ));
$caller->fire($env); $caller->fire($env);
} }
public function processBlocked():bool{ public function processBlocked():bool{
$general = $this->getGeneral(); $general = $this->getGeneral();
$blocked = $general->getVar('block'); $blocked = $general->getVar('block');
if($blocked < 2){ if($blocked < 2){
return false; return false;
} }
$date = $general->getTurnTime($general::TURNTIME_HM); $date = $general->getTurnTime($general::TURNTIME_HM);
$logger = $general->getLogger(); $logger = $general->getLogger();
if($blocked == 2){ if($blocked == 2){
$general->increaseVarWithLimit('killturn', -1, 0); $general->increaseVarWithLimit('killturn', -1, 0);
$logger->pushGeneralActionLog("현재 멀티, 또는 비매너로 인한<R>블럭</> 대상자입니다. <1>$date</>"); $logger->pushGeneralActionLog("현재 멀티, 또는 비매너로 인한<R>블럭</> 대상자입니다. <1>$date</>");
} }
else if($blocked == 3){ else if($blocked == 3){
$general->increaseVarWithLimit('killturn', -1, 0); $general->increaseVarWithLimit('killturn', -1, 0);
$logger->pushGeneralActionLog("현재 악성유저로 분류되어 <R>블럭</> 대상자입니다. <1>$date</>"); $logger->pushGeneralActionLog("현재 악성유저로 분류되어 <R>블럭</> 대상자입니다. <1>$date</>");
} }
else{ else{
//Hmm? //Hmm?
return false; return false;
} }
return true; return true;
} }
public function processNationCommand(Command\NationCommand $commandObj):LastTurn{ public function processNationCommand(Command\NationCommand $commandObj):LastTurn{
$general = $this->getGeneral(); $general = $this->getGeneral();
while(true){ while(true){
if(!$commandObj->hasFullConditionMet()){ if(!$commandObj->hasFullConditionMet()){
$date = $general->getTurnTime($general::TURNTIME_HM); $date = $general->getTurnTime($general::TURNTIME_HM);
$failString = $commandObj->getFailString(); $failString = $commandObj->getFailString();
$text = "{$failString} <1>{$date}</>"; $text = "{$failString} <1>{$date}</>";
$general->getLogger()->pushGeneralActionLog($text); $general->getLogger()->pushGeneralActionLog($text);
break; break;
} }
if(!$commandObj->addTermStack()){ if(!$commandObj->addTermStack()){
$date = $general->getTurnTime($general::TURNTIME_HM); $date = $general->getTurnTime($general::TURNTIME_HM);
$termString = $commandObj->getTermString(); $termString = $commandObj->getTermString();
$text = "{$termString} <1>{$date}</>"; $text = "{$termString} <1>{$date}</>";
$general->getLogger()->pushGeneralActionLog($text); $general->getLogger()->pushGeneralActionLog($text);
break; break;
} }
$result = $commandObj->run(); $result = $commandObj->run();
if($result){ if($result){
break; break;
} }
$alt = $commandObj->getAlternativeCommand(); $alt = $commandObj->getAlternativeCommand();
if($alt === null){ if($alt === null){
break; break;
} }
$commandObj = $alt; $commandObj = $alt;
$commandClassName = $alt->getName(); $commandClassName = $alt->getName();
} }
return $commandObj->getResultTurn(); return $commandObj->getResultTurn();
} }
public function processCommand(Command\GeneralCommand $commandObj, bool $autorunMode){ public function processCommand(Command\GeneralCommand $commandObj, bool $autorunMode){
$general = $this->getGeneral(); $general = $this->getGeneral();
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
$commandClassName = $commandObj->getName(); $commandClassName = $commandObj->getName();
while(true){ while(true){
if(!$commandObj->hasFullConditionMet()){ if(!$commandObj->hasFullConditionMet()){
$date = $general->getTurnTime($general::TURNTIME_HM); $date = $general->getTurnTime($general::TURNTIME_HM);
$failString = $commandObj->getFailString(); $failString = $commandObj->getFailString();
$text = "{$failString} <1>{$date}</>"; $text = "{$failString} <1>{$date}</>";
$general->getLogger()->pushGeneralActionLog($text); $general->getLogger()->pushGeneralActionLog($text);
break; break;
} }
if(!$commandObj->addTermStack()){ if(!$commandObj->addTermStack()){
$date = $general->getTurnTime($general::TURNTIME_HM); $date = $general->getTurnTime($general::TURNTIME_HM);
$termString = $commandObj->getTermString(); $termString = $commandObj->getTermString();
$text = "{$termString} <1>{$date}</>"; $text = "{$termString} <1>{$date}</>";
$general->getLogger()->pushGeneralActionLog($text); $general->getLogger()->pushGeneralActionLog($text);
break; break;
} }
$result = $commandObj->run(); $result = $commandObj->run();
if($result){ if($result){
break; break;
} }
$alt = $commandObj->getAlternativeCommand(); $alt = $commandObj->getAlternativeCommand();
if($alt === null){ if($alt === null){
break; break;
} }
$commandObj = $alt; $commandObj = $alt;
$commandClassName = $alt->getName(); $commandClassName = $alt->getName();
} }
$general->clearActivatedSkill(); $general->clearActivatedSkill();
$killTurn = $gameStor->killturn; $killTurn = $gameStor->killturn;
if($general->getNPCType() >= 2){ if($general->getNPCType() >= 2){
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} }
else if($general->getVar('killturn') > $killTurn){ else if($general->getVar('killturn') > $killTurn){
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} }
else if($autorunMode){ else if($autorunMode){
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} }
else if($commandClassName == '휴식'){ else if($commandClassName == '휴식'){
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} }
else{ else{
$general->setVar('killturn', $killTurn); $general->setVar('killturn', $killTurn);
} }
return $commandObj->getResultTurn(); return $commandObj->getResultTurn();
} }
function updateTurnTime(){ function updateTurnTime(){
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
$general = $this->getGeneral(); $general = $this->getGeneral();
$generalID = $general->getID(); $generalID = $general->getID();
$logger = $general->getLogger(); $logger = $general->getLogger();
$general->setVar('con', 0); $general->setVar('con', 0);
$generalName = $general->getName(); $generalName = $general->getName();
// 삭턴장수 삭제처리 // 삭턴장수 삭제처리
if($general->getVar('killturn') <= 0){ if($general->getVar('killturn') <= 0){
// npc유저 삭턴시 npc로 전환 // npc유저 삭턴시 npc로 전환
if($general->getNPCType() == 1 && $general->getVar('deadyear') > $gameStor->year){ if($general->getNPCType() == 1 && $general->getVar('deadyear') > $gameStor->year){
$ownerName = $general->getVar('owner_name'); $ownerName = $general->getVar('owner_name');
$josaYi = JosaUtil::pick($ownerName, '이'); $josaYi = JosaUtil::pick($ownerName, '이');
$logger->pushGlobalActionLog("{$ownerName}</>{$josaYi} <Y>{$generalName}</>의 육체에서 <S>유체이탈</>합니다!"); $logger->pushGlobalActionLog("{$ownerName}</>{$josaYi} <Y>{$generalName}</>의 육체에서 <S>유체이탈</>합니다!");
$general->setVar('killturn', ($general->getVar('deadyear') - $gameStor->year) * 12); $general->setVar('killturn', ($general->getVar('deadyear') - $gameStor->year) * 12);
$general->setVar('npc', $general->getVar('npc_org')); $general->setVar('npc', $general->getVar('npc_org'));
$general->setVar('owner', 1); $general->setVar('owner', 1);
$general->setVar('defence_train', 80); $general->setVar('defence_train', 80);
$general->setVar('owner_name', null); $general->setVar('owner_name', null);
} }
else{ else{
$general->applyDB($db); $general->applyDB($db);
storeOldGeneral($generalID, $gameStor->year, $gameStor->month); storeOldGeneral($generalID, $gameStor->year, $gameStor->month);
$general->kill($db); $general->kill($db);
return; return;
} }
} }
//은퇴 //은퇴
if($general->getVar('age') >= GameConst::$retirementYear && $general->getNPCType() == 0) { if($general->getVar('age') >= GameConst::$retirementYear && $general->getNPCType() == 0) {
if($gameStor->isunited == 0) { if($gameStor->isunited == 0) {
$general->applyDB($db); $general->applyDB($db);
CheckHall($generalID); CheckHall($generalID);
} }
$general->rebirth(); $general->rebirth();
} }
$turntime = addTurn($general->getTurnTime(), $gameStor->turnterm); $turntime = addTurn($general->getTurnTime(), $gameStor->turnterm);
$general->setVar('turntime', $turntime); $general->setVar('turntime', $turntime);
} }
static public function executeGeneralCommandUntil(string $date, \DateTimeInterface $limitActionTime, int $year, int $month){ static public function executeGeneralCommandUntil(string $date, \DateTimeInterface $limitActionTime, int $year, int $month){
$db = DB::db(); $db = DB::db();
$generalsTodo = $db->query( $generalsTodo = $db->query(
'SELECT no,name,turntime,killturn,block,npc,deadyear FROM general WHERE turntime < %s ORDER BY turntime ASC, `no` ASC', 'SELECT no,name,turntime,killturn,block,npc,deadyear FROM general WHERE turntime < %s ORDER BY turntime ASC, `no` ASC',
$date $date
); );
$currentTurn = null; $currentTurn = null;
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
$autorun_user = $gameStor->autorun_user; $autorun_user = $gameStor->autorun_user;
foreach($generalsTodo as $rawGeneral){ foreach($generalsTodo as $rawGeneral){
$currActionTime = new \DateTimeImmutable(); $currActionTime = new \DateTimeImmutable();
if($currActionTime > $limitActionTime){ if($currActionTime > $limitActionTime){
return [true, $currentTurn]; return [true, $currentTurn];
} }
$general = General::createGeneralObjFromDB($rawGeneral['no']); $general = General::createGeneralObjFromDB($rawGeneral['no']);
$turnObj = new static($general); $turnObj = new static($general);
$env = $gameStor->getAll(true); $env = $gameStor->getAll(true);
$hasNationTurn = false; $hasNationTurn = false;
if($general->getVar('nation') != 0 && $general->getVar('officer_level') >= 5){ if($general->getVar('nation') != 0 && $general->getVar('officer_level') >= 5){
$nationStor = KVStorage::getStorage($db, $general->getNationID(), 'nation_env'); $nationStor = KVStorage::getStorage($db, $general->getNationID(), 'nation_env');
$lastNationTurnKey = "turn_last_{$general->getVar('officer_level')}"; $lastNationTurnKey = "turn_last_{$general->getVar('officer_level')}";
//수뇌 몇 없는데 매번 left join 하는건 낭비인것 같다. //수뇌 몇 없는데 매번 left join 하는건 낭비인것 같다.
$rawNationTurn = $db->queryFirstRow( $rawNationTurn = $db->queryFirstRow(
'SELECT action, arg FROM nation_turn WHERE nation_id = %i AND officer_level = %i AND turn_idx =0', 'SELECT action, arg FROM nation_turn WHERE nation_id = %i AND officer_level = %i AND turn_idx =0',
$general->getVar('nation'), $general->getVar('nation'),
$general->getVar('officer_level') $general->getVar('officer_level')
)??[]; )??[];
$hasNationTurn = true; $hasNationTurn = true;
$nationCommand = $rawNationTurn['action']??null; $nationCommand = $rawNationTurn['action']??null;
$nationArg = Json::decode($rawNationTurn['arg']??null); $nationArg = Json::decode($rawNationTurn['arg']??null);
$lastNationTurn = LastTurn::fromRaw($nationStor->getValue($lastNationTurnKey)); $lastNationTurn = LastTurn::fromRaw($nationStor->getValue($lastNationTurnKey));
$nationCommandObj = buildNationCommandClass($nationCommand, $general, $env, $lastNationTurn, $nationArg); $nationCommandObj = buildNationCommandClass($nationCommand, $general, $env, $lastNationTurn, $nationArg);
} }
$autorunMode = false; $autorunMode = false;
$ai = null; $ai = null;
$turnObj->preprocessCommand($env); $turnObj->preprocessCommand($env);
$generalCommandObj = $general->getReservedTurn(0, $env); $generalCommandObj = $general->getReservedTurn(0, $env);
if($general->getNPCType() >= 2 || ($autorun_user['limit_minutes']??false)){ if($general->getNPCType() >= 2 || ($autorun_user['limit_minutes']??false)){
$ai = new GeneralAI($turnObj->getGeneral()); $ai = new GeneralAI($turnObj->getGeneral());
} }
if(!$turnObj->processBlocked()){ if(!$turnObj->processBlocked()){
if($hasNationTurn){ if($hasNationTurn){
if($ai){ if($ai && ($general->getAuxVar('use_auto_nation_turn')??1)){
$nationCommandObj = $ai->chooseNationTurn($nationCommandObj); $nationCommandObj = $ai->chooseNationTurn($nationCommandObj);
$cityName = CityConst::byID($general->getCityID())->name; $cityName = CityConst::byID($general->getCityID())->name;
LogText("NationTurn", "General, {$general->getName()}, {$general->getID()}, {$cityName}, {$general->getStaticNation()['name']}, {$nationCommandObj->getBrief()}, {$nationCommandObj->reason}, "); LogText("NationTurn", "General, {$general->getName()}, {$general->getID()}, {$cityName}, {$general->getStaticNation()['name']}, {$nationCommandObj->getBrief()}, {$nationCommandObj->reason}, ");
} }
$resultNationTurn = $turnObj->processNationCommand( $resultNationTurn = $turnObj->processNationCommand(
$nationCommandObj $nationCommandObj
); );
$nationStor->setValue($lastNationTurnKey, $resultNationTurn->toRaw()); $nationStor->setValue($lastNationTurnKey, $resultNationTurn->toRaw());
} }
if($ai){ if($ai){
$newGeneralCommandObj = $ai->chooseGeneralTurn($generalCommandObj); // npc AI 처리 $newGeneralCommandObj = $ai->chooseGeneralTurn($generalCommandObj); // npc AI 처리
if($generalCommandObj !== $newGeneralCommandObj){ if($generalCommandObj !== $newGeneralCommandObj){
$autorunMode = true; $autorunMode = true;
$generalCommandObj = $newGeneralCommandObj; $generalCommandObj = $newGeneralCommandObj;
} }
$cityName = CityConst::byID($general->getCityID())->name; $cityName = CityConst::byID($general->getCityID())->name;
LogText("turn", "General, {$general->getName()}, {$general->getID()}, {$cityName}, {$general->getStaticNation()['name']}, {$generalCommandObj->getBrief()}, {$generalCommandObj->reason}, "); LogText("turn", "General, {$general->getName()}, {$general->getID()}, {$cityName}, {$general->getStaticNation()['name']}, {$generalCommandObj->getBrief()}, {$generalCommandObj->reason}, ");
} }
$turnObj->processCommand($generalCommandObj, $autorunMode); $turnObj->processCommand($generalCommandObj, $autorunMode);
} }
pullNationCommand($general->getVar('nation'), $general->getVar('officer_level')); pullNationCommand($general->getVar('nation'), $general->getVar('officer_level'));
pullGeneralCommand($general->getID()); pullGeneralCommand($general->getID());
$currentTurn = $general->getTurnTime(); $currentTurn = $general->getTurnTime();
$general->increaseVarWithLimit('myset', 3, null, 9); $general->increaseVarWithLimit('myset', 3, null, 9);
$turnObj->updateTurnTime(); $turnObj->updateTurnTime();
$turnObj->applyDB(); $turnObj->applyDB();
} }
return [false, $currentTurn]; return [false, $currentTurn];
} }
static public function executeAllCommand(){ static public function executeAllCommand(){
//if(!timeover()) { return; } //if(!timeover()) { return; }
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
if(TimeUtil::now(true) < $gameStor->turntime){ if(TimeUtil::now(true) < $gameStor->turntime){
//턴 시각 이전이면 아무것도 하지 않음 //턴 시각 이전이면 아무것도 하지 않음
return true; return true;
} }
if(!tryLock()){ if(!tryLock()){
return; return;
} }
if ($gameStor->isunited == 2) { if ($gameStor->isunited == 2) {
//천통시에는 동결 //천통시에는 동결
return; return;
} }
$gameStor->cacheAll(); $gameStor->cacheAll();
// 1턴이상 갱신 없었으면 서버 지연 // 1턴이상 갱신 없었으면 서버 지연
checkDelay(); checkDelay();
// 접속자수, 접속국가, 국가별 접속장수 갱신 // 접속자수, 접속국가, 국가별 접속장수 갱신
updateOnline(); updateOnline();
//접속자 수 따라서 갱신제한 변경 //접속자 수 따라서 갱신제한 변경
CheckOverhead(); CheckOverhead();
$date = TimeUtil::now(true); $date = TimeUtil::now(true);
// 최종 처리 월턴의 다음 월턴시간 구함 // 최종 처리 월턴의 다음 월턴시간 구함
$prevTurn = cutTurn($gameStor->turntime, $gameStor->turnterm); $prevTurn = cutTurn($gameStor->turntime, $gameStor->turnterm);
$nextTurn = addTurn($prevTurn, $gameStor->turnterm); $nextTurn = addTurn($prevTurn, $gameStor->turnterm);
$maxActionTime = Util::toInt(ini_get('max_execution_time')); $maxActionTime = Util::toInt(ini_get('max_execution_time'));
if($maxActionTime == 0){ if($maxActionTime == 0){
$maxActionTime = 60; $maxActionTime = 60;
} }
else { else {
$maxActionTime = max($maxActionTime * 2 / 3, $maxActionTime - 10); $maxActionTime = max($maxActionTime * 2 / 3, $maxActionTime - 10);
} }
$limitActionTime = (new \DateTimeImmutable())->add(TimeUtil::secondsToDateInterval($maxActionTime)); $limitActionTime = (new \DateTimeImmutable())->add(TimeUtil::secondsToDateInterval($maxActionTime));
// 현재 턴 이전 월턴까지 모두처리. // 현재 턴 이전 월턴까지 모두처리.
//최종 처리 이후 다음 월턴이 현재 시간보다 전이라면 //최종 처리 이후 다음 월턴이 현재 시간보다 전이라면
while ($nextTurn <= $date) { while ($nextTurn <= $date) {
[$executionOver, $currentTurn] = static::executeGeneralCommandUntil( [$executionOver, $currentTurn] = static::executeGeneralCommandUntil(
$nextTurn, $limitActionTime, $gameStor->year, $gameStor->month $nextTurn, $limitActionTime, $gameStor->year, $gameStor->month
); );
// 트래픽 업데이트 // 트래픽 업데이트
updateTraffic(); updateTraffic();
if($executionOver){ if($executionOver){
if($currentTurn !== null){ if($currentTurn !== null){
$gameStor->turntime = $currentTurn; $gameStor->turntime = $currentTurn;
} }
unlock(); unlock();
return; return;
} }
// 1달마다 처리하는 것들, 벌점 감소 및 건국,전턴,합병 -1, 군량 소모 // 1달마다 처리하는 것들, 벌점 감소 및 건국,전턴,합병 -1, 군량 소모
if(!preUpdateMonthly()){ if(!preUpdateMonthly()){
$gameStor->resetCache(true); $gameStor->resetCache(true);
unlock(); unlock();
throw new \RuntimeException('preUpdateMonthly() 처리 에러'); throw new \RuntimeException('preUpdateMonthly() 처리 에러');
} }
turnDate($nextTurn); turnDate($nextTurn);
$logger = new ActionLogger(0, 0, $gameStor->year, $gameStor->month, false); $logger = new ActionLogger(0, 0, $gameStor->year, $gameStor->month, false);
// 분기계산. 장수들 턴보다 먼저 있다면 먼저처리 // 분기계산. 장수들 턴보다 먼저 있다면 먼저처리
if($gameStor->month == 1) { if($gameStor->month == 1) {
processGoldIncome(); processGoldIncome();
processSpring(); processSpring();
updateYearly(); updateYearly();
updateQuaterly(); updateQuaterly();
disaster(); disaster();
tradeRate(); tradeRate();
addAge(); addAge();
// 새해 알림 // 새해 알림
$logger->pushGlobalActionLog("<C>{$gameStor->year}</>년이 되었습니다."); $logger->pushGlobalActionLog("<C>{$gameStor->year}</>년이 되었습니다.");
$logger->flush(); //TODO: globalAction류는 전역에서 관리하는것이 좋을 듯. $logger->flush(); //TODO: globalAction류는 전역에서 관리하는것이 좋을 듯.
} elseif($gameStor->month == 4) { } elseif($gameStor->month == 4) {
updateQuaterly(); updateQuaterly();
disaster(); disaster();
} elseif($gameStor->month == 7) { } elseif($gameStor->month == 7) {
processRiceIncome(); processRiceIncome();
processFall(); processFall();
updateQuaterly(); updateQuaterly();
disaster(); disaster();
tradeRate(); tradeRate();
} elseif($gameStor->month == 10) { } elseif($gameStor->month == 10) {
updateQuaterly(); updateQuaterly();
disaster(); disaster();
} }
// 이벤트 핸들러 동작 // 이벤트 핸들러 동작
foreach (DB::db()->query('SELECT * from event') as $rawEvent) { foreach (DB::db()->query('SELECT * from event') as $rawEvent) {
$eventID = $rawEvent['id']; $eventID = $rawEvent['id'];
$cond = Json::decode($rawEvent['condition']); $cond = Json::decode($rawEvent['condition']);
$action = Json::decode($rawEvent['action']); $action = Json::decode($rawEvent['action']);
$event = new Event\EventHandler($cond, $action); $event = new Event\EventHandler($cond, $action);
$event->tryRunEvent(['currentEventID'=>$eventID] + $gameStor->getAll(true)); $event->tryRunEvent(['currentEventID'=>$eventID] + $gameStor->getAll(true));
} }
postUpdateMonthly(); postUpdateMonthly();
// 다음달로 넘김 // 다음달로 넘김
$prevTurn = $nextTurn; $prevTurn = $nextTurn;
$nextTurn = addTurn($prevTurn, $gameStor->turnterm); $nextTurn = addTurn($prevTurn, $gameStor->turnterm);
$gameStor->turntime = $prevTurn; $gameStor->turntime = $prevTurn;
} }
// 그 시각 년도,월 저장 // 그 시각 년도,월 저장
turnDate($prevTurn); turnDate($prevTurn);
// 현재시간의 월턴시간 이후 분단위 장수 처리 // 현재시간의 월턴시간 이후 분단위 장수 처리
[$executionOver, $currentTurn] = static::executeGeneralCommandUntil( [$executionOver, $currentTurn] = static::executeGeneralCommandUntil(
$date, $limitActionTime, $gameStor->year, $gameStor->month $date, $limitActionTime, $gameStor->year, $gameStor->month
); );
if($currentTurn !== null){ if($currentTurn !== null){
$gameStor->turntime = $currentTurn; $gameStor->turntime = $currentTurn;
} }
//토너먼트 처리 //토너먼트 처리
processTournament(); processTournament();
//거래 처리 //거래 처리
processAuction(); processAuction();
// 잡금 해제 // 잡금 해제
$gameStor->resetCache(true); $gameStor->resetCache(true);
unlock(); unlock();
} }
} }