From 73cdc385cd19fac60dc6af0d7eba9fbd4ecbd8ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Fri, 29 Nov 2019 18:36:15 +0800 Subject: [PATCH] =?UTF-8?q?dev:=E5=85=88=E6=94=B9=E4=B8=80=E9=83=A8?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script.js | 202 +++++++++++++++++++++--------------------- universal_function.js | 51 ++++++----- 2 files changed, 130 insertions(+), 123 deletions(-) diff --git a/script.js b/script.js index 4bbeda75..7157aa92 100644 --- a/script.js +++ b/script.js @@ -1,5 +1,5 @@ -var ms = null; //怪物数据 -var language = null; //当前语言 +var Cards = null; //怪物数据 +var currentLanguage = null; //当前语言 const dataSourceList = [ //几个不同的游戏服务区 { code:"ja", @@ -119,7 +119,7 @@ Formation.prototype.loadObj= function(f){ function createCardHead(id) { var cli = document.createElement("li"); - var cdom = cli.mon = cli.appendChild(document.createElement("a")); + var cdom = cli.head = cli.appendChild(document.createElement("a")); cdom.class = "monster"; var property = cdom.appendChild(document.createElement("div")); property.className = "property"; @@ -179,116 +179,113 @@ function swapSingleMulitple() } window.onload = function() { - var controlBox = document.body.querySelector(".control-box"); - //添加语言列表 - var langList = controlBox.querySelector(".languages"); + let controlBox = document.body.querySelector(".control-box"); + + //▼添加语言列表开始 + let langSelectDom = controlBox.querySelector(".languages"); languageList.forEach(function(l){ - var langOpt = new Option(l.name,l.i18n); - langList.options.add(langOpt); + langSelectDom.options.add(new Option(l.name,l.i18n)); }) - var language_i18n = getQueryString("l") || getQueryString("lang"); //获取参数指定的语言 - var browser_i18n = (navigator.language||navigator.userLanguage); //获取浏览器语言 - var hasLanguage = languageList.filter(function(l){ //筛选出符合的语言 - if (language_i18n) //如果已指定就用指定的语言 - return language_i18n.indexOf(l.i18n)>=0; - else + let parameter_i18n = getQueryString("l") || getQueryString("lang"); //获取参数指定的语言 + let browser_i18n = (navigator.language || navigator.userLanguage); //获取浏览器语言 + let havingLanguage = languageList.filter(function(l){ //筛选出符合的语言 + if (parameter_i18n) //如果已指定就用指定的语言 + return parameter_i18n.indexOf(l.i18n)>=0; + else //否则筛选浏览器默认语言 return browser_i18n.indexOf(l.i18n)>=0; }); - language = hasLanguage.length?hasLanguage[hasLanguage.length-1]:languageList[0]; //没有找到指定语言的情况下,自动用默认的语言 - document.head.querySelector("#language-css").href = "languages/"+language.i18n+".css"; - Array.prototype.slice.call(langList.options).some(function(lOpt){ - if (lOpt.value == language.i18n) + currentLanguage = havingLanguage.length + ? havingLanguage.pop() //有语言使用最后一个 + : languageList[0]; //没有找到指定语言的情况下,自动用第一个语言(英语) + document.head.querySelector("#language-css").href = "languages/"+currentLanguage.i18n+".css"; + + let langOptionArray = Array.prototype.slice.call(langSelectDom.options); + langOptionArray.some(function(langOpt){ + if (langOpt.value == currentLanguage.i18n) { - lOpt.selected = true; + langOpt.selected = true; return true; } }); - - //添加数据来源列表 - let dataList = controlBox.querySelector(".datasource"); + //▲添加语言列表结束 + //▼添加数据来源列表开始 + let dataSelectDom = controlBox.querySelector(".datasource"); dataSourceList.forEach(function(ds){ - let dsOpt = new Option(ds.source,ds.code); - dataList.options.add(dsOpt); + dataSelectDom.options.add(new Option(ds.source,ds.code)); }) - let dataSourceCode = getQueryString("s"); //获取参数指定的数据来源 - let hasDataSource = dataSourceList.filter(function(ds){ //筛选出符合的数据源 - return ds.code == dataSourceCode; + let parameter_dsCode = getQueryString("s"); //获取参数指定的数据来源 + let havingDataSource = dataSourceList.filter(function(ds){ //筛选出符合的数据源 + return ds.code == parameter_dsCode; }); - let dataSource = hasDataSource.length ? hasDataSource[0]: dataSourceList[0]; - document.body.classList.add("ds-"+dataSource.code); - Array.prototype.slice.call(dataList.options).some(function(dOpt){ - if (dOpt.value == dataSource.code) + let currentDataSource = havingDataSource.length ? havingDataSource[0]: dataSourceList[0]; + document.body.classList.add("ds-"+currentDataSource.code); + let dataSourceOptionArray = Array.prototype.slice.call(dataSelectDom.options); + dataSourceOptionArray.some(function(dataOpt){ + if (dataOpt.value == currentDataSource.code) { - dOpt.selected = true; + dataOpt.selected = true; return true; } }); //处理返回的数据 function dealIdata(responseText) { - var idata; try { - ms = JSON.parse(responseText); + Cards = JSON.parse(responseText); initialize();//初始化 - var idataQer = getQueryString("d") || getQueryString("data"); - if (idataQer) - { - idata = JSON.parse(idataQer); - } }catch(e) { - console.log("初始数据JSON解码出错",e); + console.log("Cards数据JSON解码出错",e); return; } - if (idata) - { - formation.loadObj(idata); - refreshAll(formation); - } + //如果通过的话就载入URL中的怪物数据 + reloadFormationData(); } GM_xmlhttpRequest({ method: "GET", - url:"monsters-info/mon_"+dataSource.code+".json", + url:`monsters-info/mon_${currentDataSource.code}.json`, //Cards数据文件 onload: function(response) { dealIdata(response.response); }, onerror: function(response) { - var isChrome = navigator.userAgent.indexOf("Chrome") >=0; - if (isChrome && location.host.length==0) + let isChrome = navigator.userAgent.indexOf("Chrome") >=0; + if (isChrome && location.host.length==0 && response.response.length>0) { console.info("因为是Chrome本地打开,正在尝试读取JSON"); dealIdata(response.response); }else { - console.error("怪物数据获取错误",response); + console.error("Cars JSON数据获取失败",response); } } }); } -window.onpopstate = function() -{ //前进后退时修改页面 - var idata; +//重新读取URL中的Data数据并刷新页面 +function reloadFormationData() +{ + let formationData; try { - var idataQer = getQueryString("d") || getQueryString("data"); - if (idataQer) + var parameter_data = getQueryString("d") || getQueryString("data"); + if (parameter_data) { - idata = JSON.parse(idataQer); + formationData = JSON.parse(parameter_data); } }catch(e) { - console.log("初始数据JSON解码出错",e); + console.log("URL中队伍数据JSON解码出错",e); return; } - if (idata) + if (formationData) { //formation = idata; - formation.loadObj(idata); + formation.loadObj(formationData); refreshAll(formation); } } +window.onpopstate = reloadFormationData; //前进后退时修改页面 //创建新的分享地址 function creatNewUrl(arg){ if (arg == undefined) arg = {}; @@ -312,10 +309,10 @@ function creatNewUrl(arg){ function initialize() { var monstersList = document.querySelector("#monsters-list"); - ms.forEach(function(m){ + Cards.forEach(function(m){ var opt = monstersList.appendChild(document.createElement("option")); opt.value = m.id; - opt.label = m.id + " - " + returnMonsterNameArr(m,language.searchlist).join(" | "); + opt.label = m.id + " - " + returnMonsterNameArr(m,currentLanguage.searchlist).join(" | "); }); //控制框 var controlBox = document.querySelector(".control-box"); @@ -399,7 +396,7 @@ function initialize() //刷新觉醒 editBox.refreshAwokens = function(){ monEditAwokens[0].innerHTML = editBox.awokenCount; - if (editBox.awokenCount>0 && editBox.awokenCount==(ms[editBox.mid].awoken.length)) + if (editBox.awokenCount>0 && editBox.awokenCount==(Cards[editBox.mid].awoken.length)) monEditAwokens[0].classList.add("full-awoken"); else monEditAwokens[0].classList.remove("full-awoken"); @@ -586,7 +583,7 @@ function initialize() mD.id = parseInt(monstersID.value); mD.level = parseInt(monEditLv.value); mD.awoken = editBox.awokenCount; - if (ms[mD.id].sAwoken) //如果支持超觉醒 + if (Cards[mD.id].sAwoken) //如果支持超觉醒 { mD.sawoken = -1; for (var sai = 0;sai=0;ci--) @@ -947,7 +944,7 @@ function editBoxChangeMonId(id) } evoLinkCardsId.forEach(function(mid){ var cli = createCardHead(mid); - cli.mon.onclick = function(){ + cli.head.onclick = function(){ monstersID.value = this.getAttribute("data-cardid"); monstersID.onchange(); return false; @@ -1008,7 +1005,7 @@ function editBoxChangeMonId(id) var rowPlus = settingBox.querySelector(".row-mon-plus"); var rowLatent = settingBox.querySelector(".row-mon-latent"); - if (ms[id].type.some(function(t){return t == 0 || t == 12 || t == 14 || t == 15;}) && [303,305,307,600,602].indexOf(id)<0) + if (Cards[id].type.some(function(t){return t == 0 || t == 12 || t == 14 || t == 15;}) && [303,305,307,600,602].indexOf(id)<0) { //当4种特殊type的时候是无法297和打觉醒的,但是5种小企鹅可以 rowPlus.classList.add("disabled"); rowLatent.classList.add("disabled"); @@ -1054,48 +1051,47 @@ function editBoxChangeMonId(id) editBox.reCalculateAbility(); } //刷新整个队伍 -function refreshAll(fmt){ - var txtTitle = document.querySelector(".title-box .title"); - var txtDetail = document.querySelector(".detail-box .detail"); - txtTitle.value = fmt.title || ""; - txtDetail.value = fmt.detail || ""; +function refreshAll(formationData){ + let txtTitle = document.querySelector(".title-box .title"); + let txtDetail = document.querySelector(".detail-box .detail"); + txtTitle.value = formationData.title || ""; + txtDetail.value = formationData.detail || ""; txtDetail.onblur(); - var badges = Array.prototype.slice.call(document.querySelectorAll(".formation-box .formation-badge .badge-bg")); - badges.forEach(function(b,idx){if (idx==fmt.badge) b.classList.remove("display-none"); else b.classList.add("display-none");}) + let badges = Array.prototype.slice.call(document.querySelectorAll(".formation-box .formation-badge .badge-bg")); + badges.forEach(function(b,idx){if (idx==formationData.badge) b.classList.remove("display-none"); else b.classList.add("display-none");}) - var formationA = document.querySelector(".formation-box .formation-A-box"); - var formationB = document.querySelector(".formation-box .formation-B-box"); + let formationA = document.querySelector(".formation-box .formation-A-box"); + let formationB = document.querySelector(".formation-box .formation-B-box"); - var fATeam = formationA.querySelectorAll(".formation-team .monster"); - var fALatents = formationA.querySelectorAll(".formation-latents .latent-ul"); - var fAAssist = formationA.querySelectorAll(".formation-assist .monster"); - if (formationB) - { - var fBTeam = formationB.querySelectorAll(".formation-team .monster"); - var fBLatents = formationB.querySelectorAll(".formation-latents .latent-ul"); - var fBAssist = formationB.querySelectorAll(".formation-assist .monster"); - } - var formationAbilityDom = document.querySelector(".formation-box .formation-ability"); - for (var ti=0;ti<(formationB?5:6);ti++) + let fATeam = formationA.querySelectorAll(".formation-team .monster"); + let fALatents = formationA.querySelectorAll(".formation-latents .latent-ul"); + let fAAssist = formationA.querySelectorAll(".formation-assist .monster"); + + let fBTeam = formationB.querySelectorAll(".formation-team .monster"); + let fBLatents = formationB.querySelectorAll(".formation-latents .latent-ul"); + let fBAssist = formationB.querySelectorAll(".formation-assist .monster"); + + let formationAbilityDom = document.querySelector(".formation-box .formation-ability"); + for (let ti=0;ti<(formationB?5:6);ti++) { - changeid(fmt.team[0][0][ti],fATeam[ti],fALatents[ti]); - changeid(fmt.team[0][1][ti],fAAssist[ti]); + changeid(formationData.team[0][0][ti],fATeam[ti],fALatents[ti]); + changeid(formationData.team[0][1][ti],fAAssist[ti]); if (formationAbilityDom) { refreshAbility( formationAbilityDom, - fmt.team[0], + formationData.team[0], ti); - refreshTotalAbility(fmt.team[0]); + refreshTotalAbility(formationData.team[0]); } if (formationB) { - changeid(fmt.team[1][0][ti],fBTeam[ti],fBLatents[ti]); - changeid(fmt.team[1][1][ti],fBAssist[ti]); + changeid(formationData.team[1][0][ti],fBTeam[ti],fBLatents[ti]); + changeid(formationData.team[1][1][ti],fBAssist[ti]); } } - refreshAwokenCount(fmt.team); + refreshAwokenCount(formationData.team); } //刷新觉醒总计 function refreshAwokenCount(teams){ @@ -1150,7 +1146,7 @@ function refreshAbility(dom,team,idx){ //基底三维,如果辅助是武器,还要加上辅助的觉醒 var mainAbility = calculateAbility(mainMD.id,mainMD.level,mainMD.plus,mainMD.awoken,mainMD.latent,assistMD.id,assistMD.awoken); //辅助增加的三维,如果辅助的主属性相等,辅助宠物只计算等级和加值,不计算觉醒 - var assistAbility = (assistMD.id > 0 && ms[mainMD.id].ppt[0]==ms[assistMD.id].ppt[0]) + var assistAbility = (assistMD.id > 0 && Cards[mainMD.id].ppt[0]==Cards[assistMD.id].ppt[0]) ?calculateAbility(assistMD.id,assistMD.level,assistMD.plus,null,null) :[0,0,0]; if (mainAbility && mainMD.ability) diff --git a/universal_function.js b/universal_function.js index db20ec00..98587923 100644 --- a/universal_function.js +++ b/universal_function.js @@ -17,38 +17,48 @@ var type_allowable_latent = { //仿GM_xmlhttpRequest函数v1.3 if (typeof(GM_xmlhttpRequest) == "undefined") { var GM_xmlhttpRequest = function(GM_param) { - var xhr = new XMLHttpRequest(); //创建XMLHttpRequest对象 xhr.open(GM_param.method, GM_param.url, true); if (GM_param.responseType) xhr.responseType = GM_param.responseType; if (GM_param.overrideMimeType) xhr.overrideMimeType(GM_param.overrideMimeType); xhr.onreadystatechange = function() //设置回调函数 { - if (xhr.readyState === xhr.DONE) { - if (xhr.status === 200 && GM_param.onload) + if (xhr.readyState === xhr.DONE) { //请求完成时 + if (xhr.status === 200 && GM_param.onload) //正确加载时 + { GM_param.onload(xhr); - if (xhr.status !== 200 && GM_param.onerror) + } + if (xhr.status !== 200 && GM_param.onerror) //发生错误时 + { GM_param.onerror(xhr); + } } } - + //添加header for (var header in GM_param.headers) { xhr.setRequestHeader(header, GM_param.headers[header]); } - + //发送数据 xhr.send(GM_param.data ? GM_param.data : null); } } -//数字补0 +//数字补前导0 function PrefixInteger(num, length) { return (Array(length).join('0') + num).slice(-length); } //获取URL参数 -function getQueryString(name) { - var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); - var r = window.location.search.substr(1).match(reg); - if (r != null) return decodeURIComponent(r[2]); return null; +function getQueryString(name,url) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var search = url || window.location.search.substr(1); + var r = search.match(reg); + if (r != null) + { + return decodeURIComponent(r[2]); + }else + { + return null; + } } //数组去重 @@ -85,26 +95,27 @@ function awokenCountInFormation(formationTeam,ak,solo) return allAwokenCount; } //计算队伍中有多少个该觉醒 -function awokenCountInTeam(team,ak,solo) +function awokenCountInTeam(team,awokenIndex,solo) { var formationAwokenCount = team.reduce(function(tc,tm,isAssist){ var teamAwokenCount = tm.reduce(function(c,m){ + let Card = Cards[m.id]; if (m.id<=0) { //如果是特殊情况的 return c; } - var mdAwoken = ms[m.id].awoken; //这个怪物的觉醒数据 - var mdSAwoken = ms[m.id].sAwoken; //这个怪物的超觉醒数据 - if ((!mdAwoken && !mdSAwoken) || (isAssist && mdAwoken.indexOf(49)<0)) + let cdAwoken = Card.awakenings; //这个怪物的觉醒数据 + let cdSAwoken = Card.superAwakenings; //这个怪物的超觉醒数据 + if ((!cdAwoken && !cdSAwoken) || (isAssist && cdAwoken.indexOf(49)<0)) { //如果没有觉醒和超觉醒 || (如果是辅助队 &&第一个不是武器觉醒) return c; } //启用的觉醒数组片段 - var enableAwoken = mdAwoken.slice(0,m.awoken); + let enableAwoken = cdAwoken.slice(0,m.awoken); //相同的觉醒数 - var hasAwoken = enableAwoken.filter(function(a){return a == ak;}).length; + let hasAwoken = enableAwoken.filter(function(a){return a == awokenIndex;}).length; //如果是单人,有超觉醒,且超觉醒id和计数的id相同 - if (solo && mdSAwoken && (mdSAwoken[m.sawoken] == ak)) + if (solo && cdSAwoken && (cdSAwoken[m.sawoken] == awokenIndex)) { hasAwoken++; } @@ -150,7 +161,7 @@ function calculateAbility(monid,level,plus,awoken,latent,weaponId,weaponAwoken) if (awoken == undefined) awoken = 0; if (latent == undefined) latent = []; - var m = ms[monid]; //怪物数据 + let m = Cards[monid]; //怪物数据 if (monid ==0 || m==undefined) return null; var plusAdd = [10,5,3]; //加值的增加值 var awokenAdd = [ //对应加三维觉醒的序号与增加值 @@ -174,7 +185,7 @@ function calculateAbility(monid,level,plus,awoken,latent,weaponId,weaponAwoken) var awokenList = m.awoken.slice(0,awoken); //储存生效的觉醒 if (weaponId) { - var weapon = ms[weaponId]; //武器的怪物数据 + var weapon = Cards[weaponId]; //武器的怪物数据 var weaponAwokenList = weapon.awoken.slice(0,weaponAwoken); if (weaponAwokenList.indexOf(49)>=0) awokenList = awokenList.concat(weaponAwokenList);