diff --git a/images/icon-skills.png b/images/icon-skills.png index 1ecd9a5a..a8673f67 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 b452eec6..72e74b6c 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 76792ad3..18b3b655 100644 --- a/languages/zh-hans.js +++ b/languages/zh-hans.js @@ -115,6 +115,8 @@ const _localTranslating = { set_orb_state_locked: tp`将${'orbs'}${'icon'}锁定${'value'}`, set_orb_state_unlocked: tp`${'icon'}解除${'orbs'}的锁定状态`, set_orb_state_bound: tp`无法消除${'orbs'}`, + set_orb_state_combo_drop: tp`${'orbs'}增加${'value'}${'icon'}豆荚状态`, + set_orb_state_nail: tp`${'orbs'}增加${'value'}${'icon'}钉子状态`, rate_multiply: tp`作为队长进入地下城时,${'rate'}变为${'value'}`, rate_multiply_drop: tp`${'icon'}怪物蛋掉落率`, rate_multiply_coin: tp`${'icon'}金币掉落率`, diff --git a/languages/zh-hant.js b/languages/zh-hant.js index dfc04699..6beec1c1 100644 --- a/languages/zh-hant.js +++ b/languages/zh-hant.js @@ -115,6 +115,8 @@ const _localTranslating = { set_orb_state_locked: tp`將${'orbs'}${'icon'}鎖定${'value'}`, set_orb_state_unlocked: tp`${'icon'}解除${'orbs'}的鎖定狀態`, set_orb_state_bound: tp`無法消除${'orbs'}`, + set_orb_state_combo_drop: tp`${'orbs'}增加${'value'}${'icon'}豆莢狀態`, + set_orb_state_nail: tp`${'orbs'}增加${'value'}${'icon'}釘子狀態`, rate_multiply: tp`作為隊長進入地下城時,${'rate'}變為${'value'}`, rate_multiply_drop: tp`${'icon'}怪物蛋掉落率`, rate_multiply_coin: tp`${'icon'}金幣掉落率`, diff --git a/script-json_data.js b/script-json_data.js index e8504eb0..febb23ae 100644 --- a/script-json_data.js +++ b/script-json_data.js @@ -130,6 +130,8 @@ let localTranslating = { set_orb_state_locked: tp`${'icon'}Locks ${'value'}${'orbs'}`, set_orb_state_unlocked: tp`${'icon'}Unlocks ${'orbs'}`, set_orb_state_bound: tp`${'orbs'} are unmatchable`, + set_orb_state_combo_drop: tp`Add ${'value'} ${'icon'}combo drop on ${'orbs'}`, + set_orb_state_nail: tp`Add ${'value'} ${'icon'}nail on ${'orbs'}`, rate_multiply: tp`${'rate'} ${'value'} when entering as leader`, rate_multiply_drop: tp`${'icon'}Drop rate`, rate_multiply_coin: tp`${'icon'}Coins`, @@ -1071,14 +1073,46 @@ const specialSearchFunctions = (function() { } function lock_Addition(card) { - const searchTypeArray = [152]; - const skill = getCardActiveSkill(card, searchTypeArray); - if (!skill) return; - const sk = skill.params; - const fragment = document.createDocumentFragment(); - fragment.appendChild(createSkillIcon('orb-locked')); - fragment.appendChild(createOrbsList(Bin.unflags(sk[0] || 1))); - return fragment; + const searchTypeArray = [152, 190, 262]; + const skills = getCardActiveSkills(card, searchTypeArray, true); + if (!skills.length) return; + return skills.map(skill=>{ + const sk = skill.params; + const fragment = document.createDocumentFragment(); + switch (skill.type) { + case 152:{ + fragment.append( + createSkillIcon('orb-locked') + ); + if (sk[1] < 42) fragment.append(`×${sk[1]}`); + fragment.append( + createOrbsList(Bin.unflags(sk[0] || 1)) + ); + break; + } + case 190:{ + fragment.append( + createSkillIcon('orb-combo-drop') + ); + if (sk[1] < 42) fragment.append(`×${sk[1]}`); + fragment.append( + createOrbsList(Bin.unflags(sk[0] || 1)) + ); + break; + } + case 262:{ + fragment.append( + createSkillIcon('orb-nail') + ); + if (sk[0] < 42) fragment.append(`×${sk[0]}`); + fragment.append( + createOrbsList(Attributes.orbs()) + ); + break; + } + } + return fragment; + }).nodeJoin(''); } function dropLock_Addition(card) { @@ -2454,11 +2488,27 @@ const specialSearchFunctions = (function() { } } const fragment = document.createDocumentFragment(); - fragment.appendChild(document.createTextNode(`强化`)); + fragment.appendChild(createSkillIcon('orb-enhanced')); fragment.appendChild(createOrbsList(attrs)); return fragment; } }, + {name:"Add Combo Drop",otLangName:{chs:"加豆荚",cht:"加豆莢"}, + function:cards=>cards.filter(card=>{ + const searchTypeArray = [190]; + const skill = getCardActiveSkill(card, searchTypeArray); + return skill; + }), + addition:lock_Addition + }, + {name:"Add Nail",otLangName:{chs:"加钉子",cht:"加釘子"}, + function:cards=>cards.filter(card=>{ + const searchTypeArray = [262]; + const skill = getCardActiveSkill(card, searchTypeArray); + return skill; + }), + addition:lock_Addition + }, {name:"Bind self matchable",otLangName:{chs:"自封消珠 debuff",cht:"自封消珠 debuff"}, function:cards=>cards.filter(card=>{ const searchTypeArray = [215]; diff --git a/script-skill-parser.js b/script-skill-parser.js index 434ec13d..906d2778 100644 --- a/script-skill-parser.js +++ b/script-skill-parser.js @@ -992,7 +992,7 @@ function counterAttack(attr, prob, value) { return { kind: SkillKinds.CounterAttack, attr: attr, prob: prob, value: value }; } function setOrbState(orbs, state, arg) { - return { kind: SkillKinds.SetOrbState, orbs: orbs, state: state, arg: arg}; + return { kind: SkillKinds.SetOrbState, orbs, state, arg}; } function rateMultiply(value, rate) { return { kind: SkillKinds.RateMultiply, value: value, rate: rate }; @@ -1464,6 +1464,7 @@ const skillObjectParsers = { autoPath(3), ]; }, + [190](attrs, count) { return setOrbState(Bin.unflags(attrs), 'combo-drop', {count: v.constant(count)}); }, [191](turns) { return activeTurns(turns, voidEnemyBuff(['damage-void'])); @@ -1729,6 +1730,7 @@ const skillObjectParsers = { [259](percent) { return breakingShield(v.xShield(percent)); }, [260](skillStage, voiceId) { return skillPlayVoice(skillStage, voiceId); }, [261](percent) { return gravity(v.xCHP(percent), 'single'); }, + [262](count) { return setOrbState(Attributes.orbs(), 'nail', {count: v.constant(count)}); }, [263](turns, cap, attr, type) { //按属性改变伤害上限主动技 return activeTurns(turns, increaseDamageCapacity(cap * 1e8, void 0, Bin.unflags(attr), Bin.unflags(type)) @@ -1801,7 +1803,7 @@ function renderSkillEntry(skills) break; } case SkillKinds.GenerateOrbs: { //产生珠子 - let orbs = skill.orbs, exclude = skill.exclude, count = skill.count; + const { orbs, exclude, count } = skill; boardsBar.boards.forEach(board=>board.generateOrbs(orbs, count, exclude)); break; } @@ -2462,9 +2464,13 @@ function renderSkill(skill, option = {}) break; } case SkillKinds.SetOrbState: { - let orbs = skill.orbs, state = skill.state, arg = skill.arg; + const {orbs, state, arg} = skill; let dict = { - orbs: renderOrbs(orbs, {className: state, affix: true}), + orbs: renderOrbs(orbs, { + //有的时候附加效果限制个数,这个附加图标加到文字里面的图标上面的去不好看也不准确,应该只加到面板里。 + //className: state, + affix: true + }), icon: createIcon('orb-' + state), }; switch (state) @@ -2488,6 +2494,18 @@ function renderSkill(skill, option = {}) frg.ap(tsp.skill.set_orb_state_bound(dict)); break; } + case "combo-drop":{ + if (arg.count.value < 42) + dict.value = renderValue(arg.count, {unit: tsp.unit.orbs}); + frg.ap(tsp.skill.set_orb_state_combo_drop(dict)); + break; + } + case "nail":{ + if (arg.count.value < 42) + dict.value = renderValue(arg.count, {unit: tsp.unit.orbs}); + frg.ap(tsp.skill.set_orb_state_nail(dict)); + break; + } } break; } @@ -2911,6 +2929,8 @@ function renderAttrs(attrs, option = {}) { function renderOrbs(attrs, option = {}) { if (!Array.isArray(attrs)) attrs = [attrs ?? 0]; + else + attrs = [...attrs]; const frg = document.createDocumentFragment(); if (typeof localTranslating == "undefined") return frg; @@ -2922,7 +2942,7 @@ function renderOrbs(attrs, option = {}) { let attrBin = new Bin(attrs); if ((attrBin.int & 0b1111111111) == 0b1111111111) { //十种珠子 frg.ap(tsp.orbs.all()); - attrs.length = 0; + attrs.length = 0; //之前是引用,这里会导致数组被清空的错误 } else if ((attrBin.int & 0b11111) == 0b11111) { //基础5色 frg.ap(renderOrbs('_5color')); attrBin = new Bin(attrBin.int & 0b1111100000); diff --git a/service-worker.js b/service-worker.js index 9851b824..6ea585bb 100644 --- a/service-worker.js +++ b/service-worker.js @@ -37339,11 +37339,11 @@ const cachesMap = new Map([ ], [ "script-json_data.js", - "542e14ea40fb4e78f90b9042c9cab73e" + "dfaedd802c88abd2dc04807133cd292c" ], [ "script-skill-parser.js", - "611d6dbe1cb34e394b466d5548413bb5" + "1747fe828fc25e0394f82245eccca5c7" ], [ "script-universal_function.js", @@ -37363,11 +37363,11 @@ const cachesMap = new Map([ ], [ "style-monsterimages.css", - "27fbe6036d87bcbcba695b3855d6d175" + "825aea31ea61e82142a634ccc7230d9f" ], [ "style.css", - "bf69ae63b86117783d918534b14b3a54" + "0548eea7ac972f4bac0ffebf384a51e5" ], [ "temp.js", @@ -37411,7 +37411,7 @@ const cachesMap = new Map([ ], [ "languages/zh-hans.js", - "71138b459d0d9851f2554e6336f32a98" + "8552840a3934a8eee0d0e001419036d9" ], [ "languages/zh-hant.css", @@ -37419,7 +37419,7 @@ const cachesMap = new Map([ ], [ "languages/zh-hant.js", - "677bd55683bbe9f7055523ed462db5b9" + "3f4938a03f1d14544bd9da895126ed6c" ], [ "images/attrs.png", @@ -37571,7 +37571,7 @@ const cachesMap = new Map([ ], [ "images/icon-skills.png", - "fae3e58d36a30373bf184d1c4b9e78d5" + "9b5c57a64636cbfddffbb4549f5e6035" ], [ "images/icon-switch-leader.png", diff --git a/style-monsterimages.css b/style-monsterimages.css index 5ae68f70..d4d7bd3e 100644 --- a/style-monsterimages.css +++ b/style-monsterimages.css @@ -2075,7 +2075,7 @@ --icon-y-index: 1; } .orb.drop::before -{ +{ /* 珠子加掉率 */ content: ""; --icon-y-index: 2; } @@ -2083,11 +2083,20 @@ { filter:brightness(0.8); } -.orb.bound::before +.orb.enhanced::after { content: ""; - --icon-y-index: 3; - animation: hidden-visible-animate 0.8s infinite ease-out alternate; + --icon-y-index: 0; +} +.orb.combo-drop::before +{ /* 有豆荚的珠子 */ + content: ""; + --icon-y-index: 5; +} +.orb.nail::before +{ /* 有豆荚的珠子 */ + content: ""; + --icon-y-index: 6; } .orb[data-orb-icon='_5color'] diff --git a/style.css b/style.css index 877977f1..ff9e9a3c 100644 --- a/style.css +++ b/style.css @@ -5037,6 +5037,10 @@ body.external-link-support #external-support{ width: 72px; background-position-y:calc(-36px * 43); } +.icon-skill[data-icon-type="orb-combo-drop"] +{ + background-position-y:calc(-36px * 44); +} .card-skill-list .play-voice [data-awoken-icon="63"] { cursor: pointer;