diff --git a/model/damage/BuffManager.js b/model/damage/BuffManager.js index 223de00..fc22344 100644 --- a/model/damage/BuffManager.js +++ b/model/damage/BuffManager.js @@ -181,16 +181,18 @@ export class BuffManager { } return buffs; } - /** - * 遍历buff列表 - */ - forEach(fnc) { - return this.buffs.forEach(fnc); - } filter(param, valueOcalc) { // @ts-ignore return this._filter(this.buffs, param, valueOcalc); } + /** 遍历buff列表 */ + forEach(fnc) { + return this.buffs.forEach(fnc); + } + /** 查找指定buff */ + find(type, value) { + return this.buffs.find(buff => buff[type] === value); + } operator(type, value, fnc) { this.forEach(buff => { if (buff[type] === value) { diff --git a/model/damage/BuffManager.ts b/model/damage/BuffManager.ts index 2a7dca2..b469188 100644 --- a/model/damage/BuffManager.ts +++ b/model/damage/BuffManager.ts @@ -222,13 +222,6 @@ export class BuffManager { return buffs } - /** - * 遍历buff列表 - */ - forEach(fnc: (buff: buff, index: number) => void) { - return this.buffs.forEach(fnc) - } - /** * 根据单个指定属性筛选buff,不作进一步判断 */ @@ -253,6 +246,16 @@ export class BuffManager { return this._filter(this.buffs, param, valueOcalc) } + /** 遍历buff列表 */ + forEach(fnc: (buff: buff, index: number) => void) { + return this.buffs.forEach(fnc) + } + + /** 查找指定buff */ + find(type: T, value: buff[T]) { + return this.buffs.find(buff => buff[type] === value) + } + operator(type: T, value: buff[T], fnc: (buff: buff) => void) { this.forEach(buff => { if (buff[type] === value) { diff --git a/model/damage/README.md b/model/damage/README.md index d3199fb..a019577 100644 --- a/model/damage/README.md +++ b/model/damage/README.md @@ -212,6 +212,7 @@ Buff来源可分为三大类:武器、套装、角色(影画、核心被动 > - 核心技中的技能各不相同,自行定义即可 > - Y 影画(如柏妮思6影额外伤害) +> - Y后接数字表示该技能为第n个影画的效果 > - 影画中的技能各不相同,自行定义即可 > - 属性异常(特殊) diff --git a/model/damage/character/柏妮思/calc.js b/model/damage/character/柏妮思/calc.js index bf5ccaf..e506717 100644 --- a/model/damage/character/柏妮思/calc.js +++ b/model/damage/character/柏妮思/calc.js @@ -4,7 +4,7 @@ export const buffs = [ name: '1影', type: '倍率', value: 1, - range: ['TY', 'YY'] + range: ['TY', 'Y6Y'] }, { name: '2影', @@ -22,14 +22,14 @@ export const buffs = [ type: '无视抗性', value: 0.25, element: 'Fire', - range: ['TY', 'YY', '灼烧'] + range: ['TY', 'Y6Y', '灼烧'] }, { name: '核心被动:燃油特调', type: '增伤', value: ({ calc }) => Math.min(30, Math.floor(calc.get_AnomalyProficiency() / 10)) * 0.01, isForever: true, - range: ['TY', 'YY'] + range: ['TY', 'Y6Y'] }, { name: '额外能力:星火燎原', @@ -70,13 +70,13 @@ export const skills = [ }, { name: '6影强化E双份额外余烬秒伤', - type: 'YY', + type: 'Y6Y', fixedMultiplier: 1.2, check: ({ avatar }) => avatar.rank >= 6 }, { name: '6影强化E双份额外灼烧', - type: 'Y灼烧', + type: 'Y6灼烧', check: ({ avatar }) => avatar.rank >= 6, dmg: (calc) => { const dmg = calc.calc_skill({ diff --git a/model/damage/character/莱特/calc.js b/model/damage/character/莱特/calc.js new file mode 100644 index 0000000..6db59f0 --- /dev/null +++ b/model/damage/character/莱特/calc.js @@ -0,0 +1,68 @@ +/** @type {import('../../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + name: '1影', + type: '无视抗性', + value: 0.1, + element: ['Fire', 'Ice'] + }, + { + name: '1影', + type: '增伤', + value: 0.3, + isForever: true, + range: ['AQ5Q'] + }, + { + name: '2影', + type: '增伤', + element: ['Fire', 'Ice'], + value: ({ buffM, calc }) => { + const buff = buffM.find('name', '额外能力:斗志昂扬') + if (!buff || !buff.status) return 0 + const value = calc.calc_value(buff.value) + return value * 0.2 + }, + }, + { + name: '核心被动:助燃剂', + type: '冲击力', + value: 'T' + }, + { + name: '核心被动:助燃剂', + type: '无视抗性', + value: 0.15, + element: ['Fire', 'Ice'] + }, + { + name: '额外能力:斗志昂扬', + type: '增伤', + element: ['Fire', 'Ice'], + value: ({ calc }) => { + const Impact = calc.get_Impact() + const step = 0.0125 + Math.max(0, Math.floor((Impact - 170) / 10) * 25 / 10000) + return Math.min(0.75, step * 20) + } + } +] + +/** @type {import('../../Calculator.ts').Calculator['skills']} */ +export const skills = [ + { name: '普攻:强力终结一击', type: 'AQ5Q' }, + { name: '闪避反击:烈闪', type: 'CF' }, + { name: '快速支援:烈闪-守', type: 'LK' }, + { name: '强化E:V式日轮升拳-全冲程', type: 'EQ1' }, + { name: '强化E:强力追击', type: 'EQ2' }, + { name: '连携技:V式灼日炎', type: 'RL' }, + { name: '终结技:W式桂冠终火', type: 'RZ' }, + { + name: '6影[火焰冲击]', + type: 'Y6', + check: ({ avatar }) => avatar.rank >= 6, + before: ({ calc, props }) => { + const Impact = calc.get_Impact() + props.倍率 = 2.5 + Math.min(5, Math.max(0, Math.floor(Impact - 170) * 5 / 100)) + } + }, +] \ No newline at end of file diff --git a/model/damage/character/莱特/data.json b/model/damage/character/莱特/data.json new file mode 100644 index 0000000..bef8dd3 --- /dev/null +++ b/model/damage/character/莱特/data.json @@ -0,0 +1,30 @@ +{ + "skill": { + "AQ5Q": [ + 4.354,4.75,5.146,5.542,5.938,6.334,6.73,7.126,7.522,7.918,8.314,8.71,9.106,9.502,9.898,10.294 + ], + "CF": [ + 1.863,2.033,2.203,2.373,2.543,2.713,2.883,3.053,3.223,3.393,3.563,3.733,3.903,4.073,4.243,4.413 + ], + "LK": [ + 0.697,0.761,0.825,0.889,0.953,1.017,1.081,1.145,1.209,1.273,1.337,1.401,1.465,1.529,1.593,1.657 + ], + "EQ1": [ + 4.863,5.306,5.749,6.192,6.635,7.078,7.521,7.964,8.407,8.85,9.293,9.736,10.179,10.622,11.065,11.508 + ], + "EQ2": [ + 2.927,3.194,3.461,3.728,3.995,4.262,4.529,4.796,5.063,5.33,5.597,5.864,6.131,6.398,6.665,6.932 + ], + "RL": [ + 7.121,7.769,8.417,9.065,9.713,10.361,11.009,11.657,12.305,12.953,13.601,14.249,14.897,15.545,16.193,16.841 + ], + "RZ": [ + 15.08,16.451,17.822,19.193,20.564,21.935,23.306,24.677,26.048,27.419,28.79,30.161,31.532,32.903,34.274,35.645 + ] + }, + "buff": { + "T": [ + 0.1,0.117,0.133,0.15,0.167,0.183,0.2 + ] + } +} \ No newline at end of file diff --git a/model/damage/character/露西/calc.js b/model/damage/character/露西/calc.js index 6d9d1d3..9dabbe3 100644 --- a/model/damage/character/露西/calc.js +++ b/model/damage/character/露西/calc.js @@ -51,7 +51,7 @@ export const skills = [ }, { name: '6影小猪空中落地爆炸', - type: 'Y', + type: 'Y6', check: ({ avatar }) => avatar.rank >= 6, fixedMultiplier: 3, props: {