diff --git a/images/icon-skills.png b/images/icon-skills.png index a8d3e7e9..7f400670 100644 Binary files a/images/icon-skills.png and b/images/icon-skills.png differ diff --git a/images/project file/icon-skills.fw.png b/images/project file/icon-skills.fw.png index 8408d107..6f47e4b7 100644 Binary files a/images/project file/icon-skills.fw.png and b/images/project file/icon-skills.fw.png differ diff --git a/languages/zh-hans.js b/languages/zh-hans.js index 8a8635b7..3ab7970c 100644 --- a/languages/zh-hans.js +++ b/languages/zh-hans.js @@ -78,6 +78,7 @@ const _localTranslating = { unbind_awakenings: tp`${'icon'}觉醒无效`, unbind_matches: tp`${'icon'}无法消除宝珠`, bind_skill: tp`${'icon'}自身无法使用技能`, + bind_card: tp`卡片自身${'icon'}变为封锁状态`, defense_break: tp`${'icon'}敌方的防御力减少${'value'}`, poison: tp`${'icon'}使${'target'}中毒,每回合损失${'belong_to'} ${'value'} 的 ${'stats'}`, time_extend: tp`${'icon'}宝珠移动时间 ${'value'}`, @@ -136,7 +137,7 @@ const _localTranslating = { obstruct_opponent_before_me: tp`排名比自身高的对手`, obstruct_opponent_designated_position: tp`第${'positions'}排位的对手`, slot_power_up: tp`${'targets'}的${'icon'}${'value'}`, - increase_damage_cap: tp`${'targets'}的${'icon'}伤害上限变为${'cap'}`, + increase_damage_cap: tp`${'targets'}${'icon'}伤害上限变为${'cap'}`, board_jamming_state: tp`在${'position'}生成${'icon'}${'state'}${'size'}${'count'}${'comment'}`, board_size_change: tp`板面大小改变为${'icon'}${'size'}`, remove_assist: tp`${'icon'}移除自身的辅助宠物(直到地下城结束)`, @@ -221,6 +222,8 @@ const _localTranslating = { sub_members: tp`队员`, leader_self: tp`左边队长`, leader_helper: tp`右边队长`, + left_neighbor: tp`左邻角色`, + right_neighbor: tp`右邻角色`, collab_id: tp`合作ID为${'id'}的角色`, gacha_id: tp`抽蛋ID为${'id'}的角色`, enemy: tp`敌人`, diff --git a/languages/zh-hant.js b/languages/zh-hant.js index b232982c..f6e2d7db 100644 --- a/languages/zh-hant.js +++ b/languages/zh-hant.js @@ -77,7 +77,7 @@ const _localTranslating = { unbind_normal: tp`${'icon'}封鎖`, unbind_awakenings: tp`${'icon'}覺醒無效`, unbind_matches: tp`${'icon'}無法消除寶珠`, - bind_skill: tp`${'icon'}自身無法使用技能`, + bind_skill: tp`卡片自身${'icon'}變為封鎖狀態`, defense_break: tp`${'icon'}敵方的防禦力減少${'value'}`, poison: tp`${'icon'}使${'target'}中毒,每回合損失${'belong_to'} ${'value'} 的 ${'stats'}`, time_extend: tp`${'icon'}寶珠移動時間 ${'value'}`, @@ -136,7 +136,7 @@ const _localTranslating = { obstruct_opponent_before_me: tp`排名比自身高的對手`, obstruct_opponent_designated_position: tp`第${'positions'}排位的對手`, slot_power_up: tp`${'targets'}的${'icon'}${'value'}`, - increase_damage_cap: tp`${'targets'}的${'icon'}傷害上限變為${'cap'}`, + increase_damage_cap: tp`${'targets'}${'icon'}傷害上限變為${'cap'}`, board_jamming_state: tp`在${'position'}生成${'icon'}${'state'}${'size'}${'count'}${'comment'}`, board_size_change: tp`板面大小改變為${'icon'}${'size'}`, remove_assist: tp`${'icon'}移除自身的輔助寵物(直到地下城結束)`, @@ -221,6 +221,8 @@ const _localTranslating = { sub_members: tp`隊員`, leader_self: tp`左邊隊長`, leader_helper: tp`右邊隊長`, + left_neighbor: tp`左鄰角色`, + right_neighbor: tp`右鄰角色`, collab_id: tp`合作ID為${'id'}的角色`, gacha_id: tp`抽蛋ID為${'id'}的角色`, enemy: tp`敵人`, diff --git a/script-json_data.js b/script-json_data.js index edc32740..432d9cda 100644 --- a/script-json_data.js +++ b/script-json_data.js @@ -93,6 +93,7 @@ let localTranslating = { unbind_awakenings: tp`${'icon'}Awoken bind`, unbind_matches: tp`${'icon'}Unmatchable orb`, bind_skill: tp`${'icon'}Unable to use skills`, + bind_card: tp`${'icon'}Bind the card itself`, defense_break: tp`${'icon'}Reduce enemy defense by ${'value'}`, poison: tp`${'icon'}Poisons ${'target'}, reduce ${'stats'} with ${'belong_to'} ${'value'} per turns`, time_extend: tp`${'icon'}Orb move time ${'value'}`, @@ -150,7 +151,7 @@ let localTranslating = { obstruct_opponent_after_me: tp`The opponent ranked lower than me`, obstruct_opponent_before_me: tp`The opponent ranked higher than me`, obstruct_opponent_designated_position: tp`No.${'positions'} ranked opponents`, - slot_power_up: tp`The slot of ${'targets'} ${'icon'}${'value'}`, + slot_power_up: tp`The slot of [${'targets'}]'s ${'icon'}${'value'}`, increase_damage_cap: tp`The ${'icon'}damage cap of ${'targets'} is change to ${'cap'}`, board_jamming_state: tp`Creates ${'count'} ${'icon'}${'state'} ${'size'} at ${'position'}${'comment'}`, board_size_change: tp`Board size changed to ${'icon'}${'size'}`, @@ -236,6 +237,8 @@ let localTranslating = { sub_members: tp`sub-members`, leader_self: tp`left leader`, leader_helper: tp`right leader`, + left_neighbor: tp`left neighbor`, + right_neighbor: tp`left neighbor`, collab_id: tp`Cards with Collaboration ID of ${'id'} `, gacha_id: tp`Cards with Egg Machine ID of ${'id'} `, enemy: tp`Enemy`, @@ -1222,22 +1225,21 @@ const specialSearchFunctions = (function() { } function memberATK_Addition(card) { - const searchTypeArray = [230]; - const skill = getCardActiveSkill(card, searchTypeArray); - if (!skill) return; - const sk = skill.params; - const fragment = document.createDocumentFragment(); - fragment.appendChild(createTeamFlags(sk[1])); - let str = ''; - str +=`${sk[2] / 100}倍×${sk[0]}T`; - fragment.appendChild(document.createTextNode(str)); - return fragment; + const searchTypeArray = [230, 269]; + const skills = getCardActiveSkills(card, searchTypeArray); + return skills.map(skill=>{ + const sk = skill.params; + const fragment = document.createDocumentFragment(); + fragment.appendChild(createTeamFlags(sk[1], skill.type == 269 ? 2 : 1)); + fragment.append(`${sk[2] / 100}倍×${sk[0]}T`); + return fragment; + }).nodeJoin(document.createElement("br")); } function getIncreaseDamageCap(skill) { let cap = 0; switch (skill.type) { - case 241:case 258:case 263: + case 241:case 258:case 263:case 266: cap = skill.params[1]; break; case 246: @@ -1251,56 +1253,58 @@ const specialSearchFunctions = (function() { } function memberCap_Addition(card) { - const searchTypeArray = [241, 246, 247, 258, 263]; - const skill = getCardActiveSkill(card, searchTypeArray); - if (!skill) return; - const sk = skill.params; - let cap = getIncreaseDamageCap(skill); - - const fragment = document.createDocumentFragment(); - switch (skill.type) { - case 258: { - fragment.appendChild(createTeamFlags(sk[2])); - break; - } - case 241: - case 246: - case 247: { - fragment.appendChild(createTeamFlags(1)); - break; - } - case 263: { - const attrs = Bin.unflags(sk[2]); - if (attrs?.length) - { - fragment.appendChild(createOrbsList(attrs)); + const searchTypeArray = [241, 246, 247, 258, 263, 266]; + const skills = getCardActiveSkills(card, searchTypeArray); + return skills.map(skill=>{ + const sk = skill.params; + let cap = getIncreaseDamageCap(skill); + const fragment = document.createDocumentFragment(); + switch (skill.type) { + case 258: + case 266: { + fragment.appendChild(createTeamFlags(sk[2], skill.type == 266 ? 2 : 1)); + break; } - const types = Bin.unflags(sk[3]); - if (types?.length) - { - fragment.appendChild(createTypesList(types)); + case 241: + case 246: + case 247: { + fragment.appendChild(createTeamFlags(1)); + break; + } + case 263: { + const attrs = Bin.unflags(sk[2]); + if (attrs?.length) + { + fragment.appendChild(createOrbsList(attrs)); + } + const types = Bin.unflags(sk[3]); + if (types?.length) + { + fragment.appendChild(createTypesList(types)); + } + break; } - break; } - } - //fragment.append(createSkillIcon(SkillKinds.IncreaseDamageCapacity, cap > 21 ? "cap-incr" : "cap-decr")); - switch (skill.type) { - case 258: - case 241: - case 263: { - fragment.append(`${(cap*1e8).bigNumberToString()}×${sk[0]}T`); - break; + //fragment.append(createSkillIcon(SkillKinds.IncreaseDamageCapacity, cap > 21 ? "cap-incr" : "cap-decr")); + switch (skill.type) { + case 258: + case 241: + case 263: + case 266: { + fragment.append(`${(cap*1e8).bigNumberToString()}×${sk[0]}T`); + break; + } + case 246: { + fragment.append(`${(cap*1e8).bigNumberToString()}←${sk[1]}C in ${sk[0]}S`); + break; + } + case 247: { + fragment.append(`${(cap*1e8).bigNumberToString()}←${sk[2]} of `, createOrbsList(Bin.unflags(sk[1])), ` in ${sk[0]}S`); + break; + } } - case 246: { - fragment.append(`${(cap*1e8).bigNumberToString()}←${sk[1]}C in ${sk[0]}S`); - break; - } - case 247: { - fragment.append(`${(cap*1e8).bigNumberToString()}←${sk[2]} of `, createOrbsList(Bin.unflags(sk[1])), ` in ${sk[0]}S`); - break; - } - } - return fragment; + return fragment; + }).nodeJoin(document.createElement("br")); } function dixedDamage_Addition(card) { @@ -1848,7 +1852,7 @@ const specialSearchFunctions = (function() { {group:true,name:"Increase Damage Cap",otLangName:{chs:"增加伤害上限",cht:"增加傷害上限"}, functions: [ {name:"Increase Damage Cap - Any",otLangName:{chs:"增加伤害上限 - 任意",cht:"增加傷害上限 - 任意"}, function:cards=>{ - const searchTypeArray = [241, 246, 247, 258, 263]; + const searchTypeArray = [241, 246, 247, 258, 263, 266]; return cards.filter(card=>{ const skill = getCardActiveSkill(card, searchTypeArray); return skill; @@ -1862,11 +1866,20 @@ const specialSearchFunctions = (function() { }, {name:"Increase Damage Cap - Self",otLangName:{chs:"增加伤害上限 - 自身",cht:"增加傷害上限 - 自身"}, function:cards=>{ - const searchTypeArray = [241, 246, 247, 258]; + const searchTypeArray = [241, 246, 247, 258, 266]; return cards.filter(card=>{ const skill = getCardActiveSkill(card, searchTypeArray); - if (skill?.type === 258) return Boolean(skill.params[2] & 0b1); - else return skill; + switch (skill?.type) { + case 258: { + return Boolean(skill.params[2] & 0b1); + } + case 266: { + return Boolean(skill.params[2] & 0b100); + } + default: { + return skill; + } + } }).sort((a,b)=>{ const a_ss = getCardActiveSkill(a, searchTypeArray), b_ss = getCardActiveSkill(b, searchTypeArray); let a_pC = getIncreaseDamageCap(a_ss), b_pC = getIncreaseDamageCap(b_ss); @@ -1880,7 +1893,7 @@ const specialSearchFunctions = (function() { const searchTypeArray = [258]; return cards.filter(card=>{ const skill = getCardActiveSkill(card, searchTypeArray); - return skill && Boolean(skill.params[2] & (0b10 | 0b100)); + return skill && Boolean(skill.params[2] & 0b110); }).sort((a,b)=>{ const a_ss = getCardActiveSkill(a, searchTypeArray), b_ss = getCardActiveSkill(b, searchTypeArray); let a_pC = getIncreaseDamageCap(a_ss), b_pC = getIncreaseDamageCap(b_ss); @@ -1903,6 +1916,20 @@ const specialSearchFunctions = (function() { }, addition:memberCap_Addition }, + {name:"Increase Damage Cap - Neighbor",otLangName:{chs:"增加伤害上限 - 相邻",cht:"增加傷害上限 - 相鄰"}, + function:cards=>{ + const searchTypeArray = [266]; + return cards.filter(card=>{ + const skill = getCardActiveSkill(card, searchTypeArray); + return skill && Boolean(skill.params[2] & 0b11); + }).sort((a,b)=>{ + const a_ss = getCardActiveSkill(a, searchTypeArray), b_ss = getCardActiveSkill(b, searchTypeArray); + let a_pC = getIncreaseDamageCap(a_ss), b_pC = getIncreaseDamageCap(b_ss); + return a_pC - b_pC; + }); + }, + addition:memberCap_Addition + }, {name:"Increase Damage Cap - Attr./Types",otLangName:{chs:"增加伤害上限 - 属性/类型",cht:"增加傷害上限 - 屬性/類型"}, function:cards=>{ const searchTypeArray = [263]; @@ -1918,10 +1945,10 @@ const specialSearchFunctions = (function() { addition:memberCap_Addition }, ]}, - {group:true,name:"Member ATK rate change",otLangName:{chs:"队员攻击力",cht:"隊員攻擊力"}, functions: [ - {name:"Member ATK rate change - Any",otLangName:{chs:"队员攻击力 - 任意",cht:"隊員攻擊力 - 任意"}, + {group:true,name:"Card slot ATK rate change",otLangName:{chs:"卡片位置攻击力",cht:"卡片位置攻擊力"}, functions: [ + {name:"Card slot ATK rate change - Any",otLangName:{chs:"卡片位置攻击力 - 任意",cht:"卡片位置攻擊力 - 任意"}, function:cards=>{ - const searchTypeArray = [230]; + const searchTypeArray = [230, 269]; return cards.filter(card=>{ const skill = getCardActiveSkill(card, searchTypeArray); return skill; @@ -1929,27 +1956,37 @@ const specialSearchFunctions = (function() { }, addition:memberATK_Addition }, - {name:"Member ATK rate change - Self",otLangName:{chs:"队员攻击力 - 自身",cht:"隊員攻擊力 - 自身"}, + {name:"Card slot ATK rate change - Self",otLangName:{chs:"卡片位置攻击力 - 自身",cht:"卡片位置攻擊力 - 自身"}, function:cards=>{ - const searchTypeArray = [230]; + const searchTypeArray = [230, 269]; return cards.filter(card=>{ const skill = getCardActiveSkill(card, searchTypeArray); - return skill && Boolean(skill.params[1] & 0b1); + switch (skill?.type) { + case 230: { + return Boolean(skill.params[1] & 0b1); + } + case 269: { + return Boolean(skill.params[1] & 0b100); + } + default: { + return skill; + } + } }).sort((a,b)=>sortByParams(a, b, searchTypeArray, 2)); }, addition:memberATK_Addition }, - {name:"Member ATK rate change - Leader",otLangName:{chs:"队员攻击力 - 队长",cht:"隊員攻擊力 - 隊長"}, + {name:"Card slot ATK rate change - Leader",otLangName:{chs:"卡片位置攻击力 - 队长",cht:"卡片位置攻擊力 - 隊長"}, function:cards=>{ const searchTypeArray = [230]; return cards.filter(card=>{ const skill = getCardActiveSkill(card, searchTypeArray); - return skill && Boolean(skill.params[1] & (0b10 | 0b100)); + return skill && Boolean(skill.params[1] & 0b110); }).sort((a,b)=>sortByParams(a, b, searchTypeArray, 2)); }, addition:memberATK_Addition }, - {name:"Member ATK rate change - Sub",otLangName:{chs:"队员攻击力 - 队员",cht:"隊員攻擊力 - 隊員"}, + {name:"Card slot ATK rate change - Sub",otLangName:{chs:"卡片位置攻击力 - 队员",cht:"卡片位置攻擊力 - 隊員"}, function:cards=>{ const searchTypeArray = [230]; return cards.filter(card=>{ @@ -1959,8 +1996,18 @@ const specialSearchFunctions = (function() { }, addition:memberATK_Addition }, + {name:"Card slot ATK rate change - Neighbor",otLangName:{chs:"卡片位置攻击力 - 相邻",cht:"卡片位置攻擊力 - 相鄰"}, + function:cards=>{ + const searchTypeArray = [269]; + return cards.filter(card=>{ + const skill = getCardActiveSkill(card, searchTypeArray); + return skill && Boolean(skill.params[1] & 0b11); + }).sort((a,b)=>sortByParams(a, b, searchTypeArray, 2)); + }, + addition:memberATK_Addition + }, ]}, - {name:"Change self's Attr",otLangName:{chs:"转换自身属性",cht:"轉換自身屬性"}, + {name:"Change card self's Attr",otLangName:{chs:"转换自身属性",cht:"轉換自身屬性"}, function:cards=>{ const searchTypeArray = [142]; return cards.filter(card=>{ @@ -1982,27 +2029,6 @@ const specialSearchFunctions = (function() { return fragment; } }, - {name:"Bind self active skill",otLangName:{chs:"自封技能 debuff",cht:"自封技能 debuff"}, - function:cards=>cards.filter(card=>{ - const searchTypeArray = [214]; - const skill = getCardActiveSkill(card, searchTypeArray); - return skill; - }), - addition:card=>{ - const searchTypeArray = [214]; - const skill = getCardActiveSkill(card, searchTypeArray); - if (!skill) return; - const sk = skill.params; - return document.createTextNode(`自封技${sk[0]}T`); - } - }, - {name:"Remove assist",otLangName:{chs:"移除武器",cht:"移除武器"}, - function:cards=>cards.filter(card=>{ - const searchTypeArray = [250]; - const skill = getCardActiveSkill(card, searchTypeArray); - return skill; - }) - }, {name:"↓Reduce skills charge",otLangName:{chs:"【坐】增加CD",cht:"【坐】增加CD"}, function:cards=>{ const searchTypeArray = [218]; @@ -2022,6 +2048,41 @@ const specialSearchFunctions = (function() { return fragment; } }, + {name:"Bind team active skill",otLangName:{chs:"自封队伍技能 debuff",cht:"自封队伍技能 debuff"}, + function:cards=>cards.filter(card=>{ + const searchTypeArray = [214]; + const skill = getCardActiveSkill(card, searchTypeArray); + return skill; + }), + addition:card=>{ + const searchTypeArray = [214]; + const skill = getCardActiveSkill(card, searchTypeArray); + if (!skill) return; + const sk = skill.params; + return document.createTextNode(`自封技${sk[0]}T`); + } + }, + {name:"Bind card self",otLangName:{chs:"角色自身被绑定",cht:"角色自身被綁定"}, + function:cards=>cards.filter(card=>{ + const searchTypeArray = [267]; + const skill = getCardActiveSkill(card, searchTypeArray); + return skill; + }), + addition:card=>{ + const searchTypeArray = [267]; + const skill = getCardActiveSkill(card, searchTypeArray); + if (!skill) return; + const sk = skill.params; + return document.createTextNode(`自绑定${sk[0]}T`); + } + }, + {name:"Remove card self's assist",otLangName:{chs:"移除卡片武器",cht:"移除卡片武器"}, + function:cards=>cards.filter(card=>{ + const searchTypeArray = [250]; + const skill = getCardActiveSkill(card, searchTypeArray); + return skill; + }) + }, ]}, {group:true,name:"Player's HP change",otLangName:{chs:"玩家HP操纵类",cht:"玩家HP操縱類"}, functions: [ {name:"Heal after turn",otLangName:{chs:"回合结束回血 buff",cht:"回合結束回血 buff"}, diff --git a/script-skill-parser.js b/script-skill-parser.js index c54ef71a..6fd1b3f1 100644 --- a/script-skill-parser.js +++ b/script-skill-parser.js @@ -386,6 +386,11 @@ class Board } } +const SkillTarget = { + type1: ["self","leader-self","leader-helper","sub-members"], + type2: ["right-neighbor","left-neighbor","self"], +}; + const SkillValue = { isLess: function (value) { if (value.kind === SkillValueKind.Percent) return value.value < 1; @@ -449,6 +454,7 @@ const SkillKinds = { BoardChange: "board-change", Unbind: "unbind", BindSkill: "bind-skill", + BindCard: "bind-card", RandomSkills: "random-skills", EvolvedSkills: "evolved-skills", SkillProviso: "skill-proviso", @@ -1008,6 +1014,7 @@ function unbind(normal, awakenings, matches) { return { kind: SkillKinds.Unbind, normal: normal, awakenings: awakenings , matches: matches}; } function bindSkill() { return { kind: SkillKinds.BindSkill}; } +function bindCard() { return { kind: SkillKinds.BindCard}; } function boardChange(attrs) { return { kind: SkillKinds.BoardChange, attrs: attrs }; } @@ -1592,8 +1599,9 @@ const skillObjectParsers = { [229](attrs, types, hp, atk, rcv) { return powerUp(null, null, p.scaleStateKind(null, Bin.unflags(attrs), Bin.unflags(types), p.mul({hp: hp || 0, atk: atk || 0, rcv: rcv || 0}))); }, + //按位置增伤主动技1 [230](turns, target, mul) { - const targetTypes = ["self","leader-self","leader-helper","sub-members"]; + const targetTypes = SkillTarget.type1; const typeArr = Bin.unflags(target).map(n => targetTypes[n]); return activeTurns(turns, slotPowerUp(p.mul({ atk: mul }), typeArr) @@ -1641,7 +1649,7 @@ const skillObjectParsers = { ); }, [241](turns, cap) { //改变伤害上限主动技 - // const targetTypes = ["self","leader-self","leader-helper","sub-members"]; + // const targetTypes = SkillTarget.type1; // const typeArr = Bin.unflags(target).map(n => targetTypes[n]); return activeTurns(turns, increaseDamageCapacity(cap * 1e8, ["self"]) @@ -1726,9 +1734,9 @@ const skillObjectParsers = { autoPath(5), ]; }, - + //按位置改变伤害上限主动技1 [258](turns, cap, target) { //改变伤害上限主动技 - const targetTypes = ["self","leader-self","leader-helper","sub-members"]; + const targetTypes = SkillTarget.type1; const typeArr = Bin.unflags(target).map(n => targetTypes[n]); return activeTurns(turns, increaseDamageCapacity(cap * 1e8, typeArr) @@ -1745,9 +1753,26 @@ const skillObjectParsers = { }, [264](mul) { return rateMultiply(v.percent(mul), 'plus_point'); }, [265](mul) { return rateMultiply(v.percent(mul), 'part_break'); }, - + //按位置改变伤害上限主动技2 + [266](turns, cap, target) { + const targetTypes = SkillTarget.type2; + const typeArr = Bin.unflags(target).map(n => targetTypes[n]); + return activeTurns(turns, + increaseDamageCapacity(cap * 1e8, typeArr) + ); + }, + //卡片自绑定 + [267](turns) {return activeTurns(turns, bindCard()); }, //限制技能使用次数 [268](turns) { return timesLimit(turns); }, + //按位置增伤主动技2 + [269](turns, target, mul) { + const targetTypes = SkillTarget.type2; + const typeArr = Bin.unflags(target).map(n => targetTypes[n]); + return activeTurns(turns, + slotPowerUp(p.mul({ atk: mul }), typeArr) + ); + }, //一回合内使用几次技能才有倍率的队长技。 [270](times, atk, rcv) { { return powerUp(Bin.unflags(31), null, p.mul({ atk: atk || 100, rcv: rcv || 100 }), c.useSkill(times)); } }, @@ -2255,6 +2280,13 @@ function renderSkill(skill, option = {}) frg.ap(tsp.skill.bind_skill(dict)); break; } + case SkillKinds.BindCard: { + let dict = { + icon: createIcon(skill.kind) + }; + frg.ap(tsp.skill.bind_card(dict)); + break; + } case SkillKinds.BoardChange: { //洗版 const attrs = skill.attrs; let dict = { @@ -2569,7 +2601,7 @@ function renderSkill(skill, option = {}) targetDict.target = document.createDocumentFragment(); //增加队员伤害的技能的目标,删选出来,其他的目标则不显示 - const targetTypes = ["self","leader-self","leader-helper","sub-members"]; + const targetTypes = SkillTarget.type1.concat(SkillTarget.type2); let atkUpTarget = targets.filter(n=>targetTypes.includes(n)); if (atkUpTarget.length) { targetDict.target.appendChild(createTeamFlags(atkUpTarget)); @@ -2745,11 +2777,11 @@ function renderSkill(skill, option = {}) targetDict.target = document.createDocumentFragment(); //增加队员伤害的技能的目标,删选出来,其他的目标则不显示 - const targetTypes = ["self","leader-self","leader-helper","sub-members"]; - let atkUpTarget = targets.filter(n=>targetTypes.includes(n)); - if (atkUpTarget.length) { - targetDict.target.appendChild(createTeamFlags(atkUpTarget)); - } + // const targetTypes = SkillTarget.type1; + // let atkUpTarget = targets.filter(n=>targetTypes.includes(n)); + // if (atkUpTarget.length) { + targetDict.target.appendChild(createTeamFlags(targets)); + // } targetDict.target.appendChild(targets.map(target=> tsp?.target[target.replaceAll("-","_")]?.()) diff --git a/script-universal_function.js b/script-universal_function.js index 7d93ef58..f6d968e5 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -1189,7 +1189,7 @@ function cardN(id) { } //产生队伍目标类型 -function createTeamFlags(target) +function createTeamFlags(target, type) { const ul = document.createElement("ul"); ul.className = "team-flags"; @@ -1197,7 +1197,7 @@ function createTeamFlags(target) const li = ul.appendChild(document.createElement("li")); li.className = "team-member-icon"; } - const targetTypes = ["self","leader-self","leader-helper","sub-members"]; + const targetTypes = type == 2 ? SkillTarget.type2 : SkillTarget.type1; let _target = []; if (Number.isInteger(target)) { diff --git a/script.js b/script.js index 15d7abcd..2cb8ffd3 100644 --- a/script.js +++ b/script.js @@ -565,15 +565,15 @@ class LeaderSkillType_MatchingStyle { this.#flags = arg; } } - get multipleAttr(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 0)} - get rowMatch(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 1)} - get combo(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 2)} - get sameColor(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 3)} - get LShape(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 4)} - get crossMatch(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 5)} - get heartCrossMatch(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 6)} - get remainOrbs(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 7)} - get enhanced5Orbs(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 8)} + get multipleAttr(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 0)} + get rowMatch(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 1)} + get combo(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 2)} + get sameColor(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 3)} + get LShape(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 4)} + get crossMatch(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 5)} + get heartCrossMatch(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 6)} + get remainOrbs(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 7)} + get enhanced5Orbs(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 8)} } class LeaderSkillType_Restriction_Bind { #card = null; @@ -585,16 +585,16 @@ class LeaderSkillType_Restriction_Bind { this.#flags = arg; } } - get attrEnhance(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 9)} - get typeEnhance(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 10)} - get board7x6(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 11)} - get noSkyfall(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 12)} - get HpRange(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 13)} - get useSkill(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 14)} - get moveTimeDecrease_Fixed(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 15)} - get minMatchLen(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 16)} - get specialTeam(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 17)} - get effectWhenRecover(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 18)} + get attrEnhance(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 9)} + get typeEnhance(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 10)} + get board7x6(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 11)} + get noSkyfall(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 12)} + get HpRange(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 13)} + get useSkill(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 14)} + get moveTimeDecrease_Fixed(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 15)} + get minMatchLen(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 16)} + get specialTeam(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 17)} + get effectWhenRecover(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 18)} } class LeaderSkillType_ExtraEffects { #card = null; @@ -606,21 +606,21 @@ class LeaderSkillType_ExtraEffects { this.#flags = arg; } } - get addCombo(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 21)} - get fixedFollowAttack(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 22)} - get scaleFollowAttack(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 23)} - get reduce49down(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 24)} - get reduce50(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 25)} - get reduce51up(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 26)} - get moveTimeIncrease(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 20)} - get rateMultiplyExp_Coin(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 27)} - get rateMultiplyDrop(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 28)} - get voidPoison(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 29)} - get counterAttack(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 30)} - get autoHeal(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 31)} - get unbindAwokenBind(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 19)} - get resolve(){return Boolean(this.#card?.searchFlags?.[1] ?? this.#flags[1] & 1 << 0)} - get predictionFalling(){return Boolean(this.#card?.searchFlags?.[1] ?? this.#flags[1] & 1 << 1)} + get addCombo(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 21)} + get fixedFollowAttack(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 22)} + get scaleFollowAttack(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 23)} + get reduce49down(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 24)} + get reduce50(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 25)} + get reduce51up(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 26)} + get moveTimeIncrease(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 20)} + get rateMultiplyExp_Coin(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 27)} + get rateMultiplyDrop(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 28)} + get voidPoison(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 29)} + get counterAttack(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 30)} + get autoHeal(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 31)} + get unbindAwokenBind(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 19)} + get resolve(){return Boolean((this.#card?.searchFlags?.[1] ?? this.#flags[1]) & 1 << 0)} + get predictionFalling(){return Boolean((this.#card?.searchFlags?.[1] ?? this.#flags[1]) & 1 << 1)} } class Team extends Array { badge = 0; diff --git a/service-worker.js b/service-worker.js index 943992ca..aeafa0e8 100644 --- a/service-worker.js +++ b/service-worker.js @@ -44207,19 +44207,19 @@ const cachesMap = new Map([ ], [ "script-json_data.js", - "8538e25e7f6f4e8e08b14282db6ea654" + "37e68450ecb7140ba93515f30fca6dc1" ], [ "script-skill-parser.js", - "78597abdac6c0bfccc19919c5312ece1" + "228086552199fc6bb7eea0fe64f5feea" ], [ "script-universal_function.js", - "b86853117fb96211b6b1da2996cdb81e" + "0bdc4d583774cd51cf302f7709cc3fb7" ], [ "script.js", - "2e05c86aea3bb9b54e22dd07b9723c4b" + "270447ead17c33194fb0525cab9744f7" ], [ "solo.html", @@ -44235,7 +44235,7 @@ const cachesMap = new Map([ ], [ "style.css", - "1b21675a9c3b07e2913c03d42b7fa65e" + "f634fa900250a1e745b551a9302e8856" ], [ "temp.js", @@ -44279,7 +44279,7 @@ const cachesMap = new Map([ ], [ "languages/zh-hans.js", - "7b62458760e344526b07c586302333aa" + "92cc36747ac4440bdc45a1eba6ab4be7" ], [ "languages/zh-hant.css", @@ -44287,7 +44287,7 @@ const cachesMap = new Map([ ], [ "languages/zh-hant.js", - "846cbeec8fc7202ae889f93cdcb089cf" + "04f96537a27ece89005f42da68735431" ], [ "images/attrs.png", @@ -44439,7 +44439,7 @@ const cachesMap = new Map([ ], [ "images/icon-skills.png", - "f3fa5e8803e7b9f0adbb9b89e45a5b17" + "df43e89a902a603d16cc6cc4f77d25d2" ], [ "images/icon-switch-leader.png", diff --git a/style.css b/style.css index ec5a10df..997116ea 100644 --- a/style.css +++ b/style.css @@ -3837,9 +3837,13 @@ table .orb-icon .team-flags.sub-members .team-member-icon:not(:first-of-type):not(:last-of-type) { background-color: lightgreen; } -.team-flags.self .team-member-icon:nth-of-type(4) { +.team-flags.self .team-member-icon:nth-of-type(4) { background-color: lightblue !important; } +.team-flags.right-neighbor .team-member-icon:nth-of-type(5), +.team-flags.left-neighbor .team-member-icon:nth-of-type(3) { + background-color: violet !important; +} /*.open-evolutionary-tree::before { @@ -4725,7 +4729,8 @@ body.external-link-support #external-support{ .icon-skill[data-icon-type="ctw"]::after, .icon-skill[data-icon-type="add-combo"]::after, .icon-skill[data-icon-type="fixed-time"]::after, -.icon-skill[data-icon-type="increase-damage-cap"]::after +.icon-skill[data-icon-type="increase-damage-cap"]::after, +.icon-skill[data-icon-type="bind-card"]::after { content: ""; position: absolute; @@ -5011,6 +5016,17 @@ body.external-link-support #external-support{ { background-position-x: -36px; } + +.icon-skill[data-icon-type="bind-card"] +{ + background-position-y: calc(-36px * 39); +} +.icon-skill[data-icon-type="bind-card"]::after +{ + transform: scale(0.75); + background-position-y: calc(-36px * 47); +} + .icon-skill[data-icon-type="orb-thorn"] { background-position-y:calc(-36px * 37);