From 7c1a8d96a2cb7a4f35c1ba0c87fa362758d62f10 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Mon, 26 Feb 2024 15:58:41 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=A0=95=EA=B7=9C=ED=84=B4=EC=97=90=20?= =?UTF-8?q?=EC=96=B4=EA=B8=8B=EB=82=98=EB=8A=94=20=EA=B0=9C=EC=9D=B8?= =?UTF-8?q?=ED=84=B4,=20=EC=82=AC=EB=A0=B9=ED=84=B4=EC=9D=84=20=EB=B3=B4?= =?UTF-8?q?=EC=A0=95=20-=20=EC=A1=B0=ED=9A=8C=EC=8B=9C=EC=97=90=EB=A7=8C?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/API/Command/GetReservedCommand.php | 24 ++++++++++++++++ .../API/NationCommand/GetReservedCommand.php | 28 +++++++++++++++++++ 2 files changed, 52 insertions(+) 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',