diff --git a/hwe/b_myBossInfo.php b/hwe/b_myBossInfo.php
index 4a181b40..25e83254 100644
--- a/hwe/b_myBossInfo.php
+++ b/hwe/b_myBossInfo.php
@@ -452,15 +452,7 @@ echo "
";
-$citylevel = [];
-$citylevel[1] = "수";
-$citylevel[2] = "진";
-$citylevel[3] = "관";
-$citylevel[4] = "이";
-$citylevel[5] = "소";
-$citylevel[6] = "중";
-$citylevel[7] = "대";
-$citylevel[8] = "특";
+$citylevel = getCityLevelList();
$query = "select city,name,gen1,gen2,gen3,level,region,gen1set,gen2set,gen3set from city where nation='{$nation['nation']}' order by region,level desc,binary(name)"; // 도시 이름 목록
$cityresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php
index e49abe68..b43f51d4 100644
--- a/hwe/battle_simulator.php
+++ b/hwe/battle_simulator.php
@@ -1,2 +1,179 @@
setReadOnly();
+$db = DB::db();
+$gameStor = KVStorage::getStorage($db, 'game_env');
+
+$startYear = $gameStor->getValue('startyear');
+
+?>
+
+
+
+=UniqueConst::$serverName?>: 전투 시뮬레이터
+
+
+
+=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
+=WebUtil::printCSS('../d_shared/common.css')?>
+=WebUtil::printCSS('../css/config.css')?>
+=WebUtil::printCSS('css/common.css')?>
+=WebUtil::printCSS('css/battle_simulator.css')?>
+=WebUtil::printJS('../d_shared/common_path.js')?>
+=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
+=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
+=WebUtil::printJS('js/common.js')?>
+=WebUtil::printJS('js/battle_simulator.js')?>
+
+
+
+
+
\ No newline at end of file
diff --git a/hwe/css/battle_simulator.css b/hwe/css/battle_simulator.css
new file mode 100644
index 00000000..65ea0a7c
--- /dev/null
+++ b/hwe/css/battle_simulator.css
@@ -0,0 +1,4 @@
+#container{
+ width:1024px;
+ margin:auto;
+}
\ No newline at end of file
diff --git a/hwe/func_converter.php b/hwe/func_converter.php
index 563d0061..78689a74 100644
--- a/hwe/func_converter.php
+++ b/hwe/func_converter.php
@@ -8,25 +8,14 @@ namespace sammo;
* Side effect 없이 값의 변환만을 수행하는 함수들의 모음.
*/
-
function NationCharCall($call) {
- switch($call) {
- case '명가': $type =13; break;
- case '음양가': $type =12; break;
- case '종횡가': $type =11; break;
- case '불가': $type =10; break;
- case '도적': $type = 9; break;
- case '오두미도':$type = 8; break;
- case '태평도': $type = 7; break;
- case '도가': $type = 6; break;
- case '묵가': $type = 5; break;
- case '덕가': $type = 4; break;
- case '병가': $type = 3; break;
- case '유가': $type = 2; break;
- case '법가': $type = 1; break;
- default: $type = 0; break;
+ static $invTable = [];
+ if(!$invTable){
+ foreach(getNationTypeList() as $typeID => [$name, $pros, $cons]){
+ $invTable[$name] = $typeID;
+ }
}
- return $type;
+ return $invTable[$name]??0;
}
function CharCall($call) {
@@ -251,24 +240,17 @@ function getSpecialInfo(?int $type):?string{
return $infoText[$type][1]??null;
}
-function getNationType($type) {
- switch($type) {
- case 13: $call = '명 가'; break;
- case 12: $call = '음 양 가'; break;
- case 11: $call = '종 횡 가'; break;
- case 10: $call = '불 가'; break;
- case 9: $call = '도 적'; break;
- case 8: $call = '오 두 미 도'; break;
- case 7: $call = '태 평 도'; break;
- case 6: $call = '도 가'; break;
- case 5: $call = '묵 가'; break;
- case 4: $call = '덕 가'; break;
- case 3: $call = '병 가'; break;
- case 2: $call = '유 가'; break;
- case 1: $call = '법 가'; break;
- case 0: $call = '-'; break;
+function getNationType(int $type) {
+ static $cache = [];
+ if(\key_exists($type, $cache)){
+ return $cache[$type];
}
- return $call;
+
+ $text = getNationTypeList()[$type][0]??'-';
+ $text = join(' ', StringUtil::splitString($text));
+ $cache[$type] = $text;
+
+ return $text;
}
@@ -287,24 +269,9 @@ function getConnect($con) {
return $conname;
}
-function getNationType2($type) {
- switch($type) {
- case 13: $call = '기술↑ 인구↑ 쌀수입↓ 수성↓'; break;
- case 12: $call = '내정↑ 인구↑ 기술↓ 전략↓'; break;
- case 11: $call = '전략↑ 수성↑ 금수입↓ 내정↓'; break;
- case 10: $call = '민심↑ 수성↑ 금수입↓'; break;
- case 9: $call = '계략↑ 금수입↓ 치안↓ 민심↓'; break;
- case 8: $call = '쌀수입↑ 인구↑ 기술↓ 수성↓ 내정↓'; break;
- case 7: $call = '인구↑ 민심↑ 기술↓ 수성↓'; break;
- case 6: $call = '인구↑ 기술↓ 치안↓'; break;
- case 5: $call = '수성↑ 기술↓'; break;
- case 4: $call = '치안↑인구↑ 민심↑ 쌀수입↓ 수성↓'; break;
- case 3: $call = '기술↑ 수성↑ 인구↓ 민심↓'; break;
- case 2: $call = '내정↑ 민심↑ 쌀수입↓'; break;
- case 1: $call = '금수입↑ 치안↑ 인구↓ 민심↓'; break;
- case 0: $call = '-'; break;
- }
- return $call;
+function getNationType2(int $type) {
+ [$name, $pros, $cons] = getNationTypeList()[$type]??['-', '', ''];
+ return "{$pros} {$cons}";
}
function getLevel($level, $nlevel=8) {
diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php
index dd173aae..06f7d18b 100644
--- a/hwe/func_gamerule.php
+++ b/hwe/func_gamerule.php
@@ -6,6 +6,38 @@ namespace sammo;
*/
+function getNationTypeList():array{
+ $table = [
+ 13=>['명가', '기술↑ 인구↑', '쌀수입↓ 수성↓'],
+ 12=>['음양가', '내정↑ 인구↑', '기술↓ 전략↓'],
+ 11=>['종횡가', '전략↑ 수성↑', '금수입↓ 내정↓'],
+ 10=>['불가', '민심↑ 수성↑', '금수입↓'],
+ 9=>['도적', '계략↑', '금수입↓ 치안↓ 민심↓'],
+ 8=>['오두미도', '쌀수입↑ 인구↑', '기술↓ 수성↓ 내정↓'],
+ 7=>['태평도', '인구↑ 민심↑', '기술↓ 수성↓'],
+ 6=>['도가', '인구↑', '기술↓ 치안↓'],
+ 5=>['묵가', '수성↑', '기술↓'],
+ 4=>['덕가', '치안↑인구↑ 민심↑', '쌀수입↓ 수성↓'],
+ 3=>['병가', '기술↑ 수성↑', '인구↓ 민심↓'],
+ 2=>['유가', '내정↑ 민심↑', '쌀수입↓'],
+ 1=>['법가', '금수입↑ 치안↑', '인구↓ 민심↓'],
+ ];
+ return $table;
+}
+
+function getCityLevelList():array{
+ return [
+ 1 => '수',
+ 2 => '진',
+ 3 => '관',
+ 4 => '이',
+ 5 => '소',
+ 6 => '중',
+ 7 => '대',
+ 8 => '특'
+ ];
+}
+
/**
* 게임 내부에 사용하는 유틸리티 함수들을 분리
*/
diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js
new file mode 100644
index 00000000..e69de29b