diff --git a/hwe/_admin_force_rehall.php b/hwe/_admin_force_rehall.php
new file mode 100644
index 00000000..7fba7fdd
--- /dev/null
+++ b/hwe/_admin_force_rehall.php
@@ -0,0 +1,25 @@
+setReadOnly();
+
+if($session->userGrade < 5) {
+ die('권한 부족');
+}
+
+$db = DB::db();
+$gameStor = KVStorage::getStorage($db, 'game_env');
+
+if(!$gameStor->isunited){
+ die('아직 천통하지 않았습니다');
+}
+
+foreach($db->queryFirstColumn(
+ 'SELECT no FROM general WHERE npc != 0 and age >= %i',
+ GameConst::$retirementYear
+) as $generalNo){
+ CheckHall($generalNo);
+}
\ No newline at end of file
diff --git a/hwe/a_genList.php b/hwe/a_genList.php
index ad745cd9..64712c02 100644
--- a/hwe/a_genList.php
+++ b/hwe/a_genList.php
@@ -30,6 +30,13 @@ if ($type <= 0 || $type > 15) {
$type = 9;
}
+$ownerNameList = [];
+if($gameStor->isunited){
+ foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){
+ $ownerNameList[$ownerID] = $ownerName;
+ }
+}
+
?>
@@ -82,26 +89,26 @@ foreach (getAllNationStaticInfo() as $nation) {
$nationlevel[$nation['nation']] = $nation['level'];
}
-switch ($type) { //FIXME: $query 처리 조심.
- case 1: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by nation"; break;
- case 2: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by leader desc"; break;
- case 3: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by power desc"; break;
- case 4: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by intel desc"; break;
- case 5: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by experience desc"; break;
- case 6: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by dedication desc"; break;
- case 7: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by level desc"; break;
- case 8: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by killturn"; break;
- default:
- case 9: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by connect desc"; break;
- case 10: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by experience desc"; break;
- case 11: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by personal"; break;
- case 12: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by special desc"; break;
- case 13: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by special2 desc"; break;
- case 14: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by age desc"; break;
- case 15: $query = "select no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by npc desc"; break;
-}
-$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
-$gencount = MYDB_num_rows($genresult);
+
+[$orderKey, $orderDesc] = [
+ 1=>['nation', false],
+ 2=>['leader', true],
+ 3=>['power', true],
+ 4=>['intel', true],
+ 5=>['experience', true],
+ 6=>['dedication', true],
+ 7=>['level', true],
+ 8=>['killturn', false],
+ 9=>['connect', true],
+ 10=>['experience', true],
+ 11=>['personal', true],
+ 12=>['special', true],
+ 13=>['special2', true],
+ 14=>['age', true],
+ 15=>['npc', true],
+][$type];
+
+$generalList = $db->query('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect from general order by %b %l', $orderKey, $orderDesc?'desc':'');
echo"
@@ -122,8 +129,7 @@ echo"
| 삭턴 |
벌점 |
";
-for ($j=0; $j < $gencount; $j++) {
- $general = MYDB_fetch_array($genresult);
+foreach($generalList as $general){
$nation = $nationname[$general['nation']];
if ($general['level'] == 12) {
@@ -152,6 +158,8 @@ for ($j=0; $j < $gencount; $j++) {
$intel = "{$general['intel']}";
}
+
+
if ($general['npc'] >= 2) {
$name = "{$general['name']}";
} elseif ($general['npc'] == 1) {
@@ -160,6 +168,10 @@ for ($j=0; $j < $gencount; $j++) {
$name = "{$general['name']}";
}
+ if(key_exists($general['owner'], $ownerNameList)){
+ $name = $name.'
('.$ownerNameList[$general['owner']].')';
+ }
+
$general['connect'] = Util::round($general['connect'] / 10) * 10;
$imageTemp = GetImageURL($general['imgsvr']);
diff --git a/hwe/b_myGenInfo.php b/hwe/b_myGenInfo.php
index 90a6861e..acdf650f 100644
--- a/hwe/b_myGenInfo.php
+++ b/hwe/b_myGenInfo.php
@@ -14,6 +14,7 @@ $session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
$db = DB::db();
+$gameStor = KVStorage::getStorage($db, 'game_env');
$connect=$db->get();
increaseRefresh("세력장수", 1);
@@ -29,6 +30,14 @@ if($me['level'] == 0) {
$sel = [$type => "selected"];
+$ownerNameList = [];
+if($gameStor->isunited){
+ foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){
+ $ownerNameList[$ownerID] = $ownerName;
+ }
+}
+
+
?>
@@ -74,48 +83,26 @@ $sel = [$type => "selected"];
queryFirstField('select level from nation where nation = %i', $me['nation']);
-$orderByText = '';//FIXME: 쿼리 재작성
-switch($type) {
- case 1: $orderByText = " order by level desc"; break;
- case 2: $orderByText = " order by dedication desc"; break;
- case 3: $orderByText = " order by experience desc"; break;
- case 4: $orderByText = " order by leader desc"; break;
- case 5: $orderByText = " order by power desc"; break;
- case 6: $orderByText = " order by intel desc"; break;
- case 7: $orderByText = " order by gold desc"; break;
- case 8: $orderByText = " order by rice desc"; break;
- case 9: $orderByText = " order by crew desc"; break;
- case 10: $orderByText = " order by connect desc"; break;
- case 11: $orderByText = " order by personal"; break;
- case 12: $orderByText = " order by special desc"; break;
- case 13: $orderByText = " order by special2 desc"; break;
- case 14: $orderByText = " order by belong desc"; break;
- case 15: $orderByText = " order by npc desc"; break;
-}
-$query =
- "select
- npc,
- special,
- special2,
- personal,
- picture,
- imgsvr,
- name,
- level,
- dedication,
- experience,
- injury,
- leader,
- power,
- intel,
- gold,
- rice,
- belong,
- connect,
- killturn
- from general where nation='{$me['nation']}' ".$orderByText;
-$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
-$gencount = MYDB_num_rows($genresult);
+
+[$orderKey, $orderDesc] = [
+ 1=>['level', true],
+ 2=>['dedication', true],
+ 3=>['experience', true],
+ 4=>['leader', true],
+ 5=>['power', true],
+ 6=>['intel', true],
+ 7=>['gold', true],
+ 8=>['rice', true],
+ 9=>['crew', true],
+ 10=>['connect', true],
+ 11=>['personal', true],
+ 12=>['special', true],
+ 13=>['special2', true],
+ 14=>['belong', true],
+ 15=>['npc', true],
+][$type];
+
+$generalList = $db->query('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leader,power,intel,experience,dedication,level,killturn,connect,gold,rice,crew,belong from general where nation = %i order by %b %l', $me['nation'], $orderKey, $orderDesc?'desc':'');
echo"
@@ -136,8 +123,7 @@ echo"
| 사 관 |
벌점 |
";
-for($j=0; $j < $gencount; $j++) {
- $general = MYDB_fetch_array($genresult);
+foreach($generalList as $general){
if($general['level'] == 12) {
$lbonus = $nationLevel * 2;
@@ -169,6 +155,10 @@ for($j=0; $j < $gencount; $j++) {
elseif($general['npc'] == 1) { $name = "{$general['name']}"; }
else { $name = "{$general['name']}"; }
+ if(key_exists($general['owner'], $ownerNameList)){
+ $name = $name.'
('.$ownerNameList[$general['owner']].')';
+ }
+
$imageTemp = GetImageURL($general['imgsvr']);
echo "
diff --git a/hwe/func.php b/hwe/func.php
index da1abffb..c24d0fb5 100644
--- a/hwe/func.php
+++ b/hwe/func.php
@@ -1495,7 +1495,7 @@ function CheckHall($no) {
'value'=>$general[$typeName]??0,
'aux'=>$jsonAux
],
- 'server_id = %s AND scenario = %i AND general_no = %i AND type = %i AND value < %?',
+ 'server_id = %s AND scenario = %i AND general_no = %i AND type = %i AND value < %d',
UniqueConst::$serverID,
$scenarioIdx,
$no,
diff --git a/hwe/func_process_personnel.old.php b/hwe/func_process_personnel.old.php
index 29bbf2ce..99c77689 100644
--- a/hwe/func_process_personnel.old.php
+++ b/hwe/func_process_personnel.old.php
@@ -309,9 +309,13 @@ function process_29(&$general) {
$gen_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc <= 2 AND nation = %i', $general['nation']);
$npc_cnt = $db->queryFirstField('SELECT count(`no`) FROM general WHERE 3 <= npc AND npc <= 4 AND nation = %i', $general['nation']);
+ $nation_cnt = $db->queryFirstField('SELECT count(`nation`) FROM nation WHERE `level` > 0');
+
$curr_cnt = Util::toInt($total_gen_cnt + $total_npc_cnt / 2);
$remain_slot = $max_gen_cnt - $curr_cnt;
+ $avg_cnt = $curr_cnt / $nation_cnt;
+
$found_prop_main = pow($remain_slot / $max_gen_cnt, 6);
$found_prop_small = 1 / ($total_npc_cnt / 3 + 1);
$found_prop_big = 1 / $max_gen_cnt;
@@ -355,7 +359,7 @@ function process_29(&$general) {
$name = "{$name}{$count}";
}
- $join_prop = 0.3 + 0.7 * (($gen_cnt + $npc_cnt / 2) / $curr_cnt);
+ $join_prop = 0.55 * $avg_cnt / ($gen_cnt + $npc_cnt / 2);
if($nation['scout'] != 0 || !Util::randBool($join_prop)) {
$scoutType = "발견";
diff --git a/hwe/lib.php b/hwe/lib.php
index 455f1b9b..5ba3a90d 100644
--- a/hwe/lib.php
+++ b/hwe/lib.php
@@ -26,8 +26,6 @@ define('STEP_LOG', true);
define('PROCESS_LOG', true);
ob_start();
-session_cache_limiter('nocache');//NOTE: 캐시가 가능하도록 설정해야 할 수도 있음. 주의!
-//FIXME: 이곳에서 설정하면 안될 듯 하다. 옮기자.
// 에러 메세지 출력
function Error($message='', $url="")
diff --git a/src/sammo/WebUtil.php b/src/sammo/WebUtil.php
index c4798b78..2ceaab80 100644
--- a/src/sammo/WebUtil.php
+++ b/src/sammo/WebUtil.php
@@ -21,6 +21,7 @@ class WebUtil
{
if (!headers_sent()) {
header('Expires: Wed, 01 Jan 2014 00:00:00 GMT');
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');