优化代码

This commit is contained in:
枫谷剑仙 2020-03-15 23:17:25 +08:00
parent 3be8389acf
commit 0780756b11
4 changed files with 105 additions and 124 deletions

View File

@ -1,4 +1,19 @@
//类型允许的潜觉杀,前面的数字是官方数据的类型编号,后面的杀是自己做的图片中的潜觉序号 const dataSourceList = [ //几个不同的游戏服务区
{
code:"ja",
source:"パズル&ドラゴンズ"
},
{
code:"en",
source:"Puzzle & Dragons"
},
{
code:"ko",
source:"퍼즐앤드래곤"
},
];
//类型允许的潜觉杀,前面的数字是官方数据的类型编号,后面的杀是自己做的图片中的潜觉序号
const type_allowable_latent = { const type_allowable_latent = {
"0":[], //0进化 "0":[], //0进化
"12":[], //12觉醒 "12":[], //12觉醒

View File

@ -4,7 +4,7 @@
guideURL:"http://www.puzzledragonx.com/en/monster.asp?n=$1" guideURL:"http://www.puzzledragonx.com/en/monster.asp?n=$1"
}, },
{ {
name:"中文(简体)原版技能",i18n:"zh",searchlist:["chs","ja"], name:"中文(繁體)",i18n:"zh-TW",searchlist:["cht","ja"],
guideURL:"http://pad.skyozora.com/pets/$1" guideURL:"http://pad.skyozora.com/pets/$1"
}, },
{ {
@ -12,7 +12,7 @@
guideURL:"http://pad.skyozora.com/pets/$1" guideURL:"http://pad.skyozora.com/pets/$1"
}, },
{ {
name:"中文(繁體)",i18n:"zh-TW",searchlist:["cht","ja"], name:"中文(简体)原版技能",i18n:"zh",searchlist:["chs","ja"],
guideURL:"http://pad.skyozora.com/pets/$1" guideURL:"http://pad.skyozora.com/pets/$1"
}, },
{ {

156
script.js
View File

@ -1,24 +1,9 @@
const dataSourceList = [ //几个不同的游戏服务区
{
code:"ja",
source:"パズル&ドラゴンズ"
},
{
code:"en",
source:"Puzzle & Dragons"
},
{
code:"ko",
source:"퍼즐앤드래곤"
},
];
var Cards; //怪物数据 var Cards; //怪物数据
var Skills; //技能数据 var Skills; //技能数据
var currentLanguage; //当前语言 var currentLanguage; //当前语言
var currentDataSource; //当前数据 var currentDataSource; //当前数据
var interchangeSvg; //储存划线的SVG var interchangeSvg; //储存划线的SVG
var changeSwapToCopy; //储存交换“复制”和“替换”
var controlBox; //储存整个controlBox var controlBox; //储存整个controlBox
var statusLine; //储存状态栏 var statusLine; //储存状态栏
var formationBox; //储存整个formationBox var formationBox; //储存整个formationBox
@ -27,6 +12,25 @@ var allMembers = []; //储存所有成员,包含辅助
var editBox; //储存整个editBox var editBox; //储存整个editBox
var showSearch; //整个程序都可以用的显示搜索函数 var showSearch; //整个程序都可以用的显示搜索函数
//数组去重
/* https://www.cnblogs.com/baiyangyuanzi/p/6726258.html
* 实现思路获取没重复的最右一值放入新数组
* 检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断*/
Array.prototype.uniq = function()
{
let temp = [];
const l = this.length;
for(let i = 0; i < l; i++) {
for(let j = i + 1; j < l; j++){
if (this[i] === this[j]){
i++;
j = i;
}
}
temp.push(this[i]);
}
return temp;
}
//队员基本的留空 //队员基本的留空
var Member = function(){ var Member = function(){
this.id=0; this.id=0;
@ -294,7 +298,6 @@ window.onload = function()
controlBox = document.body.querySelector(".control-box"); controlBox = document.body.querySelector(".control-box");
statusLine = controlBox.querySelector(".status"); //显示当前状态的 statusLine = controlBox.querySelector(".status"); //显示当前状态的
const helpLink = controlBox.querySelector(".help-link"); const helpLink = controlBox.querySelector(".help-link");
changeSwapToCopy = controlBox.querySelector("#change-swap-to-copy");
interchangeSVG = document.body.querySelector("#interchange-line"); interchangeSVG = document.body.querySelector("#interchange-line");
interchangeSVG.line = interchangeSVG.querySelector("g line"); interchangeSVG.line = interchangeSVG.querySelector("g line");
interchangeSVG.changePoint = function(p1,p2){ interchangeSVG.changePoint = function(p1,p2){
@ -312,62 +315,45 @@ window.onload = function()
toggleShowMonSkillCd(); toggleShowMonSkillCd();
formationBox = document.body.querySelector(".formation-box"); formationBox = document.body.querySelector(".formation-box");
editBox = document.body.querySelector(".edit-box"); editBox = document.body.querySelector(".edit-box");
if (location.hostname.includes("gitee")) { helpLink.hostname = "gitee.com"; }
if (location.hostname.indexOf("gitee")>=0)
{
helpLink.hostname = "gitee.com";
}
//▼添加语言列表开始 //▼添加语言列表开始
const langSelectDom = controlBox.querySelector(".languages"); const langSelectDom = controlBox.querySelector(".languages");
languageList.forEach(function(l){ languageList.forEach(lang=>
langSelectDom.options.add(new Option(l.name,l.i18n)); langSelectDom.options.add(new Option(lang.name,lang.i18n))
}); );
const parameter_i18n = getQueryString("l") || getQueryString("lang"); //获取参数指定的语言 const parameter_i18n = getQueryString("l") || getQueryString("lang"); //获取参数指定的语言
const browser_i18n = (navigator.language || navigator.userLanguage); //获取浏览器语言 const browser_i18n = (navigator.language || navigator.userLanguage); //获取浏览器语言
let havingLanguage = languageList.filter(function(l){ //筛选出符合的语言 currentLanguage = languageList.find(lang=>{ //筛选出符合的语言
if (parameter_i18n) //如果已指定就用指定的语言 if (parameter_i18n) //如果已指定就用指定的语言
return parameter_i18n.indexOf(l.i18n)>=0; return parameter_i18n.includes(lang.i18n);
else //否则筛选浏览器默认语言 else //否则筛选浏览器默认语言
return browser_i18n.indexOf(l.i18n)>=0; return browser_i18n.includes(lang.i18n);
}); }) ||
currentLanguage = havingLanguage.length ? languageList[0]; //没有找到指定语言的情况下,自动用第一个语言(英语)
havingLanguage.pop() : //有语言使用最后一个
languageList[0]; //没有找到指定语言的情况下,自动用第一个语言(英语)
document.head.querySelector("#language-css").href = "languages/"+currentLanguage.i18n+".css"; document.head.querySelector("#language-css").href = "languages/"+currentLanguage.i18n+".css";
const langOptionArray = Array.prototype.slice.call(langSelectDom.options); const langOptionArray = Array.from(langSelectDom.options);
langOptionArray.some(function(langOpt){ langOptionArray.find(langOpt=>langOpt.value == currentLanguage.i18n).selected = true;
if (langOpt.value == currentLanguage.i18n)
{
langOpt.selected = true;
return true;
}
});
//▲添加语言列表结束 //▲添加语言列表结束
//▼添加数据来源列表开始 //▼添加数据来源列表开始
const dataSelectDom = controlBox.querySelector(".datasource"); const dataSelectDom = controlBox.querySelector(".datasource");
dataSourceList.forEach(function(ds){ dataSourceList.forEach(ds=>
dataSelectDom.options.add(new Option(ds.source,ds.code)); dataSelectDom.options.add(new Option(ds.source,ds.code))
}); );
const parameter_dsCode = getQueryString("s"); //获取参数指定的数据来源 const parameter_dsCode = getQueryString("s"); //获取参数指定的数据来源
let havingDataSource = dataSourceList.filter(function(ds){ //筛选出符合的数据源 currentDataSource = parameter_dsCode?
return ds.code == parameter_dsCode; (dataSourceList.find(ds => ds.code == parameter_dsCode) || dataSourceList[0]) ://筛选出符合的数据源
}); dataSourceList[0]; //没有指定,直接使用日服
currentDataSource = havingDataSource.length ? havingDataSource[0]: dataSourceList[0];
document.body.classList.add("ds-"+currentDataSource.code); document.body.classList.add("ds-"+currentDataSource.code);
let dataSourceOptionArray = Array.prototype.slice.call(dataSelectDom.options); const dataSourceOptionArray = Array.from(dataSelectDom.options);
dataSourceOptionArray.some(function(dataOpt){ dataSourceOptionArray.find(dataOpt=>dataOpt.value == currentDataSource.code).selected = true;
if (dataOpt.value == currentDataSource.code)
{
dataOpt.selected = true;
return true;
}
});
const sourceDataFolder = "monsters-info"; const sourceDataFolder = "monsters-info";
var newCkeys; //当前的Ckey var newCkeys; //当前的Ckey
@ -380,7 +366,7 @@ window.onload = function()
dealCkeyData(response.response); dealCkeyData(response.response);
}, },
onerror: function(response) { onerror: function(response) {
let isChrome = navigator.userAgent.indexOf("Chrome") >=0; const isChrome = navigator.userAgent.includes("Chrome");
if (isChrome && location.host.length==0 && response.response.length>0) if (isChrome && location.host.length==0 && response.response.length>0)
{ {
console.info("因为是Chrome本地打开正在尝试读取JSON"); console.info("因为是Chrome本地打开正在尝试读取JSON");
@ -458,7 +444,7 @@ window.onload = function()
}); });
}, },
onerror: function(response) { onerror: function(response) {
let isChrome = navigator.userAgent.indexOf("Chrome") >=0; const isChrome = navigator.userAgent.includes("Chrome");
if (isChrome && location.host.length==0 && response.response.length>0) if (isChrome && location.host.length==0 && response.response.length>0)
{ {
console.info("因为是Chrome本地打开正在尝试读取JSON"); console.info("因为是Chrome本地打开正在尝试读取JSON");
@ -520,7 +506,7 @@ window.onload = function()
}); });
}, },
onerror: function(response) { onerror: function(response) {
let isChrome = navigator.userAgent.indexOf("Chrome") >=0; let isChrome = navigator.userAgent.includes("Chrome");
if (isChrome && location.host.length==0 && response.response.length>0) if (isChrome && location.host.length==0 && response.response.length>0)
{ {
console.info("因为是Chrome本地打开正在尝试读取JSON"); console.info("因为是Chrome本地打开正在尝试读取JSON");
@ -704,8 +690,8 @@ function initialize()
//将所有怪物头像添加到全局数组 //将所有怪物头像添加到全局数组
teamBigBoxs.forEach(teamBigBox=>{ teamBigBoxs.forEach(teamBigBox=>{
const teamBox = teamBigBox.querySelector(".team-box"); const teamBox = teamBigBox.querySelector(".team-box");
const menbers = Array.prototype.slice.call(teamBox.querySelectorAll(".team-members .monster")); const menbers = Array.from(teamBox.querySelectorAll(".team-members .monster"));
const assist = Array.prototype.slice.call(teamBox.querySelectorAll(".team-assist .monster")); const assist = Array.from(teamBox.querySelectorAll(".team-assist .monster"));
menbers.forEach(m=>{ menbers.forEach(m=>{
allMembers.push(m); allMembers.push(m);
}); });
@ -735,7 +721,7 @@ function initialize()
//徽章 //徽章
const teamBadge = tb.querySelector(".team-badge"); const teamBadge = tb.querySelector(".team-badge");
if (!teamBadge) return; if (!teamBadge) return;
const badges = Array.prototype.slice.call(teamBadge.querySelectorAll(".badge-bg")); const badges = Array.from(teamBadge.querySelectorAll(".badge-bg"));
badges.forEach((badge,bidx) => { badges.forEach((badge,bidx) => {
badge.onclick = function(){ badge.onclick = function(){
if (teamBadge.classList.contains(className_ChoseBadges)) if (teamBadge.classList.contains(className_ChoseBadges))
@ -796,7 +782,7 @@ function initialize()
{ {
showSearch(Cards.filter(card=>{ showSearch(Cards.filter(card=>{
return splitAltName.some(alt=>{ return splitAltName.some(alt=>{
return alt.length > 0 && (card.altName.indexOf(alt)>=0 || card.name.indexOf(alt)>=0); return alt.length > 0 && (card.altName.includes(alt) || card.name.includes(alt));
}); });
})); }));
} }
@ -828,11 +814,11 @@ function initialize()
searchBox.classList.toggle("display-none"); searchBox.classList.toggle("display-none");
}; };
const s_attr1s = Array.prototype.slice.call(searchBox.querySelectorAll(".attrs .attr-list-1 .attr-radio")); const s_attr1s = Array.from(searchBox.querySelectorAll(".attrs .attr-list-1 .attr-radio"));
const s_attr2s = Array.prototype.slice.call(searchBox.querySelectorAll(".attrs .attr-list-2 .attr-radio")); const s_attr2s = Array.from(searchBox.querySelectorAll(".attrs .attr-list-2 .attr-radio"));
const s_fixMainColor = searchBox.querySelector("#fix-main-color"); const s_fixMainColor = searchBox.querySelector("#fix-main-color");
const s_types = Array.prototype.slice.call(searchBox.querySelectorAll(".types-div .type-check")); const s_types = Array.from(searchBox.querySelectorAll(".types-div .type-check"));
const s_awokensItems = Array.prototype.slice.call(searchBox.querySelectorAll(".awoken-div .awoken-count")); const s_awokensItems = Array.from(searchBox.querySelectorAll(".awoken-div .awoken-count"));
const s_awokensIcons = s_awokensItems.map(it=>{ const s_awokensIcons = s_awokensItems.map(it=>{
return it.querySelector(".awoken-icon"); return it.querySelector(".awoken-icon");
}); });
@ -853,7 +839,7 @@ function initialize()
const s_sawokenDiv = searchBox.querySelector(".sawoken-div"); const s_sawokenDiv = searchBox.querySelector(".sawoken-div");
const s_sawokens = Array.prototype.slice.call(s_sawokenDiv.querySelectorAll(".sawoken-check")); const s_sawokens = Array.from(s_sawokenDiv.querySelectorAll(".sawoken-check"));
const s_includeSuperAwoken = searchBox.querySelector("#include-super-awoken"); //搜索超觉醒 const s_includeSuperAwoken = searchBox.querySelector("#include-super-awoken"); //搜索超觉醒
s_includeSuperAwoken.onclick = function(){ s_includeSuperAwoken.onclick = function(){
if (this.checked) if (this.checked)
@ -1042,7 +1028,7 @@ function initialize()
searchMonList.classList.add("display-none"); searchMonList.classList.add("display-none");
let fragment = document.createDocumentFragment(); //创建节点用的临时空间 let fragment = document.createDocumentFragment(); //创建节点用的临时空间
let headsArray = Array.prototype.slice.call(searchMonList.children); let headsArray = Array.from(searchMonList.children);
headsArray.sort((head_a,head_b)=>{ headsArray.sort((head_a,head_b)=>{
let sortNumber = sort_function_list[sortIndex].function(head_a.card,head_b.card); let sortNumber = sort_function_list[sortIndex].function(head_a.card,head_b.card);
if (reverse) sortNumber *= -1; if (reverse) sortNumber *= -1;
@ -1075,7 +1061,7 @@ function initialize()
}; };
monstersID.oninput = monstersID.onchange; monstersID.oninput = monstersID.onchange;
//觉醒 //觉醒
const monEditAwokens = Array.prototype.slice.call(settingBox.querySelectorAll(".row-mon-awoken .awoken-ul .awoken-icon")); const monEditAwokens = Array.from(settingBox.querySelectorAll(".row-mon-awoken .awoken-ul .awoken-icon"));
monEditAwokens.forEach((akDom,idx)=>{ monEditAwokens.forEach((akDom,idx)=>{
akDom.onclick = function(){ akDom.onclick = function(){
editBox.awokenCount = idx; editBox.awokenCount = idx;
@ -1104,7 +1090,7 @@ function initialize()
}; };
//超觉醒 //超觉醒
let monEditSAwokens = Array.prototype.slice.call(settingBox.querySelectorAll(".row-mon-super-awoken .awoken-ul .awoken-icon")); let monEditSAwokens = Array.from(settingBox.querySelectorAll(".row-mon-super-awoken .awoken-ul .awoken-icon"));
monEditSAwokens.forEach((akDom,idx,domArr)=>{ monEditSAwokens.forEach((akDom,idx,domArr)=>{
akDom.onclick = function(){ akDom.onclick = function(){
for(var ai=0;ai<domArr.length;ai++) for(var ai=0;ai<domArr.length;ai++)
@ -1195,9 +1181,9 @@ function initialize()
//潜觉 //潜觉
const monEditLatentUl = settingBox.querySelector(".m-latent-ul"); const monEditLatentUl = settingBox.querySelector(".m-latent-ul");
const monEditLatents = Array.prototype.slice.call(monEditLatentUl.querySelectorAll("li")); const monEditLatents = Array.from(monEditLatentUl.querySelectorAll("li"));
const monEditLatentAllowableUl = settingBox.querySelector(".m-latent-allowable-ul"); const monEditLatentAllowableUl = settingBox.querySelector(".m-latent-allowable-ul");
const monEditLatentsAllowable = Array.prototype.slice.call(monEditLatentAllowableUl.querySelectorAll("li")); const monEditLatentsAllowable = Array.from(monEditLatentAllowableUl.querySelectorAll("li"));
editBox.refreshLatent = function(latent,monid) //刷新潜觉 editBox.refreshLatent = function(latent,monid) //刷新潜觉
{ {
const maxLatentCount = getMaxLatentCount(monid); //最大潜觉数量 const maxLatentCount = getMaxLatentCount(monid); //最大潜觉数量
@ -1586,6 +1572,7 @@ function interchangeCard(formArr,toArr)
return newMember; return newMember;
} }
} }
const changeSwapToCopy = controlBox.querySelector("#change-swap-to-copy");//储存交换“复制”和“替换”
const isCopy = changeSwapToCopy.checked; const isCopy = changeSwapToCopy.checked;
let from = formation.teams[formArr[0]][formArr[1]][formArr[2]]; let from = formation.teams[formArr[0]][formArr[1]][formArr[2]];
let to = formation.teams[toArr[0]][toArr[1]][toArr[2]]; let to = formation.teams[toArr[0]][toArr[1]][toArr[2]];
@ -1645,7 +1632,7 @@ function changeid(mon,monDom,latentDom)
monDom.classList.add("allowable-assist"); monDom.classList.add("allowable-assist");
else else
monDom.classList.remove("allowable-assist"); monDom.classList.remove("allowable-assist");
if (card.awakenings.indexOf(49)>=0)//武器 if (card.awakenings.includes(49))//武器
monDom.classList.add("wepon"); monDom.classList.add("wepon");
else else
monDom.classList.remove("wepon"); monDom.classList.remove("wepon");
@ -1732,7 +1719,7 @@ function changeid(mon,monDom,latentDom)
} }
if (latentDom) if (latentDom)
{ {
let latentDoms = Array.prototype.slice.call(latentDom.querySelectorAll("li")); let latentDoms = Array.from(latentDom.querySelectorAll("li"));
if (mon.latent) //如果提供了潜觉 if (mon.latent) //如果提供了潜觉
{ {
let latent = mon.latent.sort(function(a,b){ let latent = mon.latent.sort(function(a,b){
@ -1908,10 +1895,7 @@ function editBoxChangeMonId(id)
const mAltName = monInfoBox.querySelector(".monster-altName"); const mAltName = monInfoBox.querySelector(".monster-altName");
mAltName.innerHTML = card.altName; mAltName.innerHTML = card.altName;
mAltName.setAttribute("data-altName",card.altName); mAltName.setAttribute("data-altName",card.altName);
/*const splitAltName = card.altName.split("|"); //取出分段的那种的第一段
const hasGroup = splitAltName.some(alt=>{ //自己的名称是否只有一个
return Cards.some(c=>{return c.id != card.id && c.altName.indexOf(alt)>=0;});
});*/
if (card.altName.length == 0) if (card.altName.length == 0)
{ //当没有合作名 { //当没有合作名
mAltName.classList.add("display-none"); mAltName.classList.add("display-none");
@ -2010,13 +1994,13 @@ function editBoxChangeMonId(id)
const rowLatent = settingBox.querySelector(".row-mon-latent"); const rowLatent = settingBox.querySelector(".row-mon-latent");
const monLatentAllowUl = rowLatent.querySelector(".m-latent-allowable-ul"); const monLatentAllowUl = rowLatent.querySelector(".m-latent-allowable-ul");
//该宠Type允许的杀,uniq是去重的自定义函数 //该宠Type允许的杀,uniq是去重的自定义函数
const allowLatent = uniq(card.types.reduce(function (previous, t, index, array) { const allowLatent = card.types.reduce(function (previous, t, index, array) {
return previous.concat(type_allowable_latent[t]); return previous.concat(type_allowable_latent[t]);
},[])); },[]).uniq();
for(let li=17;li<=24;li++) //显示允许的杀,隐藏不允许的杀 for(let li=17;li<=24;li++) //显示允许的杀,隐藏不允许的杀
{ {
const latentDom = monLatentAllowUl.querySelector(".latent-icon-" + li); const latentDom = monLatentAllowUl.querySelector(".latent-icon-" + li);
if (allowLatent.indexOf(li)>=0) if (allowLatent.includes(li))
{ {
if(latentDom.classList.contains("unselected-latent")) if(latentDom.classList.contains("unselected-latent"))
latentDom.classList.remove("unselected-latent"); latentDom.classList.remove("unselected-latent");
@ -2042,7 +2026,7 @@ function editBoxChangeMonId(id)
skillTitle.innerHTML = descriptionToHTML(skill.name); skillTitle.innerHTML = descriptionToHTML(skill.name);
skillTitle.setAttribute("data-skillid", skill.id); skillTitle.setAttribute("data-skillid", skill.id);
skillDetail.innerHTML = parseSkillDescription(skill); skillDetail.innerHTML = parseSkillDescription(skill);
const t_maxLevel = card.overlay || card.types.indexOf(15)>=0 ? 1 : skill.maxLevel; //遇到不能升技的最大等级强制为1 const t_maxLevel = card.overlay || card.types.includes(15) ? 1 : skill.maxLevel; //遇到不能升技的最大等级强制为1
skillLevel.max = t_maxLevel; skillLevel.max = t_maxLevel;
skillLevel.value = t_maxLevel; skillLevel.value = t_maxLevel;
skillLevel_Max.value = t_maxLevel; skillLevel_Max.value = t_maxLevel;
@ -2419,7 +2403,7 @@ function localisation($tra)
formationBox.querySelector(".detail-box .detail").placeholder = $tra.detail_blank; formationBox.querySelector(".detail-box .detail").placeholder = $tra.detail_blank;
const s_sortList = editBox.querySelector(".search-box .sort-div .sort-list"); const s_sortList = editBox.querySelector(".search-box .sort-div .sort-list");
const sortOptions = Array.prototype.slice.call(s_sortList.options); const sortOptions = Array.from(s_sortList.options);
sortOptions.forEach(opt=>{ sortOptions.forEach(opt=>{
const tag = opt.getAttribute("data-tag"); const tag = opt.getAttribute("data-tag");
const trans = $tra.sort_name[tag]; const trans = $tra.sort_name[tag];

View File

@ -85,24 +85,6 @@ function getQueryString(name,url) {
} }
} }
//数组去重
/* https://www.cnblogs.com/baiyangyuanzi/p/6726258.html
* 实现思路获取没重复的最右一值放入新数组
* 检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断*/
function uniq(array){
let temp = [];
const l = array.length;
for(let i = 0; i < l; i++) {
for(let j = i + 1; j < l; j++){
if (array[i] === array[j]){
i++;
j = i;
}
}
temp.push(array[i]);
}
return temp;
}
//计算用了多少潜觉格子 //计算用了多少潜觉格子
function usedHole(latent) function usedHole(latent)
{ {
@ -143,7 +125,7 @@ function awokenCountInTeam(team,awokenIndex,solo)
{ {
enableAwoken = enableAwoken.concat(card.superAwakenings[mon.sawoken]); enableAwoken = enableAwoken.concat(card.superAwakenings[mon.sawoken]);
} }
if (assistCard && assistCard.enabled && assistCard.awakenings.indexOf(49)>=0) if (assistCard && assistCard.enabled && assistCard.awakenings.includes(49))
{ //如果卡片未启用 { //如果卡片未启用
enableAwoken = enableAwoken.concat(assistCard.awakenings); enableAwoken = enableAwoken.concat(assistCard.awakenings);
} }
@ -163,7 +145,7 @@ function returnMonsterNameArr(card, lsList, defaultCode)
else if(card.otLangName) else if(card.otLangName)
{return card.otLangName[lc];} {return card.otLangName[lc];}
}).filter(function(ln){ //去掉空值和问号 }).filter(function(ln){ //去掉空值和问号
return (ln?(ln.length>0):false) && !/^(?:초월\s*)?\?+/.test(ln); return typeof(ln) == "string" && ln.length>0 && !new RegExp("^(?:초월\\s*)?[\\?\\*]+","i").test(ln);
}); });
if (monNameArr.length < 1) //如果本来的列表里没有名字 if (monNameArr.length < 1) //如果本来的列表里没有名字
@ -261,7 +243,7 @@ function calculateAbility(member = null, assist = null, solo = true)
if (assistCard && assistCard.id > 0 && assistCard.enabled) if (assistCard && assistCard.id > 0 && assistCard.enabled)
{ {
const assistAwokenList = assistCard.awakenings.slice(0, assist.awoken); //储存武器点亮的觉醒 const assistAwokenList = assistCard.awakenings.slice(0, assist.awoken); //储存武器点亮的觉醒
if (assistAwokenList.indexOf(49)>=0) //49是武器觉醒确认已经点亮了武器觉醒 if (assistAwokenList.includes(49)) //49是武器觉醒确认已经点亮了武器觉醒
{ {
awokenList = awokenList.concat(assistAwokenList); awokenList = awokenList.concat(assistAwokenList);
} }
@ -274,7 +256,7 @@ function calculateAbility(member = null, assist = null, solo = true)
//觉醒增加的数值 //觉醒增加的数值
const n_awoken = awokenList.length>0 ? const n_awoken = awokenList.length>0 ?
Math.round(awokenAdd[idx].reduce(function(previous,aw){ Math.round(awokenAdd[idx].reduce(function(previous,aw){
const awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个觉醒的数量 const awokenCount = awokenList.filter(ak=>ak==aw.index).length; //每个觉醒的数量
if (awokenCount>0) if (awokenCount>0)
return previous + aw.value * awokenCount; return previous + aw.value * awokenCount;
else else
@ -284,7 +266,7 @@ function calculateAbility(member = null, assist = null, solo = true)
//潜觉增加的倍率 //潜觉增加的倍率
const n_latent = (member.latent && member.latent.length>0) ? const n_latent = (member.latent && member.latent.length>0) ?
Math.round(latentScale[idx].reduce(function(previous,la){ Math.round(latentScale[idx].reduce(function(previous,la){
const latentCount = member.latent.filter(function(l){return l==la.index;}).length; //每个潜觉的数量 const latentCount = member.latent.filter(l=>l==la.index).length; //每个潜觉的数量
return previous + n_base * la.scale * latentCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数 return previous + n_base * la.scale * latentCount; //无加值与觉醒的基础值,乘以那么多个潜觉的增加倍数
},0)) : },0)) :
0; 0;
@ -293,7 +275,7 @@ function calculateAbility(member = null, assist = null, solo = true)
//协力觉醒的倍率 //协力觉醒的倍率
reValue = Math.round(awokenScale[idx].reduce(function(previous,aw){ reValue = Math.round(awokenScale[idx].reduce(function(previous,aw){
const awokenCount = awokenList.filter(function(a){return a==aw.index;}).length; //每个协力觉醒的数量 const awokenCount = awokenList.filter(ak=>ak==aw.index).length; //每个协力觉醒的数量
if (awokenCount>0) if (awokenCount>0)
{ {
return previous * Math.pow(aw.scale,awokenCount); return previous * Math.pow(aw.scale,awokenCount);
@ -331,17 +313,17 @@ function searchCards(cards,attr1,attr2,fixMainColor,types,awokens,sawokens,equal
{ {
if (attr1 != null) if (attr1 != null)
{ {
cardsRange = cardsRange.filter(c=>c.attrs.indexOf(attr1)>=0); cardsRange = cardsRange.filter(c=>c.attrs.includes(attr1));
} }
if (attr2 != null) if (attr2 != null)
{ {
cardsRange = cardsRange.filter(c=>c.attrs.indexOf(attr2)>=0); cardsRange = cardsRange.filter(c=>c.attrs.includes(attr2));
} }
} }
//类型 //类型
if (types.length>0) if (types.length>0)
{ {
cardsRange = cardsRange.filter(c=>types.some(t=>c.types.indexOf(t)>=0)); cardsRange = cardsRange.filter(c=>types.some(t=>c.types.includes(t)));
} }
//觉醒 //觉醒
//等效觉醒时,事先去除大觉醒 //等效觉醒时,事先去除大觉醒
@ -373,8 +355,8 @@ function searchCards(cards,attr1,attr2,fixMainColor,types,awokens,sawokens,equal
cardAwakeningsArray.push(card.awakenings); cardAwakeningsArray.push(card.awakenings);
} }
return cardAwakeningsArray.some(cardAwakening=>{ //重复每种包含超觉醒的觉醒数组,只要有一组符合要求就行 return cardAwakeningsArray.some(cardAwakening=> //重复每种包含超觉醒的觉醒数组,只要有一组符合要求就行
return awokens.every(ak=>{ //判断需要搜索的觉醒是不是全都在觉醒数组里 awokens.every(ak=>{ //判断需要搜索的觉醒是不是全都在觉醒数组里
if (equalAk) //如果开启等效觉醒 if (equalAk) //如果开启等效觉醒
{ {
//搜索等效觉醒 //搜索等效觉醒
@ -387,19 +369,19 @@ function searchCards(cards,attr1,attr2,fixMainColor,types,awokens,sawokens,equal
} }
} }
return cardAwakening.filter(cak=>cak == ak.id).length >= ak.num; return cardAwakening.filter(cak=>cak == ak.id).length >= ak.num;
}); })
}); );
}); });
} }
//超觉醒 //超觉醒
if (sawokens.length>0 && !incSawoken) if (sawokens.length>0 && !incSawoken)
{ {
cardsRange = cardsRange.filter(card=>{return sawokens.some(sak=>{ cardsRange = cardsRange.filter(card=> sawokens.some(sak=>{
const equivalentAwoken = equivalent_awoken.find(eak => eak.small === sak); const equivalentAwoken = equivalent_awoken.find(eak => eak.small === sak);
return card.superAwakenings.indexOf(sak)>=0 || return card.superAwakenings.includes(sak) ||
equalAk && equivalentAwoken && card.superAwakenings.indexOf(equivalentAwoken.big)>=0; //如果开启等效觉醒 equalAk && equivalentAwoken && card.superAwakenings.includes(equivalentAwoken.big); //如果开启等效觉醒
});}); }) );
} }
return cardsRange; return cardsRange;
} }