From 67b2dbfe9803022bf4cdd8a7a5ace6cf812cc972 Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 31 Aug 2021 02:27:00 +0900 Subject: [PATCH] js2ts: kingdomList --- hwe/a_kingdomList.php | 3 +- hwe/js/ext.kingdoms.js | 263 -------------------------------------- hwe/ts/extKingdoms.ts | 281 +++++++++++++++++++++++++++++++++++++++++ webpack.config.cjs | 1 + 4 files changed, 283 insertions(+), 265 deletions(-) delete mode 100644 hwe/js/ext.kingdoms.js create mode 100644 hwe/ts/extKingdoms.ts diff --git a/hwe/a_kingdomList.php b/hwe/a_kingdomList.php index 5ee27f99..867b4756 100644 --- a/hwe/a_kingdomList.php +++ b/hwe/a_kingdomList.php @@ -27,8 +27,7 @@ if($con >= 2) { printLimitMsg($me['turntime']); exit(); } <?=UniqueConst::$serverName?>: 세력일람 - - + diff --git a/hwe/js/ext.kingdoms.js b/hwe/js/ext.kingdoms.js deleted file mode 100644 index a5833ce2..00000000 --- a/hwe/js/ext.kingdoms.js +++ /dev/null @@ -1,263 +0,0 @@ -$(function(){ - - var basicPath = document.location.pathname; - basicPath = basicPath.substring(0, basicPath.lastIndexOf('/'))+'/'; - var headTbl = $('table:eq(0)'); - var $userFrame; - - var 국가테이블= $('table:gt(0):lt(-2)'); - - var getUserType = function(통,무,지){ - var 총 = 통+무+지; - if(통 < 40){ - if(무+지 < 40){ - return "무능"; - } - return "무지"; - } - - var 최대능력치 = Math.max(통, 무, 지); - var 능력치2합 = Math.min(통+무, 무+지, 지+통); - if(최대능력치 >= 70 && 능력치2합 >= 최대능력치 * 1.7){ - return "만능"; - } - - if(무 >= 60 && 지 < 무*0.8){ - return "무"; - } - if(지 >= 60 && 무 < 지*0.8){ - return "지"; - } - if(통 >= 60 && 무 + 지 < 통){ - return "통"; - } - - - - return "평범"; - }; - - function formatScore(x) { - console.log(x); - return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - - var runAnalysis = function(){ - var $content = $('#on_mover .content'); - $.get(basicPath+'a_genList.php',function(rawData){ - try{ - var $html = $(rawData); - - var $장수일람 = {}; - - var 국가별 = {}; - var cnt =0; - $html.each(function(idx){ - - if(this.tagName == "TABLE"){ - cnt+=1; - if(cnt==2){ - $장수일람 = $(this); - return false; - } - } - }); - $장수일람.find('tr:gt(0)').each(function(){ - var 장수 = {}; - $this = $(this); - $tds = $this.find('td'); - - var 장수명 = $.trim($tds.eq(1).text()); - var 국가 = $.trim($tds.eq(6).text()); - - var 부상 = $this.data('general-wounded'); - - 장수.html = $this.clone(); - 장수.장수명 = 장수명; - 장수.국가 = 국가; - 장수.벌점 = parseInt($tds.eq(-1).text()); - 장수.통 = parseInt($this.data('general-leadership')); - 장수.무 = parseInt($this.data('general-strength')); - 장수.지 = parseInt($this.data('general-intel')); - 장수.삭턴 = parseInt($tds.eq(-2).text()); - 장수.종류 = getUserType(장수.통, 장수.무, 장수.지); - 장수.NPC = $this.data('is-npc'); - - if(!(국가 in 국가별)){ - 국가별[국가] = {}; - 국가별[국가].만능 = []; - 국가별[국가].통 = []; - 국가별[국가].무 = []; - 국가별[국가].지 = []; - 국가별[국가].평범 = []; - 국가별[국가].무지 = []; - 국가별[국가].무능 = []; - //국가별[국가].NPC = []; - } - - //if(장수.NPC) 국가별[국가].NPC.push(장수); - 국가별[국가][장수.종류].push(장수); - - 장수.html.hide(); - $content.append(장수.html); - - - }); - - 국가테이블.each(function(idx){ - var $this = $(this); - var $tbl = $this; - var $td = $this.find('td:last'); - var name = $.trim($this.find('td:first').text()); - name = name.substr(2,name.length-4); - - var 국가정보 = 국가별[name]; - - var total = 0; - var 전투유저장수 = 0; - var 통솔합 = 0; - var 삭턴장수 = 0; - - var 전투N장수 = 0; - var N장통솔합 = 0; - $td.html('

'); - $td.css('text-indent','-5.8em').css('padding-left','5.8em'); - for(var 종류명 in 국가정보){ - - var $p = $("

").css('margin','0'); - - var 테이블 = 국가정보[종류명]; - - if(테이블.length == 0)continue; - - 테이블.sort(function(좌, 우){ - if(우.벌점 == 좌.벌점){ - return 좌.장수명 > 우.장수명 ? 1 : 0; - } - return 우.벌점 - 좌.벌점 - }); - - - var text = "  "+종류명; - text = text.substr(text.length-2); - $p.append(text+'장('); - - text = ""+테이블.length; - - $p.append(text + ')'); - if(text.length<3){ - $p.append(" "); - } - $p.append(': '); - - total += 테이블.length; - - $.each(테이블,function(idx,val){ - - var 종능 = val.통 + val.무 + val.지; - console.log(val); - if(종류명 != '무능' && 종류명 != '무지'){ - if(val.삭턴 >= 80 && !val.NPC){ - 전투유저장수 += 1; - - 통솔합 += val.통; - } - - if(val.삭턴 > 5 && val.NPC){ - 전투N장수 += 1; - - N장통솔합 += val.통; - } - } - - var $obj = $(''); - var $obj2 = $(''); - $obj.html(val.장수명); - - if(!val.NPC && val.삭턴 < 80){ - $obj.css('text-decoration','line-through'); - 삭턴장수+=1; - } - if(val.NPC){ - $obj.css('color','cyan'); - } - if(val.벌점 >= 1500) $obj.css('color','yellow'); - else if(val.벌점 >= 200) $obj.css('color','lightgreen'); - - $obj2.append($obj); - if(idx < 테이블.length-1){ - $obj2.append(', '); - } - $p.append($obj2); - $obj2.hover(function(){ - var top = $tbl.offset().top + $tbl.outerHeight() + 3; - $userFrame.css('top',top); - val.html.show(); - $userFrame.show(); - console.log('올림!'+val.장수명); - },function(){ - $userFrame.hide(); - val.html.hide(); - console.log('내림!'+val.장수명); - }); - - - - }); - $td.append($p); - } - - var result = "* 총("+total+"), 전투장("+전투유저장수+", 약 "+formatScore(통솔합*100)+"명), 전투N장("+전투N장수+", 약 "+formatScore(N장통솔합*100)+"명), 삭턴장("+삭턴장수+") *"; - $tbl.find('.sum').html(result); - - - }); - } - catch(err){ - console.log(err); - } - }); - - } - - $userFrame = $('
'+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - '
얼 굴이 름연령성격특기레 벨국 가명 성계 급관 직통솔무력지력삭턴벌점
'); - $userFrame.find('thead td'); - $userFrame.css('width','1000px').css('margin','0').css('padding','0').css('left','50%').css('margin-left','-500px'); - $userFrame.css('box-shadow','0px 0px 7px 3px rgba(255,255,255,50)'); - $userFrame.hide(); - - $('body').append($userFrame); - - var $frame = $('table:eq(0) td:eq(0)'); - $frame.find('br:last').remove(); - - var $btn = $(''); - $btn.click(function(){ - runAnalysis(); - $btn.prop("disabled",true); - var $tr0 = $('table:eq(0) tr:eq(0)'); - $tr0.append('*벌점 순 정렬*
벌점 1500점 이상, 벌점 200점 이상, '+ - '삭턴장, ⓝ장'+'
전투장 : 만능장 + 무장 + 지장 + 평범장 - 삭턴자(만능, 무, 지, 평범) '); - }); - - - - $frame.append($btn); -}); \ No newline at end of file diff --git a/hwe/ts/extKingdoms.ts b/hwe/ts/extKingdoms.ts new file mode 100644 index 00000000..8fef5ce4 --- /dev/null +++ b/hwe/ts/extKingdoms.ts @@ -0,0 +1,281 @@ +import $ from 'jquery'; +import { unwrap } from './util/unwrap'; +import axios from 'axios'; +import { setAxiosXMLHttpRequest } from './util/setAxiosXMLHttpRequest'; + +type KingdomGeneral = { + html: JQuery, + 장수명: string + 국가: string + 벌점: number, + 통: number, + 무: number, + 지: number, + 삭턴: number, + 종류: UserType, + NPC: boolean, +} + +type UserType = "통" | "무" | "지" | "만능" | "평범" | "무능" | "무지"; + +type NationInfo = { + [v in UserType]: KingdomGeneral[] +} + +$(function () { + setAxiosXMLHttpRequest(); + + const $userFrame: JQuery = $('
' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
얼 굴이 름연령성격특기레 벨국 가명 성계 급관 직통솔무력지력삭턴벌점
'); + $userFrame.find('thead td'); + $userFrame.css('width', '1000px').css('margin', '0').css('padding', '0').css('left', '50%').css('margin-left', '-500px'); + $userFrame.css('box-shadow', '0px 0px 7px 3px rgba(255,255,255,50)'); + $userFrame.hide(); + + const 국가테이블 = $('table:gt(0):lt(-2)'); + + const getUserType = function (통: number, 무: number, 지: number): UserType { + //const 총 = 통 + 무 + 지; + if (통 < 40) { + if (무 + 지 < 40) { + return "무능"; + } + return "무지"; + } + + const 최대능력치 = Math.max(통, 무, 지); + const 능력치2합 = Math.min(통 + 무, 무 + 지, 지 + 통); + if (최대능력치 >= 70 && 능력치2합 >= 최대능력치 * 1.7) { + return "만능"; + } + + if (무 >= 60 && 지 < 무 * 0.8) { + return "무"; + } + if (지 >= 60 && 무 < 지 * 0.8) { + return "지"; + } + if (통 >= 60 && 무 + 지 < 통) { + return "통"; + } + + return "평범"; + }; + + function formatScore(x: number) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + } + + const runAnalysis = async function () { + const $content = $('#on_mover .content'); + try { + const response = await axios({ url: 'a_genList.php', method: 'get', responseType: 'text' }); + const rawData = response.data; const $html = $(rawData); + + let $장수일람: JQuery | undefined; + + const 국가별: Record = {}; + let cnt = 0; + $html.each(function () { + if (this.tagName == "TABLE") { + cnt += 1; + if (cnt == 2) { + $장수일람 = $(this); + return false; + } + } + }); + if ($장수일람 !== undefined) { + $장수일람.find('tr:gt(0)').each(function () { + const 장수 = {} as KingdomGeneral; + const $this = $(this); + const $tds = $this.find('td'); + + const 장수명 = $.trim($tds.eq(1).text()); + const 국가 = $.trim($tds.eq(6).text()); + + //const 부상 = $this.data('general-wounded'); + + 장수.html = $this.clone(); + 장수.장수명 = 장수명; + 장수.국가 = 국가; + 장수.벌점 = parseInt($tds.eq(-1).text()); + 장수.통 = parseInt($this.data('general-leadership')); + 장수.무 = parseInt($this.data('general-strength')); + 장수.지 = parseInt($this.data('general-intel')); + 장수.삭턴 = parseInt($tds.eq(-2).text()); + 장수.종류 = getUserType(장수.통, 장수.무, 장수.지); + 장수.NPC = $this.data('is-npc'); + + if (!(국가 in 국가별)) { + 국가별[국가] = { + 만능: [], + 통: [], + 무: [], + 지: [], + 평범: [], + 무지: [], + 무능: [], + //NPC:[], + }; + } + + //if(장수.NPC) 국가별[국가].NPC.push(장수); + 국가별[국가][장수.종류].push(장수); + + 장수.html.hide(); + $content.append(장수.html); + + + }); + } + + + 국가테이블.each(function () { + const $this = $(this); + const $tbl = $this; + const $td = $this.find('td:last'); + let name = $.trim($this.find('td:first').text()); + name = name.substr(2, name.length - 4); + + const 국가정보 = 국가별[name]; + + let total = 0; + let 전투유저장수 = 0; + let 통솔합 = 0; + let 삭턴장수 = 0; + + let 전투N장수 = 0; + let N장통솔합 = 0; + $td.html('

'); + $td.css('text-indent', '-5.8em').css('padding-left', '5.8em'); + for (const [종류명, 테이블] of Object.entries(국가정보)) { + + const $p = $("

").css('margin', '0'); + + if (테이블.length == 0) continue; + + 테이블.sort(function (좌, 우) { + if (우.벌점 == 좌.벌점) { + return 좌.장수명 > 우.장수명 ? 1 : 0; + } + return 우.벌점 - 좌.벌점 + }); + + + let text = "  " + 종류명; + text = text.substr(text.length - 2); + $p.append(text + '장('); + + text = "" + 테이블.length; + + $p.append(text + ')'); + if (text.length < 3) { + $p.append(" "); + } + $p.append(': '); + + total += 테이블.length; + + $.each(테이블, function (idx, val) { + //const 종능 = val.통 + val.무 + val.지; + console.log(val); + if (종류명 != '무능' && 종류명 != '무지') { + if (val.삭턴 >= 80 && !val.NPC) { + 전투유저장수 += 1; + + 통솔합 += val.통; + } + + if (val.삭턴 > 5 && val.NPC) { + 전투N장수 += 1; + + N장통솔합 += val.통; + } + } + + const $obj = $(''); + const $obj2 = $(''); + $obj.html(val.장수명); + + if (!val.NPC && val.삭턴 < 80) { + $obj.css('text-decoration', 'line-through'); + 삭턴장수 += 1; + } + if (val.NPC) { + $obj.css('color', 'cyan'); + } + if (val.벌점 >= 1500) $obj.css('color', 'yellow'); + else if (val.벌점 >= 200) $obj.css('color', 'lightgreen'); + + $obj2.append($obj); + if (idx < 테이블.length - 1) { + $obj2.append(', '); + } + $p.append($obj2); + $obj2.hover(function () { + const top = unwrap($tbl.offset()).top + unwrap($tbl.outerHeight()) + 3; + $userFrame.css('top', top); + val.html.show(); + $userFrame.show(); + console.log('올림!' + val.장수명); + }, function () { + $userFrame.hide(); + val.html.hide(); + console.log('내림!' + val.장수명); + }); + + + + }); + $td.append($p); + } + + const result = "* 총(" + total + "), 전투장(" + 전투유저장수 + ", 약 " + formatScore(통솔합 * 100) + "명), 전투N장(" + 전투N장수 + ", 약 " + formatScore(N장통솔합 * 100) + "명), 삭턴장(" + 삭턴장수 + ") *"; + $tbl.find('.sum').html(result); + + + }); + } + catch (err) { + console.error(err); + } + + } + + + + $('body').append($userFrame); + + const $frame = $('table:eq(0) td:eq(0)'); + $frame.find('br:last').remove(); + + const $btn = $(''); + $btn.on('click', function () { + void runAnalysis(); + $btn.prop("disabled", true); + const $tr0 = $('table:eq(0) tr:eq(0)'); + $tr0.append('*벌점 순 정렬*
벌점 1500점 이상, 벌점 200점 이상, ' + + '삭턴장, ⓝ장' + '
전투장 : 만능장 + 무장 + 지장 + 평범장 - 삭턴자(만능, 무, 지, 평범) '); + }); + + + + $frame.append($btn); +}); \ No newline at end of file diff --git a/webpack.config.cjs b/webpack.config.cjs index 18f5e69b..d17e5779 100644 --- a/webpack.config.cjs +++ b/webpack.config.cjs @@ -41,6 +41,7 @@ module.exports = (env, argv) => { history: '@/history.ts', join: '@/join.ts', select_general_from_pool: '@/select_general_from_pool.ts', + extKingdoms: '@/extKingdoms.ts', }, output: { filename: '[name].js',