From fa062cbca8b6c9d29af8bb163d2d73ddf557af88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Mon, 28 Sep 2020 16:28:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E8=AE=A2=E9=98=9F=E9=95=BF+c=E7=9A=84?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=20=E9=98=9F=E9=95=BF=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0=E6=9C=80=E5=89=8D=E9=9D=A2=20?= =?UTF-8?q?=E4=BF=AE=E8=AE=A2=E4=B8=AD=E6=96=87=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/zh-CN.js | 1619 ++++++++++++++++++++++---------------------- 1 file changed, 816 insertions(+), 803 deletions(-) diff --git a/languages/zh-CN.js b/languages/zh-CN.js index df3281a4..45a03d1c 100644 --- a/languages/zh-CN.js +++ b/languages/zh-CN.js @@ -960,7 +960,7 @@ function parseSkillDescription(skill) if (!atSameTime) str+=`${sk[1]}种属性以上`; else if(sk[0] == 31) str += `5色`; str += `同时攻击时`; - if (sk[2]) str += `,所有宠物的${getFixedHpAtkRcvString({atk:sk[2]})}`; + if (sk[2] && sk[2] !== 100) str += `,所有宠物的${getFixedHpAtkRcvString({atk:sk[2]})}`; if (sk[3]) str += `,受到的伤害减少${sk[3]}%`; break; case 171: @@ -1044,8 +1044,8 @@ function parseSkillDescription(skill) str = `${sk[0]}回合内,${sk[1]}%概率掉落强化宝珠`; break; case 182: - str = `相连消除${sk[1]}个或以上${getOrbsAttrString(sk[0])}宝珠时`; - if (sk[2]) str += `,所有宠物的${getFixedHpAtkRcvString({atk:sk[2]})}`; + str = `相连消除${sk[1]}个或以上的${getOrbsAttrString(sk[0])}宝珠时`; + if (sk[2] && sk[2] !== 100) str += `,所有宠物的${getFixedHpAtkRcvString({atk:sk[2]})}`; if (sk[3]) str += `,受到的伤害减少${sk[3]}%`; break; case 183: @@ -1128,7 +1128,7 @@ function parseSkillDescription(skill) case 198: //以回復寶珠回復40000HP或以上時,受到的傷害減少50% str = `以回复宝珠回复${sk[0]}或以上时`; - if (sk[1]) str += `所有宠物的${getFixedHpAtkRcvString({atk:sk[1]})}`; + if (sk[1] && sk[1] != 100) str += `所有宠物的${getFixedHpAtkRcvString({atk:sk[1]})}`; if (sk[2]) str += `,受到的伤害减少${sk[2]}%`; if (sk[3]) str += `,觉醒无效状态减少${sk[3]}回合`; break; @@ -1253,104 +1253,103 @@ function parseBigNumber(number) 'use strict'; const specialSearchFunctions = [ {name:"暂时仅中文有的特殊搜索",function:cards=>cards}, - {name:"======主动技======",function:cards=>cards}, - {name:"1 CD",function:cards=>cards.filter(card=>{ - if (card.activeSkillId == 0) return false; - const skill = Skills[card.activeSkillId]; - return skill.initialCooldown - (skill.maxLevel - 1) <= 1; - })}, - {name:"除 1 CD 外,4 个以下能永动开",function:cards=>cards.filter(card=>{ - if (card.activeSkillId == 0) return false; - const skill = Skills[card.activeSkillId]; - const minCD = skill.initialCooldown - (skill.maxLevel - 1); //主动技最小的CD - let realCD = minCD; - - const searchType = 146; - if (skill.type == searchType) - realCD -= skill.params[0] * 3; - else if (skill.type == 116){ + {name:"======队长技======",function:cards=>cards}, + {name:"队长技固伤追击",function:cards=>cards.filter(card=>{ + const searchTypeArray = [199,200,201]; + const skill = Skills[card.leaderSkillId]; + if (searchTypeArray.includes(skill.type)) + return true; + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - const subskill = subskills.find(subs=>subs.type == searchType); - if (subskill) realCD -= subskill.params[0] * 3; + return subskills.some(subskill=>searchTypeArray.includes(subskill.type)); } - return minCD > 1 && realCD <= 4; })}, - {name:"时间暂停(按停止时间排序)",function:cards=>cards.filter(card=>{ - const searchType = 5; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType) + {name:"队长技+C(按+C数排序)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [192,194,206,209]; + const skill = Skills[card.leaderSkillId]; + if (searchTypeArray.some(t=>skill.type == t && skill.params[3]>0)) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); + return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t && subskill.params[3]>0)); } }).sort((a,b)=>{ - const searchType = 5; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + const searchTypeArray = [192,194,206,209]; + function getSkillAddCombo(skill) + { + switch (skill.type) + { + case 192: case 194: + return skill.params[3]; + case 206: + return skill.params[6]; + case 209: + return skill.params[0]; + } + } + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + a_pC = searchTypeArray.includes(a_s.type) ? + getSkillAddCombo(a_s) : + getSkillAddCombo(a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type))); + b_pC = searchTypeArray.includes(b_s.type) ? + getSkillAddCombo(b_s) : + getSkillAddCombo(b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type))); return a_pC - b_pC; })}, - {name:"-----破吸类-----",function:cards=>cards}, - {name:"破属吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 173; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[1]) + {name:"7×6 版面",function:cards=>cards.filter(card=>{ + const searchTypeArray = [162,186]; + const skill = Skills[card.leaderSkillId]; + if (searchTypeArray.some(t=>skill.type == t)) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[1]); + return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); } - }).sort((a,b)=>{ - const searchType = 173; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; })}, - {name:"破伤吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 173; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[3]) + {name:"无天降版面",function:cards=>cards.filter(card=>{ + const searchTypeArray = [163,177]; + const skill = Skills[card.leaderSkillId]; + if (searchTypeArray.some(t=>skill.type == t)) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[3]); + return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); + } + })}, + {name:"队长技加/减秒(按秒数排序)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [15,185]; + const skill = Skills[card.leaderSkillId]; + if (searchTypeArray.some(t=>skill.type == t)) + return true; + else if (skill.type == 138){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); } }).sort((a,b)=>{ - const searchType = 173; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + const searchTypeArray = [15,185]; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? + a_pC = (searchTypeArray.some(t=>a_s.type == t)) ? a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? + a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.some(t=>subskill.type == t)).params[0]; + b_pC = (searchTypeArray.some(t=>b_s.type == t)) ? b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.some(t=>subskill.type == t)).params[0]; return a_pC - b_pC; })}, - {name:"双破吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 173; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[1] && skill.params[3]) + {name:"固定操作时间(按时间排序)",function:cards=>cards.filter(card=>{ + const searchType = 178; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[1] && subskill.params[3]); + return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 173; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + const searchType = 178; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? a_s.params[0] : @@ -1360,18 +1359,18 @@ function parseBigNumber(number) b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; return a_pC - b_pC; })}, - {name:"贯穿无效盾 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 191; - const skill = Skills[card.activeSkillId]; + {name:"消除宝珠时计算防御的追打(按追打比率排序)",function:cards=>cards.filter(card=>{ + const searchType = 12; + const skill = Skills[card.leaderSkillId]; if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 191; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + const searchType = 12; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? a_s.params[0] : @@ -1381,85 +1380,18 @@ function parseBigNumber(number) b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; return a_pC - b_pC; })}, - {name:"-----解封类-----",function:cards=>cards}, - {name:"解封(按解封回合排序)",function:cards=>{ - const JieFeng_ParamsIndex = type=>type == 179 ? 3 : 0; - return cards.filter(card=>{ - const searchTypeArray = [117,179]; - const skill = Skills[card.activeSkillId]; - if (searchTypeArray.includes(skill.type) && skill.params[JieFeng_ParamsIndex(skill.type)]) - return true; - else if (skill.type == 116 || skill.type == 118){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && subskill.params[JieFeng_ParamsIndex(subskill.type)]); - } - }).sort((a,b)=>{ - const searchTypeArray = [117,179]; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (searchTypeArray.includes(a_s.type)) ? - a_s : - a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); - b_pC = (searchTypeArray.includes(b_s.type)) ? - b_s : - b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); - return a_pC.params[JieFeng_ParamsIndex(a_pC.type)] - b_pC.params[JieFeng_ParamsIndex(b_pC.type)]; - }); - }}, - {name:"解觉醒(按解觉回合排序)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [117,179]; - const skill = Skills[card.activeSkillId]; - if (searchTypeArray.includes(skill.type) && skill.params[4]) - return true; - else if (skill.type == 116 || skill.type == 118){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && subskill.params[4]); - } - }).sort((a,b)=>{ - const searchTypeArray = [117,179]; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (searchTypeArray.includes(a_s.type)) ? - a_s.params[4] : - a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; - b_pC = (searchTypeArray.includes(b_s.type)) ? - b_s.params[4] : - b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; - return a_pC - b_pC; - })}, - {name:"解封+觉醒(按解觉醒回合排序)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [117,179]; - const skill = Skills[card.activeSkillId]; - if (searchTypeArray.includes(skill.type) && skill.params[4] && skill.params[skill.type == 179 ? 3 : 0]) - return true; - else if (skill.type == 116 || skill.type == 118){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && subskill.params[4] && subskill.params[skill.type == 179 ? 3 : 0]); - } - }).sort((a,b)=>{ - const searchTypeArray = [117,179]; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (searchTypeArray.includes(a_s.type)) ? - a_s.params[4] : - a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; - b_pC = (searchTypeArray.includes(b_s.type)) ? - b_s.params[4] : - b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; - return a_pC - b_pC; - })}, - {name:"解禁消珠(按消除回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 196; - const skill = Skills[card.activeSkillId]; + {name:"消除宝珠时回血(按回复比率排序)",function:cards=>cards.filter(card=>{ + const searchType = 13; + const skill = Skills[card.leaderSkillId]; if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 196; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + const searchType = 13; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? a_s.params[0] : @@ -1469,245 +1401,311 @@ function parseBigNumber(number) b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; return a_pC - b_pC; })}, - {name:"-----锁珠类-----",function:cards=>cards}, - {name:"解锁",function:cards=>cards.filter(card=>{ - const searchType = 172; - const skill = Skills[card.activeSkillId]; + {name:"队长技受伤反击",function:cards=>cards.filter(card=>{ + const searchType = 41; + const skill = Skills[card.leaderSkillId]; if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"上锁(不限色)",function:cards=>cards.filter(card=>{ - const searchType = 152; - const skill = Skills[card.activeSkillId]; + {name:"毒无效",function:cards=>cards.filter(card=>{ + const searchType = 197; + const skill = Skills[card.leaderSkillId]; if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"上锁5色+心或全部",function:cards=>cards.filter(card=>{ - const searchType = 152; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 63) === 63) + {name:"回血加盾",function:cards=>cards.filter(card=>{ + const searchType = 198; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType && skill.params[2]) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 63) === 63); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[2]); } })}, - {name:"掉锁(不限色,按回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 205; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 116 || skill.type == 118){ + {name:"回血解觉",function:cards=>cards.filter(card=>{ + const searchType = 198; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType && skill.params[3]) + return true; + else if (skill.type == 138){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[3]); + } + })}, + {name:"十字心",function:cards=>cards.filter(card=>{ + const searchTypeArray = [151,209]; + const skill = Skills[card.leaderSkillId]; + if (searchTypeArray.some(t=>skill.type == t)) + return true; + else if (skill.type == 138){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); + } + })}, + {name:"N个十字",function:cards=>cards.filter(card=>{ + const searchTypeArray = [157]; + const skill = Skills[card.leaderSkillId]; + if (searchTypeArray.some(t=>skill.type == t)) + return true; + else if (skill.type == 138){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); + } + })}, + {name:"剩珠倍率",function:cards=>cards.filter(card=>{ + const searchType = 177; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) + return true; + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } - }).sort((a,b)=>{ - const searchType = 205; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; - return a_pC - b_pC; })}, - {name:"掉锁5色+心或全部(按回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 205; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 63) === 63) + {name:"要求长串消除(按珠数排序)",function:cards=>cards.filter(card=>{ + const searchType = 158; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 63) === 63); + return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 205; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + const searchType = 158; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; b_pC = (b_s.type == searchType) ? b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; return a_pC - b_pC; })}, - {name:"-----随机产珠类-----",function:cards=>cards}, - {name:"普通洗版-含心",function:cards=>cards.filter(card=>{ - function includeHeart(sk) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.includes(5); - } - const searchType = 71; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && includeHeart(skill.params)) + {name:"根性",function:cards=>cards.filter(card=>{ + const searchType = 14; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && includeHeart(subskill.params)); + return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"普通洗版-不含心",function:cards=>cards.filter(card=>{ - function excludeHeart(sk) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return !color.includes(5); - } - const searchType = 71; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && excludeHeart(skill.params)) + {name:"指定队伍队员编号",function:cards=>cards.filter(card=>{ + const searchType = 125; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && excludeHeart(subskill.params)); + return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"普通洗版-含毒废",function:cards=>cards.filter(card=>{ - function includeHeart(sk) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.includes(6) || color.includes(7) || color.includes(8) || color.includes(9); - } - const searchType = 71; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && includeHeart(skill.params)) + {name:"指定队伍队员合作编号",function:cards=>cards.filter(card=>{ + const searchType = 175; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && includeHeart(subskill.params)); + return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"普通洗版1色(花火)",function:cards=>cards.filter(card=>{ - function isOnlyColor(sk, colorTypeCount) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.length == colorTypeCount; - } - const searchType = 71; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && isOnlyColor(skill.params, 1)) + {name:"指定队伍队员进化类型",function:cards=>cards.filter(card=>{ + const searchType = 203; + const skill = Skills[card.leaderSkillId]; + if (!skill) console.log(card,card.leaderSkillId); + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 1)); + return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"普通洗版2色",function:cards=>cards.filter(card=>{ - function isOnlyColor(sk, colorTypeCount) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.length == colorTypeCount; - } - const searchType = 71; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && isOnlyColor(skill.params, 2)) + {name:"增加道具掉落率(按增加倍率排序)",function:cards=>cards.filter(card=>{ + const searchType = 53; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 2)); + return subskills.some(subskill=>subskill.type == searchType); } + }).sort((a,b)=>{ + const searchType = 53; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"普通洗版3色",function:cards=>cards.filter(card=>{ - function isOnlyColor(sk, colorTypeCount) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.length == colorTypeCount; - } - const searchType = 71; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && isOnlyColor(skill.params, 3)) + {name:"增加金币掉落倍数(按增加倍率排序)",function:cards=>cards.filter(card=>{ + const searchType = 54; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 3)); + return subskills.some(subskill=>subskill.type == searchType); } + }).sort((a,b)=>{ + const searchType = 54; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"普通洗版4色",function:cards=>cards.filter(card=>{ - function isOnlyColor(sk, colorTypeCount) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.length == colorTypeCount; - } - const searchType = 71; - const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && isOnlyColor(skill.params, 4)) + {name:"增加经验获取倍数(按增加倍率排序)",function:cards=>cards.filter(card=>{ + const searchType = 148; + const skill = Skills[card.leaderSkillId]; + if (skill.type == searchType) return true; - else if (skill.type == 116 || skill.type == 118){ + else if (skill.type == 138){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 4)); + return subskills.some(subskill=>subskill.type == searchType); } + }).sort((a,b)=>{ + const searchType = 148; + const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"普通洗版5色",function:cards=>cards.filter(card=>{ - function isOnlyColor(sk, colorTypeCount) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.length == colorTypeCount; + + {name:"======主动技======",function:cards=>cards}, + {name:"1 CD",function:cards=>cards.filter(card=>{ + if (card.activeSkillId == 0) return false; + const skill = Skills[card.activeSkillId]; + return skill.initialCooldown - (skill.maxLevel - 1) <= 1; + })}, + {name:"除 1 CD 外,4 个以下能永动开",function:cards=>cards.filter(card=>{ + if (card.activeSkillId == 0) return false; + const skill = Skills[card.activeSkillId]; + const minCD = skill.initialCooldown - (skill.maxLevel - 1); //主动技最小的CD + let realCD = minCD; + + const searchType = 146; + if (skill.type == searchType) + realCD -= skill.params[0] * 3; + else if (skill.type == 116){ + const subskills = skill.params.map(id=>Skills[id]); + const subskill = subskills.find(subs=>subs.type == searchType); + if (subskill) realCD -= subskill.params[0] * 3; } - const searchType = 71; + return minCD > 1 && realCD <= 4; + })}, + {name:"时间暂停(按停止时间排序)",function:cards=>cards.filter(card=>{ + const searchType = 5; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && isOnlyColor(skill.params, 5)) + if (skill.type == searchType) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 5)); + return subskills.some(subskill=>subskill.type == searchType); } - })}, - {name:"普通洗版6色以上",function:cards=>cards.filter(card=>{ - function isOnlyColor(sk, colorTypeCount) - { - const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); - return color.length >= colorTypeCount; - } - const searchType = 71; + }).sort((a,b)=>{ + const searchType = 5; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; + })}, + {name:"-----破吸类-----",function:cards=>cards}, + {name:"破属吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 173; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && isOnlyColor(skill.params, 6)) + if (skill.type == searchType && skill.params[1]) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 6)); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[1]); } + }).sort((a,b)=>{ + const searchType = 173; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"固定30个产珠",function:cards=>cards.filter(card=>{ - function is30(sk) - { - return Boolean(flags(sk[1]).length * sk[0] == 30); - } - const searchType = 141; + {name:"破伤吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 173; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && is30(skill.params)) + if (skill.type == searchType && skill.params[3]) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && is30(subskill.params)); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[3]); } + }).sort((a,b)=>{ + const searchType = 173; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"固定15×2产珠",function:cards=>cards.filter(card=>{ - function is1515(sk) - { - return Boolean(flags(sk[1]).length == 2 && sk[0] == 15); - } - const searchType = 141; + {name:"双破吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 173; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && is1515(skill.params)) + if (skill.type == searchType && skill.params[1] && skill.params[3]) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && is1515(subskill.params)); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[1] && subskill.params[3]); } + }).sort((a,b)=>{ + const searchType = 173; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"刷版",function:cards=>cards.filter(card=>{ - const searchType = 10; + {name:"贯穿无效盾 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 191; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -1715,44 +1713,87 @@ function parseBigNumber(number) const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } + }).sort((a,b)=>{ + const searchType = 191; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"~~~转珠类有些复杂我没空做~~~",function:cards=>cards}, - {name:"-----固定产珠类-----",function:cards=>cards}, - {name:"生成特殊形状的",function:cards=>cards.filter(card=>{ - const searchType = 176; + {name:"-----解封类-----",function:cards=>cards}, + {name:"解封(按解封回合排序)",function:cards=>{ + const JieFeng_ParamsIndex = type=>type == 179 ? 3 : 0; + return cards.filter(card=>{ + const searchTypeArray = [117,179]; + const skill = Skills[card.activeSkillId]; + if (searchTypeArray.includes(skill.type) && skill.params[JieFeng_ParamsIndex(skill.type)]) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && subskill.params[JieFeng_ParamsIndex(subskill.type)]); + } + }).sort((a,b)=>{ + const searchTypeArray = [117,179]; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (searchTypeArray.includes(a_s.type)) ? + a_s : + a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); + b_pC = (searchTypeArray.includes(b_s.type)) ? + b_s : + b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); + return a_pC.params[JieFeng_ParamsIndex(a_pC.type)] - b_pC.params[JieFeng_ParamsIndex(b_pC.type)]; + }); + }}, + {name:"解觉醒(按解觉回合排序)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [117,179]; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType) + if (searchTypeArray.includes(skill.type) && skill.params[4]) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); + return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && subskill.params[4]); } + }).sort((a,b)=>{ + const searchTypeArray = [117,179]; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (searchTypeArray.includes(a_s.type)) ? + a_s.params[4] : + a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; + b_pC = (searchTypeArray.includes(b_s.type)) ? + b_s.params[4] : + b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; + return a_pC - b_pC; })}, - {name:"生成3x3方块",function:cards=>cards.filter(card=>{ - function is3x3(sk) - { - for (let si=0;si<3;si++) - { - if (sk[si] === sk[si+1] && sk[si] === sk[si+2] && //3行连续相等 - (si>0?(sk[si-1] & sk[si]) ===0:true) && //如果上一行存在,并且无交集(and为0) - (si+2<4?(sk[si+3] & sk[si]) ===0:true) && //如果下一行存在,并且无交集(and为0) - (sk[si] === 7 || sk[si] === 7<<1 || sk[si] === 7<<2 || sk[si] === 7<<3) //如果这一行满足任意2珠并联(二进制111=十进制7) - ) - return true; - } - return false; - } - const searchType = 176; + {name:"解封+觉醒(按解觉醒回合排序)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [117,179]; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && is3x3(skill.params)) + if (searchTypeArray.includes(skill.type) && skill.params[4] && skill.params[skill.type == 179 ? 3 : 0]) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && is3x3(subskill.params)); + return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && subskill.params[4] && subskill.params[skill.type == 179 ? 3 : 0]); } + }).sort((a,b)=>{ + const searchTypeArray = [117,179]; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (searchTypeArray.includes(a_s.type)) ? + a_s.params[4] : + a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; + b_pC = (searchTypeArray.includes(b_s.type)) ? + b_s.params[4] : + b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[4]; + return a_pC - b_pC; })}, - {name:"产竖",function:cards=>cards.filter(card=>{ - const searchType = 127; + {name:"解禁消珠(按消除回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 196; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -1760,29 +1801,31 @@ function parseBigNumber(number) const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } + }).sort((a,b)=>{ + const searchType = 196; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + return a_pC - b_pC; })}, - {name:"产竖(含心)",function:cards=>cards.filter(card=>{ - function isHeart(sk) - { - for (let i=1;icards}, + {name:"解锁",function:cards=>cards.filter(card=>{ + const searchType = 172; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && isHeart(skill.params)) + if (skill.type == searchType) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && isHeart(subskill.params)); + return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"产横",function:cards=>cards.filter(card=>{ - const searchType = 128; + {name:"上锁(不限色)",function:cards=>cards.filter(card=>{ + const searchType = 152; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -1791,209 +1834,269 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"2横或以上",function:cards=>cards.filter(card=>{ - const searchType = 128; + {name:"上锁5色+心或全部",function:cards=>cards.filter(card=>{ + const searchType = 152; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params.length>=3 || flags(skill.params[0]).length>=2)) + if (skill.type == searchType && (skill.params[0] & 63) === 63) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params.length>=3 || flags(subskill.params[0]).length>=2)); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 63) === 63); } })}, - {name:"2色横",function:cards=>cards.filter(card=>{ - const searchType = 128; + {name:"掉锁(不限色,按回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 205; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[3]>=0 && (skill.params[1] & skill.params[3]) != skill.params[1]) + if (skill.type == searchType) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[3]>=0 && (subskill.params[1] & subskill.params[3]) != subskill.params[1]); + return subskills.some(subskill=>subskill.type == searchType); } + }).sort((a,b)=>{ + const searchType = 205; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + return a_pC - b_pC; })}, - {name:"非顶底横",function:cards=>cards.filter(card=>{ - const searchType = 128; + {name:"掉锁5色+心或全部(按回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 205; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && ((skill.params[0] | skill.params[2]) & 14)) + if (skill.type == searchType && (skill.params[0] & 63) === 63) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && ((subskill.params[0] | subskill.params[2]) & 14)); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 63) === 63); } - })}, - {name:"泛产横(包含花火与四周一圈等)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [128,71,176]; - function isRow(skill) - { - const sk = skill.params; - if (skill.type === 128) //普通横 - {return true;} - else if (skill.type === 71) //花火 - {return sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined).length === 1} - else if (skill.type === 176) //特殊形状 - { - for (let si=0;si<5;si++) - { - if ((sk[si] & 63) === 63) - return true; - } - } - return false; + }).sort((a,b)=>{ + const searchType = 205; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[0] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + b_pC = (b_s.type == searchType) ? + b_s.params[0] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + return a_pC - b_pC; + })}, + {name:"-----随机产珠类-----",function:cards=>cards}, + {name:"普通洗版-含心",function:cards=>cards.filter(card=>{ + function includeHeart(sk) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.includes(5); } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (searchTypeArray.includes(skill.type) && isRow(skill)) + if (skill.type == searchType && includeHeart(skill.params)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && isRow(subskill)); + return subskills.some(subskill=>subskill.type == searchType && includeHeart(subskill.params)); } })}, - {name:"----- buff 类-----",function:cards=>cards}, - {name:"掉落率提升-属性-火",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版-不含心",function:cards=>cards.filter(card=>{ + function excludeHeart(sk) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return !color.includes(5); + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 1)) + if (skill.type == searchType && excludeHeart(skill.params)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 1)); + return subskills.some(subskill=>subskill.type == searchType && excludeHeart(subskill.params)); } })}, - {name:"掉落率提升-属性-水",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版-含毒废",function:cards=>cards.filter(card=>{ + function includeHeart(sk) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.includes(6) || color.includes(7) || color.includes(8) || color.includes(9); + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 2)) + if (skill.type == searchType && includeHeart(skill.params)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 2)); + return subskills.some(subskill=>subskill.type == searchType && includeHeart(subskill.params)); } })}, - {name:"掉落率提升-属性-木",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版1色(花火)",function:cards=>cards.filter(card=>{ + function isOnlyColor(sk, colorTypeCount) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.length == colorTypeCount; + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 4)) + if (skill.type == searchType && isOnlyColor(skill.params, 1)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 4)); + return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 1)); } })}, - {name:"掉落率提升-属性-光",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版2色",function:cards=>cards.filter(card=>{ + function isOnlyColor(sk, colorTypeCount) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.length == colorTypeCount; + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 8)) + if (skill.type == searchType && isOnlyColor(skill.params, 2)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 8)); + return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 2)); } })}, - {name:"掉落率提升-属性-暗",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版3色",function:cards=>cards.filter(card=>{ + function isOnlyColor(sk, colorTypeCount) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.length == colorTypeCount; + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 16)) + if (skill.type == searchType && isOnlyColor(skill.params, 3)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 16)); + return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 3)); } })}, - {name:"掉落率提升-属性-心",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版4色",function:cards=>cards.filter(card=>{ + function isOnlyColor(sk, colorTypeCount) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.length == colorTypeCount; + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 32)) + if (skill.type == searchType && isOnlyColor(skill.params, 4)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 32)); + return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 4)); } })}, - {name:"掉落率提升-属性-毒、废(顶毒)",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版5色",function:cards=>cards.filter(card=>{ + function isOnlyColor(sk, colorTypeCount) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.length == colorTypeCount; + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && (skill.params[0] & 960)) // 960 = 二进制 1111000000 + if (skill.type == searchType && isOnlyColor(skill.params, 5)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 960)); + return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 5)); } })}, - {name:"掉落率提升-持续99回合",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"普通洗版6色以上",function:cards=>cards.filter(card=>{ + function isOnlyColor(sk, colorTypeCount) + { + const color = sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined); + return color.length >= colorTypeCount; + } + const searchType = 71; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[1] >= 99) + if (skill.type == searchType && isOnlyColor(skill.params, 6)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[1] >= 99); + return subskills.some(subskill=>subskill.type == searchType && isOnlyColor(subskill.params, 6)); } })}, - {name:"掉落率提升-100%几率",function:cards=>cards.filter(card=>{ - const searchType = 126; + {name:"固定30个产珠",function:cards=>cards.filter(card=>{ + function is30(sk) + { + return Boolean(flags(sk[1]).length * sk[0] == 30); + } + const searchType = 141; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[3] >= 100) + if (skill.type == searchType && is30(skill.params)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[3] >= 100); + return subskills.some(subskill=>subskill.type == searchType && is30(subskill.params)); } })}, - {name:"以觉醒数量为倍率类技能(宝石姬)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [156,168]; + {name:"固定15×2产珠",function:cards=>cards.filter(card=>{ + function is1515(sk) + { + return Boolean(flags(sk[1]).length == 2 && sk[0] == 15); + } + const searchType = 141; const skill = Skills[card.activeSkillId]; - if (searchTypeArray.includes(skill.type)) + if (skill.type == searchType && is1515(skill.params)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.includes(subskill.type)); + return subskills.some(subskill=>subskill.type == searchType && is1515(subskill.params)); } })}, - {name:"回复力 buff(顶降回复)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [50,90]; + {name:"刷版",function:cards=>cards.filter(card=>{ + const searchType = 10; const skill = Skills[card.activeSkillId]; - if (searchTypeArray.includes(skill.type) && skill.params.slice(1,skill.params.length>2?-1:undefined).includes(5)) + if (skill.type == searchType) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=> - searchTypeArray.includes(subskill.type) && subskill.params.slice(1,subskill.params.length>2?-1:undefined).includes(5) - ); + return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"攻击力 buff(顶降攻击)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [ - 88,92, //类型的 - 50,90, //属性的,要排除回复力 - 156,168, //宝石姬 - ]; + {name:"~~~转珠类有些复杂我没空做~~~",function:cards=>cards}, + {name:"-----固定产珠类-----",function:cards=>cards}, + {name:"生成特殊形状的",function:cards=>cards.filter(card=>{ + const searchType = 176; const skill = Skills[card.activeSkillId]; - if ((skill.type==88 || skill.type==92) || //类型的 - (skill.type==50 || skill.type==90) && skill.params.slice(1,skill.params.length>2?-1:undefined).some(sk=>sk!=5) || //属性的,要排除回复力 - skill.type==156 && skill.params[4] == 2 || skill.type==168 //宝石姬的 - ) + if (skill.type == searchType) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=> - (subskill.type==88 || subskill.type==92) || //类型的 - (subskill.type==50 || subskill.type==90) && subskill.params.slice(1,subskill.params.length>2?-1:undefined).some(sk=>sk!=5) || //属性的,要排除回复力 - subskill.type==156 && subskill.params[4] == 2 || subskill.type==168 //宝石姬的 - ); + return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"操作时间 buff(顶减手指)",function:cards=>cards.filter(card=>{ - const searchType = 132; + {name:"生成3x3方块",function:cards=>cards.filter(card=>{ + function is3x3(sk) + { + for (let si=0;si<3;si++) + { + if (sk[si] === sk[si+1] && sk[si] === sk[si+2] && //3行连续相等 + (si>0?(sk[si-1] & sk[si]) ===0:true) && //如果上一行存在,并且无交集(and为0) + (si+2<4?(sk[si+3] & sk[si]) ===0:true) && //如果下一行存在,并且无交集(and为0) + (sk[si] === 7 || sk[si] === 7<<1 || sk[si] === 7<<2 || sk[si] === 7<<3) //如果这一行满足任意2珠并联(二进制111=十进制7) + ) + return true; + } + return false; + } + const searchType = 176; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType) + if (skill.type == searchType && is3x3(skill.params)) return true; else if (skill.type == 116 || skill.type == 118){ const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); + return subskills.some(subskill=>subskill.type == searchType && is3x3(subskill.params)); } })}, - {name:"无天降 buff",function:cards=>cards.filter(card=>{ - const searchType = 184; + {name:"产竖",function:cards=>cards.filter(card=>{ + const searchType = 127; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -2002,18 +2105,28 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"生成变换位",function:cards=>cards.filter(card=>{ - const searchType = 207; + {name:"产竖(含心)",function:cards=>cards.filter(card=>{ + function isHeart(sk) + { + for (let i=1;iSkills[id]); - return subskills.some(subskill=>subskill.type == searchType); + return subskills.some(subskill=>subskill.type == searchType && isHeart(subskill.params)); } })}, - {name:"加C buff(按C数排列)",function:cards=>cards.filter(card=>{ - const searchType = 160; + {name:"产横",function:cards=>cards.filter(card=>{ + const searchType = 128; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -2021,21 +2134,252 @@ function parseBigNumber(number) const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } - }).sort((a,b)=>{ - const searchType = 160; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[1] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; - b_pC = (b_s.type == searchType) ? - b_s.params[1] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; - return a_pC - b_pC; })}, - {name:"减伤 buff(按减伤比率排序)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [3,156]; - const skill = Skills[card.activeSkillId]; + {name:"2横或以上",function:cards=>cards.filter(card=>{ + const searchType = 128; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params.length>=3 || flags(skill.params[0]).length>=2)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params.length>=3 || flags(subskill.params[0]).length>=2)); + } + })}, + {name:"2色横",function:cards=>cards.filter(card=>{ + const searchType = 128; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && skill.params[3]>=0 && (skill.params[1] & skill.params[3]) != skill.params[1]) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[3]>=0 && (subskill.params[1] & subskill.params[3]) != subskill.params[1]); + } + })}, + {name:"非顶底横",function:cards=>cards.filter(card=>{ + const searchType = 128; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && ((skill.params[0] | skill.params[2]) & 14)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && ((subskill.params[0] | subskill.params[2]) & 14)); + } + })}, + {name:"泛产横(包含花火与四周一圈等)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [128,71,176]; + function isRow(skill) + { + const sk = skill.params; + if (skill.type === 128) //普通横 + {return true;} + else if (skill.type === 71) //花火 + {return sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined).length === 1} + else if (skill.type === 176) //特殊形状 + { + for (let si=0;si<5;si++) + { + if ((sk[si] & 63) === 63) + return true; + } + } + return false; + } + const skill = Skills[card.activeSkillId]; + if (searchTypeArray.includes(skill.type) && isRow(skill)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>searchTypeArray.includes(subskill.type) && isRow(subskill)); + } + })}, + {name:"----- buff 类-----",function:cards=>cards}, + {name:"掉落率提升-属性-火",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params[0] & 1)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 1)); + } + })}, + {name:"掉落率提升-属性-水",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params[0] & 2)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 2)); + } + })}, + {name:"掉落率提升-属性-木",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params[0] & 4)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 4)); + } + })}, + {name:"掉落率提升-属性-光",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params[0] & 8)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 8)); + } + })}, + {name:"掉落率提升-属性-暗",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params[0] & 16)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 16)); + } + })}, + {name:"掉落率提升-属性-心",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params[0] & 32)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 32)); + } + })}, + {name:"掉落率提升-属性-毒、废(顶毒)",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && (skill.params[0] & 960)) // 960 = 二进制 1111000000 + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 960)); + } + })}, + {name:"掉落率提升-持续99回合",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && skill.params[1] >= 99) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[1] >= 99); + } + })}, + {name:"掉落率提升-100%几率",function:cards=>cards.filter(card=>{ + const searchType = 126; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType && skill.params[3] >= 100) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[3] >= 100); + } + })}, + {name:"以觉醒数量为倍率类技能(宝石姬)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [156,168]; + const skill = Skills[card.activeSkillId]; + if (searchTypeArray.includes(skill.type)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>searchTypeArray.includes(subskill.type)); + } + })}, + {name:"回复力 buff(顶降回复)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [50,90]; + const skill = Skills[card.activeSkillId]; + if (searchTypeArray.includes(skill.type) && skill.params.slice(1,skill.params.length>2?-1:undefined).includes(5)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=> + searchTypeArray.includes(subskill.type) && subskill.params.slice(1,subskill.params.length>2?-1:undefined).includes(5) + ); + } + })}, + {name:"攻击力 buff(顶降攻击)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [ + 88,92, //类型的 + 50,90, //属性的,要排除回复力 + 156,168, //宝石姬 + ]; + const skill = Skills[card.activeSkillId]; + if ((skill.type==88 || skill.type==92) || //类型的 + (skill.type==50 || skill.type==90) && skill.params.slice(1,skill.params.length>2?-1:undefined).some(sk=>sk!=5) || //属性的,要排除回复力 + skill.type==156 && skill.params[4] == 2 || skill.type==168 //宝石姬的 + ) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=> + (subskill.type==88 || subskill.type==92) || //类型的 + (subskill.type==50 || subskill.type==90) && subskill.params.slice(1,subskill.params.length>2?-1:undefined).some(sk=>sk!=5) || //属性的,要排除回复力 + subskill.type==156 && subskill.params[4] == 2 || subskill.type==168 //宝石姬的 + ); + } + })}, + {name:"操作时间 buff(顶减手指)",function:cards=>cards.filter(card=>{ + const searchType = 132; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType); + } + })}, + {name:"无天降 buff",function:cards=>cards.filter(card=>{ + const searchType = 184; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType); + } + })}, + {name:"生成变换位",function:cards=>cards.filter(card=>{ + const searchType = 207; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType); + } + })}, + {name:"加C buff(按C数排列)",function:cards=>cards.filter(card=>{ + const searchType = 160; + const skill = Skills[card.activeSkillId]; + if (skill.type == searchType) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>subskill.type == searchType); + } + }).sort((a,b)=>{ + const searchType = 160; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + let a_pC = 0,b_pC = 0; + a_pC = (a_s.type == searchType) ? + a_s.params[1] : + a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + b_pC = (b_s.type == searchType) ? + b_s.params[1] : + b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[1]; + return a_pC - b_pC; + })}, + {name:"减伤 buff(按减伤比率排序)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [3,156]; + const skill = Skills[card.activeSkillId]; if (skill.type == 3 || skill.type == 156 && skill.params[4]==3 ) @@ -2825,337 +3169,6 @@ function parseBigNumber(number) return subskills.some(subskill=>searchTypeArray.includes(subskill.type)); } })}, - {name:"======队长技======",function:cards=>cards}, - {name:"队长技固伤追击",function:cards=>cards.filter(card=>{ - const searchTypeArray = [199,200,201]; - const skill = Skills[card.leaderSkillId]; - if (searchTypeArray.includes(skill.type)) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.includes(subskill.type)); - } - })}, - {name:"队长技+C(按+C数排序)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [192,194,206]; - const skill = Skills[card.leaderSkillId]; - if (searchTypeArray.some(t=>skill.type == t && skill.params[3]>0)) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t && subskill.params[3]>0)); - } - }).sort((a,b)=>{ - const searchTypeArray = [192,194]; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = searchTypeArray.includes(a_s.type) ? - a_s.params[3] : - a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[3]; - b_pC = searchTypeArray.includes(b_s.type) ? - b_s.params[3] : - b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)).params[3]; - return a_pC - b_pC; - })}, - {name:"7×6 版面",function:cards=>cards.filter(card=>{ - const searchTypeArray = [162,186]; - const skill = Skills[card.leaderSkillId]; - if (searchTypeArray.some(t=>skill.type == t)) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); - } - })}, - {name:"无天降版面",function:cards=>cards.filter(card=>{ - const searchTypeArray = [163,177]; - const skill = Skills[card.leaderSkillId]; - if (searchTypeArray.some(t=>skill.type == t)) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); - } - })}, - {name:"队长技加/减秒(按秒数排序)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [15,185]; - const skill = Skills[card.leaderSkillId]; - if (searchTypeArray.some(t=>skill.type == t)) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); - } - }).sort((a,b)=>{ - const searchTypeArray = [15,185]; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (searchTypeArray.some(t=>a_s.type == t)) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.some(t=>subskill.type == t)).params[0]; - b_pC = (searchTypeArray.some(t=>b_s.type == t)) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.some(t=>subskill.type == t)).params[0]; - return a_pC - b_pC; - })}, - {name:"固定操作时间(按时间排序)",function:cards=>cards.filter(card=>{ - const searchType = 178; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - }).sort((a,b)=>{ - const searchType = 178; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; - })}, - {name:"消除宝珠时计算防御的追打(按追打比率排序)",function:cards=>cards.filter(card=>{ - const searchType = 12; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - }).sort((a,b)=>{ - const searchType = 12; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; - })}, - {name:"消除宝珠时回血(按回复比率排序)",function:cards=>cards.filter(card=>{ - const searchType = 13; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - }).sort((a,b)=>{ - const searchType = 13; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; - })}, - {name:"队长技受伤反击",function:cards=>cards.filter(card=>{ - const searchType = 41; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - })}, - {name:"毒无效",function:cards=>cards.filter(card=>{ - const searchType = 197; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - })}, - {name:"回血加盾",function:cards=>cards.filter(card=>{ - const searchType = 198; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType && skill.params[2]) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[2]); - } - })}, - {name:"回血解觉",function:cards=>cards.filter(card=>{ - const searchType = 198; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType && skill.params[3]) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType && subskill.params[3]); - } - })}, - {name:"十字心",function:cards=>cards.filter(card=>{ - const searchTypeArray = [151,209]; - const skill = Skills[card.leaderSkillId]; - if (searchTypeArray.some(t=>skill.type == t)) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); - } - })}, - {name:"N个十字",function:cards=>cards.filter(card=>{ - const searchTypeArray = [157]; - const skill = Skills[card.leaderSkillId]; - if (searchTypeArray.some(t=>skill.type == t)) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); - } - })}, - {name:"剩珠倍率",function:cards=>cards.filter(card=>{ - const searchType = 177; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - })}, - {name:"要求长串消除(按珠数排序)",function:cards=>cards.filter(card=>{ - const searchType = 158; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - }).sort((a,b)=>{ - const searchType = 158; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; - })}, - {name:"根性",function:cards=>cards.filter(card=>{ - const searchType = 14; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - })}, - {name:"指定队伍队员编号",function:cards=>cards.filter(card=>{ - const searchType = 125; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - })}, - {name:"指定队伍队员合作编号",function:cards=>cards.filter(card=>{ - const searchType = 175; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - })}, - {name:"指定队伍队员进化类型",function:cards=>cards.filter(card=>{ - const searchType = 203; - const skill = Skills[card.leaderSkillId]; - if (!skill) console.log(card,card.leaderSkillId); - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - })}, - {name:"增加道具掉落率(按增加倍率排序)",function:cards=>cards.filter(card=>{ - const searchType = 53; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - }).sort((a,b)=>{ - const searchType = 53; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; - })}, - {name:"增加金币掉落倍数(按增加倍率排序)",function:cards=>cards.filter(card=>{ - const searchType = 54; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - }).sort((a,b)=>{ - const searchType = 54; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; - })}, - {name:"增加经验获取倍数(按增加倍率排序)",function:cards=>cards.filter(card=>{ - const searchType = 148; - const skill = Skills[card.leaderSkillId]; - if (skill.type == searchType) - return true; - else if (skill.type == 138){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=>subskill.type == searchType); - } - }).sort((a,b)=>{ - const searchType = 148; - const a_s = Skills[a.leaderSkillId], b_s = Skills[b.leaderSkillId]; - let a_pC = 0,b_pC = 0; - a_pC = (a_s.type == searchType) ? - a_s.params[0] : - a_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - b_pC = (b_s.type == searchType) ? - b_s.params[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; - return a_pC - b_pC; - })}, {name:"======进化类型======",function:cards=>cards}, {name:"8格潜觉",function:cards=>cards.filter(card=>card.is8Latent)}, {name:"8格潜觉-转生、超转生",function:cards=>cards.filter(card=>isReincarnated(card))}, //evoBaseId可能为0