From d8ebe03f072e020414f5e11374104c4c1f8a6c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Thu, 23 Apr 2020 20:35:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B0=E7=9A=84=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/en.js | 5 + languages/ja.js | 7 +- languages/ko.js | 5 + languages/zh-CN.js | 595 ++++++++++++++++++++++---------------------- languages/zh-TW.js | 7 +- script-json_data.js | 23 ++ script.js | 4 +- 7 files changed, 352 insertions(+), 294 deletions(-) diff --git a/languages/en.js b/languages/en.js index 82301199..8e8b9211 100644 --- a/languages/en.js +++ b/languages/en.js @@ -5,12 +5,17 @@ sort_name:{ sort_none: "Nope", sort_id: "Cards Id", + sort_attrs : "Attribute", sort_evoRootId: "Cards Evolution Root", + sort_evoRoot_Attrs : "Cards Evolution Root's Attribute", sort_skillLv1: "Maximum Skill Turn", sort_skillLvMax: "Minimum Skill Turn", sort_hpMax110: "Max HP (Lv110)", sort_atkMax110: "Max ATK (Lv110)", sort_rcvMax110: "Max RCV (Lv110)", + sort_hpMax110_Multi: "Max Multi HP (Lv110)", + sort_atkMax110_Multi: "Max Multi ATK (Lv110)", + sort_rcvMax110_Multi: "Max Multi RCV (Lv110)", sort_rarity: "Rarity", sort_cost: "Cost", }, diff --git a/languages/ja.js b/languages/ja.js index af9a8612..2df1de7a 100644 --- a/languages/ja.js +++ b/languages/ja.js @@ -5,12 +5,17 @@ sort_name:{ sort_none: "いいえ", sort_id: "カード ID", + sort_attrs : "属性", sort_evoRootId: "カード進化ルート", + sort_evoRoot_Attrs : "カード進化ルートの属性", sort_skillLv1: "最大スキルターン", sort_skillLvMax: "最小スキルターン", - sort_hpMax110: "最大HP (Lv110)", + sort_hpMax110: "最大 HP (Lv110)", sort_atkMax110: "最大攻撃 (Lv110)", sort_rcvMax110: "最大回復 (Lv110)", + sort_hpMax110_Multi: "最大協力 HP (Lv110)", + sort_atkMax110_Multi: "最大協力攻撃 (Lv110)", + sort_rcvMax110_Multi: "最大協力回復 (Lv110)", sort_rarity: "レアリティ", sort_cost: "コスト", }, diff --git a/languages/ko.js b/languages/ko.js index b28c4f1a..eaa2b1f2 100644 --- a/languages/ko.js +++ b/languages/ko.js @@ -5,12 +5,17 @@ sort_name:{ sort_none: "없음", sort_id: "카드 ID", + sort_attrs : "속성", sort_evoRootId: "카드 진화 루트", + sort_evoRoot_Attrs : "카드 진화 루트의 특성", sort_skillLv1: "최대 스킬 턴", sort_skillLvMax: "최소 스킬 턴", sort_hpMax110: "최대 HP (Lv110)", sort_atkMax110: "최대 공격 (Lv110)", sort_rcvMax110: "최대 회복 (Lv110)", + sort_hpMax110_Multi: "최대 멀티 HP (Lv110)", + sort_atkMax110_Multi: "최대 멀티 공격 (Lv110)", + sort_rcvMax110_Multi: "최대 멀티 회복 (Lv110)", sort_rarity: "래리티", sort_cost: "비용", }, diff --git a/languages/zh-CN.js b/languages/zh-CN.js index bf373f9c..0c49e04d 100644 --- a/languages/zh-CN.js +++ b/languages/zh-CN.js @@ -1227,17 +1227,22 @@ function parseBigNumber(number) const specialSearchFunctions = [ {name:"暂时仅中文有的特殊搜索",function:cards=>cards}, {name:"======主动技======",function:cards=>cards}, - {name:"破属吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 173; + {name:"1 CD",function:cards=>cards.filter(card=>{ + if (card.activeSkillId == 0) return false; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[1]) + return skill.initialCooldown - (skill.maxLevel - 1) <= 1; + })}, + {name:"时间暂停(按停止时间排序)",function:cards=>cards.filter(card=>{ + const searchType = 5; + 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 && subskill.params[1]); + return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 173; + 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) ? @@ -1248,14 +1253,27 @@ 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=>{ + {name:"变身前",function:cards=>cards.filter(card=>{ + const searchType = 202; + 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=>card.henshinTo)}, + {name:"非变身",function:cards=>cards.filter(card=>!card.henshinFrom && !card.henshinTo)}, + {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[3]) + 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 && subskill.params[3]); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[1]); } }).sort((a,b)=>{ const searchType = 173; @@ -1269,14 +1287,14 @@ 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=>{ + {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]) + 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 && subskill.params[1] && subskill.params[3]); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[3]); } }).sort((a,b)=>{ const searchType = 173; @@ -1290,17 +1308,17 @@ 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; + {name:"双破吸 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 173; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType) + 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); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[1] && subskill.params[3]); } }).sort((a,b)=>{ - const searchType = 191; + 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) ? @@ -1311,23 +1329,8 @@ function parseBigNumber(number) b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; return a_pC - b_pC; })}, - {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:"换队长",function:cards=>cards.filter(card=>{ - const searchType = 93; - 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 = 196; + {name:"贯穿无效盾 buff(按破吸回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 191; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -1336,7 +1339,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 196; + 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) ? @@ -1347,6 +1350,7 @@ 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=>{ @@ -1413,6 +1417,28 @@ function parseBigNumber(number) 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]; + 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 = 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}, {name:"解锁",function:cards=>cards.filter(card=>{ const searchType = 172; const skill = Skills[card.activeSkillId]; @@ -1485,103 +1511,7 @@ function parseBigNumber(number) 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 = 202; - 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=>card.henshinTo)}, - {name:"非变身",function:cards=>cards.filter(card=>!card.henshinFrom && !card.henshinTo)}, - {name:"普通重力(按比例排序)",function:cards=>cards.filter(card=>{ - const searchType = 6; - 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 = 6; - 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 = 161; - 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 = 161; - 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 searchTypeArray = [156,168]; - const skill = Skills[card.activeSkillId]; - if (searchTypeArray.some(t=>skill.type == t)) - return true; - else if (skill.type == 116 || skill.type == 118){ - 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 = 176; - 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:"生成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 && 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 && is3x3(subskill.params)); - } - })}, + {name:"-----随机产珠类-----",function:cards=>cards}, {name:"普通洗版-含心",function:cards=>cards.filter(card=>{ function includeHeart(sk) { @@ -1745,6 +1675,51 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType && is1515(subskill.params)); } })}, + {name:"刷版",function:cards=>cards.filter(card=>{ + const searchType = 10; + 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}, + {name:"-----固定产珠类-----",function:cards=>cards}, + {name:"生成特殊形状的",function:cards=>cards.filter(card=>{ + const searchType = 176; + 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:"生成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 && 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 && is3x3(subskill.params)); + } + })}, {name:"产竖",function:cards=>cards.filter(card=>{ const searchType = 127; const skill = Skills[card.activeSkillId]; @@ -1815,6 +1790,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType && ((subskill.params[0] | subskill.params[2]) & 14)); } })}, + {name:"----- buff 类-----",function:cards=>cards}, {name:"99回合掉落",function:cards=>cards.filter(card=>{ const searchType = 126; const skill = Skills[card.activeSkillId]; @@ -1835,6 +1811,16 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType && (subskill.params[0] & 960) > 0); } })}, + {name:"宝石姬类技能",function:cards=>cards.filter(card=>{ + const searchTypeArray = [156,168]; + const skill = Skills[card.activeSkillId]; + if (searchTypeArray.some(t=>skill.type == t)) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=>searchTypeArray.some(t=>subskill.type == t)); + } + })}, {name:"回复力buff(顶降回复)",function:cards=>cards.filter(card=>{ const searchTypeArray = [50,90]; const skill = Skills[card.activeSkillId]; @@ -1868,18 +1854,112 @@ function parseBigNumber(number) ); } })}, - {name:"操作时间buff(顶减手指)",function:cards=>cards.filter(card=>{ - const searchType = 132; + {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:"加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 + ) + return true; + else if (skill.type == 116 || skill.type == 118){ + const subskills = skill.params.map(id=>Skills[id]); + return subskills.some(subskill=> + subskill.type == 3 || + subskill.type == 156 && subskill.params[4]==3 + ); + } + }).sort((a,b)=>{ + const searchTypeArray = [3,156]; + const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; + + //找到真正生效的子技能 + const a_ss = searchTypeArray.includes(a_s.type) ? + a_s : + a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); + const b_ss = searchTypeArray.includes(b_s.type) ? + b_s : + b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); + let sortNum = b_ss.type - a_ss.type; //先分开宝石姬与非宝石姬 + if (!sortNum) + { + let a_pC = 0,b_pC = 0; + if (a_ss.type == 3) + { + a_pC = a_ss.params[1]; + b_pC = b_ss.params[1]; + }else + { + a_pC = a_ss.params[5]; + b_pC = b_ss.params[5]; + } + sortNum = a_pC - b_pC; + } + return sortNum; + })}, + {name:"无敌-减伤100%(不含宝石姬)",function:cards=>cards.filter(card=>{ + const searchType = 3; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType) + if (skill.type == searchType && skill.params[1]>=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); + return subskills.some(subskill=>subskill.type == searchType && subskill.params[1]>=100); } + }).sort((a,b)=>{ + const searchType = 3; + 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 = 184; + {name:"变为全体攻击(按回合数排序)",function:cards=>cards.filter(card=>{ + const searchType = 51; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -1887,7 +1967,19 @@ function parseBigNumber(number) const subskills = skill.params.map(id=>Skills[id]); return subskills.some(subskill=>subskill.type == searchType); } + }).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:"溜(按溜数排序,有范围的取小)",function:cards=>cards.filter(card=>{ const searchType = 146; const skill = Skills[card.activeSkillId]; @@ -1909,8 +2001,8 @@ function parseBigNumber(number) b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; return a_pC - b_pC; })}, - {name:"加C buff(按C数排列)",function:cards=>cards.filter(card=>{ - const searchType = 160; + {name:"换队长",function:cards=>cards.filter(card=>{ + const searchType = 93; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -1918,20 +2010,9 @@ 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:"威吓(按威吓回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 18; + {name:"转换自身属性(按回合数排序)",function:cards=>cards.filter(card=>{ + const searchType = 142; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -1940,7 +2021,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 18; + const searchType = 142; const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? @@ -1951,38 +2032,55 @@ 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.filter(card=>{ - const searchType = 19; + {name:"自身 HP 减少(按减少比率排序)",function:cards=>cards.filter(card=>{ + const searchTypeArray = [84,85,86,87,195]; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType) + 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=>subskill.type == searchType); + return subskills.some(subskill=>searchTypeArray.includes(subskill.type)); } }).sort((a,b)=>{ - const searchType = 19; + const searchTypeArray = [84,85,86,87,195]; 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; + function getReduceScale(skill) + { + const sk = skill.params; + if (skill.type == 195) + { + return sk[0] ? sk[0] : 0.1; + }else + { + return sk[3] ? sk[3] : 0.1; + } + } + function getSubskill(skill) + { + const subSkill = skill.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); + return subSkill; + } + a_pC = searchTypeArray.includes(a_s.type) ? + getReduceScale(a_s) : + getReduceScale(getSubskill(a_s)); + b_pC = searchTypeArray.includes(b_s.type) ? + getReduceScale(b_s) : + getReduceScale(getSubskill(b_s)); + return b_pC - a_pC; })}, - {name:"破防100%(按破防回合排序)",function:cards=>cards.filter(card=>{ - const searchType = 19; + {name:"-----对敌 buff 类-----",function:cards=>cards}, + {name:"威吓(按威吓回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 18; const skill = Skills[card.activeSkillId]; - if (skill.type == searchType && skill.params[1]>=100) + 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[1]>=100); + return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 19; + const searchType = 18; const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? @@ -1993,8 +2091,8 @@ 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.filter(card=>{ - const searchType = 4; + {name:"破防(按破防比例排序)",function:cards=>cards.filter(card=>{ + const searchType = 19; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -2003,61 +2101,19 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 4; + const searchType = 19; 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]; + 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[0] : - b_s.params.map(id=>Skills[id]).find(subskill => subskill.type == searchType).params[0]; + 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 - ) - return true; - else if (skill.type == 116 || skill.type == 118){ - const subskills = skill.params.map(id=>Skills[id]); - return subskills.some(subskill=> - subskill.type == 3 || - subskill.type == 156 && subskill.params[4]==3 - ); - } - }).sort((a,b)=>{ - const searchTypeArray = [3,156]; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - - //找到真正生效的子技能 - const a_ss = searchTypeArray.includes(a_s.type) ? - a_s : - a_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); - const b_ss = searchTypeArray.includes(b_s.type) ? - b_s : - b_s.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); - let sortNum = b_ss.type - a_ss.type; //先分开宝石姬与非宝石姬 - if (!sortNum) - { - let a_pC = 0,b_pC = 0; - if (a_ss.type == 3) - { - a_pC = a_ss.params[1]; - b_pC = b_ss.params[1]; - }else - { - a_pC = a_ss.params[5]; - b_pC = b_ss.params[5]; - } - sortNum = a_pC - b_pC; - } - return sortNum; - })}, - {name:"无敌-减伤100%(不含宝石姬)",function:cards=>cards.filter(card=>{ - const searchType = 3; + {name:"破防100%(按破防回合排序)",function:cards=>cards.filter(card=>{ + const searchType = 19; const skill = Skills[card.activeSkillId]; if (skill.type == searchType && skill.params[1]>=100) return true; @@ -2066,7 +2122,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType && subskill.params[1]>=100); } }).sort((a,b)=>{ - const searchType = 3; + const searchType = 19; const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? @@ -2077,8 +2133,8 @@ 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.filter(card=>{ - const searchType = 5; + {name:"中毒(按毒伤比率排序)",function:cards=>cards.filter(card=>{ + const searchType = 4; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -2087,7 +2143,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 5; + const searchType = 4; const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? @@ -2098,16 +2154,6 @@ 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.filter(card=>{ - const searchType = 10; - 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 = 60; const skill = Skills[card.activeSkillId]; @@ -2118,8 +2164,9 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"变为全体攻击(按回合数排序)",function:cards=>cards.filter(card=>{ - const searchType = 51; + {name:"-----对敌伤害类-----",function:cards=>cards}, + {name:"普通重力(按比例排序)",function:cards=>cards.filter(card=>{ + const searchType = 6; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -2128,7 +2175,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 5; + const searchType = 6; const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? @@ -2139,8 +2186,8 @@ 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.filter(card=>{ - const searchType = 142; + {name:"最大值重力(按比例排序)",function:cards=>cards.filter(card=>{ + const searchType = 161; const skill = Skills[card.activeSkillId]; if (skill.type == searchType) return true; @@ -2149,7 +2196,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } }).sort((a,b)=>{ - const searchType = 142; + const searchType = 161; const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; let a_pC = 0,b_pC = 0; a_pC = (a_s.type == searchType) ? @@ -2207,43 +2254,7 @@ function parseBigNumber(number) totalDamage(b_s); return a_pC - b_pC; })}, - {name:"自身 HP 减少(按减少比率排序)",function:cards=>cards.filter(card=>{ - const searchTypeArray = [84,85,86,87,195]; - 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)); - } - }).sort((a,b)=>{ - const searchTypeArray = [84,85,86,87,195]; - const a_s = Skills[a.activeSkillId], b_s = Skills[b.activeSkillId]; - let a_pC = 0,b_pC = 0; - function getReduceScale(skill) - { - const sk = skill.params; - if (skill.type == 195) - { - return sk[0] ? sk[0] : 0.1; - }else - { - return sk[3] ? sk[3] : 0.1; - } - } - function getSubskill(skill) - { - const subSkill = skill.params.map(id=>Skills[id]).find(subskill => searchTypeArray.includes(subskill.type)); - return subSkill; - } - a_pC = searchTypeArray.includes(a_s.type) ? - getReduceScale(a_s) : - getReduceScale(getSubskill(a_s)); - b_pC = searchTypeArray.includes(b_s.type) ? - getReduceScale(b_s) : - getReduceScale(getSubskill(b_s)); - return b_pC - a_pC; - })}, + {name:"-----大炮有些复杂我没空做-----",function:cards=>cards}, {name:"======队长技======",function:cards=>cards}, {name:"队长技固伤追击",function:cards=>cards.filter(card=>{ const searchTypeArray = [199,200,201]; @@ -2565,27 +2576,29 @@ function parseBigNumber(number) return a_pC - b_pC; })}, {name:"======其他搜索======",function:cards=>cards}, + {name:"不能破除等级限制",function:cards=>cards.filter(card=>card.limitBreakIncr===0)}, + {name:"110级三维成长100%",function:cards=>cards.filter(card=>card.limitBreakIncr>=100)}, + {name:"满级不是1级(可强化)",function:cards=>cards.filter(card=>card.maxLevel>1)}, + {name:"低于100mp",function:cards=>cards.filter(card=>card.sellMP<100)}, + {name:"有3个type",function:cards=>cards.filter(card=>card.types.filter(t=>t>=0).length>=3)}, + {name:"有副属性",function:cards=>cards.filter(card=>card.attrs[1]>=0)}, + {name:"有副属性且主副属性不一致",function:cards=>cards.filter(card=>card.attrs[0]>=0 && card.attrs[1]>=0 && card.attrs[0] != card.attrs[1])}, + {name:"能获得珠子皮肤",function:cards=>cards.filter(card=>card.blockSkinId>0)}, + {name:"所有潜觉蛋龙",function:cards=>cards.filter(card=>card.latentAwakeningId>0).sort((a,b)=>a.latentAwakeningId-b.latentAwakeningId)}, + {name:"龙契士&龙唤士(10001)",function:cards=>cards.filter(card=>card.collabId==10001)}, + {name:"-----进化类型类-----",function:cards=>cards}, {name:"转生、超转生(8格潜觉)",function:cards=>cards.filter(card=>card.is8Latent)}, {name:"非转生、超转生",function:cards=>cards.filter(card=>!card.is8Latent)}, {name:"像素进化",function:cards=>cards.filter(card=>card.evoMaterials.includes(3826))}, {name:"用三神面进化",function:cards=>cards.filter(card=>card.evoMaterials.includes(3795))}, {name:"用彩龙果进化",function:cards=>cards.filter(card=>card.evoMaterials.includes(3971))}, {name:"由武器进化而来",function:cards=>cards.filter(card=>card.isUltEvo && Cards[card.evoBaseId].awakenings.includes(49))}, - {name:"110级三维成长100%",function:cards=>cards.filter(card=>card.limitBreakIncr>=100)}, - {name:"有超觉醒",function:cards=>cards.filter(card=>card.superAwakenings.length > 0)}, - {name:"有110,但没有超觉醒",function:cards=>cards.filter(card=>card.limitBreakIncr>0 && card.superAwakenings.length<1)}, - {name:"不能破除等级限制",function:cards=>cards.filter(card=>card.limitBreakIncr===0)}, - {name:"能获得珠子皮肤",function:cards=>cards.filter(card=>card.blockSkinId>0)}, - {name:"低于100mp",function:cards=>cards.filter(card=>card.sellMP<100)}, + {name:"-----觉醒类-----",function:cards=>cards}, + {name:"有9个觉醒",function:cards=>cards.filter(card=>card.awakenings.length>=9)}, {name:"可以做辅助",function:cards=>cards.filter(card=>card.canAssist)}, - {name:"3个type",function:cards=>cards.filter(card=>card.types.filter(t=>t>=0).length>=3)}, - {name:"9个觉醒",function:cards=>cards.filter(card=>card.awakenings.length>=9)}, - {name:"满级不是1级(可强化)",function:cards=>cards.filter(card=>card.maxLevel>1)}, - {name:"所有潜觉蛋龙",function:cards=>cards.filter(card=>card.latentAwakeningId>0).sort((a,b)=>a.latentAwakeningId-b.latentAwakeningId)}, {name:"不是武器",function:cards=>cards.filter(card=>!card.awakenings.includes(49))}, - {name:"有副属性",function:cards=>cards.filter(card=>card.attrs[1]>=0)}, - {name:"有副属性且主副属性不一致",function:cards=>cards.filter(card=>card.attrs[0]>=0 && card.attrs[1]>=0 && card.attrs[0] != card.attrs[1])}, - {name:"龙契士&龙唤士(10001)",function:cards=>cards.filter(card=>card.collabId==10001)}, + {name:"有超觉醒",function:cards=>cards.filter(card=>card.superAwakenings.length > 0)}, + {name:"有110,但没有超觉醒",function:cards=>cards.filter(card=>card.limitBreakIncr>0 && card.superAwakenings.length<1)}, {name:"3个相同杀觉醒,或2个杀觉醒并可打相同潜觉",function:cards=>cards.filter(card=>{ const hasAwokenKiller = typekiller_for_type.find(type=>card.awakenings.filter(ak=>ak===type.awoken).length>=2); if (hasAwokenKiller) diff --git a/languages/zh-TW.js b/languages/zh-TW.js index 21d0871c..cbc7eb0a 100644 --- a/languages/zh-TW.js +++ b/languages/zh-TW.js @@ -5,12 +5,17 @@ sort_name:{ sort_none: "無", sort_id: "怪物ID", + sort_attrs : "屬性", sort_evoRootId: "進化樹", + sort_evoRoot_Attrs : "進化根怪物的屬性", sort_skillLv1: "技能最大冷卻時間", sort_skillLvMax: "技能最小冷卻時間", - sort_hpMax110: "最大HP(Lv110)", + sort_hpMax110: "最大 HP(Lv110)", sort_atkMax110: "最大攻擊(Lv110)", sort_rcvMax110: "最大回復(Lv110)", + sort_hpMax110_Multi: "最大協力 HP(Lv110)", + sort_atkMax110_Multi: "最大協力攻擊(Lv110)", + sort_rcvMax110_Multi: "最大協力回復(Lv110)", sort_rarity: "稀有度", sort_cost: "消耗", }, diff --git a/script-json_data.js b/script-json_data.js index 26f39d75..18a47a18 100644 --- a/script-json_data.js +++ b/script-json_data.js @@ -51,7 +51,18 @@ const equivalent_awoken = [ const sort_function_list = [ {tag:"sort_none",name:"无",function:()=>0}, {tag:"sort_id",name:"怪物ID",function:(a,b)=>a.id-b.id}, + {tag:"sort_attrs",name:"属性",function:(a,b)=>{ + let num = a.attrs[0] - b.attrs[0]; + if (num === 0) num = a.attrs[1] - b.attrs[1]; + return num; + }}, {tag:"sort_evoRootId",name:"进化树",function:(a,b)=>a.evoRootId-b.evoRootId}, + {tag:"sort_evoRoot_Attrs",name:"进化根怪物的属性",function:(a,b)=>{ + const card_a = Cards[a.evoRootId],card_b = Cards[b.evoRootId]; + let num = card_a.attrs[0] - card_b.attrs[0]; + if (num === 0) num = card_a.attrs[1] - card_b.attrs[1]; + return num; + }}, {tag:"sort_skillLv1",name:"技能最大冷却时间",function:(a,b)=>Skills[a.activeSkillId].initialCooldown-Skills[b.activeSkillId].initialCooldown}, {tag:"sort_skillLvMax",name:"技能最小冷却时间",function:(a,b)=>{ const skill_a = Skills[a.activeSkillId],skill_b = Skills[b.activeSkillId]; @@ -60,6 +71,18 @@ const sort_function_list = [ {tag:"sort_hpMax110",name:"最大HP(Lv110)",function:(a,b)=>a.hp.max * (1 + a.limitBreakIncr/100) - b.hp.max * (1 + b.limitBreakIncr/100)}, {tag:"sort_atkMax110",name:"最大攻击(Lv110)",function:(a,b)=>a.atk.max * (1 + a.limitBreakIncr/100) - b.atk.max * (1 + b.limitBreakIncr/100)}, {tag:"sort_rcvMax110",name:"最大回复(Lv110)",function:(a,b)=>a.rcv.max * (1 + a.limitBreakIncr/100) - b.rcv.max * (1 + b.limitBreakIncr/100)}, + {tag:"sort_hpMax110_Multi",name:"最大协力攻击(Lv110)",function:(a,b)=> + a.atk.max * (1 + a.limitBreakIncr/100) * Math.pow(1.5, a.awakenings.filter(ak=>ak===30).length) - + b.atk.max * (1 + b.limitBreakIncr/100) * Math.pow(1.5, b.awakenings.filter(ak=>ak===30).length) + }, + {tag:"sort_hpMax110_Multi",name:"最大协力HP(Lv110)",function:(a,b)=> + a.hp.max * (1 + a.limitBreakIncr/100) * Math.pow(1.5, a.awakenings.filter(ak=>ak===30).length) - + b.hp.max * (1 + b.limitBreakIncr/100) * Math.pow(1.5, b.awakenings.filter(ak=>ak===30).length) + }, + {tag:"sort_hpMax110_Multi",name:"最大协力回复(Lv110)",function:(a,b)=> + a.rcv.max * (1 + a.limitBreakIncr/100) * Math.pow(1.5, a.awakenings.filter(ak=>ak===30).length) - + b.rcv.max * (1 + b.limitBreakIncr/100) * Math.pow(1.5, b.awakenings.filter(ak=>ak===30).length) + }, {tag:"sort_rarity",name:"稀有度",function:(a,b)=>a.rarity-b.rarity}, {tag:"sort_cost",name:"消耗",function:(a,b)=>a.cost-b.cost}, ]; \ No newline at end of file diff --git a/script.js b/script.js index f83374d9..cdd6eff7 100644 --- a/script.js +++ b/script.js @@ -1011,6 +1011,7 @@ function initialize() //对heads重新排序 function sortHeadsArray(heads) { + if (!heads || heads.length === 0) return; //没有数据时,直接返回 const sortIndex = parseInt(s_sortList.value,10); const reverse = s_sortReverse.checked; let headsArray = heads.concat(); @@ -1028,9 +1029,10 @@ function initialize() //对搜索到的Cards重新排序 function reSortCards() { + const headsArray = sortHeadsArray(searchMonList.originalHeads); + if (!headsArray || headsArray.length === 0) return; //没有数据时,直接返回 searchMonList.classList.add(className_displayNone); let fragment = document.createDocumentFragment(); //创建节点用的临时空间 - const headsArray = sortHeadsArray(searchMonList.originalHeads); headsArray.forEach(head=>fragment.appendChild(head)); searchMonList.appendChild(fragment); searchMonList.classList.remove(className_displayNone);