From a47905541c0761b0ef1a01605af4c9150b414934 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 6 Oct 2019 19:01:46 +0900 Subject: [PATCH] =?UTF-8?q?=ED=84=B4=20=ED=91=9C=EA=B8=B0=20'=EB=93=9C?= =?UTF-8?q?=EB=94=94=EC=96=B4'=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/_admin2_submit.php | 20 +++++-- hwe/_admin4_submit.php | 3 +- hwe/b_currentCity.php | 9 ++-- hwe/b_genList.php | 12 ++--- hwe/b_troop.php | 15 +++--- hwe/func.php | 4 +- hwe/func_command.php | 26 ++++++---- hwe/func_gamerule.php | 7 ++- hwe/index.php | 25 ++++++--- hwe/j_get_reserved_command.php | 31 +++++++++-- hwe/join_post.php | 1 + hwe/js/main.js | 72 ++++++++++++++++++++++++-- hwe/sammo/Command/BaseCommand.php | 4 ++ hwe/sammo/Command/General/che_거병.php | 1 + hwe/sammo/GeneralAI.php | 4 +- hwe/sammo/ResetHelper.php | 1 + hwe/sammo/Scenario/NPC.php | 1 + hwe/sammo/Scenario/Nation.php | 1 + hwe/sql/schema.sql | 2 + 19 files changed, 186 insertions(+), 53 deletions(-) diff --git a/hwe/_admin2_submit.php b/hwe/_admin2_submit.php index 483f5d67..0d8fdf2d 100644 --- a/hwe/_admin2_submit.php +++ b/hwe/_admin2_submit.php @@ -29,6 +29,14 @@ $gameStor = KVStorage::getStorage($db, 'game_env'); $src = MessageTarget::buildQuick($session->generalID); +$genObjList = []; +$env = []; +if($genlist){ + foreach($genlist as $genID){ + $genObjList[$genID] = General::createGeneralObjFromDB($genID); + } + $env = $gameStor->cacheAll(); +} switch($btn) { case "전체 접속허용": $db->update('general', [ @@ -99,7 +107,8 @@ switch($btn) { ], '`no` IN %li', $genlist); $db->update('general_turn', [ 'action'=>'휴식', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'휴식', ], 'general_id IN %li AND turn_idx = 0', $genlist); break; case "특기 부여": @@ -314,17 +323,20 @@ switch($btn) { case "하야입력": $db->update('general_turn', [ 'action'=>'che_하야', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'하야', ], 'general_id IN %li AND turn_idx = 0', $genlist); break; case "방랑해산": $db->update('general_turn', [ 'action'=>'che_방랑', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'방랑', ], 'general_id IN %li AND turn_idx = 0', $genlist); $db->update('general_turn', [ 'action'=>'che_해산', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'해산', ], 'general_id IN %li AND turn_idx = 1', $genlist); break; case "00턴": diff --git a/hwe/_admin4_submit.php b/hwe/_admin4_submit.php index 6010a0bb..2e33444e 100644 --- a/hwe/_admin4_submit.php +++ b/hwe/_admin4_submit.php @@ -58,7 +58,8 @@ switch($btn) { ], '`no` IN %li', $genlist); $db->update('general_turn', [ 'action'=>'휴식', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'휴식' ], 'general_id IN %li AND turn_idx = 0', $genlist); break; case "메세지 전달": diff --git a/hwe/b_currentCity.php b/hwe/b_currentCity.php index 81a5a08f..744dcc25 100644 --- a/hwe/b_currentCity.php +++ b/hwe/b_currentCity.php @@ -211,14 +211,14 @@ $generals = $db->query( $generalTurnList = []; foreach($db->queryAllLists( - 'SELECT general_id, turn_idx, action, arg FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC', + 'SELECT general_id, turn_idx, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC', array_column($generals, 'no') - ) as [$generalID, $turnIdx, $action, $arg] + ) as [$generalID, $turnIdx, $brief] ){ if(!key_exists($generalID, $generalTurnList)){ $generalTurnList[$generalID] = []; } - $generalTurnList[$generalID][$turnIdx] = [$action, Json::decode($arg)]; + $generalTurnList[$generalID][$turnIdx] = $brief; } $nationname = []; @@ -300,8 +300,7 @@ for($j=0; $j < $gencount; $j++) { if($ourGeneral && !$isNPC){ $turnText = []; $generalObj = new General($general, null, null, null, false); - $turnBrief = getGeneralTurnBrief($generalObj, $generalTurnList[$generalObj->getID()]); - foreach($turnBrief as $turnRawIdx=>$turn){ + foreach($generalTurnList[$generalObj->getID()] as $turnRawIdx=>$turn){ $turnIdx = $turnRawIdx+1; $turnText[] = "{$turnIdx} : $turn"; } diff --git a/hwe/b_genList.php b/hwe/b_genList.php index 831f3e05..20e927bc 100644 --- a/hwe/b_genList.php +++ b/hwe/b_genList.php @@ -111,14 +111,14 @@ $generals = $db->query( $generalTurnList = []; foreach($db->queryAllLists( - 'SELECT general_id, turn_idx, action, arg FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC', + 'SELECT general_id, turn_idx, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC', array_column($generals, 'no') - ) as [$generalID, $turnIdx, $action, $arg] + ) as [$generalID, $turnIdx, $brief] ){ if(!key_exists($generalID, $generalTurnList)){ $generalTurnList[$generalID] = []; } - $generalTurnList[$generalID][$turnIdx] = [$action, Json::decode($arg)]; + $generalTurnList[$generalID][$turnIdx] = $brief; } $genCntEff = 0; @@ -173,11 +173,7 @@ foreach ($generals as &$general) { if ($general['npc'] < 2) { - $generalObj = new General($general, null, null, null, false); - $turnBrief = getGeneralTurnBrief($genralObj, $generalTurnList[$generalObj->getID()]); - $turntext = []; - - foreach($turnBrief as $turnRawIdx=>$turn){ + foreach($generalTurnList[$generalObj->getID()] as $turnRawIdx=>$turn){ $turn = StringUtil::subStringForWidth($turn, 0, 41); $turnIdx = $turnRawIdx+1; $turntext[] = " $turnIdx : $turn"; diff --git a/hwe/b_troop.php b/hwe/b_troop.php index 855d192e..701c20b4 100644 --- a/hwe/b_troop.php +++ b/hwe/b_troop.php @@ -43,14 +43,14 @@ if($troops){ ); foreach($db->queryAllLists( - 'SELECT general_id, turn_idx, action, arg FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC', + 'SELECT general_id, turn_idx, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC', array_column($troopLeaders, 'no') - ) as [$generalID, $turnIdx, $action, $arg] + ) as [$generalID, $turnIdx, $brief] ){ if(!key_exists($generalID, $generalTurnList)){ $generalTurnList[$generalID] = []; } - $generalTurnList[$generalID][$turnIdx] = [$action, Json::decode($arg)]; + $generalTurnList[$generalID][$turnIdx] = $brief; } foreach($troopLeaders as $troopLeader){ @@ -60,13 +60,12 @@ if($troops){ $troopLeader['cityText'] = CityConst::byID($troopLeader['city'])->name; $turnText = []; - foreach($generalTurnList[$troopLeader['no']] as $rawTurnIdx => [$action, $arg]){ - $actionName = getGeneralCommandClass($action)::getName(); - if($actionName != '집합'){ - $actionName = '~'; + foreach($generalTurnList[$troopLeader['no']] as $rawTurnIdx => $brief){ + if($brief != '집합'){ + $brief = '~'; } $turnIdx = $rawTurnIdx + 1; - $turnText[] = "{$turnIdx} : {$actionName}"; + $turnText[] = "{$turnIdx} : {$brief}"; } $troopLeader['turnText'] = join('
', $turnText); $troops[$troopLeader['troop']]['leader'] = $troopLeader; diff --git a/hwe/func.php b/hwe/func.php index f317dd2c..a54aeee9 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -569,10 +569,10 @@ function generalInfo(General $generalObj) { } else{ $troopCity = $db->queryFirstField('SELECT city FROM general WHERE no=%i', $generalObj->getVar('troop')); - $troopTurn = $db->queryFirstField('SELECT `action` FROM general_turn WHERE general_id = %i AND turn_idx = 0', $generalObj->getVar('troop')); + $troopTurn = $db->queryFirstField('SELECT `brief` FROM general_turn WHERE general_id = %i AND turn_idx = 0', $generalObj->getVar('troop')); $troopInfo = $db->queryFirstField('SELECT name FROM troop WHERE troop_leader = %i', $generalObj->getVar('troop')); - if($troopTurn == 'che_집합'){ + if($troopTurn == '집합'){ $troopInfo = "{$troopInfo}"; } else if($troopCity != $generalObj->getCityID()){ diff --git a/hwe/func_command.php b/hwe/func_command.php index b43ec0eb..cd568bdc 100644 --- a/hwe/func_command.php +++ b/hwe/func_command.php @@ -43,7 +43,8 @@ function pushGeneralCommand(int $generalID, int $turnCnt=1){ $db->update('general_turn', [ 'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxTurn), 'action'=>'휴식', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'휴식' ], 'general_id=%i AND turn_idx >= %i ORDER BY turn_idx ASC', $generalID, GameConst::$maxTurn); } @@ -63,7 +64,8 @@ function pullGeneralCommand(int $generalID, int $turnCnt=1){ $db->update('general_turn', [ 'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxTurn), 'action'=>'휴식', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'휴식' ], 'general_id=%i AND turn_idx < %i', $generalID, $turnCnt); $db->update('general_turn', [ 'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt) @@ -95,7 +97,8 @@ function pushNationCommand(int $nationID, int $level, int $turnCnt=1){ $db->update('nation_turn', [ 'turn_idx'=>$db->sqleval('turn_idx - %i', GameConst::$maxChiefTurn), 'action'=>'휴식', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'휴식' ], 'nation_id=%i AND level=%i AND turn_idx >= %i ORDER BY turn_idx ASC', $nationID, $level, GameConst::$maxChiefTurn); } @@ -121,14 +124,15 @@ function pullNationCommand(int $nationID, int $level, int $turnCnt=1){ $db->update('nation_turn', [ 'turn_idx'=>$db->sqleval('turn_idx + %i', GameConst::$maxChiefTurn), 'action'=>'휴식', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'휴식', ], 'nation_id=%i AND level=%i AND turn_idx < %i', $nationID, $level, $turnCnt); $db->update('nation_turn', [ 'turn_idx'=>$db->sqleval('turn_idx - %i', $turnCnt) ], 'nation_id=%i AND level=%i ORDER BY turn_idx ASC', $nationID, $level); } -function _setGeneralCommand(int $generalID, array $turnList, string $command, ?array $arg = null) { +function _setGeneralCommand(int $generalID, array $turnList, string $command, ?array $arg, string $brief) { if(!$turnList){ return; } @@ -137,11 +141,12 @@ function _setGeneralCommand(int $generalID, array $turnList, string $command, ?a $db->update('general_turn', [ 'action'=>$command, - 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT) + 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT), + 'brief'=>$brief ], 'general_id = %i AND turn_idx IN %li', $generalID, $turnList); } -function _setNationCommand(int $nationID, int $level, array $turnList, string $command, ?array $arg = null) { +function _setNationCommand(int $nationID, int $level, array $turnList, string $command, ?array $arg, string $brief) { if(!$turnList){ return; } @@ -150,7 +155,8 @@ function _setNationCommand(int $nationID, int $level, array $turnList, string $c $db->update('nation_turn', [ 'action'=>$command, - 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT) + 'arg'=>Json::encode($arg, JSON::EMPTY_ARRAY_IS_DICT), + 'brief'=>$brief ], 'nation_id = %i AND level = %i AND turn_idx IN %li', $nationID, $level, $turnList); } @@ -252,7 +258,9 @@ function setGeneralCommand(int $generalID, array $turnList, string $command, ?ar ]; } - _setGeneralCommand($generalID, $turnList, $command, $arg); + $brief = $commandObj->getBrief(); + + _setGeneralCommand($generalID, $turnList, $command, $arg, $brief); return [ 'result'=>true, 'arg_test'=>true, diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index a1681ea3..81a48207 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -697,7 +697,8 @@ function checkMerge() { if($npcList){ $db->update('general_turn', [ 'action'=>'che_하야', - 'arg'=>null + 'arg'=>null, + 'brief'=>'하야', ], 'general_id IN %li AND turn_idx = 0'); } @@ -854,7 +855,8 @@ function checkSurrender() { if($npcList){ $db->update('general_turn', [ 'action'=>'che_하야', - 'arg'=>null + 'arg'=>null, + 'brief'=>'하야', ], 'general_id IN %li AND turn_idx = 0'); } @@ -939,6 +941,7 @@ function updateNationState() { 'turn_idx'=>$turnIdx, 'action'=>'휴식', 'arg'=>null, + 'brief'=>'휴식' ]; } } diff --git a/hwe/index.php b/hwe/index.php index 888ff47d..bf493d6c 100644 --- a/hwe/index.php +++ b/hwe/index.php @@ -241,12 +241,25 @@ else if($session->userGrade == 4){ - -
-
-
- + +
+ + + + + + + + + +
- 명령 목록 -
diff --git a/hwe/j_get_reserved_command.php b/hwe/j_get_reserved_command.php index bc8cc5ae..d966088a 100644 --- a/hwe/j_get_reserved_command.php +++ b/hwe/j_get_reserved_command.php @@ -9,15 +9,38 @@ $session = Session::requireGameLogin([])->setReadOnly(); $db = DB::db(); $commandList = []; - +$gameStor = KVStorage::getStorage($db, 'game_env'); $generalID = $session->generalID; -$rawTurn = $db->queryAllLists('SELECT turn_idx, action, arg FROM general_turn WHERE general_id = %i ORDER BY turn_idx ASC'); -foreach($rawTurn as [$turn_idx, $action, $arg]){ +$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]){ $commandList[$turn_idx] = [ 'action'=>$action, + 'brief'=>$brief, 'arg'=>Json::decode($arg) ]; } -Json::die($commandList); \ No newline at end of file +[$turnTerm, $year, $month, $lastExecute] = $gameStor->getValuesAsArray(['turnterm', 'year', 'month', 'turntime']); + +$turnTime = $db->queryFirstField('SELECT turntime FROM general WHERE no=%i', $generalID); + +if(cutTurn($turnTime, $turnTerm) > cutTurn($lastExecute, $turnTerm)){ + //이미 이번달에 실행된 턴이다. + $month++; + if($month >= 13){ + $month -= 12; + $year += 1; + } +} + + +Json::die([ + 'result'=>true, + 'turnTime'=>$turnTime, + 'turnTerm'=>$turnTerm, + 'year'=>$year, + 'month'=>$month, + 'date'=>TimeUtil::now(true), + 'turn'=>$commandList +]); \ No newline at end of file diff --git a/hwe/join_post.php b/hwe/join_post.php index fcab5c3e..c7e05b83 100644 --- a/hwe/join_post.php +++ b/hwe/join_post.php @@ -262,6 +262,7 @@ foreach(range(0, GameConst::$maxTurn - 1) as $turnIdx){ 'turn_idx'=>$turnIdx, 'action'=>'휴식', 'arg'=>null, + 'brief'=>'휴식' ]; } $db->insert('general_turn', $turnRows); diff --git a/hwe/js/main.js b/hwe/js/main.js index 88e6cdc9..c97d9544 100644 --- a/hwe/js/main.js +++ b/hwe/js/main.js @@ -1,7 +1,73 @@ jQuery(function($){ - $('#do_refresh').click(function(){ - document.location.reload(); - return false; +$('#do_refresh').click(function(){ + document.location.reload(); + return false; +}); + + +function reloadCommandList(){ + $.get({ + url:'j_get_reserved_command.php', + dataType:'json', + cache: false, + }).then(function(data){ + if(!data){ + return; + } + if(!data.result){ + return; + } + var game_clock = moment(data.date); + var now_clock = moment(); + var $clock = $('#clock'); + $clock.data('time-diff', game_clock.diff(now_clock)); + $clock.val(game_clock.format('YYYY-MM-DD HH:mm:ss')); + + var turnTime = moment(data.turnTime); + var nextTurnTime = turnTime.clone(); + + var year = data.year; + var month = data.month; + + $.each(data.turn, function(turnIdx, turnInfo){ + var $tr = $('#command_{0}'.format(turnIdx)); + + $tr.find('.time_pad').text(nextTurnTime.format('HH:mm')); + $tr.find('.month_pad').text('{0}年 {1}月'.format(year, month)); + $tr.find('.turn_pad').text(turnInfo.brief); + nextTurnTime.add(data.turnTerm, 'minutes'); + month+=1; + if(month >= 13){ + year += 1; + month -= 12; + } + }); + console.log(data); }); +} + +function myclock() { + + var $clock = $('#clock'); + var now_clock = moment(); + + if($clock.data('time-diff') == null){ + return; + } + + /* + if(!$clock.attr('data-time-diff')){ + var base_clock = moment($clock.attr('data-server-time')); + $clock.attr('data-time-diff', base_clock.diff(now_clock)); + } + */ + + var game_clock = now_clock.add(parseInt($clock.data('time-diff')), 'milliseconds'); + + $('#clock').val(game_clock.format('YYYY-MM-DD HH:mm:ss')); +} + +setInterval(myclock, 500); +reloadCommandList(); }); \ No newline at end of file diff --git a/hwe/sammo/Command/BaseCommand.php b/hwe/sammo/Command/BaseCommand.php index ed656f60..66bad84b 100644 --- a/hwe/sammo/Command/BaseCommand.php +++ b/hwe/sammo/Command/BaseCommand.php @@ -215,6 +215,10 @@ abstract class BaseCommand{ return static::getName(); } + public function getRawClassName():string{ + return static::class; + } + public function getCompensationStyle():?int{ //1 : Positive //0 : Neutral diff --git a/hwe/sammo/Command/General/che_거병.php b/hwe/sammo/Command/General/che_거병.php index dd2212da..cd69a699 100644 --- a/hwe/sammo/Command/General/che_거병.php +++ b/hwe/sammo/Command/General/che_거병.php @@ -139,6 +139,7 @@ class che_거병 extends Command\GeneralCommand{ 'turn_idx'=>$turnIdx, 'action'=>'휴식', 'arg'=>null, + 'brief'=>'휴식', ]; } diff --git a/hwe/sammo/GeneralAI.php b/hwe/sammo/GeneralAI.php index c588d8ae..7e19f9fb 100644 --- a/hwe/sammo/GeneralAI.php +++ b/hwe/sammo/GeneralAI.php @@ -1177,7 +1177,8 @@ class GeneralAI{ //NOTE: 부대 편성에 보여야 하므로 이것만 DB에 직접 접근함. $db->update('general_turn', [ 'action'=>'che_집합', - 'arg'=>'{}' + 'arg'=>'{}', + 'brief'=>'집합' ], 'general_ID=%i AND turn_idx < 6', $general->getID()); } @@ -1402,6 +1403,7 @@ class GeneralAI{ $sumLeadershipInCity = $db->queryFirstField('SELECT sum(leadership) FROM general WHERE nation = %i AND city = %i AND leadership > 40', $nationID, $cityID); if( + $sumLeadershipInCity > 0 && $city['pop'] > 30000 + $general->getLeadership(false) * 100 * 1.3 && Util::randBool(($city['pop'] - 30000) / $sumLeadershipInCity * 100) ){ diff --git a/hwe/sammo/ResetHelper.php b/hwe/sammo/ResetHelper.php index 588b22e6..845522ff 100644 --- a/hwe/sammo/ResetHelper.php +++ b/hwe/sammo/ResetHelper.php @@ -278,6 +278,7 @@ class ResetHelper{ 'turn_idx'=>$turnIdx, 'action'=>'휴식', 'arg'=>null, + 'brief'=>'휴식' ]; } $db->insert('general_turn', $turnRows); diff --git a/hwe/sammo/Scenario/NPC.php b/hwe/sammo/Scenario/NPC.php index 819afe73..6fdd3a2b 100644 --- a/hwe/sammo/Scenario/NPC.php +++ b/hwe/sammo/Scenario/NPC.php @@ -346,6 +346,7 @@ class NPC{ 'turn_idx'=>$turnIdx, 'action'=>'휴식', 'arg'=>null, + 'brief'=>'휴식', ]; } $db->insert('general_turn', $turnRows); diff --git a/hwe/sammo/Scenario/Nation.php b/hwe/sammo/Scenario/Nation.php index ae3e0767..9e3ce105 100644 --- a/hwe/sammo/Scenario/Nation.php +++ b/hwe/sammo/Scenario/Nation.php @@ -158,6 +158,7 @@ class Nation{ 'turn_idx'=>$turnIdx, 'action'=>'휴식', 'arg'=>'{}', + 'brief'=>'휴식', ]; } } diff --git a/hwe/sql/schema.sql b/hwe/sql/schema.sql index cae95be5..53b8fc07 100644 --- a/hwe/sql/schema.sql +++ b/hwe/sql/schema.sql @@ -144,6 +144,7 @@ CREATE TABLE `general_turn` ( `turn_idx` INT(4) NOT NULL, `action` VARCHAR(16) NOT NULL, `arg` TEXT NULL DEFAULT NULL, + `brief` TEXT NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `general_id` (`general_id`, `turn_idx`), INDEX `action` (`action`, `turn_idx`, `general_id`) @@ -204,6 +205,7 @@ CREATE TABLE `nation_turn` ( `turn_idx` INT(4) NOT NULL, `action` VARCHAR(16) NOT NULL, `arg` TEXT NULL DEFAULT NULL, + `brief` TEXT NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `nation` (`nation_id`, `level`, `turn_idx`), INDEX `action` (`action`, `turn_idx`, `nation_id`, `level`)