From 5044d5d3b448b7159ff39f6b691f1974efa9d760 Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 23 Aug 2018 16:07:11 +0900 Subject: [PATCH 01/30] =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=A4=80=EB=B9=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 2 ++ hwe/j_simulate_battle.php | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 hwe/battle_simulator.php create mode 100644 hwe/j_simulate_battle.php diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php new file mode 100644 index 00000000..e49abe68 --- /dev/null +++ b/hwe/battle_simulator.php @@ -0,0 +1,2 @@ +setReadOnly(); +$userID = Session::getUserID(); From 6aa606f2fa0b5d56cc82f9d5e00324f92e4d450a Mon Sep 17 00:00:00 2001 From: Hide_D Date: Fri, 24 Aug 2018 01:09:17 +0900 Subject: [PATCH 02/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=ED=8B=80=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/b_myBossInfo.php | 10 +- hwe/battle_simulator.php | 179 ++++++++++++++++++++++++++++++++++- hwe/css/battle_simulator.css | 4 + hwe/func_converter.php | 71 ++++---------- hwe/func_gamerule.php | 32 +++++++ hwe/js/battle_simulator.js | 0 6 files changed, 234 insertions(+), 62 deletions(-) create mode 100644 hwe/css/battle_simulator.css create mode 100644 hwe/js/battle_simulator.js 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?>: 전투 시뮬레이터 + + + + + + + + + + + + + + + +
+
+
+ 전역 설정 +
+
+
+
+
+ +
+ +
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ 출병국 설정 +
+
+
+
+ 기술 +
+ +
+ 등급 +
+
+
+
+ 국가 성향 +
+ +
+
+
+ 도시 규모 +
+ +
+ 수도 +
+
+ + +
+
+
+
+
+
+
+
+ 수비국 설정 +
+
+
+
+ 기술 +
+ +
+ 등급 +
+
+
+
+ 국가 성향 +
+ +
+
+
+ 도시 규모 +
+ +
+ 수도 +
+
+ + +
+
+
+
+ 수비 +
+ +
+ 성벽 +
+ +
+
+
+
+
+
+ + \ 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 From cb54e56417ac25cd70999162081a867b3e4dcbf8 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Fri, 24 Aug 2018 03:46:21 +0900 Subject: [PATCH 03/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EC=9E=91=EC=97=85=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 189 +++++++++++++++++++++++++++++++++++++-- hwe/func_converter.php | 71 ++++++--------- hwe/func_gamerule.php | 5 ++ 3 files changed, 213 insertions(+), 52 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index b43f51d4..a9f0ac59 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -52,12 +52,12 @@ $startYear = $gameStor->getValue('startyear');
@@ -66,7 +66,7 @@ $startYear = $gameStor->getValue('startyear');
-
+
출병국 설정
@@ -90,6 +90,16 @@ $startYear = $gameStor->getValue('startyear');
+
+
+ 국가 규모 +
+ +
도시 규모 @@ -113,9 +123,134 @@ $startYear = $gameStor->getValue('startyear');
-
+
+
+
출병자 설정
+ +
+
+
+ +
+ 직위 +
+ +
+
+
+ 통솔 +
+ +
+ 무력 +
+ +
+ 지력 +
+ +
+
+
+ 명마 +
+ +
+ 무기 +
+ +
+ 서적 +
+ +
+
+
+ 부상 +
+ +
+ 군량 +
+ +
+ 도구 +
+ +
+
+
+ 병종 +
+ +
+ 병사 +
+ +
+ 성격 +
+ +
+
+
+ 훈련 +
+ +
+ 사기 +
+ +
+ 전특 +
+ +
+ + 레벨,보숙,궁숙,기숙,귀숙,차숙 +
+
+
-
+
수비국 설정
@@ -172,7 +307,45 @@ $startYear = $gameStor->getValue('startyear');
- +
+
+
수비자 설정
+ +
+
+
+
+ +
+
+
수비자 설정
+ +
+
+ diff --git a/hwe/func_converter.php b/hwe/func_converter.php index 78689a74..484d6b07 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -18,22 +18,33 @@ function NationCharCall($call) { return $invTable[$name]??0; } +function getCharacterList(){ + $infoText = [ + 10=>['은둔', '명성 -10%, 계급 -10%, 사기 -5, 훈련 -5, 단련 성공률 +10%'], + 9=>['안전', '사기 -5, 징·모병 비용 -20%'], + 8=>['유지', '훈련 -5, 징·모병 비용 -20%'], + 7=>['재간', '명성 -10%, 징·모병 비용 -20%'], + 6=>['출세', '명성 +10%, 징·모병 비용 +20%'], + 5=>['할거', '명성 -10%, 훈련 +5'], + 4=>['정복', '명성 -10%, 사기 +5'], + 3=>['패권', '훈련 +5, 징·모병 비용 +20%'], + 2=>['의협', '사기 +5, 징·모병 비용 +20%'], + 1=>['대의', '명성 +10%, 훈련 -5'], + 0=>['왕좌', '명성 +10%, 사기 -5'], + ]; + return $infoText; +} + function CharCall($call) { - switch($call) { - 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; - default: - case '대의'; $type = 1; break; - case '왕좌'; $type = 0; break; + static $invTable = []; + if(\key_exists($call, $invTable)){ + return $invTable[$call]; } - return $type; + + foreach(getCharacterList() as $id => [$name, $info]){ + $invTable[$name] = $id; + } + return $invTable[$call]; } function SpecCall($call) { @@ -109,42 +120,14 @@ function getNationLevel($level) { } function getGenChar($type) { - switch($type) { - 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; + return getCharacterList()[$type][0]; } function getCharInfo(?int $type):?string { if($type === null){ return null; } - - $infoText = [ - 10=>['은둔', '명성 -10%, 계급 -10%, 사기 -5, 훈련 -5, 단련 성공률 +10%'], - 9=>['안전', '사기 -5, 징·모병 비용 -20%'], - 8=>['유지', '훈련 -5, 징·모병 비용 -20%'], - 7=>['재간', '명성 -10%, 징·모병 비용 -20%'], - 6=>['출세', '명성 +10%, 징·모병 비용 +20%'], - 5=>['할거', '명성 -10%, 훈련 +5'], - 4=>['정복', '명성 -10%, 사기 +5'], - 3=>['패권', '훈련 +5, 징·모병 비용 +20%'], - 2=>['의협', '사기 +5, 징·모병 비용 +20%'], - 1=>['대의', '명성 +10%, 훈련 -5'], - 0=>['왕좌', '명성 +10%, 사기 -5'], - ]; - - return $infoText[$type][1]??null; + return getCharacterList()[$type][1]??null; } function getGenSpecial($type) { diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 06f7d18b..bb0ecd09 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -5,6 +5,11 @@ namespace sammo; * 게임 룰에 해당하는 함수 모음 */ +function getNationLevelList():array{ + $table = [ + 7 => ['황제', 8, ] + ]; +} function getNationTypeList():array{ $table = [ From 3916cc0562ced68e9aca735bd4dd3ac73b18fb1e Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sat, 25 Aug 2018 11:15:33 +0900 Subject: [PATCH 04/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20UI=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 130 +++++++++++++++++++++++++++++--------- hwe/func_converter.php | 131 +++++++++++++++++++-------------------- hwe/func_gamerule.php | 10 ++- 3 files changed, 174 insertions(+), 97 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index a9f0ac59..9a82ee6d 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -72,6 +72,14 @@ $startYear = $gameStor->getValue('startyear');
+
+ 국가 성향 +
+
기술
@@ -80,27 +88,15 @@ $startYear = $gameStor->getValue('startyear'); 등급
-
-
- 국가 성향 -
- -
국가 규모
-
-
도시 규모
@@ -120,6 +116,10 @@ $startYear = $gameStor->getValue('startyear'); N
+ + +
+
@@ -138,21 +138,32 @@ $startYear = $gameStor->getValue('startyear');
-
+
직위
+
+ Level +
+ +
+ 부상 +
+ +
+ %(건강) +
@@ -194,25 +205,34 @@ $startYear = $gameStor->getValue('startyear');
-
-
- 부상 +
+
+ 자금
- +
군량
- +
도구
- +
병종
- +
병사
@@ -226,7 +246,7 @@ $startYear = $gameStor->getValue('startyear');
-
+
훈련
@@ -244,8 +264,58 @@ $startYear = $gameStor->getValue('startyear');
- - 레벨,보숙,궁숙,기숙,귀숙,차숙 +
+
+ 보병숙련 +
+ +
+ 궁병숙련 +
+ +
+ 기병숙련 +
+ +
+
+
+ 귀병숙련 +
+ +
+ 차병숙련 +
+ +
+ 수비여부 +
+ +
diff --git a/hwe/func_converter.php b/hwe/func_converter.php index 484d6b07..ef7503ed 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -441,74 +441,73 @@ function getTechCall($tech) : string { return "{$techLevel}등급"; } -function getDexCall($dex) : string { - if($dex < 2500) { $str = 'F-'; } - elseif($dex < 7500) { $str = 'F'; } - elseif($dex < 15000) { $str = 'F+'; } - elseif($dex < 25000) { $str = 'E-'; } - elseif($dex < 37500) { $str = 'E'; } - elseif($dex < 52500) { $str = 'E+'; } - elseif($dex < 70000) { $str = 'D-'; } - elseif($dex < 90000) { $str = 'D'; } - elseif($dex < 112500) { $str = 'D+'; } - elseif($dex < 137500) { $str = 'C-'; } - elseif($dex < 165000) { $str = 'C'; } - elseif($dex < 195000) { $str = 'C+'; } - elseif($dex < 227500) { $str = 'B-'; } - elseif($dex < 262500) { $str = 'B'; } - elseif($dex < 300000) { $str = 'B+'; } - elseif($dex < 340000) { $str = 'A-'; } - elseif($dex < 382500) { $str = 'A'; } - elseif($dex < 427500) { $str = 'A+'; } - elseif($dex < 475000) { $str = 'S-'; } - elseif($dex < 525000) { $str = 'S'; } - elseif($dex < 577500) { $str = 'S+'; } - elseif($dex < 632500) { $str = 'SS-'; } - elseif($dex < 690000) { $str = 'SS'; } - elseif($dex < 750000) { $str = 'SS+'; } - elseif($dex < 812500) { $str = 'SSS-'; } - elseif($dex < 877500) { $str = 'SSS'; } - elseif($dex < 945000) { $str = 'SSS+'; } - elseif($dex < 1015000) { $str = 'Z-'; } - elseif($dex < 1087500) { $str = 'Z'; } - elseif($dex < 1162500) { $str = 'Z+'; } - else { $str = '?'; } - return $str; +function getDexLevelList(): array{ + return [ + [0, 'navy', 'F-'], + [2500, 'navy', 'F'], + [7500, 'navy', 'F+'], + [15000, 'skyblue', 'E-'], + [25000, 'skyblue', 'E'], + [37500, 'skyblue', 'E+'], + [52500, 'seagreen', 'D-'], + [70000, 'seagreen', 'D'], + [90000, 'seagreen', 'D+'], + [112500, 'teal', 'C-'], + [137500, 'teal', 'C'], + [165000, 'teal', 'C+'], + [195000, 'limegreen', 'B-'], + [227500, 'limegreen', 'B'], + [262500, 'limegreen', 'B+'], + [300000, 'gold', 'A-'], + [340000, 'gold', 'A'], + [382500, 'gold', 'A+'], + [427500, 'darkorange', 'S-'], + [475000, 'darkorange', 'S'], + [525000, 'darkorange', 'S+'], + [577500, 'tomato', 'SS-'], + [632500, 'tomato', 'SS'], + [690000, 'tomato', 'SS+'], + [750000, 'red', 'SSS-'], + [812500, 'red', 'SSS'], + [877500, 'red', 'SSS+'], + [945000, 'darkviolet', 'Z-'], + [1015000, 'darkviolet', 'Z'], + [1087500, 'darkviolet', 'Z+'], + [1162500, 'white', '?'] + ]; } -function getDexLevel($dex) : int { - if($dex < 2500) { $lvl = 0; } - elseif($dex < 7500) { $lvl = 1; } - elseif($dex < 15000) { $lvl = 2; } - elseif($dex < 25000) { $lvl = 3; } - elseif($dex < 37500) { $lvl = 4; } - elseif($dex < 52500) { $lvl = 5; } - elseif($dex < 70000) { $lvl = 6; } - elseif($dex < 90000) { $lvl = 7; } - elseif($dex < 112500) { $lvl = 8; } - elseif($dex < 137500) { $lvl = 9; } - elseif($dex < 165000) { $lvl = 10; } - elseif($dex < 195000) { $lvl = 11; } - elseif($dex < 227500) { $lvl = 12; } - elseif($dex < 262500) { $lvl = 13; } - elseif($dex < 300000) { $lvl = 14; } - elseif($dex < 340000) { $lvl = 15; } - elseif($dex < 382500) { $lvl = 16; } - elseif($dex < 427500) { $lvl = 17; } - elseif($dex < 475000) { $lvl = 18; } - elseif($dex < 525000) { $lvl = 19; } - elseif($dex < 577500) { $lvl = 20; } - elseif($dex < 632500) { $lvl = 21; } - elseif($dex < 690000) { $lvl = 22; } - elseif($dex < 750000) { $lvl = 23; } - elseif($dex < 812500) { $lvl = 24; } - elseif($dex < 877500) { $lvl = 25; } - elseif($dex < 945000) { $lvl = 26; } - elseif($dex < 1015000) { $lvl = 27; } - elseif($dex < 1087500) { $lvl = 28; } - elseif($dex < 1162500) { $lvl = 29; } - else { $lvl = 30; } - return $lvl; +function getDexCall(int $dex) : string { + if($dex < 0){ + throw new \InvalidArgumentException(); + } + + $color = null; + $name = null; + foreach(getDexLevelList() as $dexLevel => [$dexKey, $nextColor, $nextName]){ + if($dex < $dexKey){ + break; + } + $color = $nextColor; + $name = $nextName; + } + + return "{$name}"; +} + +function getDexLevel(int $dex) : int { + if($dex < 0){ + throw new \InvalidArgumentException(); + } + + $retVal = null; + foreach(getDexLevelList() as $dexLevel => [$dexKey, $nextColor, $nextName]){ + if($dex < $dexKey){ + break; + } + $retVal = $dexLevel; + } + return $dexLevel; } function getDexLog($dex1, $dex2) { diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index bb0ecd09..9ec888d2 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -7,8 +7,16 @@ namespace sammo; function getNationLevelList():array{ $table = [ - 7 => ['황제', 8, ] + 0 => ['방랑군', 2, 0], + 1 => ['호족', 2, 1], + 2 => ['군벌', 4, 2], + 3 => ['주자사', 4, 5], + 4 => ['주목', 6, 8], + 5 => ['공', 6, 11], + 6 => ['왕', 8, 16], + 7 => ['황제', 8, 21], ]; + return $table; } function getNationTypeList():array{ From d90e087f20fe6e6484df46916636bfa40f908eea Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sat, 25 Aug 2018 11:25:34 +0900 Subject: [PATCH 05/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EC=B6=94=EA=B0=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 206 ++++++++++++++++++----------------- hwe/css/battle_simulator.css | 12 ++ hwe/js/battle_simulator.js | 5 + 3 files changed, 124 insertions(+), 99 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index 9a82ee6d..660c38d1 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -70,7 +70,7 @@ $startYear = $gameStor->getValue('startyear');
출병국 설정
-
+
국가 성향 @@ -123,7 +123,7 @@ $startYear = $gameStor->getValue('startyear');
-
+
출병자 설정
+
+
+
+
+
+
+
+ 수비국 설정 +
+
+
+ 국가 성향 +
+ +
+ 기술 +
+ +
+ 등급 +
+
+
+
+ 국가 규모 +
+ +
+ 도시 규모 +
+ +
+ 수도 +
+
+ + +
+
+
+
+ 수비 +
+ +
+ 성벽 +
+ +
+
+
+
+
+
수비자 설정
+ +
+
+
+
+ +
+
+
수비자 설정
+ +
+
@@ -319,103 +424,6 @@ $startYear = $gameStor->getValue('startyear');
-
-
-
- 수비국 설정 -
-
-
-
- 기술 -
- -
- 등급 -
-
-
-
- 국가 성향 -
- -
-
-
- 도시 규모 -
- -
- 수도 -
-
- - -
-
-
-
- 수비 -
- -
- 성벽 -
- -
-
-
-
-
-
수비자 설정
- -
-
-
-
- -
-
-
수비자 설정
- -
-
-
diff --git a/hwe/css/battle_simulator.css b/hwe/css/battle_simulator.css index 65ea0a7c..373fa50e 100644 --- a/hwe/css/battle_simulator.css +++ b/hwe/css/battle_simulator.css @@ -1,4 +1,16 @@ #container{ width:1024px; margin:auto; +} + +.defender_add_form .general_detail{ + display:none; +} + +.attacker_form .defend_mode_text{ + visibility: hidden; +} + +.attacker_form .form_defend_mode{ + visibility: hidden; } \ No newline at end of file diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index e69de29b..ee53b0a4 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -0,0 +1,5 @@ +jQuery(function($){ + var $generalForm = $('.defender_add_form .general_detail'); + + $('.general_form .general_detail').html($generalForm.html()); +}); \ No newline at end of file From 480f015fb01a96f1041f7bf1ba514db316c02a05 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sat, 25 Aug 2018 11:27:29 +0900 Subject: [PATCH 06/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EA=B5=AC=ED=98=84=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 4 ++-- hwe/css/battle_simulator.css | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index 660c38d1..073103f5 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -412,10 +412,10 @@ $startYear = $gameStor->getValue('startyear'); -
+
수비여부
- diff --git a/hwe/css/battle_simulator.css b/hwe/css/battle_simulator.css index 373fa50e..e9be704c 100644 --- a/hwe/css/battle_simulator.css +++ b/hwe/css/battle_simulator.css @@ -7,10 +7,6 @@ display:none; } -.attacker_form .defend_mode_text{ - visibility: hidden; -} - -.attacker_form .form_defend_mode{ +.attacker_form .only_defender{ visibility: hidden; } \ No newline at end of file From ca57ef17fcbd28f6c027c9d479ee23c1ef6490b8 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 04:54:43 +0900 Subject: [PATCH 07/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EC=B6=94=EA=B0=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 66 ++++++++++---------- hwe/css/battle_simulator.css | 5 +- hwe/js/battle_simulator.js | 114 ++++++++++++++++++++++++++++++++++- 3 files changed, 149 insertions(+), 36 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index 073103f5..07394f4f 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -56,7 +56,7 @@ $startYear = $gameStor->getValue('startyear');
- +
@@ -132,16 +132,14 @@ $startYear = $gameStor->getValue('startyear');
- +
-
-
-
+
수비국 설정 @@ -205,7 +203,28 @@ $startYear = $gameStor->getValue('startyear');
+
+
+
수비자 설정
+ +
+
+
+
수비자 설정
- +
- -
-
-
-
-
-
- -
-
-
수비자 설정
-
@@ -265,7 +265,7 @@ $startYear = $gameStor->getValue('startyear');
부상
- +
%(건강)
@@ -296,7 +296,7 @@ $startYear = $gameStor->getValue('startyear');
무기
- @@ -314,11 +314,11 @@ $startYear = $gameStor->getValue('startyear');
자금
- +
군량
- +
도구
@@ -355,11 +355,11 @@ $startYear = $gameStor->getValue('startyear');
훈련
- +
사기
- +
전특
@@ -423,6 +423,8 @@ $startYear = $gameStor->getValue('startyear');
+ + diff --git a/hwe/css/battle_simulator.css b/hwe/css/battle_simulator.css index e9be704c..91fdcdb8 100644 --- a/hwe/css/battle_simulator.css +++ b/hwe/css/battle_simulator.css @@ -7,6 +7,7 @@ display:none; } -.attacker_form .only_defender{ - visibility: hidden; + +.form_sample{ + display:none; } \ No newline at end of file diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index ee53b0a4..3b7a39bf 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -1,5 +1,115 @@ jQuery(function($){ - var $generalForm = $('.defender_add_form .general_detail'); - $('.general_form .general_detail').html($generalForm.html()); + + var $generalForm = $('.form_sample .general_detail'); + var $defenderHeaderForm = $('.form_sample .card-header'); + var $defenderColumn = $('.defender-column'); + + var initBasicEvent = function(){ + $('.export_general').click(function(){ + var $this = $(this); + var $card = $this.closest('.general_form'); + var $general = $card.find('.general_detail'); + + var values = extractGeneralInfo($general); + console.log(values); + }); + //$defenderHeaderForm.find('') + } + + var loadGeneralInfo = function($general, data){ + + } + + var extractGeneralInfoForDB = function($general, idx){ + var retVal = extractGeneralInfo($general); + + var dbVal = { + turntime:'2018-08-26 12:00', + leader2:0, + power2:0, + intel2:0, + + dedication:0, + warnum:10, + killnum:4, + deathnum:4, + + killcrew:20000, + deathcrew:20000, + recwar:'SUCCESS', + experience:extInt('.form_exp_level')*extInt('.form_exp_level'), + }; + + if(idx <= 0){ + dbVal['name'] = '출병자'; + dbVal['no'] = 1; + dbVal['nation'] = 1; + } + else{ + dbVal['name'] = '수비자{0}'.format(idx); + dbVal['no'] = idx+1; + dbVal['nation'] = 2; + } + + return $.merge(retVal, defaultVal); + } + + var extractGeneralInfo = function($general){ + var extInt = function(query){ + return parseInt($general.find(query).val()); + } + + return { + level:extInt('.form_general_level'), + explevel:extInt('.form_exp_level'), + injury:extInt('.form_injury'), + + leader:extInt('.form_leadership'), + horse:extInt('.form_general_horse'), + power:extInt('.form_power'), + weap:extInt('.form_general_weap'), + intel:extInt('.form_intel'), + book:extInt('.form_general_book'), + item:extInt('.form_general_item'), + + gold:extInt('.form_gold'), + rice:extInt('.form_rice'), + + personal:extInt('.form_general_character'), + special2:extInt('.form_general_special_war'), + + crew:extInt('.form_crew'), + crewtype:extInt('.form_crewtype'), + atmos:extInt('.form_atmos'), + train:extInt('.form_train'), + + dex0:extInt('.form_dex0'), + dex10:extInt('.form_dex10'), + dex20:extInt('.form_dex20'), + dex30:extInt('.form_dex30'), + dex40:extInt('.form_dex40'), + mode:extInt('.form_defend_mode'), + }; + } + + initBasicEvent(); + + $('.defender_form').append($defenderHeaderForm.clone(true, true)); + $('.general_form').append($generalForm.clone(true, true)); + + var addDefender = function(){ + var $newObj = $('
'); + $defenderColumn.append($newObj); + $newObj.append($defenderHeaderForm.clone(true,true)); + $newObj.append($generalForm.clone(true,true)); + } + + var deleteDefender = function($this){ + var $card = $this.closest('.general_form'); + $card.detach(); + } + + $('.add-defender').click(addDefender); + $('.delete-defender').click(function(){deleteDefender($(this));}); }); \ No newline at end of file From 724804efc6bea776c5add5e0f2873b953556fd06 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 17:20:47 +0900 Subject: [PATCH 08/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EB=A1=9C=EC=BB=AC=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- e_lib/download2.js | 132 +++++++++++++ hwe/battle_simulator.php | 70 +++---- hwe/js/battle_simulator.js | 381 +++++++++++++++++++++++++++++++------ 3 files changed, 484 insertions(+), 99 deletions(-) create mode 100644 e_lib/download2.js diff --git a/e_lib/download2.js b/e_lib/download2.js new file mode 100644 index 00000000..bc51d8f0 --- /dev/null +++ b/e_lib/download2.js @@ -0,0 +1,132 @@ +//download.js v3.0, by dandavis; 2008-2014. [CCBY2] see http://danml.com/download.html for tests/usage +// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime +// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs +// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support + +// data can be a string, Blob, File, or dataURL + + + + +function download(data, strFileName, strMimeType) { + + var self = window, // this script is only for browsers anyway... + u = "application/octet-stream", // this default mime also triggers iframe downloads + m = strMimeType || u, + x = data, + D = document, + a = D.createElement("a"), + z = function(a){return String(a);}, + + + B = self.Blob || self.MozBlob || self.WebKitBlob || z, + BB = self.MSBlobBuilder || self.WebKitBlobBuilder || self.BlobBuilder, + fn = strFileName || "download", + blob, + b, + ua, + fr; + + //if(typeof B.bind === 'function' ){ B=B.bind(self); } + + if(String(this)==="true"){ //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback + x=[x, m]; + m=x[0]; + x=x[1]; + } + + + + //go ahead and download dataURLs right away + if(String(x).match(/^data\:[\w+\-]+\/[\w+\-]+[,;]/)){ + return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs: + navigator.msSaveBlob(d2b(x), fn) : + saver(x) ; // everyone else can save dataURLs un-processed + }//end if dataURL passed? + + try{ + + blob = x instanceof B ? + x : + new B([x], {type: m}) ; + }catch(y){ + if(BB){ + b = new BB(); + b.append([x]); + blob = b.getBlob(m); // the blob + } + + } + + + + function d2b(u) { + var p= u.split(/[:;,]/), + t= p[1], + dec= p[2] == "base64" ? atob : decodeURIComponent, + bin= dec(p.pop()), + mx= bin.length, + i= 0, + uia= new Uint8Array(mx); + + for(i;igetValue('startyear'); + @@ -39,7 +40,11 @@ $startYear = $gameStor->getValue('startyear');
- + +
+ 년 시작 +
+
@@ -52,12 +57,9 @@ $startYear = $gameStor->getValue('startyear');
@@ -123,17 +125,14 @@ $startYear = $gameStor->getValue('startyear');
-
+
출병자 설정
@@ -211,10 +210,8 @@ $startYear = $gameStor->getValue('startyear');
- -
-
- + +
@@ -222,33 +219,31 @@ $startYear = $gameStor->getValue('startyear');
-
-
수비자 설정
- +
+ 이름 +
+
직위
- @@ -262,13 +257,7 @@ $startYear = $gameStor->getValue('startyear'); Level
-
- 부상 -
- -
- %(건강) -
+
@@ -311,10 +300,13 @@ $startYear = $gameStor->getValue('startyear');
-
- 자금 +
+ 부상 +
+ +
+ %(건강)
-
군량
diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index 3b7a39bf..4d1b2ae1 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -5,24 +5,260 @@ jQuery(function($){ var $defenderHeaderForm = $('.form_sample .card-header'); var $defenderColumn = $('.defender-column'); + var defenderNoList = {}; + + var $attackerCard = $('.attacker_form'); + var initBasicEvent = function(){ - $('.export_general').click(function(){ + + $('.form_injury').change(function(){ var $this = $(this); - var $card = $this.closest('.general_form'); - var $general = $card.find('.general_detail'); + var $general = getGeneralDetail($this); + var $helptext = $general.find('.injury_helptext'); + + var injury = parseInt($this.val()); + //FIXME: PHP 코드와 항상 일치하도록 변경 + var text = '건강'; + var color = 'white'; + if(injury > 60){ + text = '위독'; + color = 'red'; + } + else if(injury > 40){ + text = '심각'; + color = 'magenta'; + } + else if(injury > 20){ + text = '중상'; + color = 'orange'; + } + else if(injury > 0){ + text = '경상'; + color = 'yellow'; + } + $helptext.html(text).css('color', color); + }); + + $('.export_general').click(function(){ + var $btn = $(this); + var $general = getGeneralDetail($btn); - var values = extractGeneralInfo($general); + var values = exportGeneralInfo($general); console.log(values); }); - //$defenderHeaderForm.find('') + $('.delete-defender').click(function(){ + var $card = getGeneralFrame($(this)); + deleteDefender($card); + }); + $('.copy-defender').click(function(){ + var $card = getGeneralFrame($(this)); + copyDefender($card); + }); + + $('.add-defender').click(function(){ + addDefender(); + }); + + $('.btn-general-load').click(function(){ + var $file = $(this).prev(); + $file[0].click(); + }) + + $('.form_load_general_file').on('change', function(e){ + e.preventDefault(); + var $this = $(this); + var $card = getGeneralFrame($this); + + var files = e.target.files; + + importGeneralInfoByFile(files, $card); + return false; + }); + + $('.btn-general-save').click(function(){ + var $this = $(this); + var $general = getGeneralDetail($this); + var generalData = exportGeneralInfo($general); + + var filename = "general_{0}.json".format(generalData.name); + var saveData = JSON.stringify({ + objType:'general', + data:generalData + }, null, 4); + + download(saveData, filename, 'application/json'); + }); + + var $generals = $('.general_detail'); + $generals.bind('dragover dragleave', function(e) { + e.stopPropagation() + e.preventDefault() + }) + $generals.bind('drop', function(e){ + e.preventDefault(); + var $this = $(this); + var $card = getGeneralFrame($this); + + var files = e.originalEvent.dataTransfer.files; + + importGeneralInfoByFile(files, $card); + return false; + }); } - var loadGeneralInfo = function($general, data){ + var importGeneralInfo = function($general, data){ + var setVal = function(query, val){ + $general.find(query).val(val).change(); + } + setVal('.form_general_name', data.name); + + setVal('.form_general_level', data.level); + setVal('.form_exp_level', data.explevel); + setVal('.form_injury', data.injury); + + setVal('.form_leadership', data.leader); + setVal('.form_general_horse', data.horse); + setVal('.form_power', data.power); + setVal('.form_general_weap', data.weap); + setVal('.form_intel', data.intel); + setVal('.form_general_book', data.book); + setVal('.form_general_item', data.item); + + setVal('.form_injury', data.injury); + + setVal('.form_rice', data.rice); + + setVal('.form_general_character', data.personal); + setVal('.form_general_special_war', data.special2); + + setVal('.form_crew', data.crew); + setVal('.form_crewtype', data.crewtype); + setVal('.form_atmos', data.atmos); + setVal('.form_train', data.train); + + setVal('.form_dex0', data.dex0); + setVal('.form_dex10', data.dex10); + setVal('.form_dex20', data.dex20); + setVal('.form_dex30', data.dex30); + setVal('.form_dex40', data.dex40); + setVal('.form_defend_mode', data.mode); + + if(!setGeneralNo($general, data.no)){ + setGeneralNo($general, generateNewGeneralNo()); + } } - var extractGeneralInfoForDB = function($general, idx){ - var retVal = extractGeneralInfo($general); + var exportGeneralInfo = function($general){ + var getInt = function(query){ + return parseInt($general.find(query).val()); + } + + var getVal = function(query){ + return $general.find(query).val(); + } + + return { + no:getGeneralNo($general), + name:getVal('.form_general_name'), + level:getInt('.form_general_level'), + explevel:getInt('.form_exp_level'), + + leader:getInt('.form_leadership'), + horse:getInt('.form_general_horse'), + power:getInt('.form_power'), + weap:getInt('.form_general_weap'), + intel:getInt('.form_intel'), + book:getInt('.form_general_book'), + item:getInt('.form_general_item'), + + injury:getInt('.form_injury'), + + rice:getInt('.form_rice'), + + personal:getInt('.form_general_character'), + special2:getInt('.form_general_special_war'), + + crew:getInt('.form_crew'), + crewtype:getInt('.form_crewtype'), + atmos:getInt('.form_atmos'), + train:getInt('.form_train'), + + dex0:getInt('.form_dex0'), + dex10:getInt('.form_dex10'), + dex20:getInt('.form_dex20'), + dex30:getInt('.form_dex30'), + dex40:getInt('.form_dex40'), + mode:getInt('.form_defend_mode'), + }; + } + + var importGeneralInfoByFile = function(files, $card){ + if($card === undefined){ + $card = addDefender(); + } + + if(files === null){ + alert('파일 에러!'); + return false; + } + + if(files.length < 1){ + alert("파일 에러!"); + return false; + } + + + var file = files[0]; + if(file.size > 1024*1024){ + alert('파일이 너무 큽니다!'); + return false; + } + if(file.type === ''){ + alert('폴더를 업로드할 수 없습니다!'); + return false; + } + + var reader = new FileReader(); + reader.onload = function(){ + var generalData = {}; + try { + generalData = JSON.parse(reader.result); + } catch(e) { + alert('올바르지 않은 파일 형식입니다'); + return false; + } + + if(!('objType' in generalData)){ + alert('파일 형식을 확인할 수 없습니다'); + return false; + } + + if(generalData.objType != 'general'){ + alert('장수 데이터가 아닙니다'); + return false; + } + + $card.find('.form_load_general_file').val(''); + + importGeneralInfo($card, generalData.data); + return true; + }; + + try { + + reader.readAsText(file); + } + catch(e) { + alert('파일을 읽는데 실패했습니다.'); + return false; + } + + return true; + } + + var exportGeneralInfoForDB = function($general, idx){ + var retVal = exportGeneralInfo($general); var dbVal = { turntime:'2018-08-26 12:00', @@ -30,6 +266,8 @@ jQuery(function($){ power2:0, intel2:0, + gold:10000, + dedication:0, warnum:10, killnum:4, @@ -38,78 +276,101 @@ jQuery(function($){ killcrew:20000, deathcrew:20000, recwar:'SUCCESS', - experience:extInt('.form_exp_level')*extInt('.form_exp_level'), + experience:Math.pow(retVal.explevel, 2), }; if(idx <= 0){ dbVal['name'] = '출병자'; - dbVal['no'] = 1; dbVal['nation'] = 1; } else{ dbVal['name'] = '수비자{0}'.format(idx); - dbVal['no'] = idx+1; dbVal['nation'] = 2; } return $.merge(retVal, defaultVal); } - var extractGeneralInfo = function($general){ - var extInt = function(query){ - return parseInt($general.find(query).val()); + var getGeneralFrame = function($btn){ + var $card = $btn.closest('.general_form'); + return $card; + } + + var getGeneralDetail = function($btn){ + var $card = getGeneralFrame($btn); + var $general = $card.find('.general_detail'); + return $general; + } + + var getGeneralNo = function($btn){ + return parseInt(getGeneralFrame($btn).data('general_no')); + } + + var setGeneralNo = function($btn, value){ + if(value == 1){ + //1번은 무조건 공격자임 + return false; } - - return { - level:extInt('.form_general_level'), - explevel:extInt('.form_exp_level'), - injury:extInt('.form_injury'), - - leader:extInt('.form_leadership'), - horse:extInt('.form_general_horse'), - power:extInt('.form_power'), - weap:extInt('.form_general_weap'), - intel:extInt('.form_intel'), - book:extInt('.form_general_book'), - item:extInt('.form_general_item'), - - gold:extInt('.form_gold'), - rice:extInt('.form_rice'), - - personal:extInt('.form_general_character'), - special2:extInt('.form_general_special_war'), - - crew:extInt('.form_crew'), - crewtype:extInt('.form_crewtype'), - atmos:extInt('.form_atmos'), - train:extInt('.form_train'), - - dex0:extInt('.form_dex0'), - dex10:extInt('.form_dex10'), - dex20:extInt('.form_dex20'), - dex30:extInt('.form_dex30'), - dex40:extInt('.form_dex40'), - mode:extInt('.form_defend_mode'), - }; + if(value in defenderNoList){ + return false; + } + var $card = getGeneralFrame($btn); + $card.data('general_no', value); + defenderNoList[value] = $card; + return true; } - initBasicEvent(); - - $('.defender_form').append($defenderHeaderForm.clone(true, true)); - $('.general_form').append($generalForm.clone(true, true)); - - var addDefender = function(){ - var $newObj = $('
'); - $defenderColumn.append($newObj); - $newObj.append($defenderHeaderForm.clone(true,true)); - $newObj.append($generalForm.clone(true,true)); + var generateNewGeneralNo = function(){ + while(true){ + var newGeneralNo = parseInt(Math.random()*(1<<24))+2; + if(newGeneralNo in defenderNoList){ + continue; + } + return newGeneralNo; + } } - var deleteDefender = function($this){ - var $card = $this.closest('.general_form'); + var deleteGeneralNo = function($btn){ + var $card = getGeneralFrame($btn); + $card.removeData('general_no'); + var generalNo = getGeneralNo($card); + delete defenderNoList[generalNo]; + } + + var addDefender = function($cardAfter){ + var $newCard = $('
'); + + if($cardAfter === undefined){ + $defenderColumn.append($newCard); + } + else{ + $cardAfter.after($newCard); + } + + $newCard.append($defenderHeaderForm.clone(true,true)); + $newCard.append($generalForm.clone(true,true)); + + $newGeneral = getGeneralDetail($newCard); + setGeneralNo($newCard, generateNewGeneralNo()); + + return $newCard; + } + + var deleteDefender = function($card){ + deleteGeneralNo($card); $card.detach(); } - $('.add-defender').click(addDefender); - $('.delete-defender').click(function(){deleteDefender($(this));}); + var copyDefender = function($card){ + var $general = getGeneralDetail($card); + + var generalData = exportGeneralInfo($general); + var $newObj = addDefender($card); + importGeneralInfo(getGeneralDetail($newObj), generalData); + } + + initBasicEvent(); + $attackerCard.append($generalForm.clone(true,true)); + addDefender(); + }); \ No newline at end of file From 8ac85881a9b480b5118b9a3b27723ff1ee5e9a89 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 18:19:27 +0900 Subject: [PATCH 09/30] =?UTF-8?q?=EA=B5=AD=EA=B0=80=20=EC=84=B1=ED=96=A5?= =?UTF-8?q?=EC=9D=B4=20=EC=A0=9C=EB=8C=80=EB=A1=9C=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95.=20=EC=8B=9C=EB=AE=AC=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 28 ++++++++++++------ hwe/css/battle_simulator.css | 4 +++ hwe/func_converter.php | 2 +- hwe/js/battle_simulator.js | 56 +++++++++++++++++++++++++++++------- 4 files changed, 70 insertions(+), 20 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index cb279f56..a4ad377d 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -40,22 +40,34 @@ $startYear = $gameStor->getValue('startyear');
- +
- 년 시작 + 년 시작
- +
- +
- +
- +
diff --git a/hwe/css/battle_simulator.css b/hwe/css/battle_simulator.css index 91fdcdb8..a7539a41 100644 --- a/hwe/css/battle_simulator.css +++ b/hwe/css/battle_simulator.css @@ -10,4 +10,8 @@ .form_sample{ display:none; +} + +input[type=number]{ + text-align:right; } \ No newline at end of file diff --git a/hwe/func_converter.php b/hwe/func_converter.php index ef7503ed..3c9b3c98 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -15,7 +15,7 @@ function NationCharCall($call) { $invTable[$name] = $typeID; } } - return $invTable[$name]??0; + return $invTable[$call]??0; } function getCharacterList(){ diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index 4d1b2ae1..a087ebdc 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -257,10 +257,12 @@ jQuery(function($){ return true; } - var exportGeneralInfoForDB = function($general, idx){ + var exportGeneralInfoForDB = function($general){ var retVal = exportGeneralInfo($general); var dbVal = { + nation: (retVal.no)<=1 ? 1 : 2, + city: (retVal.no)<=1 ? 1 : 2, turntime:'2018-08-26 12:00', leader2:0, power2:0, @@ -279,16 +281,7 @@ jQuery(function($){ experience:Math.pow(retVal.explevel, 2), }; - if(idx <= 0){ - dbVal['name'] = '출병자'; - dbVal['nation'] = 1; - } - else{ - dbVal['name'] = '수비자{0}'.format(idx); - dbVal['nation'] = 2; - } - - return $.merge(retVal, defaultVal); + return $.merge(retVal, dbVal); } var getGeneralFrame = function($btn){ @@ -369,8 +362,49 @@ jQuery(function($){ importGeneralInfo(getGeneralDetail($newObj), generalData); } + var exportAll = function(forDB){ + if(forDB === undefined){ + forDB = false; + } + + var attackerGeneral = (forDB?exportGeneralInfoForDB:exportGeneralInfo)($('.attacker_form')); + + var defenderGenerals = $('.defender_form').map(function(){ + return (forDB?exportGeneralInfoForDB:exportGeneralInfo)($(this)); + }).toArray(); + + var defaultCity = { + nation:0, + def:1000, + wall:1000, + }; + + var defenderCity = { + def: parseInt($('#city_def').val()), + wall: parseInt($('#city_wall').val()), + }; + + var year = parseInt($('#year').val()); + var month = parseInt($('#month').val()); + var repeatCnt = parseInt($('#repeat_cnt').val()); + + } + + var beginBattle = function(){ + var attackerGeneral = exportGeneralInfoForDB($('.attacker_form')); + + var defenderGenerals = $('.defender_form').map(function(){ + return exportGeneralInfoForDB($(this)); + }).toArray(); + console.log(attackerGeneral); + console.log(defenderGenerals); + } + initBasicEvent(); $attackerCard.append($generalForm.clone(true,true)); addDefender(); + $('.btn-begin_battle').click(function(){ + beginBattle(); + }); }); \ No newline at end of file From 22c4ec2d4ae611e1789e2cbb38d616b06cf53e01 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 18:24:35 +0900 Subject: [PATCH 10/30] =?UTF-8?q?=EA=B5=AD=EA=B0=80=20=EC=84=B1=ED=96=A5?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_converter.php | 5 ++++- src/sammo/Util.php | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/hwe/func_converter.php b/hwe/func_converter.php index 3c9b3c98..4d34e290 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -223,7 +223,10 @@ function getSpecialInfo(?int $type):?string{ return $infoText[$type][1]??null; } -function getNationType(int $type) { +function getNationType(?int $type) { + if($type === null){ + return '-'; + } static $cache = []; if(\key_exists($type, $cache)){ return $cache[$type]; diff --git a/src/sammo/Util.php b/src/sammo/Util.php index df473fdd..41e84a7d 100644 --- a/src/sammo/Util.php +++ b/src/sammo/Util.php @@ -350,6 +350,8 @@ class Util extends \utilphp\util shuffle($keys); + $new = []; + foreach($keys as $key) { $new[$key] = $array[$key]; } From 7577c84ecac05fdabcd558311cc01b5efb6e9e2a Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 18:25:14 +0900 Subject: [PATCH 11/30] =?UTF-8?q?=EA=B5=AD=EA=B0=80=20=EC=84=B1=ED=96=A5?= =?UTF-8?q?=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_converter.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hwe/func_converter.php b/hwe/func_converter.php index 4d34e290..a2820a00 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -255,7 +255,10 @@ function getConnect($con) { return $conname; } -function getNationType2(int $type) { +function getNationType2(?int $type) { + if($type === null){ + return '-'; + } [$name, $pros, $cons] = getNationTypeList()[$type]??['-', '', '']; return "{$pros} {$cons}"; } From 639fe920df45aa7e3d6fc0e00493649225b65cfc Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 20:01:08 +0900 Subject: [PATCH 12/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EC=B6=94=EA=B0=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 12 +-- hwe/js/battle_simulator.js | 176 +++++++++++++++++++++++++++++++------ 2 files changed, 154 insertions(+), 34 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index a4ad377d..bf7e742b 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -80,7 +80,7 @@ $startYear = $gameStor->getValue('startyear');
-
+
출병국 설정
@@ -124,10 +124,10 @@ $startYear = $gameStor->getValue('startyear');
@@ -151,7 +151,7 @@ $startYear = $gameStor->getValue('startyear');
-
+
수비국 설정
@@ -195,10 +195,10 @@ $startYear = $gameStor->getValue('startyear');
diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index a087ebdc..cabe299e 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -257,13 +257,13 @@ jQuery(function($){ return true; } - var exportGeneralInfoForDB = function($general){ - var retVal = exportGeneralInfo($general); + var extendGeneralInfoForDB = function(generalData){ var dbVal = { - nation: (retVal.no)<=1 ? 1 : 2, - city: (retVal.no)<=1 ? 1 : 2, + nation: (generalData.no)<=1 ? 1 : 2, + city: (generalData.no)<=1 ? 1 : 3, turntime:'2018-08-26 12:00', + special:0, leader2:0, power2:0, intel2:0, @@ -271,17 +271,17 @@ jQuery(function($){ gold:10000, dedication:0, - warnum:10, - killnum:4, - deathnum:4, + warnum:0, + killnum:0, + deathnum:0, killcrew:20000, deathcrew:20000, recwar:'SUCCESS', - experience:Math.pow(retVal.explevel, 2), + experience:Math.pow(generalData.explevel, 2), }; - return $.merge(retVal, dbVal); + return $.extend({}, generalData, dbVal); } var getGeneralFrame = function($btn){ @@ -362,42 +362,162 @@ jQuery(function($){ importGeneralInfo(getGeneralDetail($newObj), generalData); } - var exportAll = function(forDB){ - if(forDB === undefined){ - forDB = false; + var exportAllData = function(){ + var $attackerNation = $('.attacker_nation'); + var $defenderNation = $('.defender_nation'); + + var attackerGeneral = exportGeneralInfo($('.attacker_form')); + + var attackerCity = { + level:parseInt($attackerNation.find('.form_city_level').val()), + }; + + var attackerNation = { + type:parseInt($attackerNation.find('.form_nation_type').val()), + tech:parseInt($attackerNation.find('.form_tech').val()) * 1000, + level:parseInt($attackerNation.find('.form_nation_level').val()), + capital:$attackerNation.find('.form_is_capital:checked').val()=='1'?1:2, } - var attackerGeneral = (forDB?exportGeneralInfoForDB:exportGeneralInfo)($('.attacker_form')); - var defenderGenerals = $('.defender_form').map(function(){ - return (forDB?exportGeneralInfoForDB:exportGeneralInfo)($(this)); + return exportGeneralInfo($(this)); }).toArray(); - var defaultCity = { - nation:0, - def:1000, - wall:1000, - }; - var defenderCity = { def: parseInt($('#city_def').val()), wall: parseInt($('#city_wall').val()), + level:parseInt($defenderNation.find('.form_city_level').val()), }; + var defenderNation = { + type:parseInt($defenderNation.find('.form_nation_type').val()), + tech:parseInt($defenderNation.find('.form_tech').val()) * 1000, + level:parseInt($defenderNation.find('.form_nation_level').val()), + capital:$defenderNation.find('.form_is_capital:checked').val()=='1'?3:4, + } + var year = parseInt($('#year').val()); var month = parseInt($('#month').val()); var repeatCnt = parseInt($('#repeat_cnt').val()); + return { + attackerGeneral:attackerGeneral, + attackerCity:attackerCity, + attackerNation:attackerNation, + + defenderGenerals:defenderGenerals, + defenderCity:defenderCity, + defenderNation:defenderNation, + + year:year, + month:month, + repeatCnt:repeatCnt, + }; + } + + var extendAllDataForDB = function(allData){ + var defaultNation = { + nation:0, + nation:'재야', + capital:0, + level:0, + gold:0, + rice:2000, + type:0, + tech:0, + totaltech:0, + gennum:200, + }; + + var defaultCity = { + nation:0, + supply:1, + name:'도시', + + pop:500000, + agri:10000, + comm:10000, + secu:10000, + def:1000, + wall:1000, + + rate:100, + + pop2:600000, + agri2:12000, + comm2:12000, + secu2:10000, + def2:12000, + wall2:12000, + + dead:0, + + state:0, + gen1:0, + gen2:0, + gen3:0, + + conflict:'{}', + }; + + var attackerNation = $.extend({}, defaultNation, allData.attackerNation); + attackerNation.nation = 1; + attackerNation.totaltech = attackerNation.tech * attackerNation.gennum; + + var attackerCity = $.extend({}, defaultCity, allData.attackerCity); + attackerCity.nation = 1; + attackerCity.city = 1; + + var attackerGeneral = extendGeneralInfoForDB(allData.attackerGeneral); + if(attackerGeneral.level == 4){ + attackerCity.gen1 = attackerGeneral.no; + } + if(attackerGeneral.level == 3){ + attackerCity.gen2 = attackerGeneral.no; + } + if(attackerGeneral.level == 2){ + attackerCity.gen3 = attackerGeneral.no; + } + + var defenderNation = $.extend({}, defaultNation, allData.defenderNation); + defenderNation.nation = 2; + defenderNation.totaltech = defenderNation.tech * defenderNation.gennum; + + var defenderCity = $.extend({}, defaultCity, allData.defenderCity); + defenderCity.nation = 2; + defenderCity.city = 3; + + var defenderGenerals = []; + $.each(allData.defenderGenerals, function(){ + var defenderGeneral = extendGeneralInfoForDB(this); + if(defenderGeneral.level == 4){ + defenderCity.gen1 = defenderGeneral.no; + } + if(defenderGeneral.level == 3){ + defenderCity.gen2 = defenderGeneral.no; + } + if(defenderGeneral.level == 2){ + defenderCity.gen3 = defenderGeneral.no; + } + + defenderGenerals.push(defenderGeneral); + }); + + + return $.extend({}, allData, { + attackerGeneral:attackerGeneral, + attackerCity:attackerCity, + attackerNation:attackerNation, + + defenderGenerals:defenderGenerals, + defenderCity:defenderCity, + defenderNation:defenderNation, + }); } var beginBattle = function(){ - var attackerGeneral = exportGeneralInfoForDB($('.attacker_form')); - - var defenderGenerals = $('.defender_form').map(function(){ - return exportGeneralInfoForDB($(this)); - }).toArray(); - console.log(attackerGeneral); - console.log(defenderGenerals); + var data = extendAllDataForDB(exportAllData()); + console.log(data); } initBasicEvent(); From 2ab08965235d93344cc8092c9f2baea54195572f Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 20:29:32 +0900 Subject: [PATCH 13/30] =?UTF-8?q?=EA=B3=84=EB=9E=B5=20=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=20=EA=B3=84=EC=88=98=EA=B0=80=20=EA=B1=B0=EA=BE=B8=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=EB=90=98=EB=8A=94=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/WarUnitGeneral.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hwe/sammo/WarUnitGeneral.php b/hwe/sammo/WarUnitGeneral.php index d94540a2..a48f1e42 100644 --- a/hwe/sammo/WarUnitGeneral.php +++ b/hwe/sammo/WarUnitGeneral.php @@ -822,8 +822,8 @@ class WarUnitGeneral extends WarUnit{ $thisLogger->pushGeneralBattleDetailLog("{$skillKey}{$josaUl} 실패했다!"); $opposeLogger->pushGeneralBattleDetailLog("{$skillKey}{$josaUl} 간파했다!"); - $this->multiplyWarPowerMultiply($skillMultiply); - $oppose->multiplyWarPowerMultiply(1/$skillMultiply); + $this->multiplyWarPowerMultiply(1/$skillMultiply); + $oppose->multiplyWarPowerMultiply($skillMultiply); break; } } From eab8b1ede5b65a0ce756ec824d2b0984b69ff1d8 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 20:29:42 +0900 Subject: [PATCH 14/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EA=B5=AC=ED=98=84=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_simulate_battle.php | 66 ++++++++++++++++++++++++++++++++++++++ hwe/js/battle_simulator.js | 20 +++++++++++- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index ceac3b1f..eb25b5b5 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -6,3 +6,69 @@ include "func.php"; $session = Session::requireLogin([])->setReadOnly(); $userID = Session::getUserID(); + +$query = Util::getReq('query'); +if($query === null){ + Json::die([ + 'result'=>false, + 'reason'=>'입력값이 없습니다.' + ]); +} + +$query = Json::decode($query); +if($query === null){ + Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 JSON입니다.' + ]); +} + + +$defaultCheck = [ + 'required'=>[ + 'attackerGeneral', 'attackerCity', 'attackerNation', + 'defenderGenerals', 'defenderCity', 'defenderNation', + 'year', 'month', 'repeatCnt' + ], + 'integer'=>[ + 'year','month','repeatCnt' + ], + 'array'=>['attackerGeneral', 'attackerCity', 'attackerNation', 'defenderGenerals', 'defenderCity', 'defenderNation'], +]; + +$v = new Validator($query); +$v->rules($defaultCheck); +if(!$v->validate()){ + Json::die([ + 'result'=>false, + 'reason'=>$v->errorStr() + ]); +} + +$year = $query['year']; +$month = $query['month']; +$repeatCnt = $query['repeatCnt']; + +$attackerGeneral = $query['attackerGeneral']; +$attackerCity = $query['attackerCity']; +$attackerNation = $query['attackerNation']; + +$generalCheck = [ + 'required'=>[ + 'no', 'name', 'nation', 'turntime', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train', + 'intel', 'intel2', 'book', 'power', 'power2', 'weap', 'injury', 'leader', 'leader2', 'horse', 'item', + 'explevel', 'experience', 'dedication', 'level', 'gold', 'rice', 'dex0', 'dex10', 'dex20', 'dex30', 'dex40', + 'warnum', 'killnum', 'deathnum', 'killcrew', 'deathcrew', 'recwar' + ] +]; +$v = new Validator($query['attackerGeneral']); + + + + + + +Json::die([ + 'result'=>true, + 'reason'=>'NYI' +]); diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index cabe299e..bbe15a62 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -486,6 +486,8 @@ jQuery(function($){ var defenderCity = $.extend({}, defaultCity, allData.defenderCity); defenderCity.nation = 2; defenderCity.city = 3; + defenderCity.wall2 = defenderCity.wall/5*6; + defenderCity.def2 = defenderCity.def/5*6; var defenderGenerals = []; $.each(allData.defenderGenerals, function(){ @@ -517,7 +519,23 @@ jQuery(function($){ var beginBattle = function(){ var data = extendAllDataForDB(exportAllData()); - console.log(data); + $.ajax({ + type:'post', + url:'j_simulate_battle.php', + dataType:'json', + data:{ + query:JSON.stringify(data), + } + }).then(function(result){ + console.log(result); + if(!result.result){ + alert(result.reason); + return; + } + + }, function(result){ + alert('전투 개시 실패!'); + }); } initBasicEvent(); From 5c8ad646af9a26442c055d1dee05ddb346b9fa11 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 22:31:14 +0900 Subject: [PATCH 15/30] =?UTF-8?q?ajax=20=EC=BF=BC=EB=A6=AC=20validation=20?= =?UTF-8?q?=EC=A2=85=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_simulate_battle.php | 169 ++++++++++++++++++++++++++++++++++++- hwe/js/battle_simulator.js | 5 +- 2 files changed, 171 insertions(+), 3 deletions(-) diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index eb25b5b5..c48ee59b 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -33,7 +33,19 @@ $defaultCheck = [ 'integer'=>[ 'year','month','repeatCnt' ], - 'array'=>['attackerGeneral', 'attackerCity', 'attackerNation', 'defenderGenerals', 'defenderCity', 'defenderNation'], + 'between'=>[ + ['month', [1, 12]] + ], + 'in'=>[ + ['repeatCnt', [1, 1000]] + ], + 'min'=>[ + ['year', 0] + ], + 'array'=>[ + 'attackerGeneral', 'attackerCity', 'attackerNation', + 'defenderGenerals', 'defenderCity', 'defenderNation' + ], ]; $v = new Validator($query); @@ -53,20 +65,173 @@ $attackerGeneral = $query['attackerGeneral']; $attackerCity = $query['attackerCity']; $attackerNation = $query['attackerNation']; +$defenderGenerals = $query['defenderGenerals']; +$defenderCity = $query['defenderCity']; +$defenderNation = $query['defenderNation']; + + $generalCheck = [ 'required'=>[ 'no', 'name', 'nation', 'turntime', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train', 'intel', 'intel2', 'book', 'power', 'power2', 'weap', 'injury', 'leader', 'leader2', 'horse', 'item', 'explevel', 'experience', 'dedication', 'level', 'gold', 'rice', 'dex0', 'dex10', 'dex20', 'dex30', 'dex40', 'warnum', 'killnum', 'deathnum', 'killcrew', 'deathcrew', 'recwar' + ], + 'integer'=>[ + 'no', 'nation', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train', + 'intel', 'intel2', 'book', 'power', 'power2', 'weap', 'injury', 'leader', 'leader2', 'horse', 'item', + 'explevel', 'experience', 'dedication', 'level', 'gold', 'rice', 'dex0', 'dex10', 'dex20', 'dex30', 'dex40', + 'warnum', 'killnum', 'deathnum', 'killcrew', 'deathcrew' + ], + 'min'=>[ + ['no', 1], + ['nation', 1], + ['crew', 0], + ['intel', 0], + ['power', 0], + ['leader', 0], + ['experience', 0], + ['gold', 0], + ['rice', 0], + ['dex0', 0], + ['dex10', 0], + ['dex20', 0], + ['dex30', 0], + ['dex40', 0], + ], + 'between'=>[ + ['train', [40, GameConst::$maxTrainByWar]], + ['atmos', [40, GameConst::$maxAtmosByWar]], + ['book', [0, 26]], + ['weap', [0, 26]], + ['horse', [0, 26]], + ['item', [0, 26]], + ['explevel', [0, 300]], + ['injury', [0, 80]], + ['level', [1, 12]] + ], + 'in'=>[ + ['personal', array_keys(getCharacterList())], + ['special2', array_keys(SpecialityConst::WAR)], + ['crewtype', array_keys(GameUnitConst::all())], ] ]; -$v = new Validator($query['attackerGeneral']); + +$v = new Validator($attackerGeneral); +$v->rules($generalCheck); +if(!$v->validate()){ + Json::die([ + 'result'=>false, + 'reason'=>'[출병자]'.$v->errorStr() + ]); +} + +foreach($defenderGenerals as $idx=>$defenderGeneral){ + $v = new Validator($defenderGeneral); + $v->rules($generalCheck); + if(!$v->validate()){ + $idx+=1; + Json::die([ + 'result'=>false, + 'reason'=>"[수비자{$idx}]".$v->errorStr() + ]); + } +} +$cityCheck = [ + 'required'=>[ + 'city', 'nation', 'supply', 'name', + 'pop', 'agri', 'comm', 'secu', 'def', 'wall', + 'rate', 'level', + 'pop2', 'agri2', 'comm2', 'secu2', 'def2', 'wall2', + 'dead', 'state', 'gen1', 'gen2', 'gen3', 'conflict', + ], + 'numeric'=>[ + 'pop', 'agri', 'comm', 'secu', 'def', 'wall', 'rate', 'dead' + ], + 'integer'=>[ + 'city', 'nation', 'supply', + 'pop2', 'agri2', 'comm2', 'secu2', 'def2', 'wall2', + 'state', 'gen1', 'gen2', 'gen3' + ], + 'min'=>[ + ['def', 0], + ['wall', 0], + ['rate', 0], + ['pop', 0], + ['comm', 0], + ['secu', 0], + ['city', 1], + ['nation', 0] + ], + 'in'=>[ + ['level', array_keys(getCityLevelList())] + ] +]; +$v = new Validator($attackerCity); +$v->rules($cityCheck); +if(!$v->validate()){ + Json::die([ + 'result'=>false, + 'reason'=>'[출병도시]'.$v->errorStr() + ]); +} +$v = new Validator($defenderCity); +$v->rules($cityCheck); +if(!$v->validate()){ + Json::die([ + 'result'=>false, + 'reason'=>'[수비도시]'.$v->errorStr() + ]); +} +$nationCheck = [ + 'required'=>[ + 'type', 'tech', 'level', 'capital', + 'nation', 'name', 'gold', 'rice', 'totaltech', 'gennum' + ], + 'integer'=>[ + 'type', 'level', 'capital', 'nation', 'gennum', + ], + 'numeric'=>[ + 'tech', 'gold', 'rice', 'totaltech' + ], + 'min'=>[ + ['tech', 0], + ['totaltech', 0], + ['gold', 0], + ['rice', 0], + ['gennum', 1], + ['gen1', 0], + ['gen2', 0], + ['gen3', 0], + ], + 'in'=>[ + ['type', array_keys(getNationTypeList())], + ['level', array_keys(getNationLevelList())] + ] +]; + +$v = new Validator($attackerNation); +$v->rules($nationCheck); +if(!$v->validate()){ + Json::die([ + 'result'=>false, + 'reason'=>'[출병국]'.$v->errorStr() + ]); +} + +$v = new Validator($defenderNation); +$v->rules($nationCheck); +if(!$v->validate()){ + Json::die([ + 'result'=>false, + 'reason'=>'[수비국]'.$v->errorStr() + ]); +} Json::die([ 'result'=>true, diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index bbe15a62..3a4d988d 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -418,7 +418,7 @@ jQuery(function($){ var extendAllDataForDB = function(allData){ var defaultNation = { nation:0, - nation:'재야', + name:'재야', capital:0, level:0, gold:0, @@ -462,6 +462,7 @@ jQuery(function($){ var attackerNation = $.extend({}, defaultNation, allData.attackerNation); attackerNation.nation = 1; + attackerNation.name = '출병국'; attackerNation.totaltech = attackerNation.tech * attackerNation.gennum; var attackerCity = $.extend({}, defaultCity, allData.attackerCity); @@ -481,6 +482,7 @@ jQuery(function($){ var defenderNation = $.extend({}, defaultNation, allData.defenderNation); defenderNation.nation = 2; + defenderNation.name = '수비국'; defenderNation.totaltech = defenderNation.tech * defenderNation.gennum; var defenderCity = $.extend({}, defaultCity, allData.defenderCity); @@ -519,6 +521,7 @@ jQuery(function($){ var beginBattle = function(){ var data = extendAllDataForDB(exportAllData()); + console.log(data); $.ajax({ type:'post', url:'j_simulate_battle.php', From 3f43f218acbcc9d2f45261f389bc7ef740d42496 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 22:32:37 +0900 Subject: [PATCH 16/30] =?UTF-8?q?=EC=8B=9C=EB=AE=AC=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=A0=84=ED=88=AC=20=EC=A4=80=EB=B9=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_simulate_battle.php | 8 ++++++++ hwe/js/battle_simulator.js | 1 + 2 files changed, 9 insertions(+) diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index c48ee59b..6d2a8109 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -15,6 +15,14 @@ if($query === null){ ]); } +$action = Util::getReq('action'); +if($action === null || in_array($action, ['reorder', 'battle'])){ + Json::die([ + 'result'=>false, + 'reason'=>'원하는 동작이 지정되지 않았습니다.' + ]); +} + $query = Json::decode($query); if($query === null){ Json::die([ diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index 3a4d988d..c1a304c4 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -527,6 +527,7 @@ jQuery(function($){ url:'j_simulate_battle.php', dataType:'json', data:{ + action:'battle', query:JSON.stringify(data), } }).then(function(result){ From a315da60413d1df7f86aa551355d52f840705913 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 22:59:14 +0900 Subject: [PATCH 17/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=A2=85=EB=A3=8C?= =?UTF-8?q?=20=EC=8B=9C=20=EB=9C=A8=EB=8A=94=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/process_war.php | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/hwe/process_war.php b/hwe/process_war.php index 993e3d20..136ccc7c 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -63,7 +63,12 @@ function processWar(array $rawAttacker, array $rawDefenderCity){ return null; } - $retVal = new WarUnitGeneral($iterDefender->current(), $rawDefenderCity, $rawDefenderNation, false, $year, $month); + $rawGeneral = $iterDefender->current(); + if(extractBattleOrder($rawGeneral) <= 0){ + return null; + } + + $retVal = new WarUnitGeneral($rawGeneral, $rawDefenderCity, $rawDefenderNation, false, $year, $month); $iterDefender->next(); return $retVal; }; @@ -154,6 +159,26 @@ function processWar(array $rawAttacker, array $rawDefenderCity){ } function extractBattleOrder($general){ + if($general['crew'] == 0){ + return 0; + } + + if($general['rice'] <= $general['crew'] / 100){ + return 0; + } + + if($general['mode'] == 0){ + return 0; + } + + if($general['mode'] == 1 && ($general['train'] < 60 || $general['atmos'] < 60)){ + return 0; + } + + if($general['mode'] == 2 && ($general['train'] < 80 || $general['atmos'] < 80)){ + return 0; + } + return ( $general['leader'] + $general['power'] + @@ -396,11 +421,11 @@ function processWar_NG( if($currPhase == $attacker->getMaxPhase()){ //마지막 페이즈의 전투 마무리 - $attacker->tryWound(); - $defender->tryWound(); - $attacker->logBattleResult(); $defender->logBattleResult(); + + $attacker->tryWound(); + $defender->tryWound(); } if($defender instanceof WarUnitCity){ From be15f1c6987f1b95fa8786091bd3c89949efffbc Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 23:11:19 +0900 Subject: [PATCH 18/30] =?UTF-8?q?=EC=8C=80=20=EC=86=8C=EB=AA=A8=EC=97=90?= =?UTF-8?q?=20'=EB=AA=85=EC=84=B1=20=EB=B2=84=ED=94=84/=EB=94=94=EB=B2=84?= =?UTF-8?q?=ED=94=84'=20=EC=84=B1=EA=B2=A9=EC=9D=B4=20=EC=A0=81=EC=9A=A9?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EA=B8=B0=EC=A1=B4=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/WarUnitGeneral.php | 1 - 1 file changed, 1 deletion(-) diff --git a/hwe/sammo/WarUnitGeneral.php b/hwe/sammo/WarUnitGeneral.php index a48f1e42..e372751f 100644 --- a/hwe/sammo/WarUnitGeneral.php +++ b/hwe/sammo/WarUnitGeneral.php @@ -475,7 +475,6 @@ class WarUnitGeneral extends WarUnit{ $rice *= 0.8; } - $rice *= getCharExpMultiplier($this->getCharacter()); $rice *= $this->crewType->rice; $rice *= getTechCost($this->getNationVar('tech')); From 0f175ac4c641492ac32a9ed615cc3090a79d309c Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 26 Aug 2018 23:16:42 +0900 Subject: [PATCH 19/30] =?UTF-8?q?=EC=88=98=EB=B9=84=20=EC=88=9C=EC=84=9C?= =?UTF-8?q?=EB=8C=80=EB=A1=9C=20=EC=A0=95=EB=A0=AC=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 2 +- hwe/j_simulate_battle.php | 19 +++++++++++++++- hwe/js/battle_simulator.js | 44 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index bf7e742b..04497976 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -219,7 +219,7 @@ $startYear = $gameStor->getValue('startyear');
수비자 설정
+
+
+ 전투 요약 +
+ + + + + + + + + + + + +
전투 일시
전투 횟수
전투 페이즈
공격량
피해량
출병자 군량 소모
수비자 군량 소모
공격자 스킬
수비자1 스킬
+
+
+
+
+
+ 마지막 전투 로그 +
+
+ +
+
+
+
+
+
+ 마지막 전투 상세 로그 +
+
+ +
+
+
+
\ No newline at end of file diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index 1f771d85..7ffdcbef 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -70,6 +70,7 @@ $month = $query['month']; $repeatCnt = $query['repeatCnt']; $rawAttacker = $query['attackerGeneral']; +$rawAttacker['turntime'] = date('Y-m-d H:i:s'); $rawAttackerCity = $query['attackerCity']; $rawAttackerNation = $query['attackerNation']; @@ -347,6 +348,9 @@ $attackerDead = 0; $attackerAvgRice = 0; $defenderAvgRice = 0; +$avgPhase = 0; +$avgWar = 0; + $attackerActivatedSkills = []; $defendersActivatedSkills = []; @@ -356,13 +360,19 @@ foreach(range(1, $repeatCnt) as $repeatIdx){ $defenderList, $rawDefenderCity, $rawDefenderNation, $startYear, $year, $month, $cityRate ); - $lastWarLog = $attacker->getLogger()->rollback(); + $lastWarLog = Util::mapWithKey(function($key, $values){ + return ConvertLog(join('
', $values)); + }, $attacker->getLogger()->rollback()); + + $avgPhase += $attacker->getPhase() / $repeatCnt; $attackerKilled += $attacker->getKilled() / $repeatCnt; $attackerDead += $attacker->getDead() / $repeatCnt; - $attackerAvgRice += $attackerRice /= $repeatCnt; - $defenderAvgRice += $defenderRice /= $repeatCnt; + $attackerAvgRice += $attackerRice / $repeatCnt; + $defenderAvgRice += $defenderRice / $repeatCnt; + + $avgWar += count($battleResult) / $repeatCnt; foreach($attacker->getActivatedSkillLog() as $skillName => $skillCnt){ if(!key_exists($skillName, $attackerActivatedSkills)){ @@ -393,12 +403,15 @@ foreach(range(1, $repeatCnt) as $repeatIdx){ Json::die([ 'result'=>true, + 'datetime'=>$rawAttacker['turntime'], 'reason'=>'success', 'lastWarLog'=>$lastWarLog, - 'attackerKilled'=>$attackerKilled, - 'attackerDead'=>$attackerDead, + 'avgWar'=>$avgWar, + 'phase'=>$avgPhase, + 'killed'=>$attackerKilled, + 'dead'=>$attackerDead, 'attackerRice'=>$attackerAvgRice, 'defenderRice'=>$defenderAvgRice, - 'attackerActivatedSkills'=>$attackerActivatedSkills, - 'defendersActivatedSkills'=>$defendersActivatedSkills, + 'attackerSkills'=>$attackerActivatedSkills, + 'defendersSkills'=>$defendersActivatedSkills, ]); diff --git a/hwe/js/battle_simulator.js b/hwe/js/battle_simulator.js index 2a8ab2af..4044276e 100644 --- a/hwe/js/battle_simulator.js +++ b/hwe/js/battle_simulator.js @@ -519,6 +519,54 @@ jQuery(function($){ }); } + var parseSkillCount = function(skills){ + var result = []; + $.each(skills, function(key, value){ + result.push("{0}({1}회)".format(key, toPretty(value))); + }) + + if(result.length == 0){ + return '-'; + } + return result.join(', '); + } + + var toPretty = function(number){ + if(isInt(number)){ + number = parseInt(number); + } + else{ + number = parseFloat(number).toFixed(2); + } + return numberWithCommas(number); + } + + var showBattleResult = function(result){ + $('#result_datetime').html(result.datetime); + $('#result_warcnt').html(toPretty(result.avgWar)); + $('#result_phase').html(toPretty(result.phase)); + $('#result_killed').html(toPretty(result.killed)); + $('#result_dead').html(toPretty(result.dead)); + $('#result_attackerRice').html(toPretty(result.attackerRice)); + $('#result_defenderRice').html(toPretty(result.defenderRice)); + $('#result_attackerSkills').html(parseSkillCount(result.attackerSkills)); + + $('.result_defenderSkills').detach(); + + var $summary = $('#battle_result_summary'); + + $.each(result.defendersSkills, function(idx, defenderSkills){ + console.log(defenderSkills); + var $result = $("수비자{0} 스킬".format(idx + 1)); + $result.find('td').html(parseSkillCount(defenderSkills)); + $summary.append($result); + }); + + $('#generalBattleResultLog').html(result.lastWarLog.generalBattleResultLog); + $('#generalBattleDetailLog').html(result.lastWarLog.generalBattleDetailLog); + + } + var beginBattle = function(){ var data = extendAllDataForDB(exportAllData()); console.log(data); @@ -536,6 +584,7 @@ jQuery(function($){ alert(result.reason); return; } + showBattleResult(result); }, function(result){ alert('전투 개시 실패!'); diff --git a/hwe/js/common.js b/hwe/js/common.js index b529c5cd..4574a3dc 100644 --- a/hwe/js/common.js +++ b/hwe/js/common.js @@ -23,6 +23,14 @@ var escapeHtml = (function (string) { } })(); +/** + * 변수가 정수인지 확인하는 함수 + * @param {*} n 정수인지 확인하기 위한 인자 + * @return {boolean} 정수인지 여부 + */ +function isInt(n) { + return +n === n && !(n % 1); +} /** * object의 array를 id를 key로 삼는 object로 재 변환 @@ -89,6 +97,11 @@ function convColorValue(color) { } + +function numberWithCommas(x) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + /** * 단순한 Template 함수. <%변수명%>으로 template 가능 * @see https://github.com/krasimir/absurd/blob/master/lib/processors/html/helpers/TemplateEngine.js From c6cabc2087a3de527b7d3bf91aac49e207b7a595 Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 27 Aug 2018 03:08:35 +0900 Subject: [PATCH 24/30] =?UTF-8?q?=EC=A0=84=ED=88=AC=20=EC=8B=9C=EB=AE=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=ED=84=B0=20=EB=AA=A8=EB=91=90=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5/=EB=AA=A8=EB=91=90=20=EB=B6=88=EB=9F=AC=EC=98=A4?= =?UTF-8?q?=EA=B8=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- e_lib/moment.min.js | 1 + hwe/battle_simulator.php | 16 ++-- hwe/func_converter.php | 2 +- hwe/j_simulate_battle.php | 2 +- hwe/js/battle_simulator.js | 155 +++++++++++++++++++++++++++++++++++++ 5 files changed, 165 insertions(+), 11 deletions(-) create mode 100644 e_lib/moment.min.js diff --git a/e_lib/moment.min.js b/e_lib/moment.min.js new file mode 100644 index 00000000..580a6a2d --- /dev/null +++ b/e_lib/moment.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n>>0,s=0;sDe(e)?(r=e+1,a=o-De(e)):(r=e,a=o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),L("week",5),L("isoWeek",5),ue("w",B),ue("ww",B,z),ue("W",B),ue("WW",B,z),fe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),L("day",11),L("weekday",11),L("isoWeekday",11),ue("d",B),ue("e",B),ue("E",B),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),fe(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe(["d","e","E"],function(e,t,n,s){t[s]=k(e)});var je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),H("hour","h"),L("hour",13),ue("a",Ke),ue("A",Ke),ue("H",B),ue("h",B),ue("k",B),ue("HH",B,z),ue("hh",B,z),ue("kk",B,z),ue("hmm",Q),ue("hmmss",X),ue("Hmm",Q),ue("Hmmss",X),ce(["H","HH"],ge),ce(["k","kk"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce(["h","hh"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te("Hours",!0),nt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\.?m?\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace("_","-"):e}function at(e){var t=null;if(!st[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=et._abbr,require("./locale/"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),et._abbr}function ut(e,t){if(null!==t){var n,s=nt;if(t.abbr=e,null!=st[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}return delete st[e],null}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11Pe(n[me],n[_e])?ye:n[ge]<0||24Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],pt=/^\/?Date\((\-?\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;tn.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?"UTC":""},ln.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ln.dates=n("dates accessor is deprecated. Use date instead.",nn),ln.months=n("months accessor is deprecated. Use month instead",Fe),ln.years=n("years accessor is deprecated. Use year instead",Oe),ln.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.isValid()&&0getValue('startyear'); + @@ -35,7 +36,7 @@ $startYear = $gameStor->getValue('startyear');
전역 설정
-
+
@@ -68,9 +69,9 @@ $startYear = $gameStor->getValue('startyear');
- + - +
@@ -83,7 +84,7 @@ $startYear = $gameStor->getValue('startyear');
출병국 설정
-
+
국가 성향 @@ -154,7 +155,7 @@ $startYear = $gameStor->getValue('startyear');
수비국 설정
-
+
국가 성향 @@ -220,10 +221,6 @@ $startYear = $gameStor->getValue('startyear');
-
- - -
@@ -367,6 +364,7 @@ $startYear = $gameStor->getValue('startyear'); 전특
+
@@ -143,7 +143,7 @@ $startYear = $gameStor->getValue('startyear'); @@ -233,7 +233,7 @@ $startYear = $gameStor->getValue('startyear'); @@ -402,7 +402,7 @@ $startYear = $gameStor->getValue('startyear');
@@ -410,7 +410,7 @@ $startYear = $gameStor->getValue('startyear');
From a3f7dbcceaae65eb81d86070abe941644ed54b91 Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 27 Aug 2018 13:52:51 +0900 Subject: [PATCH 27/30] =?UTF-8?q?=EC=8B=9C=EB=AE=AC=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20UI=20=EC=9D=BC=EB=B6=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index a5d3b7f3..ae2cb091 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -434,11 +434,11 @@ $startYear = $gameStor->getValue('startyear');
- + - - + + From 5d60a62a387ff3c454d61c33907887030637c395 Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 27 Aug 2018 13:53:07 +0900 Subject: [PATCH 28/30] =?UTF-8?q?=EB=8B=A8=EC=96=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/battle_simulator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwe/battle_simulator.php b/hwe/battle_simulator.php index ae2cb091..bfe34b3c 100644 --- a/hwe/battle_simulator.php +++ b/hwe/battle_simulator.php @@ -437,7 +437,7 @@ $startYear = $gameStor->getValue('startyear'); - + From d976cf8a279cbcf236b656f6c379dff966c85bdd Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 27 Aug 2018 17:38:08 +0900 Subject: [PATCH 29/30] =?UTF-8?q?=ED=99=94=EA=B3=84=EC=8B=9C=20=EB=8F=84?= =?UTF-8?q?=EC=8B=9C=20=EB=82=B4=EC=A0=95=EC=9D=B4=20=EB=B0=98=EC=98=81=20?= =?UTF-8?q?=EC=95=88=EB=90=98=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_process_sabotage.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hwe/func_process_sabotage.php b/hwe/func_process_sabotage.php index 39ef921d..7e3e6459 100644 --- a/hwe/func_process_sabotage.php +++ b/hwe/func_process_sabotage.php @@ -144,7 +144,7 @@ function process_32(&$general) { $dist = searchDistance($srcCityID, 5, false); $srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID); - $destCity = $db->queryFirstRow('SELECT city,name,nation,supply,agri,comm FROM city WHERE city=%i',$destCityID); + $destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,rate FROM city WHERE city=%i',$destCityID); $destCityName = $destCity['name']??null; $srcNationID = $general['nation']; @@ -278,7 +278,7 @@ function process_33(&$general) { $dist = searchDistance($srcCityID, 5, false); $srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID); - $destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm FROM city WHERE city=%i',$destCityID); + $destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,rate FROM city WHERE city=%i',$destCityID); $destCityName = $destCity['name']??null; $srcNationID = $general['nation']; @@ -449,7 +449,7 @@ function process_34(&$general) { $dist = searchDistance($srcCityID, 5, false); $srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID); - $destCity = $db->queryFirstRow('SELECT city,name,nation,def,wall,secu,secu2,supply FROM city WHERE city=%i',$destCityID); + $destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,rate FROM city WHERE city=%i',$destCityID); $destCityName = $destCity['name']??null; $srcNationID = $general['nation']; @@ -587,7 +587,7 @@ function process_35(&$general) { $dist = searchDistance($srcCityID, 5, false); $srcCity = $db->queryFirstRow('SELECT city,nation,supply FROM city WHERE city=%i', $srcCityID); - $destCity = $db->queryFirstRow('SELECT city,name,nation,rate,secu,secu2,supply FROM city WHERE city=%i',$destCityID); + $destCity = $db->queryFirstRow('SELECT city,name,level,nation,secu,secu2,supply,agri,comm,def,wall,rate FROM city WHERE city=%i',$destCityID); $destCityName = $destCity['name']??null; $srcNationID = $general['nation']; From 493e7781244c347444a8d5728135c9e4800d9084 Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 27 Aug 2018 17:43:53 +0900 Subject: [PATCH 30/30] =?UTF-8?q?=EA=B3=84=EB=9E=B5=EC=88=98=EB=B9=84=20?= =?UTF-8?q?=EC=8B=9C=20=EC=A0=84=ED=8A=B9=20=EC=A7=95=EB=B3=91=EC=9D=98=20?= =?UTF-8?q?=ED=86=B5=EC=86=94=EC=9D=B4=20=EB=B0=98=EC=98=81=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_process_sabotage.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/hwe/func_process_sabotage.php b/hwe/func_process_sabotage.php index 7e3e6459..90f8cdf3 100644 --- a/hwe/func_process_sabotage.php +++ b/hwe/func_process_sabotage.php @@ -161,7 +161,7 @@ function process_32(&$general) { $srcNation = getNationStaticInfo($srcNationID); $destNation = getNationStaticInfo($destNationID); - $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level FROM general WHERE city=%i and nation=%i', $city['city'], $city['nation']); + $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']); [ $srcGenScore, @@ -298,7 +298,7 @@ function process_33(&$general) { $srcNation = getNationStaticInfo($srcNationID); $destNation = getNationStaticInfo($destNationID); - $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level FROM general WHERE city=%i and nation=%i', $city['city'], $city['nation']); + $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']); [ $srcGenScore, @@ -467,7 +467,7 @@ function process_34(&$general) { $srcNation = getNationStaticInfo($srcNationID); $destNation = getNationStaticInfo($destNationID); - $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level FROM general WHERE city=%i and nation=%i', $city['city'], $city['nation']); + $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']); [ $srcGenScore, @@ -607,8 +607,7 @@ function process_35(&$general) { $srcNation = getNationStaticInfo($srcNationID); $destNation = getNationStaticInfo($destNationID); - $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level FROM general WHERE city=%i and nation=%i', $city['city'], $city['nation']); - + $generalList = $db->query('SELECT `no`,leader,horse,power,weap,intel,book,injury,level,special,special2 FROM general WHERE city=%i and nation=%i', $destCity['city'], $destCity['nation']); [ $srcGenScore, $srcSpecialScore,
전투 일시
전투 일시
전투 횟수
전투 페이즈
공격량
피해량
입힌 피해
받은 피해
출병자 군량 소모
수비자 군량 소모
공격자 스킬
전투 일시
전투 횟수
전투 페이즈
입힌 피해
준 피해
받은 피해
출병자 군량 소모
수비자 군량 소모