From e1dbc46d8dc120cb767b95923a58b5f9de39d5ae Mon Sep 17 00:00:00 2001 From: hide_d Date: Sat, 4 May 2019 18:33:09 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EC=9E=A5=EC=88=98=EC=9D=BC=EB=9E=8C=20API?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_converter.php | 17 +++--- hwe/func_process.php | 19 ++++--- hwe/j_get_general_list.php | 108 +++++++++++++++++++++++++++++++++++++ hwe/select_npc.php | 11 +++- 4 files changed, 141 insertions(+), 14 deletions(-) create mode 100644 hwe/j_get_general_list.php diff --git a/hwe/func_converter.php b/hwe/func_converter.php index f780cd9a..695bcb1a 100644 --- a/hwe/func_converter.php +++ b/hwe/func_converter.php @@ -174,13 +174,10 @@ function getGenSpecial($type) { return $call; } -function getSpecialInfo(?int $type):?string{ - if($type === null){ - return null; - } - +function getSpecialTextList():array{ + //앞칸은 '설명을 위해' '그냥' 적어둠 - $infoText = [ + return [ 0 => ['-', null], 1 => ['경작', '[내정] 농지 개간 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%'], 2 => ['상재', '[내정] 상업 투자 : 기본 보정 +10%, 성공률 +10%p, 비용 -20%'], @@ -219,6 +216,14 @@ function getSpecialInfo(?int $type):?string{ 74 => ['격노', '[전투] 상대방 필살 및 회피 시도시 일정 확률로 격노(필살) 발동, 공격 시 일정 확률로 진노(1페이즈 추가)'], 75 => ['척사', '[전투] 지역·도시 병종 상대로 대미지 +10%, 아군 피해 -10%'] ]; +} + +function getSpecialInfo(?int $type):?string{ + if($type === null){ + return null; + } + + $infoText = getSpecialTextList(); return $infoText[$type][1]??null; } diff --git a/hwe/func_process.php b/hwe/func_process.php index 20e4f07f..6f197759 100644 --- a/hwe/func_process.php +++ b/hwe/func_process.php @@ -159,6 +159,17 @@ function CriticalRatioDomestic(&$general, $type) { ); } +function calcLeadershipBonus($generalLevel, $nationLevel):int{ + if($generalLevel == 12) { + $lbonus = $nationLevel * 2; + } elseif($generalLevel >= 5) { + $lbonus = $nationLevel; + } else { + $lbonus = 0; + } + return $lbonus; +} + /** * 수뇌직 통솔 보너스 계산 * @@ -168,13 +179,7 @@ function CriticalRatioDomestic(&$general, $type) { * @return int 계산된 $general['lbonus'] 값 */ function setLeadershipBonus(&$general, $nationLevel){ - if($general['level'] == 12) { - $lbonus = $nationLevel * 2; - } elseif($general['level'] >= 5) { - $lbonus = $nationLevel; - } else { - $lbonus = 0; - } + $lbonus = calcLeadershipBonus($general['level'], $nationLevel); $general['lbonus'] = $lbonus; return $lbonus; } diff --git a/hwe/j_get_general_list.php b/hwe/j_get_general_list.php new file mode 100644 index 00000000..76a3ac9d --- /dev/null +++ b/hwe/j_get_general_list.php @@ -0,0 +1,108 @@ +isGameLoggedIn()){ + increaseRefresh("장수일람", 2); + + $me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner=%i', $userID); + $con = checkLimit($me['con']); + if ($con >= 2) { + Json::die([ + 'result'=>false, + 'reason'=>'접속 제한중입니다. 1턴 이내에 너무 많은 갱신을 하셨습니다.' + ]); + } +} +else{ + $availableNextCall = $session->availableNextCallGetGeneralList??'2000-01-01 00:00:00'; + $now = new \DateTimeImmutable(); + + if($now <= new \DateTimeImmutable($availableNextCall) && $session->userGrade < 5){ + Json::die([ + 'result'=>false, + 'reason'=>"장수 리스트는 10초에 한번 갱신 가능합니다.\n다음 시간 : ".$availableNextCall + ]); + } + + $availableNextCall = $now->add(new \DateInterval('PT1S'))->format('Y-m-d H:i:s'); + $session->availableNextCallGetGeneralList = $availableNextCall; +} + +$session->setReadOnly(); + +$rawGeneralList = $db->queryAllLists('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,name2,injury,leader,power,intel,experience,dedication,level,killturn,connect from general'); + +$ownerNameList = []; +if($gameStor->isunited){ + foreach(RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]){ + $ownerNameList[$ownerID] = $ownerName; + } +} + +$generalList = []; +foreach($rawGeneralList as $rawGeneral){ + [$owner,$no,$picture,$imgsvr,$npc,$age,$nation,$special,$special2,$personal,$name,$name2,$injury,$leader,$power,$intel,$experience,$dedication,$level,$killturn,$connect] = $rawGeneral; + + if(key_exists($owner, $ownerNameList)){ + $name2 = $ownerNameList[$owner]; + } + + $nationArr = getNationStaticInfo($nation); + $lbonus = calcLeadershipBonus($level, $nationArr['level']); + + $generalList[] = [ + $no, + $picture, + $imgsvr, + $npc, + $age, + $nationArr['name'], + SpecCall($special), + SpecCall($special2), + getGenChar($personal), + $name, + $name2, + $leader, + $lbonus, + $power, + $intel, + getHonor($experience), + getDed($dedication), + getLevel($level, $nationArr['level']), + $killturn, + $connect + ]; +} + +$result = [ + 'result'=>'true', + 'list'=>$generalList, +]; + +if($withToken){ + $result['list'][] ='aserasdrgtlkjsdrgltjsrdt1!!!!!!!!!!!!!!!!!!'; + $now = (new \DateTimeImmutable())->format('Y-m-d H:i:s'); + $tokens = []; + foreach($db->query('SELECT * FROM select_npc_token WHERE `valid_until`>=%s', $now) as $token){ + $validUntil = $token['valid_until']; + + foreach(Json::decode($token['pick_result']) as $pickResult){ + $tokens[$pickResult['no']]=$pickResult['keepCnt']; + } + } + $result['token'] = $tokens; +} + +Json::die($result); diff --git a/hwe/select_npc.php b/hwe/select_npc.php index 979bbf62..fef164d7 100644 --- a/hwe/select_npc.php +++ b/hwe/select_npc.php @@ -50,7 +50,16 @@ foreach (SpecialityConst::WAR as $id=>$values) { $specialAll['-'] = '없음'; echo Json::encode($specialAll); ?> -; +; +var characterInfo = +[$name, $info]){ + $characterAll[$name] = $info; +} +echo Json::encode($characterAll); +?> +; From a643182eeeedc036da3a2bb6733be2f666bf29da Mon Sep 17 00:00:00 2001 From: hide_d Date: Sat, 4 May 2019 18:33:48 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EC=9E=A5=EC=88=98=20=EC=9D=BC=EB=9E=8C=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_get_general_list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwe/j_get_general_list.php b/hwe/j_get_general_list.php index 76a3ac9d..8dc211f6 100644 --- a/hwe/j_get_general_list.php +++ b/hwe/j_get_general_list.php @@ -36,7 +36,7 @@ else{ ]); } - $availableNextCall = $now->add(new \DateInterval('PT1S'))->format('Y-m-d H:i:s'); + $availableNextCall = $now->add(new \DateInterval('PT10S'))->format('Y-m-d H:i:s'); $session->availableNextCallGetGeneralList = $availableNextCall; } From d30a82448197a34058efa60ddec9a6f6580dc90c Mon Sep 17 00:00:00 2001 From: hide_d Date: Sat, 4 May 2019 18:37:41 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B7=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_get_general_list.php | 1 - 1 file changed, 1 deletion(-) diff --git a/hwe/j_get_general_list.php b/hwe/j_get_general_list.php index 8dc211f6..3ec55b1b 100644 --- a/hwe/j_get_general_list.php +++ b/hwe/j_get_general_list.php @@ -92,7 +92,6 @@ $result = [ ]; if($withToken){ - $result['list'][] ='aserasdrgtlkjsdrgltjsrdt1!!!!!!!!!!!!!!!!!!'; $now = (new \DateTimeImmutable())->format('Y-m-d H:i:s'); $tokens = []; foreach($db->query('SELECT * FROM select_npc_token WHERE `valid_until`>=%s', $now) as $token){ From 956dc82555634caa94fb6b76c02ef52eb3b061ef Mon Sep 17 00:00:00 2001 From: hide_d Date: Sat, 4 May 2019 19:46:55 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EC=9E=A5=EC=88=98=20=EB=B9=99=EC=9D=98?= =?UTF-8?q?=EC=97=90=20=EC=9E=A5=EC=88=98=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=9D=84=EC=9B=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_get_general_list.php | 6 +- hwe/js/select_npc.js | 161 ++++++++++++++++++++++++++++++++++++- hwe/select_npc.php | 30 ++++++- 3 files changed, 191 insertions(+), 6 deletions(-) diff --git a/hwe/j_get_general_list.php b/hwe/j_get_general_list.php index 3ec55b1b..218692e2 100644 --- a/hwe/j_get_general_list.php +++ b/hwe/j_get_general_list.php @@ -69,15 +69,17 @@ foreach($rawGeneralList as $rawGeneral){ $npc, $age, $nationArr['name'], - SpecCall($special), - SpecCall($special2), + getGenSpecial($special), + getGenSpecial($special2), getGenChar($personal), $name, $name2, + $injury, $leader, $lbonus, $power, $intel, + getExpLevel($experience), getHonor($experience), getDed($dedication), getLevel($level, $nationArr['level']), diff --git a/hwe/js/select_npc.js b/hwe/js/select_npc.js index 773e9bf8..eb9bb5c6 100644 --- a/hwe/js/select_npc.js +++ b/hwe/js/select_npc.js @@ -16,6 +16,25 @@ var templateSpecial = \ '; +var templateGeneralRow = +'\ + \ + <%name%><%nameAux%>\ + <%age%>세\ + <%personalWithTooltip%>\ + <%specialDomesticWithTooltip%> / <%speicalWarWithTooltip%>\ + Lv <%explevel%>\ + <%nation%>\ + <%experience%>\ + <%dedication%>\ + <%level%>\ + <%total%>\ + <%leader%>\ + <%power%>\ + <%intel%>\ + <%killturn%>\ +'; + function pickGeneral(){ $btn = $(this); @@ -115,7 +134,6 @@ function printGenerals(value){ var $card = $(TemplateEngine(templateGeneralCard, cardData)); - console.log($card); $('.card_holder').append($card); $card.find('.select_btn').click(pickGeneral); @@ -131,7 +149,132 @@ function printGenerals(value){ updateOutdateTimer(); } +function printGeneralList(value){ + var tokenList = value.token; + var generalList = $.map(value.list, function(general){ + general = { + no:general[0], + picture:general[1], + imgsvr:general[2], + npc:general[3], + age:general[4], + nation:general[5], + special:general[6], + special2:general[7], + personal:general[8], + name:general[9], + name2:general[10], + injury:general[11], + leader:general[12], + lbonus:general[13], + power:general[14], + intel:general[15], + explevel:general[16], + experience:general[17], + dedication:general[18], + level:general[19], + killturn:general[20], + connect:general[21], + reserved:0 + }; + if(general.npc < 2){ + general.reserved = 2; + } + if(general.no in tokenList){ + general.reserved = 1; + } + + general.userCSS = ""; + general.nameAux = ""; + + if(general.reserved == 1){ + general.userCSS = 'color:violet'; + } + else if(general.npc >= 2){ + general.userCSS = 'color:cyan'; + } + else if(general.npc == 1){ + general.userCSS = 'color:skyblue'; + } + + if(general.name2){ + general.nameAux += '
({0})'.format(general.name2); + } + + if(general.reserved == 1){ + general.nameAux += '
({0}회)'.format(tokenList[general.no]); + } + + + general.total = general.leader + general.power + general.intel; + general.iconPath = getIconPath(general.imgsvr, general.picture); + + general.specialDomesticWithTooltip = TemplateEngine(templateSpecial, { + text:general.special, + info:specialInfo[general.special] + }); + + general.speicalWarWithTooltip = TemplateEngine(templateSpecial, { + text:general.special2, + info:specialInfo[general.special2] + }); + + general.personalWithTooltip = TemplateEngine(templateSpecial, { + text:general.personal, + info:characterInfo[general.personal] + }); + + return general; + }); + + generalList.sort(function(lhs, rhs){ + if(lhs.reserved > rhs.reserved){ + return -1; + } + if(lhs.reserved < rhs.reserved){ + return 1; + } + if(lhs.total != rhs.total){ + return rhs.total - lhs.total; + } + if(lhs.leader != rhs.leader){ + return rhs.leader - lhs.total; + } + + if(lhs.name < rhs.name){ + return -1; + } + if(lhs.name > rhs.name){ + return 1; + } + return 0; + }); + + window.generalList = generalList; + _printGeneralList(generalList); + + +} + +function _printGeneralList(generalList){ + var $generalTable = $('#general_list'); + $generalTable.empty(); + + $.each(generalList, function(idx, general){ + $generalTable.append(TemplateEngine(templateGeneralRow, general)); + }); + + $generalTable.find('.obj_tooltip').tooltip({ + title:function(){ + return $.trim($(this).find('.tooltiptext').html()); + }, + html:true + }); + $('#tb_general_list').show(); +} + $(function($){ +window.generalList = []; $.post('j_get_select_npc_token.php').then(function(value){ if(!value.result){ @@ -165,4 +308,20 @@ $('#btn_pick_more').click(function(){ }); }); +$('#btn_load_general_list').click(function(){ + $.post({ + url:'j_get_general_list.php', + dataType:'json', + data:{ + with_token:true + } + }).then(function(result){ + if(!result.result){ + alert(result.reason); + return false; + } + printGeneralList(result); + }); +}); + }); \ No newline at end of file diff --git a/hwe/select_npc.php b/hwe/select_npc.php index fef164d7..70ce5697 100644 --- a/hwe/select_npc.php +++ b/hwe/select_npc.php @@ -26,7 +26,7 @@ $nationList = $db->query('SELECT nation,`name`,color,scout,scoutmsg FROM nation <?=UniqueConst::$serverName?>: NPC빙의 - + @@ -72,7 +72,7 @@ echo Json::encode($characterAll); = $maxgeneral) { +if ($gencount>= $maxgeneral) { ?> @@ -103,8 +103,32 @@ history.go(-1);
-
+
+ + + + + + + + +
얼 굴 + 이 름 + 연령 + 성격 + 특기 + 레 벨 + 국 가 + 명 성 + 계 급 + 관 직 + 종능 + 통솔 + 무력 + 지력 + 삭턴 +
From a78fa98b3d23acab6a567ff4109bebfad72e29d5 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sat, 4 May 2019 20:01:17 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=EC=9E=A5=EC=88=98=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=EC=97=90=20pagenation=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/js/select_npc.js | 31 ++++++++++++++++++++++++------- hwe/select_npc.php | 9 +++++++-- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/hwe/js/select_npc.js b/hwe/js/select_npc.js index eb9bb5c6..829d1162 100644 --- a/hwe/js/select_npc.js +++ b/hwe/js/select_npc.js @@ -251,18 +251,31 @@ function printGeneralList(value){ }); window.generalList = generalList; - _printGeneralList(generalList); - - + _printGeneralList(true); } -function _printGeneralList(generalList){ +function _printGeneralList(clear){ var $generalTable = $('#general_list'); - $generalTable.empty(); + if(clear){ + $generalTable.empty(); + $generalTable.data('lastIdx', 0); + $('#row_print_more').show(); + } - $.each(generalList, function(idx, general){ + generalList = window.generalList; + + var idxFrom = $generalTable.data('lastIdx'); + var idxTo = Math.min(idxFrom + 50, generalList.length); + $generalTable.data('lastIdx', idxTo); + + for(var idx = idxFrom; idx < idxFrom + 50; idx++){ + var general = generalList[idx]; $generalTable.append(TemplateEngine(templateGeneralRow, general)); - }); + } + + if(idxTo == generalList.length){ + $('#row_print_more').hide(); + } $generalTable.find('.obj_tooltip').tooltip({ title:function(){ @@ -324,4 +337,8 @@ $('#btn_load_general_list').click(function(){ }); }); +$('#btn_print_more').click(function(){ + _printGeneralList(); +}) + }); \ No newline at end of file diff --git a/hwe/select_npc.php b/hwe/select_npc.php index 70ce5697..4b805620 100644 --- a/hwe/select_npc.php +++ b/hwe/select_npc.php @@ -103,10 +103,10 @@ history.go(-1);
-
+
- +
+ + + + +
From ca33c3b2596efe26fc69df8170f888df755d1bc9 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sat, 4 May 2019 20:09:52 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=EB=B9=99=EC=9D=98=EC=97=90=20=EC=95=BD?= =?UTF-8?q?=EA=B0=84=EC=9D=98=20=ED=8E=B8=EC=9D=98=EC=84=B1=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/js/select_npc.js | 6 +++++- hwe/select_npc.php | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/hwe/js/select_npc.js b/hwe/js/select_npc.js index 829d1162..a3e07b1f 100644 --- a/hwe/js/select_npc.js +++ b/hwe/js/select_npc.js @@ -4,7 +4,7 @@ var templateGeneralCard =

\

<%leader%> / <%power%> / <%intel%>
\ <%specialText%> / <%special2Text%>

\ - \ + \ \ '; @@ -38,6 +38,10 @@ var templateGeneralRow = function pickGeneral(){ $btn = $(this); + if (!confirm('빙의할까요? : {0}'.format($btn.data('name')))) { + return false; + } + $.post({ url:'j_select_npc.php', dataType:'json', diff --git a/hwe/select_npc.php b/hwe/select_npc.php index 4b805620..70bc418f 100644 --- a/hwe/select_npc.php +++ b/hwe/select_npc.php @@ -102,11 +102,11 @@ history.go(-1);
-
+

- +\ +\ \