diff --git a/monsters-info/extractByNode.js b/monsters-info/extractByNode.js index c8fabfda..9c636620 100644 --- a/monsters-info/extractByNode.js +++ b/monsters-info/extractByNode.js @@ -4,15 +4,18 @@ const Skill = require('./official-API/parseSkill'); var officialAPI = [ //来源于官方API { code:"ja", - customName:["cht","chs"] + customName:["cht","chs"], + ckey:{card:null,skill:null} }, { code:"en", - customName:[] + customName:[], + ckey:{card:null,skill:null} }, { code:"ko", - customName:[] + customName:[], + ckey:{card:null,skill:null} } ]; @@ -34,9 +37,12 @@ function sameCard(m1,m2) * 正式流程 */ officialAPI.forEach(function(lang){ + lang.ckey = {card:null,skill:null}; console.log("正在读取官方 " + lang.code + " 信息"); const cardJson = fs.readFileSync("official-API/" + lang.code +".json", 'utf-8'); //使用同步读取怪物 - const oCards = lang.cardOriginal = JSON.parse(cardJson).card;//将字符串转换为json对象 + const cardJsonObj = JSON.parse(cardJson); + lang.ckey.card = cardJsonObj.ckey; + const oCards = lang.cardOriginal = cardJsonObj.card;//将字符串转换为json对象 let maxCardIndex = 0; while (oCards[maxCardIndex][0] == maxCardIndex) @@ -64,7 +70,9 @@ officialAPI.forEach(function(lang){ }); const skillJson = fs.readFileSync("official-API/" + lang.code +"-skill.json", 'utf-8'); //使用同步读取技能 - const oSkills = lang.skillOriginal = JSON.parse(skillJson).skill;//将字符串转换为json对象 + const skillJsonObj = JSON.parse(skillJson); + lang.ckey.skill = skillJsonObj.ckey; + const oSkills = lang.skillOriginal = skillJsonObj.skill;//将字符串转换为json对象 lang.skills = oSkills.map((oc,idx)=>{return new Skill(idx,oc);}); //每一项生成分析对象 }); @@ -127,25 +135,35 @@ for (let li = 0;li < officialAPI.length; li++) if (_m && isSame) //如果有这个怪物,且与原语言怪物是同一只 { const otName = _m.name; - if (!/^\*+/.test(name) && //名字不是星号开头 - !/^\*+/.test(otName) && //另一个语言名字不是星号开头 - !/^\?+/.test(name) && //名字不是问号开头 - !/^\?+/.test(otName) && //另一个语言名字不是问号开头 - !/^초월\s*\?+/.test(name) && //名字不是韩文的问号开头 - !/^초월\s*\?+/.test(otName) //另一个语言名字不是韩文的问号开头 - ) //以上情况全符合才添加 + const searchRegString = "^(?:\\?+|\\*+|초월\\s*\\?+)"; //名字以问号、星号、韩文的问号开头 + if (!new RegExp(searchRegString,"i").test(name) && + !new RegExp(searchRegString,"i").test(otName) + ) { if (!m.otLangName) //如果没有其他语言名称属性,则添加一个对象属性 - m.otLangName = {}; + {m.otLangName = new Object();} m.otLangName[otLang.code] = otName; if (_m.otLangName) - m.otLangName = Object.assign(m.otLangName, _m.otLangName); //增加储存当前语言的全部其他语言 + {m.otLangName = Object.assign(m.otLangName, _m.otLangName);} //增加储存当前语言的全部其他语言 } } }); } } +var ckeyObj = officialAPI.map(lang=>{ + const obj = { + code: lang.code, + ckey: lang.ckey, + }; + return obj; +}) +fs.writeFile('./ckey.json',JSON.stringify(ckeyObj),function(err){ + if(err){ + console.error(err); + } + console.log('ckey.json 导出成功'); +}); //最后批量保存 officialAPI.forEach(function(lang){ let lcode = lang.code; diff --git a/monsters-info/official-API/test-mon.html b/monsters-info/official-API/test-mon.html index 61cc4dc2..61bec93c 100644 --- a/monsters-info/official-API/test-mon.html +++ b/monsters-info/official-API/test-mon.html @@ -92,7 +92,9 @@ GM_xmlhttpRequest({ method: "GET", url:"ja.json", onload: function(response) { - cards = JSON.parse(response.response).card.filter((c,idx)=>{return c[0]==idx;}); + const originalJSON = JSON.parse(response.response); + console.log(originalJSON) + cards = originalJSON.card.filter((c,idx)=>{return c[0]==idx;}); pcards = cards.map(c=>{ let card = new Card(c); //将可能的flag显示为二进制 diff --git a/script.js b/script.js index 80db5e4f..331220c3 100644 --- a/script.js +++ b/script.js @@ -451,21 +451,27 @@ window.onpopstate = reloadFormationData; //前进后退时修改页面 //创建新的分享地址 function creatNewUrl(arg){ if (arg == undefined) arg = {}; - if (!!(window.history && history.pushState)) { - // 支持History API - let language_i18n = arg.language || getQueryString("l") || getQueryString("lang"); //获取参数指定的语言 - let datasource = arg.datasource || getQueryString("s"); - let outObj = formation.outObj(); + if (!!(window.history && history.pushState)) + { // 支持History API + const language_i18n = arg.language || getQueryString("l") || getQueryString("lang"); //获取参数指定的语言 + const datasource = arg.datasource || getQueryString("s"); + const outObj = formation.outObj(); - let newUrl = (arg.url?arg.url:"") + - '?' + - (language_i18n?'l=' + language_i18n + '&':'') + - (datasource&&datasource!="ja"?'s=' + datasource + '&':'') + - 'd=' + encodeURIComponent(JSON.stringify(outObj)); + const newSearch = new URLSearchParams(); + if (language_i18n) newSearch.set("l",language_i18n); + if (datasource && datasource!="ja") newSearch.set("s",datasource); + if (outObj) newSearch.set("d", JSON.stringify(outObj)); - if (!arg.notPushState) history.pushState(null, null, newUrl); - if (arg.returnObj) return outObj; - else return newUrl; + const newUrl = (arg.url || "") + '?' + newSearch.toString(); + + if (!arg.notPushState) + { + history.pushState(null, null, newUrl); + } + else + { + return newUrl; + } } } //截图 @@ -1427,8 +1433,6 @@ function interchangeCard(formArr,toArr) formation.teams[toArr[0]][toArr[1]][toArr[2]] = from; if (!isCopy) formation.teams[formArr[0]][formArr[1]][formArr[2]] = to; - //const formationData = creatNewUrl({returnObj:true}); - //formation.loadObj(formationData); creatNewUrl(); //刷新URL refreshAll(formation); //刷新全部 } diff --git a/universal_function.js b/universal_function.js index ecdeec41..4cc67efe 100644 --- a/universal_function.js +++ b/universal_function.js @@ -57,15 +57,22 @@ function PrefixInteger(num, length) } //获取URL参数 function getQueryString(name,url) { - const reg = new RegExp(`(?:^|&)${name}=([^&]*)(?:&|$)`, "i"); - const searchStr = url || location.search.substr(1); - const r = searchStr.match(reg); - if (r != null) - { - return decodeURIComponent(r[1]); + if (!!(window.URL && window.URLSearchParams)) + { //浏览器原生支持的API + const urlObj = new URL(url || document.location); + return urlObj.searchParams.get(name); }else { - return null; + const reg = new RegExp(`(?:^|&)${name}=([^&]*)(?:&|$)`, "i"); + const searchStr = url || location.search.substr(1); + const r = searchStr.match(reg); + if (r != null) + { + return decodeURIComponent(r[1]); + }else + { + return null; + } } }