From 6c77855f6479e7216f72aae17e8e2d1b816a318e Mon Sep 17 00:00:00 2001 From: UCPr <2032385471@qq.com> Date: Mon, 24 Mar 2025 00:11:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=BF=BD=E5=8A=A0=E6=94=BB?= =?UTF-8?q?=E5=87=BB=E4=BC=A4=E5=AE=B3=E8=AE=A1=E7=AE=97=E5=A2=9E=E7=9B=8A?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/damage/BuffManager.js | 3 ++- model/damage/BuffManager.ts | 11 ++++++----- model/damage/Calculator.js | 2 +- model/damage/Calculator.ts | 6 ++++-- model/damage/character/波可娜/calc.js | 4 ++-- model/damage/character/零号·安比/calc.js | 4 ++-- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/model/damage/BuffManager.js b/model/damage/BuffManager.js index 78ac01a..84dcce5 100644 --- a/model/damage/BuffManager.js +++ b/model/damage/BuffManager.js @@ -143,7 +143,8 @@ export class BuffManager { else if (param.redirect) { if (skillRange.some(ST => buffRange.some(BT => BT === ST))) return true; - if (buffRange.some(BT => param.redirect.startsWith(BT))) + const redirect = Array.isArray(param.redirect) ? param.redirect : [param.redirect]; + if (buffRange.some(BT => redirect.some(RT => RT.startsWith(BT)))) return true; return false; } diff --git a/model/damage/BuffManager.ts b/model/damage/BuffManager.ts index 5b8f52d..7eb5ddb 100644 --- a/model/damage/BuffManager.ts +++ b/model/damage/BuffManager.ts @@ -185,13 +185,13 @@ export class BuffManager { } _filter(buffs: buff[], type: T, value: buff[T]): buff[] - _filter(buffs: buff[], obj: Partial> & { element: element, redirect?: skill['type'] }, calc?: Calculator): buff[] + _filter(buffs: buff[], obj: Partial> & { element: element, redirect?: skill['redirect'] }, calc?: Calculator): buff[] _filter(buffs: buff[], fnc: (buff: buff, index: number) => boolean): buff[] _filter( buffs: buff[], param: | T - | (Partial> & { element: element, redirect?: skill['type'] }) + | (Partial> & { element: element, redirect?: skill['redirect'] }) | ((buff: buff, index: number) => boolean), valueOcalc?: buff[T] | Calculator ) { @@ -221,7 +221,8 @@ export class BuffManager { // 存在重定向时,range须全匹配,redirect向后覆盖 else if (param.redirect) { if (skillRange.some(ST => buffRange.some(BT => BT === ST))) return true - if (buffRange.some(BT => param.redirect!.startsWith(BT))) return true + const redirect = Array.isArray(param.redirect) ? param.redirect : [param.redirect] + if (buffRange.some(BT => redirect.some(RT => RT.startsWith(BT)))) return true return false } // 不存在重定向时,range向后覆盖 @@ -290,7 +291,7 @@ export class BuffManager { * - 存在重定向时,range须全匹配,redirect向后覆盖 * - 不存在重定向时,range向后覆盖 */ - filter(obj: Partial> & { element: element, redirect?: skill['type'] }, calc?: Calculator): buff[] + filter(obj: Partial> & { element: element, redirect?: skill['redirect'] }, calc?: Calculator): buff[] /** * 根据指定函数筛选buff */ @@ -298,7 +299,7 @@ export class BuffManager { filter( param: | T - | (Partial> & { element: element, redirect?: skill['type'] }) + | (Partial> & { element: element, redirect?: skill['redirect'] }) | ((buff: buff, index: number) => boolean), valueOcalc?: buff[T] | Calculator ) { diff --git a/model/damage/Calculator.js b/model/damage/Calculator.js index 907d6ee..fde2336 100644 --- a/model/damage/Calculator.js +++ b/model/damage/Calculator.js @@ -276,7 +276,7 @@ export class Calculator { } /** * 获取局内属性原始值 - * @param isRatio 是否支持buff.value为数值类型且<1时按初始数值百分比提高处理 + * @param isRatio 是否支持buff.value为数值/字符串/数组类型且<1时按初始数值百分比提高处理 */ get(type, initial, skill, usefulBuffs = this.buffM.buffs, isRatio = false) { return this.props[type] ??= this.buffM._filter(usefulBuffs, { diff --git a/model/damage/Calculator.ts b/model/damage/Calculator.ts index 6d3c553..72f11b5 100644 --- a/model/damage/Calculator.ts +++ b/model/damage/Calculator.ts @@ -25,8 +25,10 @@ export interface skill { * 当出现“X"(造成的伤害)被视为“Y”(伤害)时,可使用该参数指定Y的类型。 * - 存在重定向时,range须全匹配,redirect向后覆盖 * - 不存在重定向时,range向后覆盖 + * + * 当为数组类型时(多类型共存),满足数组内其一类型即可,判断规则同上 */ - redirect?: string + redirect?: string | string[] /** 角色面板伤害统计中是否隐藏显示 */ isHide?: boolean /** 禁用伤害计算cache */ @@ -411,7 +413,7 @@ export class Calculator { /** * 获取局内属性原始值 - * @param isRatio 是否支持buff.value为数值类型且<1时按初始数值百分比提高处理 + * @param isRatio 是否支持buff.value为数值/字符串/数组类型且<1时按初始数值百分比提高处理 */ get(type: buff['type'], initial: number, skill: skill, usefulBuffs: buff[] = this.buffM.buffs, isRatio = false): number { return this.props[type] ??= this.buffM._filter(usefulBuffs, { diff --git a/model/damage/character/波可娜/calc.js b/model/damage/character/波可娜/calc.js index eba6f42..c324c7b 100644 --- a/model/damage/character/波可娜/calc.js +++ b/model/damage/character/波可娜/calc.js @@ -39,12 +39,12 @@ export const skills = [ { name: '特殊技:噬爪·噩梦袭影', type: 'EPLP', - redirect: '追加攻击' + redirect: ['EPLP', '追加攻击'] }, { name: '噬爪·噩梦袭影终结一击', type: 'EPLZ', - redirect: '追加攻击' + redirect: ['EPLZ', '追加攻击'] }, { name: '强化特殊技:噬爪·瞬步', type: 'EQ' }, { name: '连携技:嗨,想不到吧', type: 'RL' }, diff --git a/model/damage/character/零号·安比/calc.js b/model/damage/character/零号·安比/calc.js index 7758440..73781d9 100644 --- a/model/damage/character/零号·安比/calc.js +++ b/model/damage/character/零号·安比/calc.js @@ -48,13 +48,13 @@ export const skills = [ { name: '特殊技:苍光', type: 'EPC', - redirect: '追加攻击', + redirect: ['EPC', '追加攻击'], after: ({ damage }) => damage.add('EPC0') }, { name: '特殊技:雷殛', type: 'EPL', - redirect: '追加攻击' + redirect: ['EPL', '追加攻击'] }, { name: '强化特殊技:极雷断空', type: 'EQ' }, { name: '连携技:疾跃落雷', type: 'RL' },