fix: 정규턴에 어긋나는 개인턴, 사령턴을 보정
- 조회시에만 사용
This commit is contained in:
@@ -6,6 +6,7 @@ use sammo\Session;
|
||||
use DateTimeInterface;
|
||||
use sammo\DB;
|
||||
use sammo\Enums\APIRecoveryType;
|
||||
use sammo\GameConst;
|
||||
use sammo\Json;
|
||||
use sammo\KVStorage;
|
||||
use sammo\TimeUtil;
|
||||
@@ -32,8 +33,18 @@ class GetReservedCommand extends \sammo\BaseAPI
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
$generalID = $session->generalID;
|
||||
|
||||
$invalidTurnList = 0;
|
||||
|
||||
$rawTurn = $db->queryAllLists('SELECT turn_idx, action, arg, brief FROM general_turn WHERE general_id = %i ORDER BY turn_idx ASC', $generalID);
|
||||
foreach ($rawTurn as [$turn_idx, $action, $arg, $brief]) {
|
||||
if($turn_idx < 0) {
|
||||
$invalidTurnList = -1;
|
||||
$turn_idx += GameConst::$maxTurn;
|
||||
}
|
||||
else if($turn_idx >= GameConst::$maxTurn) {
|
||||
$invalidTurnList = 1;
|
||||
$turn_idx -= GameConst::$maxTurn;
|
||||
}
|
||||
$commandList[$turn_idx] = [
|
||||
'action' => $action,
|
||||
'brief' => $brief,
|
||||
@@ -41,6 +52,19 @@ class GetReservedCommand extends \sammo\BaseAPI
|
||||
];
|
||||
}
|
||||
|
||||
if($invalidTurnList != 0){
|
||||
if($invalidTurnList > 0){
|
||||
$db->update('general_turn', [
|
||||
'turn_idx' => $db->sqleval('turn_idx - %i', GameConst::$maxTurn)
|
||||
], 'general_id=%i AND turn_idx >= %i', $generalID, GameConst::$maxTurn);
|
||||
}
|
||||
else{
|
||||
$db->update('general_turn', [
|
||||
'turn_idx' => $db->sqleval('turn_idx + %i', GameConst::$maxTurn)
|
||||
], 'general_id=%i AND turn_idx < 0', $generalID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[$turnTerm, $year, $month, $lastExecute] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month', 'turntime']);
|
||||
|
||||
|
||||
@@ -73,6 +73,11 @@ class GetReservedCommand extends \sammo\BaseAPI
|
||||
}
|
||||
|
||||
$nationTurnList = [];
|
||||
|
||||
//혹시 정규 턴을 벗어난 턴이 있는지 체크
|
||||
$invalidUnderTurnList = [];
|
||||
$invalidOverTurnList = [];
|
||||
|
||||
foreach ($db->queryAllLists(
|
||||
'SELECT officer_level, turn_idx, action, arg, brief FROM nation_turn WHERE nation_id = %i ORDER BY officer_level DESC, turn_idx ASC',
|
||||
$me['nation']
|
||||
@@ -80,6 +85,14 @@ class GetReservedCommand extends \sammo\BaseAPI
|
||||
if (!key_exists($officer_level, $nationTurnList)) {
|
||||
$nationTurnList[$officer_level] = [];
|
||||
}
|
||||
if($turn_idx < 0){
|
||||
$invalidUnderTurnList[$officer_level] = $turn_idx;
|
||||
$turn_idx += GameConst::$maxChiefTurn;
|
||||
}
|
||||
else if($turn_idx >= GameConst::$maxChiefTurn){
|
||||
$invalidOverTurnList[$officer_level] = $turn_idx;
|
||||
$turn_idx -= GameConst::$maxChiefTurn;
|
||||
}
|
||||
$nationTurnList[$officer_level][$turn_idx] = [
|
||||
'action' => $action,
|
||||
'brief' => $brief,
|
||||
@@ -87,6 +100,21 @@ class GetReservedCommand extends \sammo\BaseAPI
|
||||
];
|
||||
}
|
||||
|
||||
if($invalidUnderTurnList){
|
||||
$db->update(
|
||||
'nation_turn', [
|
||||
'turn_idx' => $db->sqleval('`turn_idx` + %i', GameConst::$maxChiefTurn)
|
||||
], 'nation_id = %i AND officer_level IN %li AND turn_idx < 0', $me['nation'], array_keys($invalidUnderTurnList)
|
||||
);
|
||||
}
|
||||
if($invalidOverTurnList){
|
||||
$db->update(
|
||||
'nation_turn', [
|
||||
'turn_idx' => $db->sqleval('`turn_idx` - %i', GameConst::$maxChiefTurn)
|
||||
], 'nation_id = %i AND officer_level IN %li AND turn_idx >= %i', $me['nation'], array_keys($invalidOverTurnList), GameConst::$maxChiefTurn
|
||||
);
|
||||
}
|
||||
|
||||
$troopList = [];
|
||||
foreach ($db->queryAllLists(
|
||||
'SELECT troop_leader, `name` FROM troop WHERE `nation` = %i',
|
||||
|
||||
Reference in New Issue
Block a user