diff --git a/model/damage/BuffManager.js b/model/damage/BuffManager.js index 85cc988..eb4499b 100644 --- a/model/damage/BuffManager.js +++ b/model/damage/BuffManager.js @@ -71,7 +71,7 @@ export class BuffManager { buff.source = oriBuff.source = '核心被动'; else if (buff.name.includes('额外能力')) buff.source = oriBuff.source = '额外能力'; - else if (buff.name.includes('影')) + else if (/^\d影/.test(buff.name)) buff.source = oriBuff.source = '影画'; else if (buff.name.includes('技')) buff.source = oriBuff.source = '技能'; @@ -88,8 +88,8 @@ export class BuffManager { const oriCheck = typeof buff.check === 'function' && buff.check; buff.check = ({ avatar, buffM, calc }) => professionCheck(avatar) && (!oriCheck || oriCheck({ avatar, buffM, calc })); } - else if (buff.source === '影画') { - buff.check ??= oriBuff.check = +buff.name.match(/\d/)?.[0]; + else if (buff.source === '影画' && !buff.check) { + buff.check = oriBuff.check = +buff.name[0]; } this.buffs.push(buff); return this.buffs; diff --git a/model/damage/BuffManager.ts b/model/damage/BuffManager.ts index 818bed7..3e7450f 100644 --- a/model/damage/BuffManager.ts +++ b/model/damage/BuffManager.ts @@ -152,7 +152,7 @@ export class BuffManager { if (!buff.source) { if (buff.name.includes('核心') || buff.name.includes('天赋')) buff.source = oriBuff.source = '核心被动' else if (buff.name.includes('额外能力')) buff.source = oriBuff.source = '额外能力' - else if (buff.name.includes('影')) buff.source = oriBuff.source = '影画' + else if (/^\d影/.test(buff.name)) buff.source = oriBuff.source = '影画' else if (buff.name.includes('技')) buff.source = oriBuff.source = '技能' } if (!buff.name || !buff.value || !buff.source || !buffTypeEnum[buffTypeEnum[buff.type]]) @@ -167,8 +167,8 @@ export class BuffManager { const oriCheck = typeof buff.check === 'function' && buff.check buff.check = ({ avatar, buffM, calc }) => professionCheck(avatar) && (!oriCheck || oriCheck({ avatar, buffM, calc })) // 影画buff影画数检查 - } else if (buff.source === '影画') { - buff.check ??= oriBuff.check = +buff.name.match(/\d/)!?.[0] + } else if (buff.source === '影画' && !buff.check) { + buff.check = oriBuff.check = +buff.name[0] } this.buffs.push(buff) return this.buffs diff --git a/model/damage/Calculator.js b/model/damage/Calculator.js index 4f70337..9b1bf5d 100644 --- a/model/damage/Calculator.js +++ b/model/damage/Calculator.js @@ -262,7 +262,7 @@ export class Calculator { } const base = {}; types.forEach(t => base[t] = t.includes('百分比') ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', ''))] * subBaseValueData[t][0] : subBaseValueData[t][0]); - logger.debug('词条变化值:', base); + logger.debug(logger.red('副词条差异计算变化值:'), base); const buffs = types.map(t => ({ name: t, shortName: prop.nameToShortName3(t), @@ -297,7 +297,7 @@ export class Calculator { } const base = {}; types.forEach(t => base[t] = (t.includes('百分比') || ['异常掌控', '冲击力', '能量自动回复'].includes(t)) ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', ''))] * mainBaseValueData[t][0] : mainBaseValueData[t][0]); - logger.debug(logger.red('词条变化值:'), base); + logger.debug(logger.red('主词条差异计算变化值:'), base); const buffs = types.map(t => { const data = { name: t, diff --git a/model/damage/Calculator.ts b/model/damage/Calculator.ts index b76dd00..681d452 100644 --- a/model/damage/Calculator.ts +++ b/model/damage/Calculator.ts @@ -451,7 +451,7 @@ export class Calculator { } const base: { [type: string]: number } = {} types.forEach(t => base[t] = t.includes('百分比') ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', '')) as keyof ZZZAvatarInfo['base_properties']] * subBaseValueData[t][0] : subBaseValueData[t][0]) - logger.debug('词条变化值:', base) + logger.debug(logger.red('副词条差异计算变化值:'), base) const buffs: { name: subStatKeys shortName: string @@ -502,7 +502,7 @@ export class Calculator { } const base: { [type: string]: number } = {} types.forEach(t => base[t] = (t.includes('百分比') || ['异常掌控', '冲击力', '能量自动回复'].includes(t)) ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', '')) as keyof ZZZAvatarInfo['base_properties']] * mainBaseValueData[t][0] : mainBaseValueData[t][0]) - logger.debug(logger.red('词条变化值:'), base) + logger.debug(logger.red('主词条差异计算变化值:'), base) const buffs: { name: mainStatKeys shortName: string diff --git a/model/damage/avatar.js b/model/damage/avatar.js index 149c53c..a7c6dd5 100644 --- a/model/damage/avatar.js +++ b/model/damage/avatar.js @@ -114,7 +114,9 @@ export function avatar_calc(avatar) { weapon_buff(avatar.weapon, buffM); set_buff(avatar.equip, buffM); if (m.buffs) { - const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '影画') || typeof v.check !== 'number' || v.check <= avatar.rank); + const vaildBuffs = m.buffs.filter(v => v.source ? + (v.source !== '影画' || typeof v.check !== 'number' || v.check <= avatar.rank) : + (!/^\d影/.test(v.name) || +v.name[0] <= avatar.rank)); buffM.new(vaildBuffs); } if (m.skills) diff --git a/model/damage/avatar.ts b/model/damage/avatar.ts index 484b844..7943082 100644 --- a/model/damage/avatar.ts +++ b/model/damage/avatar.ts @@ -148,7 +148,10 @@ export function avatar_calc(avatar: ZZZAvatarInfo) { weapon_buff(avatar.weapon, buffM) set_buff(avatar.equip, buffM) if (m.buffs) { - const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '影画') || typeof v.check !== 'number' || v.check <= avatar.rank) + // 预筛选影画buff + const vaildBuffs = m.buffs.filter(v => v.source ? + (v.source !== '影画' || typeof v.check !== 'number' || v.check <= avatar.rank) : + (!/^\d影/.test(v.name) || +v.name[0] <= avatar.rank)) buffM.new(vaildBuffs) } if (m.skills) calc.new(m.skills) @@ -199,6 +202,7 @@ export function set_buff(equips: ZZZAvatarInfo['equip'], buffM: BuffManager) { if (!m) continue buffM.default('name', name) if (m.buffs) { + // 预筛选套装buff const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '套装') || typeof v.check !== 'number' || v.check <= count) buffM.new(vaildBuffs) } diff --git a/model/damage/character/「席德」/calc.js b/model/damage/character/「席德」/calc.js new file mode 100644 index 0000000..3979e0b --- /dev/null +++ b/model/damage/character/「席德」/calc.js @@ -0,0 +1,79 @@ +/** @type {import('../../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + name: '1影', + type: '暴击伤害', + value: 0.3, + range: ['AB'] + }, + { + name: '2影', + type: '无视防御', + value: 0.2 + }, + { + name: '2影', + type: '增伤', + value: 0.05 * 24, + include: ['AZ'] + }, + { + name: '4影', + type: '增伤', + value: 0.2, + range: ['AZ'] + }, + { + name: '6影', + type: '暴击伤害', + value: 0.5 + }, + { + name: '核心被动:花链协议', + type: '攻击力', + value: 'T1' + }, + { + name: '核心被动:花链协议', + type: '暴击伤害', + value: 'T2' + }, + { + name: '核心被动:花链协议', + type: '增伤', + value: 'T3' + }, + { + name: '额外能力:奇兵轰临', + type: '增伤', + value: 0.3, + range: ['AZ', 'AB', 'RZ'] + }, + { + name: '额外能力:奇兵轰临', + type: '无视抗性', + value: 0.25, + element: 'Electric', + range: ['AZ', 'AB', 'RZ'] + } +] + +/** @type {import('../../Calculator.ts').Calculator['skills']} */ +export const skills = [ + { name: '感电每次', type: '感电' }, + { name: '普攻:霜蕊轮舞四段', type: 'AP4' }, + { name: '普攻:落华·重戮', type: 'AZ' }, + { name: '普攻:落华·崩坠一式', type: 'AB1' }, + { name: '普攻:落华·崩坠二式', type: 'AB2', isMain: true }, + { name: '闪避反击:裂萼纷华', type: 'CF' }, + { name: '支援突击:绯芯爆裂', type: 'LT' }, + { name: '长按强E:铁萼雨幕', type: 'EQX' }, + { name: '连携技:落霞风暴', type: 'RL' }, + { name: '终结技:机芯花园·绽放!', type: 'RZ' }, + { + name: '6影普攻:落华·重戮额外激光', + type: 'Y6', + check: 6, + multiplier: 1.65 * 3 + } +] \ 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..1f5d695 --- /dev/null +++ b/model/damage/character/「席德」/data.json @@ -0,0 +1,42 @@ +{ + "skill": { + "AP4": [ + 3.586,3.912,4.238,4.564,4.89,5.216,5.542,5.868,6.194,6.52,6.846,7.172,7.498,7.824,8.15,8.476 + ], + "AZ": [ + 1.666,1.818,1.97,2.122,2.274,2.426,2.578,2.73,2.882,3.034,3.186,3.338,3.49,3.642,3.794,3.946 + ], + "AB1": [ + 5.283,5.764,6.245,6.726,7.207,7.688,8.169,8.65,9.131,9.612,10.093,10.574,11.055,11.536,12.017,12.498 + ], + "AB2": [ + 9.894,10.794,11.694,12.594,13.494,14.394,15.294,16.194,17.094,17.994,18.894,19.794,20.694,21.594,22.494,23.394 + ], + "CF": [ + 3.201,3.492,3.783,4.074,4.365,4.656,4.947,5.238,5.529,5.82,6.111,6.402,6.693,6.984,7.275,7.566 + ], + "LT": [ + 4.56,4.975,5.39,5.805,6.22,6.635,7.05,7.465,7.88,8.295,8.71,9.125,9.54,9.955,10.37,10.785 + ], + "EQX": [ + 6.834,7.456,8.078,8.7,9.322,9.944,10.566,11.188,11.81,12.432,13.054,13.676,14.298,14.92,15.542,16.164 + ], + "RL": [ + 7.342,8.01,8.678,9.346,10.014,10.682,11.35,12.018,12.686,13.354,14.022,14.69,15.358,16.026,16.694,17.362 + ], + "RZ": [ + 32.497,35.452,38.407,41.362,44.317,47.272,50.227,53.182,56.137,59.092,62.047,65.002,67.957,70.912,73.867,76.822 + ] + }, + "buff": { + "T1": [ + 100,225,350,475,600,725,1000 + ], + "T2": [ + 0.15,0.175,0.2,0.225,0.25,0.275,0.3 + ], + "T3": [ + 0.125,0.145,0.165,0.185,0.205,0.225,0.25 + ] + } +} \ No newline at end of file diff --git a/model/damage/character/模板/calc.js b/model/damage/character/模板/calc.js index 68c662a..dd8c1ce 100644 --- a/model/damage/character/模板/calc.js +++ b/model/damage/character/模板/calc.js @@ -55,10 +55,12 @@ export function calc(buffM, calc, avatar) { range: [''] }) /** 注册技能 */ - calc.new({ name: '普通攻击:', type: '' }) - calc.new({ name: '强化特殊技:', type: '' }) - calc.new({ name: '连携技:', type: '' }) - calc.new({ name: '终结技:', type: '' }) + calc.new({ name: '普攻:', type: 'AP' }) + calc.new({ name: '闪避反击:', type: 'CF' }) + calc.new({ name: '支援突击:', type: 'LT' }) + calc.new({ name: '强E:', type: 'EQ' }) + calc.new({ name: '连携技:', type: 'RL' }) + calc.new({ name: '终结技:', type: 'RZ' }) calc.new({ name: '', type: '' }) } @@ -116,7 +118,7 @@ export const skills = [ { name: '普攻:', type: 'AP' }, { name: '闪避反击:', type: 'CF' }, { name: '支援突击:', type: 'LT' }, - { name: '强化特殊技:', type: 'EQ' }, + { name: '强E:', type: 'EQ' }, { name: '连携技:', type: 'RL' }, { name: '终结技:', type: 'RZ' }, { name: '', type: '' }, diff --git a/model/damage/character/模板/data.json b/model/damage/character/模板/data.json index dbe5020..d00cb8e 100644 --- a/model/damage/character/模板/data.json +++ b/model/damage/character/模板/data.json @@ -3,10 +3,10 @@ "AP": [ ], - "CC": [ + "CF": [ ], - "CF": [ + "LT": [ ], "EQ": [ diff --git a/model/damage/set/拂晓生花.js b/model/damage/set/拂晓生花.js new file mode 100644 index 0000000..061b6ff --- /dev/null +++ b/model/damage/set/拂晓生花.js @@ -0,0 +1,21 @@ +/** @type {import('../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + type: '增伤', + value: 0.15, + check: 2, + range: ['A'] + }, + { + type: '增伤', + value: 0.2, + check: 4, + range: ['A'] + }, + { + type: '增伤', + value: 0.2, + check: ({ avatar, buffM }) => buffM.setCount.拂晓生花 >= 4 && avatar.avatar_profession === 1, // 仅强攻角色 + range: ['A'] + } +] \ No newline at end of file diff --git a/model/damage/set/月光骑士颂.js b/model/damage/set/月光骑士颂.js new file mode 100644 index 0000000..0a804a5 --- /dev/null +++ b/model/damage/set/月光骑士颂.js @@ -0,0 +1,9 @@ +/** @type {import('../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + type: '增伤', + value: 0.18, + check: ({ avatar, buffM }) => buffM.setCount.月光骑士颂 >= 4 && avatar.avatar_profession === 4, // 仅支援角色 + is: { team: true } + } +] \ No newline at end of file diff --git a/model/damage/weapon/机巧心种.js b/model/damage/weapon/机巧心种.js new file mode 100644 index 0000000..8b64709 --- /dev/null +++ b/model/damage/weapon/机巧心种.js @@ -0,0 +1,17 @@ +/** @type {import('../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + type: '暴击率', + value: [0.15, 0.17, 0.19, 0.21, 0.23] + }, + { + type: '增伤', + value: [0.125, 0.145, 0.165, 0.185, 0.2].map(v => v * 2), + element: 'Electric' + }, + { + type: '无视防御', + value: [0.2, 0.23, 0.26, 0.29, 0.32], + range: ['A', 'RZ'] + } +] \ No newline at end of file diff --git a/model/damage/weapon/狸法七变化.js b/model/damage/weapon/狸法七变化.js new file mode 100644 index 0000000..44b7da6 --- /dev/null +++ b/model/damage/weapon/狸法七变化.js @@ -0,0 +1,13 @@ +/** @type {import('../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + type: '异常掌控', + value: [30, 34, 39, 43, 48], + check: ({ avatar }) => avatar.element_type === 200 + }, + { + type: '异常精通', + value: [60, 69, 78, 87, 96], + is: { team: true } + } +] \ No newline at end of file