diff --git a/hwe/_admin2.php b/hwe/_admin2.php index f7eef41c..851a62d3 100644 --- a/hwe/_admin2.php +++ b/hwe/_admin2.php @@ -113,12 +113,12 @@ for($i=0; $i < 27; $i++) { - 턴설정 + 턴 시각 설정 - NPC해제 - + 명령 설정 + 메세지 전달 diff --git a/hwe/_admin2_submit.php b/hwe/_admin2_submit.php index 3a24199c..64ef0290 100644 --- a/hwe/_admin2_submit.php +++ b/hwe/_admin2_submit.php @@ -93,12 +93,15 @@ switch($btn) { ], '`no` IN %li', $genlist); break; case "강제 사망": - $date = TimeUtil::now(); + $date = TimeUtil::now(true); $db->update('general', [ - 'turn0'=>EncodeCommand(0, 0, 0, 0), 'killturn'=>0, 'turntime'=>$date, ], '`no` IN %li', $genlist); + $db->update('general_turn', [ + 'action'=>'휴식', + 'arg'=>'{}' + ], 'general_id IN %li AND turn_idx = 0', $genlist); break; case "특기 부여": [$year, $month] = $gameStor->getValuesAsArray(['year', 'month']); @@ -309,26 +312,21 @@ switch($btn) { ], '`no` IN %li AND item < %i', $genlist, $weap); } break; - case "NPC해제": - $db->update('general', [ - 'npc'=>1 - ], '`no` IN %li', $genlist); - break; case "하야입력": - $db->update('general', [ - 'turn0'=>EncodeCommand(0, 0, 0, 45) - ], '`no` IN %li', $genlist); + $db->update('general_turn', [ + 'action'=>'che_하야', + 'arg'=>'{}' + ], 'general_id IN %li AND turn_idx = 0', $genlist); break; case "방랑해산": - $db->update('general', [ - 'turn0'=>EncodeCommand(0, 0, 0, 47), - 'turn1'=>EncodeCommand(0, 0, 0, 56) - ], '`no` IN %li', $genlist); - break; - case "NPC설정": - $db->update('general', [ - 'npc'=>2 - ], '`no` IN %li', $genlist); + $db->update('general_turn', [ + 'action'=>'che_방랑', + 'arg'=>'{}' + ], 'general_id IN %li AND turn_idx = 0', $genlist); + $db->update('general_turn', [ + 'action'=>'che_해산', + 'arg'=>'{}' + ], 'general_id IN %li AND turn_idx = 1', $genlist); break; case "00턴": $turnterm = $gameStor->turnterm; diff --git a/hwe/_admin4_submit.php b/hwe/_admin4_submit.php index c91ba0ba..2933ec2b 100644 --- a/hwe/_admin4_submit.php +++ b/hwe/_admin4_submit.php @@ -51,8 +51,15 @@ switch($btn) { DB::db()->query('update general set killturn=8000 where no IN %li',$genlist); break; case "강제 사망": - $date = TimeUtil::now(); - DB::db()->query('update general set turn0=%s,killturn=0,turntime=%s where no IN %li',EncodeCommand(0, 0, 0, 0),$date, $genlist); + $date = TimeUtil::now(true); + $db->update('general', [ + 'killturn'=>0, + 'turntime'=>$date, + ], '`no` IN %li', $genlist); + $db->update('general_turn', [ + 'action'=>'휴식', + 'arg'=>'{}' + ], 'general_id IN %li AND turn_idx = 0', $genlist); break; case "메세지 전달": //TODO:새 갠메 시스템으로 변경 diff --git a/hwe/c_double.php b/hwe/c_double.php index 632f04b7..2fdbc3d1 100644 --- a/hwe/c_double.php +++ b/hwe/c_double.php @@ -14,8 +14,6 @@ $double = Util::getReq('double', 'int', 0); $third = Util::getReq('third', 'int', 0); $fourth = Util::getReq('fourth', 'int', 0); -extractMissingPostToGlobals(); - if(!$turn){ $turn = [0]; } @@ -28,8 +26,10 @@ if(!$turn){ $session = Session::requireGameLogin()->setReadOnly(); $userID = Session::getUserID(); +//TODO: 삭제. 새로 짜 +throw new \sammo\NotImplementedException(); + $db = DB::db(); -$connect=$db->get(); if($command < 0) { $command = 0; } if($double < 0) { $double = 0; } @@ -39,74 +39,20 @@ if($command > 99) { $command = 0; } if($double > 9999) { $double = 9999; } if($fourth > 9999) { $fourth = 9999; } -$comStr = EncodeCommand($fourth, $third, $double, $command); - // 건국 if($command == 46) { - $name = StringUtil::neutralize($name); - if($name == "") { $name = "무명"; } - - $db->update('general', [ - 'makenation'=>$name - ], 'owner=%i', $userID); - - $query = []; - foreach($turn as $turnIdx){ - $query['turn'.$turnIdx] = $comStr; - } - $db->update('general', $query, 'owner=%i', $userID); - header('Location:./'); die(); } //통합제의 if($command == 53) { - $query = "select nation,level from general where owner='{$userID}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $me = MYDB_fetch_array($result); - - if($me['level'] >= 5) { - $nationname = StringUtil::neutralize($nationname, 18); - if($nationname == "") { $nationname = "무명"; } - - $db->update('general', [ - 'makenation'=>$nationname - ], 'level>=5 and nation=%i', $me['nation']); - - $count = count($turn); - $str = "type=type"; - for($i=0; $i < $count; $i++) { - $str .= ",l{$me['level']}turn{$turn[$i]}='{$comStr}'"; - } - $query = "update nation set {$str} where nation='{$me['nation']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } header('location:b_chiefcenter.php'); die(); } //불가침 if($command == 61) { - $query = "select nation,level from general where owner='{$userID}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $me = MYDB_fetch_array($result); - - if($me['level'] >= 5) { - $note = StringUtil::neutralize($note, 90); - - $query = "update diplomacy set reserved='{$note}' where me='{$me['nation']}' and you='$double'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $count = count($turn); - $str = "type=type"; - for($i=0; $i < $count; $i++) { - $str .= ",l{$me['level']}turn{$turn[$i]}='{$comStr}'"; - } - $query = "update nation set {$str} where nation='{$me['nation']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } - header('location:b_chiefcenter.php'); die(); } @@ -116,30 +62,10 @@ if($command == 61) { //백성동원, 수몰, 허보, 피장파장, 의병모집, 이호경식, 급습 //국기변경 if($command == 23 || $command == 24 || $command == 27 || $command == 51 || $command == 52 || $command > 60) { - $query = "select no,nation,level from general where owner='{$userID}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $me = MYDB_fetch_array($result); - - if(($command == 23 || $command == 24 || $command == 27) && $me['no'] == $third) { - // 자기자신에게 악용 금지 - } elseif($me['level'] >= 5) { - $count = count($turn); - $str = "type=type"; - for($i=0; $i < $count; $i++) { - $str .= ",l{$me['level']}turn{$turn[$i]}='{$comStr}'"; - } - $query = "update nation set {$str} where nation='{$me['nation']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } header('location:b_chiefcenter.php'); die(); } //일반 턴 -$query = []; -foreach($turn as $turnIdx){ - $query['turn'.$turnIdx] = $comStr; -} -$db->update('general', $query, 'owner=%i', $userID); header('Location:./'); diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index d1405a94..ff6f3315 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -796,10 +796,15 @@ function checkMerge() { } else { $resignCount = Util::round($npccount2*(rand()%21+90)/100); } - $resignCommand = EncodeCommand(0, 0, 0, 45); //하야 - $query = "update general set turn0='$resignCommand' where nation='{$you['nation']}' and npc>=2 order by rand() limit {$resignCount}"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + $npcList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND npc>=2 AND npc != 5 ORDER BY rand() LIMIT %i', $you['nation'], $resignCount); + if($npcList){ + $db->update('general_turn', [ + 'action'=>'che_하야', + 'arg'=>null + ], 'general_id IN %li AND turn_idx = 0'); + } + pushGenLog($me, $mylog); pushGenLog($you, $youlog); pushWorldHistory($history, $admin['year'], $admin['month']); @@ -847,11 +852,11 @@ function checkSurrender() { $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $mynation = MYDB_fetch_array($result); //양국 NPC수 - $query = "select no from general where nation='{$you['nation']}' and npc>=2"; + $query = "select no from general where nation='{$you['nation']}' and npc>=2 and npc != 5"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $npccount = MYDB_num_rows($result); //양국 NPC수 - $query = "select no from general where nation='{$me['nation']}' and npc>=2"; + $query = "select no from general where nation='{$me['nation']}' and npc>=2 and npc != 5"; $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); $npccount2 = MYDB_num_rows($result); @@ -944,9 +949,13 @@ function checkSurrender() { } else { $resignCount = Util::round($npccount2*(rand()%21+90)/100); } - $resignCommand = EncodeCommand(0, 0, 0, 45); //하야 - $query = "update general set turn0='$resignCommand' where nation='{$you['nation']}' and npc>=2 order by rand() limit {$resignCount}"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + $npcList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND npc>=2 AND npc != 5 ORDER BY rand() LIMIT %i', $you['nation'], $resignCount); + if($npcList){ + $db->update('general_turn', [ + 'action'=>'che_하야', + 'arg'=>null + ], 'general_id IN %li AND turn_idx = 0'); + } pushGenLog($me, $mylog); pushGenLog($you, $youlog); diff --git a/hwe/process_war.php b/hwe/process_war.php index b87b751f..6acf70f7 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -561,10 +561,8 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) { } //NPC인 경우 10% 확률로 임관(엔장, 인재, 의병) - if($gen['npc'] >= 2 && $gen['npc'] <= 8 && rand() % 100 < 10) { - $commissionCommand = EncodeCommand(0, 0, $nation['nation'], 25); //임관 - $query = "update general set turn0='$commissionCommand' where no={$gen['no']}"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + if($gen['npc'] >= 2 && $gen['npc'] <= 8 && $gen['npc'] != 5 && rand() % 100 < 10) { + setGeneralCommand($gen['no'], [0], 'che_임관', ['destNationID'=>$nation['nation']]); } } unset($genlog[1]); diff --git a/hwe/processing.php b/hwe/processing.php index 4701d55c..dc5af5af 100644 --- a/hwe/processing.php +++ b/hwe/processing.php @@ -188,12 +188,7 @@ function command_99($turn) { $me = MYDB_fetch_array($result); if($me['level'] >= 5) { - $command = EncodeCommand(0, 0, 0, 99); - - for($i=0; $i < count($turn); $i++) { - $query = "update nation set l{$me['level']}turn{$turn[$i]}='{$command}' where nation='{$me['nation']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } + setNationCommand($me['nation'], $me['level'], [0], 'che_휴식'); } header('location:b_chiefcenter.php'); diff --git a/hwe/sammo/TurnExecutionHelper.php b/hwe/sammo/TurnExecutionHelper.php index cac6e186..9ae43a0c 100644 --- a/hwe/sammo/TurnExecutionHelper.php +++ b/hwe/sammo/TurnExecutionHelper.php @@ -211,7 +211,7 @@ WHERE turntime < %s ORDER BY turntime ASC, `no` ASC', } $generalCommand = $generalWork['action']; - $generalArg = $generalWork['arg']; + $generalArg = Json::decode($generalWork['arg'])??[]; unset($generalWork['action']); unset($generalWork['arg']); @@ -225,11 +225,11 @@ WHERE turntime < %s ORDER BY turntime ASC, `no` ASC', $lastNationTurnKey = "turn_last_{$generalWork['nation']}_{$generalWork['level']}"; $lastNationTurn = $nationStor->getDBValue($lastNationTurnKey)??[]; //수뇌 몇 없는데 매번 left join 하는건 낭비인것 같다. - $rawNationTurn = $db->queryFirstRow( + $rawNationTurn = Json::decode($db->queryFirstRow( 'SELECT action, arg FROM nation_turn WHERE nation_id = %i AND level = %i AND turn_idx =0', $generalWork['nation'], $generalWork['level'] - ); + ))??[]; $hasNationTurn = true; }