diff --git a/script-json_data.js b/script-json_data.js index 1c4f08fa..9a5ab3d8 100644 --- a/script-json_data.js +++ b/script-json_data.js @@ -3660,9 +3660,36 @@ const specialSearchFunctions = (function() { function:cards=>cards.filter(card=>{ if (card.activeSkillId == 0) return false; let skill = Skills[card.activeSkillId]; - //如果是单向进化类技能,也获取最后一次技能 - if (skill.type == 232) skill = Skills[skill.params[skill.params.length-1]]; - return skill.initialCooldown - (skill.maxLevel - 1) <= 1; + //单向进化技能,采用最后一个子技能 + if (skill.type == 232) skill = Skills[skill.params.at(-1)]; + return getSkillMinCD(skill) <= 1; + }) + }, + {name:"Skill Loop less than 4 card",otLangName:{chs:"4 个队员能循环开",cht:"4 個隊員能循環開"}, + function:cards=>cards.filter(card=>{ + if (card.activeSkillId == 0) return false; + let skill = Skills[card.activeSkillId]; + //单向进化技能,采用最后一个子技能 + if (skill.type === 232) skill = Skills[skill.params.at(-1)]; + + /* + * 202,变身,只能用一次 + * 218,坐CD,永远都无法循环 + * 250,移除武器,作为基底时直接无法使用 + * 268,使用次数限制 + */ + const cantLoopSkill = getActuallySkills(skill, [202, 218, 250, 268]); + if (cantLoopSkill.length) return false; + + const minCD = getSkillMinCD(skill); //主动技最小的CD + let realCD = minCD; + const skillBoost = getActuallySkills(skill, [146], false); //溜 + if (skillBoost.length) { + realCD = skillBoost.reduce((cd,subSkill)=>{ + return cd - subSkill.params[0] * 3; //第一个参数是溜几回合,3个角色就是×3 + }, realCD); + } + return minCD > 1 && realCD <= 4; }) }, {name:"Time pause",otLangName:{chs:"时间暂停",cht:"時間暫停"}, @@ -3702,6 +3729,13 @@ const specialSearchFunctions = (function() { return `${skill.type == 232 ? "单向进化" : "🔁循环变化"}`; } }, + {name:"Not Evolved active",otLangName:{chs:"非进化类技能",cht:"非進化類技能"}, + function:cards=>cards.filter(card=>{ + const searchTypeArray = [232, 233]; + const skill = getCardActiveSkill(card, searchTypeArray); + return !skill; + }) + }, {name:"Enable require HP range",otLangName:{chs:"技能使用血线要求",cht:"技能使用血線要求"}, function:cards=>cards.filter(card=>{ const searchTypeArray = [225]; @@ -3768,6 +3802,20 @@ const specialSearchFunctions = (function() { return fragment; } }, + {name:"Has limit of times a skill can be used",otLangName:{chs:"技能使用有次数限制",cht:"技能使用有次數限制"}, + function:cards=>cards.filter(card=>{ + const searchTypeArray = [268]; + const skill = getCardActiveSkill(card, searchTypeArray); + return skill; + }), + addition:card=>{ + const searchTypeArray = [268]; + const skill = getCardActiveSkill(card, searchTypeArray); + if (!skill) return; + const sk = skill.params; + return `限${sk[0]}次`; + } + }, ]}, {group:true,name:"Leader Skills",otLangName:{chs:"队长技",cht:"隊長技"}, functions: [ diff --git a/script-skill-parser.js b/script-skill-parser.js index 20ee5d6b..db41bf26 100644 --- a/script-skill-parser.js +++ b/script-skill-parser.js @@ -1995,7 +1995,7 @@ function renderSkill(skill, option = {}) break; } case SkillKinds.EvolvedSkills: { //技能进化 - let skills = skill.skills, loop = skill.loop; + let {skills, loop} = skill; const ul = document.createElement("ul"); ul.className = "evolved-active-skill"; skills.forEach((subSkill, idx)=>{ diff --git a/script-universal_function.js b/script-universal_function.js index 98e6e7db..afa36345 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -1553,6 +1553,9 @@ function getActuallySkills(skill, skillTypes, searchRandom = true) { return []; } } +function getSkillMinCD(skill){ + return skill.initialCooldown - (skill.maxLevel - 1); +} //返回变身宠的初级 function henshinBase(cardid, firstId) { diff --git a/service-worker.js b/service-worker.js index 02ef6e06..3a6fc2f3 100644 --- a/service-worker.js +++ b/service-worker.js @@ -42115,15 +42115,15 @@ const cachesMap = new Map([ ], [ "script-json_data.js", - "c2c5aa4182fa7fb2373a36a43c5e83be" + "44a611992513dfc4305a1400ee420b0b" ], [ "script-skill-parser.js", - "4286f6c6a3815c90cf60a572e32f34bb" + "572072fdddec7ce70151adb6ebef5c42" ], [ "script-universal_function.js", - "4245ab3a6e1f900d780f998d942141cc" + "bf0ac3d326328c1b48a8edcb4ed23828" ], [ "script.js",