diff --git a/hwe/func.php b/hwe/func.php index 925527ad..f030bb09 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -1917,6 +1917,9 @@ function updateTurntime($no) { $alllog[0] = "●{$admin['month']}월:{$general['name2']}{$josaYi} {$general['name']}의 육체에서 유체이탈합니다!"; pushGeneralPublicRecord($alllog, $admin['year'], $admin['month']); } else { + + storeOldGeneral($general['no'], $admin['year'], $admin['month']); + // 군주였으면 유지 이음 if($general['level'] == 12) { nextRuler($general); @@ -2444,7 +2447,7 @@ function deleteNation($general) { $history[] = "●{$admin['year']}년 {$admin['month']}월:【멸망】{$nation['name']}{$josaUn} 멸망했습니다."; $oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $general['nation']); - $oldNationGenerals = $db->query('SELECT * FROM general WHERE nation=%i', $general['nation']); + $oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $general['nation']); $oldNation['generals'] = $oldNationGenerals; // 전 장수 재야로 // 전 장수 소속 무소속으로 diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 042effed..264d85bf 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -688,7 +688,7 @@ function checkMerge() { // 국가 백업 $oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $me['nation']); - $oldNationGenerals = $db->query('SELECT * FROM general WHERE nation=%i', $me['nation']); + $oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $me['nation']); $oldNation['generals'] = $oldNationGenerals; // 자금 통합, 외교제한 5년, 기술유지 @@ -700,7 +700,7 @@ function checkMerge() { 'nation'=>$me['nation'], 'data'=>Json::encode($oldNation) ]); - + $query = "delete from nation where nation='{$me['nation']}'"; MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); // 아국 모든 도시들 상대국 소속으로 @@ -818,7 +818,7 @@ function checkSurrender() { // 국가 백업 $oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $me['nation']); - $oldNationGenerals = $db->query('SELECT * FROM general WHERE nation=%i', $me['nation']); + $oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $me['nation']); $oldNation['generals'] = $oldNationGenerals; $newGenCount = $gencount + $gencount2; @@ -1143,6 +1143,45 @@ function checkStatistic() { } + +function convForOldGeneral(array $general, int $year, int $month){ + return [ + 'server_id'=>UniqueConst::$serverID, + 'general_no'=>$general['no'], + 'owner'=>$general['owner'], + 'name'=>$general['name'], + 'last_yearmonth'=>$year*100+$month, + 'turntime'=>$general['turntime'], + 'data'=>Json::encode($general) + ]; +} + +function storeOldGeneral(int $no, int $year, int $month){ + $db = DB::db(); + $general = $db->queryFirstRow('SELECT * FROM general WHERE `no` = %i', $no); + if(!$general){ + return; + } + $data = convForOldGeneral($general, $year, $month); + $db->insertUpdate( + 'ng_old_generals', + $data, + $data + ); +} + +function storeOldGenerals(int $nation, int $year, int $month){ + $db = DB::db(); + foreach($db->query('SELECT * FROM general WHERE nation = %i',$nation) as $general){ + $data = convForOldGeneral($general, $year, $month); + $db->insertUpdate( + 'ng_old_generals', + $data, + $data + ); + } +} + function checkEmperior() { $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); @@ -1229,7 +1268,7 @@ function checkEmperior() { $level5 = MYDB_fetch_array($genresult); $oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $nation['nation']); - $oldNationGenerals = $db->query('SELECT * FROM general WHERE nation=%i', $nation['nation']); + $oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $nation['nation']); $oldNation['generals'] = $oldNationGenerals; $query = "select name,picture,killnum from general where nation='{$nation['nation']}' order by killnum desc limit 5"; // 오호장군 @@ -1291,13 +1330,16 @@ function checkEmperior() { $oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $nation['nation']); $oldNation['generals'] = $db->query('SELECT * FROM general WHERE nation=%i', $nation['nation']); + storeOldGenerals(0, $admin['year'], $admin['month']); + storeOldGenerals($nation['nation'], $admin['year'], $admin['month']); + $db->insert('ng_old_nations', [ 'server_id'=>UniqueConst::$serverID, 'nation'=>$nation['nation'], 'data'=>Json::encode($oldNation) ]); - $noNationGeneral = $db->query('SELECT * FROM general WHERE nation=0'); + $noNationGeneral = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=0'); $db->insert('ng_old_nations', [ 'server_id'=>UniqueConst::$serverID, 'nation'=>0, diff --git a/hwe/process_war.php b/hwe/process_war.php index 798c6198..d9d9be1f 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -1812,7 +1812,10 @@ function ConquerCity($admin, $general, $city, $nation, $destnation) { // 국가 백업 $oldNation = $db->queryFirstRow('SELECT * FROM nation WHERE nation=%i', $city['nation']); $oldNationGenerals = $db->query('SELECT * FROM general WHERE nation=%i', $city['nation']); - $oldNation['generals'] = $oldNationGenerals; + $oldNation['generals'] = array_map(function($gen){ + //다른 코드와는 다르게 공용으로 쓰므로 남겨둠 + return $gen['no']; + }, $oldNationGenerals); foreach($oldNationGenerals as $gen){ diff --git a/hwe/sql/schema.sql b/hwe/sql/schema.sql index d4cf76eb..dee67627 100644 --- a/hwe/sql/schema.sql +++ b/hwe/sql/schema.sql @@ -410,6 +410,22 @@ CREATE TABLE IF NOT EXISTS `ng_old_nations` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED; +CREATE TABLE IF NOT EXISTS `ng_old_generals` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `server_id` CHAR(20) NOT NULL, + `general_no` INT(11) NOT NULL, + `owner` INT(11) NULL DEFAULT NULL, + `name` VARCHAR(32) NOT NULL, + `last_yearmonth` INT(11) NOT NULL, + `turntime` DATETIME NOT NULL, + `data` MEDIUMTEXT NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `by_no` (`server_id`, `general_no`), + INDEX `by_name` (`server_id`, `name`), + INDEX `owner` (`owner`, `server_id`) +) +ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED; + CREATE TABLE IF NOT EXISTS `emperior` ( `no` INT(6) NOT NULL AUTO_INCREMENT, `server_id` CHAR(20) NULL DEFAULT '',