From 14af1a20e16359ed0a86a6be35cb210752f5871f Mon Sep 17 00:00:00 2001 From: UCPr <2032385471@qq.com> Date: Sat, 9 Aug 2025 18:30:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=88=B1=E4=B8=BD=E4=B8=9D=E4=BC=A4=E5=AE=B3?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/damage/Calculator.js | 8 ++- model/damage/Calculator.ts | 8 ++- model/damage/character/柏妮思/calc.js | 1 - model/damage/character/爱丽丝/calc.js | 90 +++++++++++++++++++++++++ model/damage/character/爱丽丝/data.json | 34 ++++++++++ model/damage/character/薇薇安/calc.js | 3 +- model/damage/weapon/十方锻星.js | 12 ++++ resources/map/WeaponId2Data.json | 4 +- 8 files changed, 149 insertions(+), 11 deletions(-) create mode 100644 model/damage/character/爱丽丝/calc.js create mode 100644 model/damage/character/爱丽丝/data.json create mode 100644 model/damage/weapon/十方锻星.js diff --git a/model/damage/Calculator.js b/model/damage/Calculator.js index 40e68f8..cc57024 100644 --- a/model/damage/Calculator.js +++ b/model/damage/Calculator.js @@ -99,7 +99,9 @@ export class Calculator { logger.debug(`${logger.green(skill.type)}${skill.name}伤害计算:`); if (skill.dmg) { const dmg = skill.dmg(this); - dmg.skill ||= skill; + if (!dmg.skill || dmg.skill.name !== skill.name) { + dmg.skill = skill; + } logger.debug('自定义计算最终伤害:', dmg.result); return dmg; } @@ -183,7 +185,7 @@ export class Calculator { return; logger.debug('增加伤害:' + d.skill.name, d.result); damage.result.expectDMG += d.result.expectDMG; - damage.result.critDMG += d.result.critDMG; + damage.result.critDMG += d.result.critDMG || d.result.expectDMG; }; damage.fnc = (fnc) => { damage.result.critDMG = fnc(damage.result.critDMG); @@ -444,7 +446,7 @@ export class Calculator { default: return 0; } } - get(type, initial, skill, usefulBuffs = this.buffM.buffs, isRatio = false) { + get(type, initial, skill = this.skill, usefulBuffs = this.buffM.buffs, isRatio = false) { return this.props[type] ??= this.buffM._filter(usefulBuffs, { element: skill?.element, range: [skill?.type], diff --git a/model/damage/Calculator.ts b/model/damage/Calculator.ts index 39204fb..27385c5 100644 --- a/model/damage/Calculator.ts +++ b/model/damage/Calculator.ts @@ -254,7 +254,9 @@ export class Calculator { logger.debug(`${logger.green(skill.type)}${skill.name}伤害计算:`) if (skill.dmg) { const dmg = skill.dmg(this) - dmg.skill ||= skill + if (!dmg.skill || dmg.skill.name !== skill.name) { + dmg.skill = skill + } logger.debug('自定义计算最终伤害:', dmg.result) return dmg } @@ -334,7 +336,7 @@ export class Calculator { if (!d) return logger.debug('增加伤害:' + d.skill.name, d.result) damage.result.expectDMG += d.result.expectDMG - damage.result.critDMG += d.result.critDMG + damage.result.critDMG += d.result.critDMG || d.result.expectDMG } damage.fnc = (fnc) => { damage.result.critDMG = fnc(damage.result.critDMG) @@ -672,7 +674,7 @@ export class Calculator { * 获取局内属性原始值 * @param isRatio 是否启用buff.value为数值/字符串/数组类型且计算结果值<1时按 **`初始数值`** 百分比提高处理 */ - get(type: buff['type'], initial: number, skill: skill, usefulBuffs: buff[] = this.buffM.buffs, isRatio = false): number { + get(type: buff['type'], initial: number, skill: skill = this.skill, usefulBuffs: buff[] = this.buffM.buffs, isRatio = false): number { return this.props[type] ??= this.buffM._filter(usefulBuffs, { element: skill?.element, range: [skill?.type], diff --git a/model/damage/character/柏妮思/calc.js b/model/damage/character/柏妮思/calc.js index 3f400ad..dffcfda 100644 --- a/model/damage/character/柏妮思/calc.js +++ b/model/damage/character/柏妮思/calc.js @@ -86,7 +86,6 @@ export const skills = [ type: '灼烧', after: ({ damage }) => damage.x(18) }) - dmg.skill.name = '6影强化E双份额外灼烧' return dmg } }, diff --git a/model/damage/character/爱丽丝/calc.js b/model/damage/character/爱丽丝/calc.js new file mode 100644 index 0000000..3602eb6 --- /dev/null +++ b/model/damage/character/爱丽丝/calc.js @@ -0,0 +1,90 @@ +/** @type {import('../../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + name: '1影', + type: '无视防御', + value: 0.2 + }, + { + name: '2影', + type: '异常增伤', + value: 0.15, + range: ['强击'] + }, + { + name: '2影', + type: '异常增伤', + value: 0.15, + range: ['紊乱'], + element: 'Physical' + }, + { + name: '4影', + type: '无视抗性', + value: 0.1, + element: 'Physical' + }, + { + name: '核心被动:剑心双虹', + type: '倍率', + value: 1.8, + element: 'Physical', + range: ['紊乱'] + }, + { + name: '额外能力:寻奇猎幽', + type: '异常精通', + value: ({ calc }) => Math.max(0, calc.get_AnomalyMastery() - 140) * 1.6 + } +] + +/** @type {import('../../Calculator.ts').Calculator['skills']} */ +export const skills = [ + { name: '强击', type: '强击' }, + { name: '紊乱', type: '紊乱' }, + { + name: '核心被动:持续伤害每段', + type: 'TC', + dmg: (calc) => { + const dmg = calc.calc_skill({ + ...calc.skills.find(skill => skill.type === '强击'), + banCache: true, + after: ({ damage }) => damage.x(0.025) + }) + return dmg + } + }, + { name: '普攻:星仪序曲五段', type: 'AP5' }, + { name: '强化普攻:星仪序曲五段', type: 'AQ5' }, + { name: '蓄力普攻:星芒圆舞曲(一蓄)', type: 'AX1' }, + { name: '蓄力普攻:星芒圆舞曲(二蓄)', type: 'AX2' }, + { + name: '蓄力普攻:星芒圆舞曲(三蓄)', + type: 'AX3', + isMain: true, + after: ({ damage }) => damage.add('强击') + }, + { name: '闪避反击:剑闪之仪', type: 'CF' }, + { name: '强E:极光突刺·北十字', type: 'EQB' }, + { name: '强E:极光突刺·南十字', type: 'EQN' }, + { name: '连携技:星落间章', type: 'RL' }, + { + name: '终结技:星芒终章', + type: 'RZ', + after: ({ avatar, damage }) => { + if (avatar.rank >= 2) { + damage.add('强击') + } + } + }, + { + name: '6影[决胜状态]额外攻击', + type: 'Y6', + check: 6, + before: ({ areas, props, calc }) => { + const anomalyProficiency = calc.get_AnomalyProficiency() + props.暴击率 = 1 + areas.BasicArea = 33 * anomalyProficiency + } + } +] \ 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..ae21252 --- /dev/null +++ b/model/damage/character/爱丽丝/data.json @@ -0,0 +1,34 @@ +{ + "skill": { + "AP5": [ + 1.303,1.422,1.541,1.66,1.779,1.898,2.017,2.136,2.255,2.374,2.493,2.612,2.731,2.85,2.969,3.088 + ], + "AQ5": [ + 2.183,2.382,2.581,2.78,2.979,3.178,3.377,3.576,3.775,3.974,4.173,4.372,4.571,4.77,4.969,5.168 + ], + "AX1": [ + 1.889,2.061,2.233,2.405,2.577,2.749,2.921,3.093,3.265,3.437,3.609,3.781,3.953,4.125,4.297,4.469 + ], + "AX2": [ + 3.044,3.321,3.598,3.875,4.152,4.429,4.706,4.983,5.26,5.537,5.814,6.091,6.368,6.645,6.922,7.199 + ], + "AX3": [ + 9.657,10.535,11.413,12.291,13.169,14.047,14.925,15.803,16.681,17.559,18.437,19.315,20.193,21.071,21.949,22.827 + ], + "CF": [ + 2.84,3.099,3.358,3.617,3.876,4.135,4.394,4.653,4.912,5.171,5.43,5.689,5.948,6.207,6.466,6.725 + ], + "EQB": [ + 4.6,5.019,5.438,5.857,6.276,6.695,7.114,7.533,7.952,8.371,8.79,9.209,9.628,10.047,10.466,10.885 + ], + "EQN": [ + 5.32,5.804,6.288,6.772,7.256,7.74,8.224,8.708,9.192,9.676,10.16,10.644,11.128,11.612,12.096,12.58 + ], + "RL": [ + 6.663,7.269,7.875,8.481,9.087,9.693,10.299,10.905,11.511,12.117,12.723,13.329,13.935,14.541,15.147,15.753 + ], + "RZ": [ + 22.62,24.677,26.734,28.791,30.848,32.905,34.962,37.019,39.076,41.133,43.19,45.247,47.304,49.361,51.418,53.475 + ] + } +} \ No newline at end of file diff --git a/model/damage/character/薇薇安/calc.js b/model/damage/character/薇薇安/calc.js index 66f9492..ebab8aa 100644 --- a/model/damage/character/薇薇安/calc.js +++ b/model/damage/character/薇薇安/calc.js @@ -2,7 +2,7 @@ export const buffs = [ { name: '1影', - type: '异常增伤', // 异常易伤? + type: '异常增伤', value: 0.16, is: { team: true @@ -76,7 +76,6 @@ export const skills = [ ...calc.skills.find(skill => skill.type === '侵蚀·异放'), after: ({ damage }) => damage.x(5) }) - dmg.skill.name = '6影特殊异放·5护羽' return dmg } }, diff --git a/model/damage/weapon/十方锻星.js b/model/damage/weapon/十方锻星.js new file mode 100644 index 0000000..59104b2 --- /dev/null +++ b/model/damage/weapon/十方锻星.js @@ -0,0 +1,12 @@ +/** @type {import('../BuffManager.ts').BuffManager['buffs']} */ +export const buffs = [ + { + type: '异常掌控', + value: [60, 69, 78, 87, 96] + }, + { + type: '增伤', + value: [0.2, 0.23, 0.26, 0.29, 0.32].map(v => v * 2), + element: 'Physical' + } +] \ No newline at end of file diff --git a/resources/map/WeaponId2Data.json b/resources/map/WeaponId2Data.json index 8ec559f..7abe0ee 100644 --- a/resources/map/WeaponId2Data.json +++ b/resources/map/WeaponId2Data.json @@ -26883,7 +26883,7 @@ "Id": 14140, "CodeName": "Weapon_S_1401", "Name": "十方锻星", - "Desc": "繁星洒落在绝对秩序的罗网中,一如它们数年前映入少女澄澈的双眼。洋溢而出的自信,高雅,坚定,勇气与爱,此刻都锻作傲然的剑,紧紧握在她的掌间。\n\n「我想3D打印一个360度全方位无死角对称的模型…只要输入这样的指令就可以了吧?」——爱丽丝,在音擎烧出黑烟停止运作的前一分钟的发言", + "Desc": "繁星洒落在绝对秩序的罗网中,一如它们数年前映入少女澄澈的双眼。洋溢而出的自信,高雅,坚定,勇气与爱,此刻都锻作傲然的剑,紧紧握在她的掌间。\n\n「我想3D打印一个360度全方位无死角对称的模型…只要输入这样的指令就可以了吧?」——爱丽丝,在音擎烧出黑烟停止运作的前一分钟的发言", "Desc2": "装备后可提升[异常]代理人的战斗能力", "Desc3": "繁星化剑,她将勇气与爱紧紧握在掌间。", "Rarity": "S", @@ -27267,7 +27267,7 @@ "Id": 14141, "CodeName": "Weapon_S_1411", "Name": "狸法七变化", - "Desc": "精巧的小型音擎,原本是第一次参加学校空洞实习时发的便宜货,但因为体积小巧便于携带,柚叶始终难以割舍。\n\n第一次改造,增大了音擎的输出功率;第二次改造,追加了两个以太异常特化组件;第三次改造,尝试修改了内部布线,但不慎引起短路,把裙子烧了个洞;第四次改造,真斗帮忙修好了短路弄坏的热传导组件,但请真斗吃饭花的钱,已经足够买3个新的热传导组件了;第五次改造,更换了新的共鸣腔;第六次改造,提升了对驱动盘高频信号的响应速度。\n\n很好,它终于是一件完美的、可以陪伴主人出生入死的神兵利器了!然而——\n\n「爸,你见我音擎没?」\n\n「系果边啊,我帮你改左个外壳啦,之前太核突!唔可以畀人话我个女冇眼光!」\n\n「爸!这可是音擎诶,你搞这么华丽,万一弄坏了多可惜啊!」\n\n「咁就咪搞啲会整坏音擎嘅危险嘢啦!」", + "Desc": "精巧的小型音擎,原本是第一次参加学校空洞实习时发的便宜货,但因为体积小巧便于携带,柚叶始终难以割舍。\n第一次改造,增大了音擎的输出功率;第二次改造,追加了两个以太异常特化组件;第三次改造,尝试修改了内部布线,但不慎引起短路,把裙子烧了个洞;第四次改造,真斗帮忙修好了短路弄坏的热传导组件,但请真斗吃饭花的钱,已经足够买3个新的热传导组件了;第五次改造,更换了新的共鸣腔;第六次改造,提升了对驱动盘高频信号的响应速度。\n很好,它终于是一件完美的、可以陪伴主人出生入死的神兵利器了!然而——\n「爸,你见我音擎没?」\n「系果边啊,我帮你改左个外壳啦,之前太核突!唔可以畀人话我个女冇眼光!」\n「爸!这可是音擎诶,你搞这么华丽,万一弄坏了多可惜啊!」\n「咁就咪搞啲会整坏音擎嘅危险嘢啦!」", "Desc2": "装备后可提升[支援]代理人的战斗能力", "Desc3": "巧夺天工的造型,饱含制作者对美的追求。", "Rarity": "S",