From c46c8a010f3367f77e50e27948b66e81897192f5 Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 9 Jun 2020 01:10:21 +0900 Subject: [PATCH] =?UTF-8?q?=ED=99=80=EC=A7=9D=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_command.php | 894 +++++++++++++++++++++---------------------- 1 file changed, 447 insertions(+), 447 deletions(-) diff --git a/hwe/func_command.php b/hwe/func_command.php index b0ca9442..0801abb2 100644 --- a/hwe/func_command.php +++ b/hwe/func_command.php @@ -1,448 +1,448 @@ - [$action, $arg]){ - $commandObj = buildGeneralCommandClass($action, $generalObj, [], $arg); - $turnText = $commandObj->getBrief(); - $result[$turnIdx] = $turnText; - } - return $result; -} - -function getNationTurnBrief(General $generalObj, array $turnList) { - $result = []; - - $tmpTurn = new LastTurn(); - foreach($turnList as $turnIdx => [$action, $arg]){ - $commandObj = buildNationCommandClass($action, $generalObj, [], $tmpTurn, $arg); - $turnText = $commandObj->getBrief(); - $result[$turnIdx] = $turnText; - } - return $result; -} - -function pushGeneralCommand(int $generalID, int $turnCnt=1){ - if($turnCnt == 0){ - return; - } - if($turnCnt < 0){ - pullGeneralCommand($generalID, -$turnCnt); - return; - } - if($turnCnt >= GameConst::$maxTurn){ - return; - } - - $db = DB::db(); - - $db->update('general_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx + %i', $turnCnt) - ], 'general_id=%i ORDER BY turn_idx DESC', $generalID); - $db->update('general_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxTurn), - 'action'=>'휴식', - 'arg'=>'{}', - 'brief'=>'휴식' - ], 'general_id=%i AND turn_idx >= %i', $generalID, GameConst::$maxTurn); -} - -function pullGeneralCommand(int $generalID, int $turnCnt=1){ - if($turnCnt == 0){ - return; - } - if($turnCnt < 0){ - pushGeneralCommand($generalID, -$turnCnt); - return; - } - if($turnCnt >= GameConst::$maxTurn){ - return; - } - - $db = DB::db(); - - $db->update('general_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxTurn), - 'action'=>'휴식', - 'arg'=>'{}', - 'brief'=>'휴식' - ], 'general_id=%i AND turn_idx < %i', $generalID, $turnCnt); - $db->update('general_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt) - ], 'general_id=%i ORDER BY turn_idx ASC', $generalID); -} - -function repeatGeneralCommand(int $generalId, int $turnCnt){ - if($turnCnt <= 0){ - return; - } - if($turnCnt >= GameConst::$maxTurn){ - return; - } - - $db = DB::db(); - - $reqTurn = $turnCnt; - if($turnCnt * 2 > GameConst::$maxTurn){ - $reqTurn = GameConst::$maxTurn - $turnCnt; - } - - $turnList = $db->query('SELECT turn_idx, `action`, arg, brief FROM general_turn WHERE general_id=%i AND turn_idx < %i', $generalId, $reqTurn); - foreach($turnList as $turnItem){ - $turnIdx = $turnItem['turn_idx']; - $turnTarget = iterator_to_array(Util::range($turnIdx+$turnCnt, GameConst::$maxTurn, $turnCnt)); - - $db->update('general_turn', [ - 'action'=>$turnItem['action'], - 'arg'=>$turnItem['arg'], - 'brief'=>$turnItem['brief'] - ], 'general_id=%i AND turn_idx IN %li', $generalId, $turnTarget); - } -} - -function pushNationCommand(int $nationID, int $officerLevel, int $turnCnt=1){ - if($nationID == 0){ - return; - } - if($officerLevel < 5){ - return; - } - if($turnCnt == 0){ - return; - } - if($turnCnt < 0){ - pullNationCommand($nationID, $officerLevel, -$turnCnt); - return; - } - if($turnCnt >= GameConst::$maxChiefTurn){ - return; - } - - $db = DB::db(); - - $db->update('nation_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx + %i', $turnCnt) - ], 'nation_id=%i AND officer_level=%i ORDER BY turn_idx DESC', $nationID, $officerLevel); - $db->update('nation_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxChiefTurn), - 'action'=>'휴식', - 'arg'=>'{}', - 'brief'=>'휴식' - ], 'nation_id=%i AND officer_level=%i AND turn_idx >= %i ORDER BY turn_idx ASC', $nationID, $officerLevel, GameConst::$maxChiefTurn); -} - -function pullNationCommand(int $nationID, int $officerLevel, int $turnCnt=1){ - if($nationID == 0){ - return; - } - if($officerLevel < 5){ - return; - } - if($turnCnt == 0){ - return; - } - if($turnCnt < 0){ - pushNationCommand($nationID, $officerLevel, -$turnCnt); - return; - } - if($turnCnt >= GameConst::$maxChiefTurn){ - return; - } - - $db = DB::db(); - - $db->update('nation_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxChiefTurn), - 'action'=>'휴식', - 'arg'=>'{}', - 'brief'=>'휴식', - ], 'nation_id=%i AND officer_level=%i AND turn_idx < %i', $nationID, $officerLevel, $turnCnt); - $db->update('nation_turn', [ - 'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt) - ], 'nation_id=%i AND officer_level=%i ORDER BY turn_idx ASC', $nationID, $officerLevel); -} - -function _setGeneralCommand(GeneralCommand $command, array $turnList):void { - if(!$turnList){ - return; - } - - $db = DB::db(); - - $generalID = $command->getGeneral()->getID(); - $commandName = $command->getRawClassName(); - $arg = $command->getArg(); - $brief = $command->getBrief(); - - $db->update('general_turn', [ - 'action'=>$commandName, - 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT), - 'brief'=>$brief - ], 'general_id = %i AND turn_idx IN %li', $generalID, $turnList); -} - -function _setNationCommand(NationCommand $command, array $turnList):void { - if(!$turnList){ - return; - } - - $db = DB::db(); - - $nationID = $command->getNationID(); - $officerLevel = $command->getOfficerLevel(); - $commandName = $command->getRawClassName(); - $arg = $command->getArg(); - $brief = $command->getBrief(); - - $db->update('nation_turn', [ - 'action'=>$commandName, - 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT), - 'brief'=>$brief - ], 'nation_id = %i AND officer_level = %i AND turn_idx IN %li', $nationID, $officerLevel, $turnList); -} - -function sanitizeArg(?array $args):?array{ - if($args === null){ - return $args; - } - - $result = []; - foreach($args as $key=>$value){ - if(is_array($value)){ - $result[$key] = sanitizeArg($value); - } - else if(is_string($value)){ - $result[$key] = StringUtil::neutralize(StringUtil::removeSpecialCharacter($value)); - } - else{ - $result[$key] = $value; - } - } - return $result; -} - -function checkCommandArg(?array $arg):?string{ - if($arg === null){ - return null; - } - $defaultCheck = [ - /*'string'=>[ - 'nationName', 'optionText', 'itemType', 'nationType' - ],*/ - 'integer'=>[ - 'crewType', 'destGeneralID', 'destCityID', 'destNationID', - 'amount', 'colorType', - 'srcArmType', 'destArmType', //숙련전환 전용 - ], - 'boolean'=>[ - 'isGold', 'buyRice', - ], - 'between'=>[ - ['month', [1, 12]] - ], - 'min'=>[ - ['year', 0], - ['destGeneralID', 1], - ['destCityID', 1], - ['destNationID', 1], - ['amount', 1], - ['crewType', 0] - ], - 'integerArray'=>[ - 'destNationIDList', 'destGeneralIDList', 'amountList' - ], - 'stringWidthBetween'=>[ - ['nationName', 1, 18] - ] - ]; - $v = new Validator($arg); - $v->rules($defaultCheck); - if (!$v->validate()){ - return $v->errorStr(); - } - return null; -} - -function setGeneralCommand(int $generalID, array $rawTurnList, string $command, ?array $arg = null):array{ - - $turnList = []; - foreach($rawTurnList as $turnIdx){ - if(!is_int($turnIdx) || $turnIdx < -3 || $turnIdx >= GameConst::$maxTurn){ - return [ - 'result'=>false, - 'reason'=>'올바른 턴이 아닙니다. : '.$turnIdx, - 'test'=>'turnIdx', - 'target'=>$turnIdx, - ]; - } - if($turnIdx >= 0){ - $turnList[$turnIdx] = true; - } - else if($turnIdx == -1){ - //홀수 - foreach(Util::range(1, GameConst::$maxTurn, 2) as $subIdx){ - $turnList[$subIdx] = true; - } - } - else if($turnIdx == -2){ - //짝수 - foreach(Util::range(0, GameConst::$maxTurn, 2) as $subIdx){ - $turnList[$subIdx] = true; - } - } - else if($turnIdx == -3){ - //모두 - foreach(Util::range(GameConst::$maxTurn) as $subIdx){ - $turnList[$subIdx] = true; - } - } - } - $turnList = array_keys($turnList); - - $arg = sanitizeArg($arg); - $argBasicTestResult = checkCommandArg($arg); - if($argBasicTestResult !== null){ - return [ - 'result'=>false, - 'reason'=>'턴이 입력되지 않았습니다.', - 'test'=>'checkCommandArg', - 'target'=>'arg' - ]; - } - - $db = DB::db(); - $gameStor = KVStorage::getStorage($db, 'game_env'); - $env = $gameStor->getAll(); - $general = General::createGeneralObjFromDB($generalID); - - try{ - $commandObj = buildGeneralCommandClass($command, $general, $env, $arg); - } - catch (\InvalidArgumentException $e){ - return [ - 'result'=>false, - 'reason'=>$e->getMessage(), - 'test'=>'build', - 'target'=>'arg' - ]; - } - catch (\Exception $e){ - return [ - 'result'=>false, - 'reason'=>$e->getCode().$e->getMessage(), - 'test'=>'build', - 'target'=>'arg' - ]; - } - - if(!$commandObj->isArgValid()){ - return [ - 'result'=>false, - 'reason'=>'올바르지 않은 argument', - 'test'=>'isArgValid', - 'target'=>'arg' - ]; - } - - if(!$commandObj->hasPermissionToReserve()){ - return [ - 'result'=>false, - 'reason'=>'예약 불가능한 커맨드 :'.$commandObj->testPermissionToReserve(), - 'test'=>'hasPermissionToReserve', - 'target'=>'command' - ]; - } - - _setGeneralCommand($commandObj, $turnList); - return [ - 'result'=>true, - 'reason'=>'success' - ]; -} - -function setNationCommand(int $generalID, array $turnList, string $command, ?array $arg = null):array{ - $turnList = array_unique($turnList); - foreach($turnList as $turnIdx){ - if(!is_int($turnIdx) || $turnIdx < 0 || $turnIdx >= GameConst::$maxChiefTurn){ - return [ - 'result'=>false, - 'reason'=>'올바른 턴이 아닙니다. : '.$turnIdx, - 'test'=>'turnIdx', - 'target'=>$turnIdx, - ]; - } - } - - $arg = sanitizeArg($arg); - $argBasicTestResult = checkCommandArg($arg); - if($argBasicTestResult !== null){ - return [ - 'result'=>false, - 'reason'=>'턴이 입력되지 않았습니다.', - 'test'=>'checkCommandArg', - 'target'=>'arg' - ]; - } - - $db = DB::db(); - $gameStor = KVStorage::getStorage($db, 'game_env'); - $env = $gameStor->getAll(); - $general = General::createGeneralObjFromDB($generalID); - - if($general->getVar('officer_level') < 5){ - return [ - 'result'=>false, - 'reason'=>'수뇌가 아닙니다' - ]; - } - - try{ - $commandObj = buildNationCommandClass($command, $general, $env, $general->getLastTurn(), $arg); - } - catch (\InvalidArgumentException $e){ - return [ - 'result'=>false, - 'reason'=>$e->getMessage(), - 'test'=>'build', - 'target'=>'arg' - ]; - } - catch (\Exception $e){ - return [ - 'result'=>false, - 'reason'=>$e->getCode().$e->getMessage(), - 'test'=>'build', - 'target'=>'arg' - ]; - } - - if(!$commandObj->isArgValid()){ - return [ - 'result'=>false, - 'reason'=>'올바르지 않은 argument', - 'test'=>'isArgValid', - 'target'=>'arg' - ]; - } - - if(!$commandObj->hasPermissionToReserve()){ - return [ - 'result'=>false, - 'reason'=>'예약 불가능한 커맨드 :'.$commandObj->testPermissionToReserve(), - 'test'=>'hasPermissionToReserve', - 'target'=>'command' - ]; - } - - _setNationCommand($commandObj, $turnList); - return [ - 'result'=>true, - 'arg_test'=>true, - 'reason'=>'success' - ]; + [$action, $arg]){ + $commandObj = buildGeneralCommandClass($action, $generalObj, [], $arg); + $turnText = $commandObj->getBrief(); + $result[$turnIdx] = $turnText; + } + return $result; +} + +function getNationTurnBrief(General $generalObj, array $turnList) { + $result = []; + + $tmpTurn = new LastTurn(); + foreach($turnList as $turnIdx => [$action, $arg]){ + $commandObj = buildNationCommandClass($action, $generalObj, [], $tmpTurn, $arg); + $turnText = $commandObj->getBrief(); + $result[$turnIdx] = $turnText; + } + return $result; +} + +function pushGeneralCommand(int $generalID, int $turnCnt=1){ + if($turnCnt == 0){ + return; + } + if($turnCnt < 0){ + pullGeneralCommand($generalID, -$turnCnt); + return; + } + if($turnCnt >= GameConst::$maxTurn){ + return; + } + + $db = DB::db(); + + $db->update('general_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx + %i', $turnCnt) + ], 'general_id=%i ORDER BY turn_idx DESC', $generalID); + $db->update('general_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxTurn), + 'action'=>'휴식', + 'arg'=>'{}', + 'brief'=>'휴식' + ], 'general_id=%i AND turn_idx >= %i', $generalID, GameConst::$maxTurn); +} + +function pullGeneralCommand(int $generalID, int $turnCnt=1){ + if($turnCnt == 0){ + return; + } + if($turnCnt < 0){ + pushGeneralCommand($generalID, -$turnCnt); + return; + } + if($turnCnt >= GameConst::$maxTurn){ + return; + } + + $db = DB::db(); + + $db->update('general_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxTurn), + 'action'=>'휴식', + 'arg'=>'{}', + 'brief'=>'휴식' + ], 'general_id=%i AND turn_idx < %i', $generalID, $turnCnt); + $db->update('general_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt) + ], 'general_id=%i ORDER BY turn_idx ASC', $generalID); +} + +function repeatGeneralCommand(int $generalId, int $turnCnt){ + if($turnCnt <= 0){ + return; + } + if($turnCnt >= GameConst::$maxTurn){ + return; + } + + $db = DB::db(); + + $reqTurn = $turnCnt; + if($turnCnt * 2 > GameConst::$maxTurn){ + $reqTurn = GameConst::$maxTurn - $turnCnt; + } + + $turnList = $db->query('SELECT turn_idx, `action`, arg, brief FROM general_turn WHERE general_id=%i AND turn_idx < %i', $generalId, $reqTurn); + foreach($turnList as $turnItem){ + $turnIdx = $turnItem['turn_idx']; + $turnTarget = iterator_to_array(Util::range($turnIdx+$turnCnt, GameConst::$maxTurn, $turnCnt)); + + $db->update('general_turn', [ + 'action'=>$turnItem['action'], + 'arg'=>$turnItem['arg'], + 'brief'=>$turnItem['brief'] + ], 'general_id=%i AND turn_idx IN %li', $generalId, $turnTarget); + } +} + +function pushNationCommand(int $nationID, int $officerLevel, int $turnCnt=1){ + if($nationID == 0){ + return; + } + if($officerLevel < 5){ + return; + } + if($turnCnt == 0){ + return; + } + if($turnCnt < 0){ + pullNationCommand($nationID, $officerLevel, -$turnCnt); + return; + } + if($turnCnt >= GameConst::$maxChiefTurn){ + return; + } + + $db = DB::db(); + + $db->update('nation_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx + %i', $turnCnt) + ], 'nation_id=%i AND officer_level=%i ORDER BY turn_idx DESC', $nationID, $officerLevel); + $db->update('nation_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxChiefTurn), + 'action'=>'휴식', + 'arg'=>'{}', + 'brief'=>'휴식' + ], 'nation_id=%i AND officer_level=%i AND turn_idx >= %i ORDER BY turn_idx ASC', $nationID, $officerLevel, GameConst::$maxChiefTurn); +} + +function pullNationCommand(int $nationID, int $officerLevel, int $turnCnt=1){ + if($nationID == 0){ + return; + } + if($officerLevel < 5){ + return; + } + if($turnCnt == 0){ + return; + } + if($turnCnt < 0){ + pushNationCommand($nationID, $officerLevel, -$turnCnt); + return; + } + if($turnCnt >= GameConst::$maxChiefTurn){ + return; + } + + $db = DB::db(); + + $db->update('nation_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxChiefTurn), + 'action'=>'휴식', + 'arg'=>'{}', + 'brief'=>'휴식', + ], 'nation_id=%i AND officer_level=%i AND turn_idx < %i', $nationID, $officerLevel, $turnCnt); + $db->update('nation_turn', [ + 'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt) + ], 'nation_id=%i AND officer_level=%i ORDER BY turn_idx ASC', $nationID, $officerLevel); +} + +function _setGeneralCommand(GeneralCommand $command, array $turnList):void { + if(!$turnList){ + return; + } + + $db = DB::db(); + + $generalID = $command->getGeneral()->getID(); + $commandName = $command->getRawClassName(); + $arg = $command->getArg(); + $brief = $command->getBrief(); + + $db->update('general_turn', [ + 'action'=>$commandName, + 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT), + 'brief'=>$brief + ], 'general_id = %i AND turn_idx IN %li', $generalID, $turnList); +} + +function _setNationCommand(NationCommand $command, array $turnList):void { + if(!$turnList){ + return; + } + + $db = DB::db(); + + $nationID = $command->getNationID(); + $officerLevel = $command->getOfficerLevel(); + $commandName = $command->getRawClassName(); + $arg = $command->getArg(); + $brief = $command->getBrief(); + + $db->update('nation_turn', [ + 'action'=>$commandName, + 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT), + 'brief'=>$brief + ], 'nation_id = %i AND officer_level = %i AND turn_idx IN %li', $nationID, $officerLevel, $turnList); +} + +function sanitizeArg(?array $args):?array{ + if($args === null){ + return $args; + } + + $result = []; + foreach($args as $key=>$value){ + if(is_array($value)){ + $result[$key] = sanitizeArg($value); + } + else if(is_string($value)){ + $result[$key] = StringUtil::neutralize(StringUtil::removeSpecialCharacter($value)); + } + else{ + $result[$key] = $value; + } + } + return $result; +} + +function checkCommandArg(?array $arg):?string{ + if($arg === null){ + return null; + } + $defaultCheck = [ + /*'string'=>[ + 'nationName', 'optionText', 'itemType', 'nationType' + ],*/ + 'integer'=>[ + 'crewType', 'destGeneralID', 'destCityID', 'destNationID', + 'amount', 'colorType', + 'srcArmType', 'destArmType', //숙련전환 전용 + ], + 'boolean'=>[ + 'isGold', 'buyRice', + ], + 'between'=>[ + ['month', [1, 12]] + ], + 'min'=>[ + ['year', 0], + ['destGeneralID', 1], + ['destCityID', 1], + ['destNationID', 1], + ['amount', 1], + ['crewType', 0] + ], + 'integerArray'=>[ + 'destNationIDList', 'destGeneralIDList', 'amountList' + ], + 'stringWidthBetween'=>[ + ['nationName', 1, 18] + ] + ]; + $v = new Validator($arg); + $v->rules($defaultCheck); + if (!$v->validate()){ + return $v->errorStr(); + } + return null; +} + +function setGeneralCommand(int $generalID, array $rawTurnList, string $command, ?array $arg = null):array{ + + $turnList = []; + foreach($rawTurnList as $turnIdx){ + if(!is_int($turnIdx) || $turnIdx < -3 || $turnIdx >= GameConst::$maxTurn){ + return [ + 'result'=>false, + 'reason'=>'올바른 턴이 아닙니다. : '.$turnIdx, + 'test'=>'turnIdx', + 'target'=>$turnIdx, + ]; + } + if($turnIdx >= 0){ + $turnList[$turnIdx] = true; + } + else if($turnIdx == -1){ + //홀수, 0부터 맞다. + foreach(Util::range(0, GameConst::$maxTurn, 2) as $subIdx){ + $turnList[$subIdx] = true; + } + } + else if($turnIdx == -2){ + //짝수, 1부터 맞다. + foreach(Util::range(1, GameConst::$maxTurn, 2) as $subIdx){ + $turnList[$subIdx] = true; + } + } + else if($turnIdx == -3){ + //모두 + foreach(Util::range(GameConst::$maxTurn) as $subIdx){ + $turnList[$subIdx] = true; + } + } + } + $turnList = array_keys($turnList); + + $arg = sanitizeArg($arg); + $argBasicTestResult = checkCommandArg($arg); + if($argBasicTestResult !== null){ + return [ + 'result'=>false, + 'reason'=>'턴이 입력되지 않았습니다.', + 'test'=>'checkCommandArg', + 'target'=>'arg' + ]; + } + + $db = DB::db(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + $env = $gameStor->getAll(); + $general = General::createGeneralObjFromDB($generalID); + + try{ + $commandObj = buildGeneralCommandClass($command, $general, $env, $arg); + } + catch (\InvalidArgumentException $e){ + return [ + 'result'=>false, + 'reason'=>$e->getMessage(), + 'test'=>'build', + 'target'=>'arg' + ]; + } + catch (\Exception $e){ + return [ + 'result'=>false, + 'reason'=>$e->getCode().$e->getMessage(), + 'test'=>'build', + 'target'=>'arg' + ]; + } + + if(!$commandObj->isArgValid()){ + return [ + 'result'=>false, + 'reason'=>'올바르지 않은 argument', + 'test'=>'isArgValid', + 'target'=>'arg' + ]; + } + + if(!$commandObj->hasPermissionToReserve()){ + return [ + 'result'=>false, + 'reason'=>'예약 불가능한 커맨드 :'.$commandObj->testPermissionToReserve(), + 'test'=>'hasPermissionToReserve', + 'target'=>'command' + ]; + } + + _setGeneralCommand($commandObj, $turnList); + return [ + 'result'=>true, + 'reason'=>'success' + ]; +} + +function setNationCommand(int $generalID, array $turnList, string $command, ?array $arg = null):array{ + $turnList = array_unique($turnList); + foreach($turnList as $turnIdx){ + if(!is_int($turnIdx) || $turnIdx < 0 || $turnIdx >= GameConst::$maxChiefTurn){ + return [ + 'result'=>false, + 'reason'=>'올바른 턴이 아닙니다. : '.$turnIdx, + 'test'=>'turnIdx', + 'target'=>$turnIdx, + ]; + } + } + + $arg = sanitizeArg($arg); + $argBasicTestResult = checkCommandArg($arg); + if($argBasicTestResult !== null){ + return [ + 'result'=>false, + 'reason'=>'턴이 입력되지 않았습니다.', + 'test'=>'checkCommandArg', + 'target'=>'arg' + ]; + } + + $db = DB::db(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + $env = $gameStor->getAll(); + $general = General::createGeneralObjFromDB($generalID); + + if($general->getVar('officer_level') < 5){ + return [ + 'result'=>false, + 'reason'=>'수뇌가 아닙니다' + ]; + } + + try{ + $commandObj = buildNationCommandClass($command, $general, $env, $general->getLastTurn(), $arg); + } + catch (\InvalidArgumentException $e){ + return [ + 'result'=>false, + 'reason'=>$e->getMessage(), + 'test'=>'build', + 'target'=>'arg' + ]; + } + catch (\Exception $e){ + return [ + 'result'=>false, + 'reason'=>$e->getCode().$e->getMessage(), + 'test'=>'build', + 'target'=>'arg' + ]; + } + + if(!$commandObj->isArgValid()){ + return [ + 'result'=>false, + 'reason'=>'올바르지 않은 argument', + 'test'=>'isArgValid', + 'target'=>'arg' + ]; + } + + if(!$commandObj->hasPermissionToReserve()){ + return [ + 'result'=>false, + 'reason'=>'예약 불가능한 커맨드 :'.$commandObj->testPermissionToReserve(), + 'test'=>'hasPermissionToReserve', + 'target'=>'command' + ]; + } + + _setNationCommand($commandObj, $turnList); + return [ + 'result'=>true, + 'arg_test'=>true, + 'reason'=>'success' + ]; } \ No newline at end of file