From 0aff315d5a28185b557a1369aab4da47884747a2 Mon Sep 17 00:00:00 2001 From: UCPr <2032385471@qq.com> Date: Tue, 9 Sep 2025 00:49:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9F=9A=E5=8F=B6=E4=BC=A4?= =?UTF-8?q?=E5=AE=B3=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/damage/BuffManager.ts | 4 +- model/damage/README.md | 2 + model/damage/avatar.js | 12 +++-- model/damage/avatar.ts | 10 +++- model/damage/character/柚叶/calc.js | 77 +++++++++++++++++++++++++++ model/damage/character/柚叶/data.json | 34 ++++++++++++ model/damage/character/模板/calc.js | 2 +- 7 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 model/damage/character/柚叶/calc.js create mode 100644 model/damage/character/柚叶/data.json diff --git a/model/damage/BuffManager.ts b/model/damage/BuffManager.ts index d75d9c8..818bed7 100644 --- a/model/damage/BuffManager.ts +++ b/model/damage/BuffManager.ts @@ -95,8 +95,8 @@ export interface buff { * @function * 音擎会自动添加职业检查 * @number - * - buff.source为Set时,判断套装数量>=该值 - * - buff.source为Rank时,判断影画数量>=该值 + * - buff.source为**套装**时,判断套装数量>=该值 + * - buff.source为**影画**时,判断影画数量>=该值 */ check?: (({ avatar, buffM, calc }: { avatar: ZZZAvatarInfo diff --git a/model/damage/README.md b/model/damage/README.md index 3ab4730..54cf02e 100644 --- a/model/damage/README.md +++ b/model/damage/README.md @@ -528,6 +528,8 @@ export function calc(buffM, calc, avatar) { - [x] 驱动盘词条差异计算 - [ ] 伤害计算buff指令热注入 - [ ] 伤害计算敌人自定义 +- [ ] %XX面板换XXX指令 +- [ ] 角色伤害、防卫战层数耗时、危局星数得分、爬塔排名 - [ ] 组队伤害计算 - [ ] 失衡值累积计算 - [ ] ~~异常积蓄值计算~~ diff --git a/model/damage/avatar.js b/model/damage/avatar.js index f3d8153..149c53c 100644 --- a/model/damage/avatar.js +++ b/model/damage/avatar.js @@ -113,8 +113,10 @@ export function avatar_calc(avatar) { logger.debug('initial_properties', avatar.initial_properties); weapon_buff(avatar.weapon, buffM); set_buff(avatar.equip, buffM); - if (m.buffs) - buffM.new(m.buffs); + if (m.buffs) { + const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '影画') || typeof v.check !== 'number' || v.check <= avatar.rank); + buffM.new(vaildBuffs); + } if (m.skills) calc.new(m.skills); if (m.calc) @@ -164,8 +166,10 @@ export function set_buff(equips, buffM) { if (!m) continue; buffM.default('name', name); - if (m.buffs) - buffM.new(m.buffs); + if (m.buffs) { + const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '套装') || typeof v.check !== 'number' || v.check <= count); + buffM.new(vaildBuffs); + } if (m.calc) m.calc(buffM, count); } diff --git a/model/damage/avatar.ts b/model/damage/avatar.ts index 12af0bd..484b844 100644 --- a/model/damage/avatar.ts +++ b/model/damage/avatar.ts @@ -147,7 +147,10 @@ export function avatar_calc(avatar: ZZZAvatarInfo) { logger.debug('initial_properties', avatar.initial_properties) weapon_buff(avatar.weapon, buffM) set_buff(avatar.equip, buffM) - if (m.buffs) buffM.new(m.buffs) + if (m.buffs) { + const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '影画') || typeof v.check !== 'number' || v.check <= avatar.rank) + buffM.new(vaildBuffs) + } if (m.skills) calc.new(m.skills) if (m.calc) m.calc(buffM, calc, avatar) logger.debug(`Buff*${buffM.buffs.length}:`, buffM.buffs) @@ -195,7 +198,10 @@ export function set_buff(equips: ZZZAvatarInfo['equip'], buffM: BuffManager) { const m = calcFnc.set[name] if (!m) continue buffM.default('name', name) - if (m.buffs) buffM.new(m.buffs) + if (m.buffs) { + const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '套装') || typeof v.check !== 'number' || v.check <= count) + buffM.new(vaildBuffs) + } if (m.calc) m.calc(buffM, count) } buffM.default({}) diff --git a/model/damage/character/柚叶/calc.js b/model/damage/character/柚叶/calc.js new file mode 100644 index 0000000..fffbdae --- /dev/null +++ b/model/damage/character/柚叶/calc.js @@ -0,0 +1,77 @@ +/** @type {import('../../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + name: '1影', + type: '无视抗性', + value: 0.1, + is: { team: true } + }, + { + name: '2影', + type: '增伤', + value: 0.15, + is: { team: true } + }, + { + name: '4影', + type: '增伤', + value: 0.3, + range: ['LT'] + }, + { + name: '6影', + type: '倍率', + value: 1.05 * 3, + range: ['紊乱'] + }, + { + name: '核心被动:奇巧缤纷', + type: '攻击力', + value: ({ avatar, calc }) => { + const initial_ATK = avatar.initial_properties.ATK + const level = calc.get_SkillLevel('T') + const max = [600, 700, 800, 900, 1000, 1100, 1200][level - 1] + return Math.min(max, initial_ATK * 0.4) + }, + is: { team: true } + }, + { + name: '核心被动:奇巧缤纷', + type: '增伤', + value: 0.15, + is: { team: true } + }, + { + name: '额外能力:人多乐趣大', + type: '异常增伤', + value: ({ avatar }) => { + const { AnomalyMastery } = avatar.initial_properties + if (AnomalyMastery <= 100) return 0 + return Math.min(0.2, (AnomalyMastery - 100) * 0.002) * (avatar.rank >= 1 ? 1.3 : 1) + }, + is: { team: true } + } +] + +/** @type {import('../../Calculator.ts').Calculator['skills']} */ +export const skills = [ + { name: '强击', type: '强击' }, + { name: '紊乱', type: '紊乱' }, + { name: '普攻:狸之爪五段', type: 'AP5' }, + { name: '普攻:硬糖射击', type: 'AY' }, + { name: '普攻:彩糖花火·极', type: 'ACS' }, + { name: '闪避反击:报复开始~', type: 'CF' }, + { name: '支援突击:来块曲奇', type: 'LTP' }, + { name: '支援突击:夹心硬糖射击', type: 'LTS' }, + { name: '强E:小心蛀牙', type: 'EQP', isMain: true }, + { name: '强E:小心蛀牙,就是现在!', type: 'EQS' }, + { name: '连携技:恶作剧合战', type: 'RL' }, + { name: '终结技:不投降就捣乱', type: 'RZ' }, + { + name: '6影支援突击蓄力每炮弹', + type: 'Y6', + check: 6, + multiplier: 3, + redirect: 'LTS' + } +] \ 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..f71ed4d --- /dev/null +++ b/model/damage/character/柚叶/data.json @@ -0,0 +1,34 @@ +{ + "skill": { + "AP5": [ + 1.641,1.791,1.941,2.091,2.241,2.391,2.541,2.691,2.841,2.991,3.141,3.291,3.441,3.591,3.741,3.891 + ], + "AY": [ + 1.32,1.44,1.56,1.68,1.8,1.92,2.04,2.16,2.28,2.4,2.52,2.64,2.76,2.88,3,3.12 + ], + "ACS": [ + 3.08,3.36,3.64,3.92,4.2,4.48,4.76,5.04,5.32,5.6,5.88,6.16,6.44,6.72,7,7.28 + ], + "CF": [ + 2.769,3.021,3.273,3.525,3.777,4.029,4.281,4.533,4.785,5.037,5.289,5.541,5.793,6.045,6.297,6.549 + ], + "LTP": [ + 2.943,3.211,3.479,3.747,4.015,4.283,4.551,4.819,5.087,5.355,5.623,5.891,6.159,6.427,6.695,6.963 + ], + "LTS": [ + 4.636,5.058,5.48,5.902,6.324,6.746,7.168,7.59,8.012,8.434,8.856,9.278,9.7,10.122,10.544,10.966 + ], + "EQP": [ + 4.21,4.593,4.976,5.359,5.742,6.125,6.508,6.891,7.274,7.657,8.04,8.423,8.806,9.189,9.572,9.955 + ], + "EQS": [ + 2.414,2.634,2.854,3.074,3.294,3.514,3.734,3.954,4.174,4.394,4.614,4.834,5.054,5.274,5.494,5.714 + ], + "RL": [ + 5.987,6.532,7.077,7.622,8.167,8.712,9.257,9.802,10.347,10.892,11.437,11.982,12.527,13.072,13.617,14.162 + ], + "RZ": [ + 14.432,15.744,17.056,18.368,19.68,20.992,22.304,23.616,24.928,26.24,27.552,28.864,30.176,31.488,32.8,34.112 + ] + } +} \ No newline at end of file diff --git a/model/damage/character/模板/calc.js b/model/damage/character/模板/calc.js index df2be97..68c662a 100644 --- a/model/damage/character/模板/calc.js +++ b/model/damage/character/模板/calc.js @@ -114,8 +114,8 @@ export const buffs = [ /** @type {import('../../Calculator.ts').Calculator['skills']} */ export const skills = [ { name: '普攻:', type: 'AP' }, - { name: '冲刺攻击:', type: 'CC' }, { name: '闪避反击:', type: 'CF' }, + { name: '支援突击:', type: 'LT' }, { name: '强化特殊技:', type: 'EQ' }, { name: '连携技:', type: 'RL' }, { name: '终结技:', type: 'RZ' },