diff --git a/hwe/sammo/API/Command/GetReservedCommand.php b/hwe/sammo/API/Command/GetReservedCommand.php index 9fe8c36b..8bec74a0 100644 --- a/hwe/sammo/API/Command/GetReservedCommand.php +++ b/hwe/sammo/API/Command/GetReservedCommand.php @@ -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']); diff --git a/hwe/sammo/API/NationCommand/GetReservedCommand.php b/hwe/sammo/API/NationCommand/GetReservedCommand.php index 95c5b03c..8930329b 100644 --- a/hwe/sammo/API/NationCommand/GetReservedCommand.php +++ b/hwe/sammo/API/NationCommand/GetReservedCommand.php @@ -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',