Upd:零号·安比、波可娜等伤害计算

This commit is contained in:
UCPr 2025-03-14 22:07:25 +08:00
parent c293eba2d7
commit ca29580286
13 changed files with 302 additions and 15 deletions

View file

@ -49,7 +49,7 @@ export interface buff {
/** Buff状态true生效false无效 */
status: boolean
/** Buff是否常驻 */
isForever: boolean
isForever?: boolean
/** Buff名称 */
name: string
/** Buff来源 */
@ -80,7 +80,7 @@ export interface buff {
* - **redirect****range**
* - **redirect****range****redirect**
*/
range?: string[] | anomaly[]
range?: string[] | anomaly[] | "追加攻击"[]
/**
* Buff增益技能类型****
* - **range**
@ -110,8 +110,18 @@ export interface buff {
buffM: BuffManager
calc: Calculator
}) => boolean) | number
/** Buff描述符 */
is: {
/** 是否常驻 @default false*/
forever?: boolean
/** 是否团队增益 @default false */
team?: boolean
/** buff为团队增益时同类效果是否可叠加 @default false */
stack?: boolean
}
}
type filterable = 'name' | 'element' | 'type' | 'range' | 'source'
let depth = 0, weakMapCheck = new WeakMap<buff, boolean>()
/**
* Buff管理器
@ -143,8 +153,13 @@ export class BuffManager {
buff = _.merge({
status: true,
isForever: false,
is: {},
...this.defaultBuff
}, buff)
if (buff.isForever)
buff.is.forever = true
if (buff.range && !Array.isArray(buff.range))
buff.range = [buff.range]
if (!buff.source) {
if (buff.name.includes('核心') || buff.name.includes('天赋')) buff.source = 'Talent'
else if (buff.name.includes('额外能力')) buff.source = 'Addition'
@ -169,14 +184,14 @@ export class BuffManager {
return this.buffs
}
_filter<T extends keyof buff>(buffs: buff[], type: T, value: buff[T]): buff[]
_filter(buffs: buff[], obj: { [key in Exclude<keyof buff, 'status' | 'check' | 'element' | 'include' | 'exclude'>]?: buff[key] } & { element: element, redirect?: skill['type'] }, calc?: Calculator): 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[], fnc: (buff: buff, index: number) => boolean): buff[]
_filter<T extends keyof buff>(
_filter<T extends filterable>(
buffs: buff[],
param:
| T
| ({ [key in Exclude<keyof buff, 'status' | 'check' | 'element' | 'include' | 'exclude'>]?: buff[key] } & { element: element, redirect?: skill['type'] })
| (Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['type'] })
| ((buff: buff, index: number) => boolean),
valueOcalc?: buff[T] | Calculator
) {
@ -268,22 +283,22 @@ export class BuffManager {
/**
* buff
*/
filter<T extends keyof buff>(type: T, value: buff[T]): buff[]
filter<T extends filterable>(type: T, value: buff[T]): buff[]
/**
* **** buff
* - range数组的筛选
* - range须全匹配redirect向后覆盖
* - range向后覆盖
*/
filter(obj: { [key in Exclude<keyof buff, 'status' | 'check' | 'element' | 'include' | 'exclude'>]?: buff[key] } & { element: element, redirect?: skill['type'] }, calc?: Calculator): buff[]
filter(obj: Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['type'] }, calc?: Calculator): buff[]
/**
* buff
*/
filter(fnc: (buff: buff, index: number) => boolean): buff[]
filter<T extends keyof buff>(
filter<T extends filterable>(
param:
| T
| ({ [key in Exclude<keyof buff, 'status' | 'check' | 'element' | 'include' | 'exclude'>]?: buff[key] } & { element: element, redirect?: skill['type'] })
| (Partial<Pick<buff, filterable>> & { element: element, redirect?: skill['type'] })
| ((buff: buff, index: number) => boolean),
valueOcalc?: buff[T] | Calculator
) {