From 6a5cb950da45eee401fde7601e2f14f06abde85c Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sun, 17 Jul 2022 11:04:55 +0900 Subject: [PATCH] =?UTF-8?q?refac:=20=EC=9E=A5=EC=88=98=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=EC=97=90=EC=84=9C=20=EB=B6=80=EB=8C=80=EC=9E=A5=20?= =?UTF-8?q?=ED=84=B4=20=EA=B0=84=EC=9D=B4=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/API/Nation/GeneralList.php | 98 +++++++++++++++++----------- hwe/ts/defs/API/Nation.ts | 6 +- 2 files changed, 64 insertions(+), 40 deletions(-) diff --git a/hwe/sammo/API/Nation/GeneralList.php b/hwe/sammo/API/Nation/GeneralList.php index 9568b914..074207ba 100644 --- a/hwe/sammo/API/Nation/GeneralList.php +++ b/hwe/sammo/API/Nation/GeneralList.php @@ -2,6 +2,7 @@ namespace sammo\API\Nation; +use ArrayObject; use sammo\DB; use sammo\General; use sammo\Session; @@ -158,35 +159,59 @@ class GeneralList extends \sammo\BaseAPI $rawGeneralList = Util::convertArrayToDict($db->query('SELECT %l from general WHERE nation = %i ORDER BY turntime ASC', Util::formatListOfBackticks($queryColumns), $nationID), 'no'); + /** @var ArrayObject[] */ + $troops = []; + foreach ($db->queryAllLists('SELECT troop_leader,name FROM troop WHERE nation = %i', $nationID) as [$troopLeaderID, $troopName]) { + if (!key_exists($troopLeaderID, $rawGeneralList)) { + continue; + } + $troopTurnTime = $rawGeneralList[$troopLeaderID]['turntime']; + $troops[$troopLeaderID] = new ArrayObject([ + 'id' => $troopLeaderID, + 'name' => $troopName, + 'turntime' => $troopTurnTime, + 'reservedCommand' => [], + ]); + } + $reservedCommand = []; - if ($this->permission >= 1) { - $nonNPCGeneralIDList = []; - foreach ($rawGeneralList as $rawGeneral) { - if ($rawGeneral['npc'] < 2) { - $nonNPCGeneralIDList[] = $rawGeneral['no']; + if ($this->permission >= 1 || count($troops)) { + $reservedCommandTargetGeneralIDList = []; + + if($this->permission >= 1){ + foreach ($rawGeneralList as $rawGeneral) { + if ($rawGeneral['npc'] < 2) { + $reservedCommandTargetGeneralIDList[$rawGeneral['no']] = $rawGeneral['no']; + } } } + foreach($troops as $troop){ + $reservedCommandTargetGeneralIDList[$troop['id']] = $troop['id']; + } + - $rawTurnList = $db->query( - 'SELECT general_id, turn_idx, action, arg, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id asc, turn_idx asc', - $nonNPCGeneralIDList - ); - - foreach ($rawTurnList as $rawTurn) { - [ - 'general_id' => $generalID, - 'action' => $action, - 'arg' => $arg, - 'brief' => $brief, - ] = $rawTurn; - if (!key_exists($generalID, $reservedCommand)) { - $reservedCommand[$generalID] = []; + if($reservedCommandTargetGeneralIDList){ + $rawTurnList = $db->query( + 'SELECT general_id, turn_idx, action, arg, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id asc, turn_idx asc', + array_values($reservedCommandTargetGeneralIDList) + ); + + foreach ($rawTurnList as $rawTurn) { + [ + 'general_id' => $generalID, + 'action' => $action, + 'arg' => $arg, + 'brief' => $brief, + ] = $rawTurn; + if (!key_exists($generalID, $reservedCommand)) { + $reservedCommand[$generalID] = []; + } + $reservedCommand[$generalID][] = [ + 'action' => $action, + 'arg' => $arg, + 'brief' => $brief + ]; } - $reservedCommand[$generalID][] = [ - 'action' => $action, - 'arg' => $arg, - 'brief' => $brief - ]; } } @@ -252,6 +277,17 @@ class GeneralList extends \sammo\BaseAPI $resultColumns[$column] = $column; } + foreach ($troops as $troop){ + $troopLeaderID = $troop['id']; + $troop['reservedCommand'] = array_map(function($turnObj){ + $brief = $turnObj['brief']; + if($brief == '집합'){ + return $brief; + } + return '-'; + }, $specialViewFilter['reservedCommand']($rawGeneralList[$troopLeaderID])); + } + $generalList = []; foreach ($rawGeneralList as $rawGeneral) { //General 생성? @@ -272,24 +308,12 @@ class GeneralList extends \sammo\BaseAPI $generalList[] = $item; } - $troops = []; - foreach ($db->queryAllLists('SELECT troop_leader,name FROM troop WHERE nation = %i', $nationID) as [$troopLeaderID, $troopName]) { - if (!key_exists($troopLeaderID, $rawGeneralList)) { - continue; - } - $troopTurnTime = $rawGeneralList[$troopLeaderID]['turntime']; - $troops[] = [ - 'id' => $troopLeaderID, - 'name' => $troopName, - 'turntime' => $troopTurnTime - ]; - } $result = [ 'result' => true, 'permission' => $this->permission, 'column' => array_keys($resultColumns), 'list' => $generalList, - 'troops' => $troops, + 'troops' => array_values($troops), 'env' => $env, ]; diff --git a/hwe/ts/defs/API/Nation.ts b/hwe/ts/defs/API/Nation.ts index 126f2278..6c76abb9 100644 --- a/hwe/ts/defs/API/Nation.ts +++ b/hwe/ts/defs/API/Nation.ts @@ -107,7 +107,7 @@ export type RawGeneralListP0 = ValidResponse & { permission: 0, column: (keyof GeneralListItemP0)[], list: ValuesOf[][], - troops: {id: number, name: string, turntime: string}[], + troops: {id: number, name: string, turntime: string, reservedCommand: string[]}[], env: ResponseEnv, } @@ -115,7 +115,7 @@ export type RawGeneralListP1 = ValidResponse & { permission: 1, column: (keyof GeneralListItemP1)[], list: ValuesOf[][], - troops: {id: number, name: string, turntime: string}[], + troops: {id: number, name: string, turntime: string, reservedCommand: string[]}[], env: ResponseEnv, } @@ -123,7 +123,7 @@ export type RawGeneralListP2 = ValidResponse & { permission: 2 | 3 | 4, column: (keyof GeneralListItemP2)[], list: ValuesOf[][], - troops: {id: number, name: string, turntime: string}[], + troops: {id: number, name: string, turntime: string, reservedCommand: string[]}[], env: ResponseEnv, }