修正追加攻击伤害计算增益判断

This commit is contained in:
UCPr 2025-03-24 00:11:12 +08:00
parent a54fee3edb
commit 6c77855f64
6 changed files with 17 additions and 13 deletions

View file

@ -143,7 +143,8 @@ export class BuffManager {
else if (param.redirect) { else if (param.redirect) {
if (skillRange.some(ST => buffRange.some(BT => BT === ST))) if (skillRange.some(ST => buffRange.some(BT => BT === ST)))
return true; 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 true;
return false; return false;
} }

View file

@ -185,13 +185,13 @@ export class BuffManager {
} }
_filter<T extends filterable>(buffs: buff[], type: T, value: buff[T]): buff[] _filter<T extends filterable>(buffs: buff[], type: T, value: buff[T]): buff[]
_filter(buffs: buff[], obj: Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['type'] }, calc?: Calculator): buff[] _filter(buffs: buff[], obj: Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['redirect'] }, calc?: Calculator): buff[]
_filter(buffs: buff[], fnc: (buff: buff, index: number) => boolean): buff[] _filter(buffs: buff[], fnc: (buff: buff, index: number) => boolean): buff[]
_filter<T extends filterable>( _filter<T extends filterable>(
buffs: buff[], buffs: buff[],
param: param:
| T | T
| (Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['type'] }) | (Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['redirect'] })
| ((buff: buff, index: number) => boolean), | ((buff: buff, index: number) => boolean),
valueOcalc?: buff[T] | Calculator valueOcalc?: buff[T] | Calculator
) { ) {
@ -221,7 +221,8 @@ export class BuffManager {
// 存在重定向时range须全匹配redirect向后覆盖 // 存在重定向时range须全匹配redirect向后覆盖
else if (param.redirect) { else if (param.redirect) {
if (skillRange.some(ST => buffRange.some(BT => BT === ST))) return true 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 return false
} }
// 不存在重定向时range向后覆盖 // 不存在重定向时range向后覆盖
@ -290,7 +291,7 @@ export class BuffManager {
* - range须全匹配redirect向后覆盖 * - range须全匹配redirect向后覆盖
* - range向后覆盖 * - range向后覆盖
*/ */
filter(obj: Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['type'] }, calc?: Calculator): buff[] filter(obj: Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['redirect'] }, calc?: Calculator): buff[]
/** /**
* buff * buff
*/ */
@ -298,7 +299,7 @@ export class BuffManager {
filter<T extends filterable>( filter<T extends filterable>(
param: param:
| T | T
| (Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['type'] }) | (Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['redirect'] })
| ((buff: buff, index: number) => boolean), | ((buff: buff, index: number) => boolean),
valueOcalc?: buff[T] | Calculator valueOcalc?: buff[T] | Calculator
) { ) {

View file

@ -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) { get(type, initial, skill, usefulBuffs = this.buffM.buffs, isRatio = false) {
return this.props[type] ??= this.buffM._filter(usefulBuffs, { return this.props[type] ??= this.buffM._filter(usefulBuffs, {

View file

@ -25,8 +25,10 @@ export interface skill {
* X"()Y()使Y的类型 * X"()Y()使Y的类型
* - range须全匹配redirect向后覆盖 * - range须全匹配redirect向后覆盖
* - range向后覆盖 * - range向后覆盖
*
*
*/ */
redirect?: string redirect?: string | string[]
/** 角色面板伤害统计中是否隐藏显示 */ /** 角色面板伤害统计中是否隐藏显示 */
isHide?: boolean isHide?: boolean
/** 禁用伤害计算cache */ /** 禁用伤害计算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 { get(type: buff['type'], initial: number, skill: skill, usefulBuffs: buff[] = this.buffM.buffs, isRatio = false): number {
return this.props[type] ??= this.buffM._filter(usefulBuffs, { return this.props[type] ??= this.buffM._filter(usefulBuffs, {

View file

@ -39,12 +39,12 @@ export const skills = [
{ {
name: '特殊技:噬爪·噩梦袭影', name: '特殊技:噬爪·噩梦袭影',
type: 'EPLP', type: 'EPLP',
redirect: '追加攻击' redirect: ['EPLP', '追加攻击']
}, },
{ {
name: '噬爪·噩梦袭影终结一击', name: '噬爪·噩梦袭影终结一击',
type: 'EPLZ', type: 'EPLZ',
redirect: '追加攻击' redirect: ['EPLZ', '追加攻击']
}, },
{ name: '强化特殊技:噬爪·瞬步', type: 'EQ' }, { name: '强化特殊技:噬爪·瞬步', type: 'EQ' },
{ name: '连携技:嗨,想不到吧', type: 'RL' }, { name: '连携技:嗨,想不到吧', type: 'RL' },

View file

@ -48,13 +48,13 @@ export const skills = [
{ {
name: '特殊技:苍光', name: '特殊技:苍光',
type: 'EPC', type: 'EPC',
redirect: '追加攻击', redirect: ['EPC', '追加攻击'],
after: ({ damage }) => damage.add('EPC0') after: ({ damage }) => damage.add('EPC0')
}, },
{ {
name: '特殊技:雷殛', name: '特殊技:雷殛',
type: 'EPL', type: 'EPL',
redirect: '追加攻击' redirect: ['EPL', '追加攻击']
}, },
{ name: '强化特殊技:极雷断空', type: 'EQ' }, { name: '强化特殊技:极雷断空', type: 'EQ' },
{ name: '连携技:疾跃落雷', type: 'RL' }, { name: '连携技:疾跃落雷', type: 'RL' },