mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 13:17:32 +00:00
Upd:零号·安比、波可娜等伤害计算
This commit is contained in:
parent
c293eba2d7
commit
ca29580286
13 changed files with 302 additions and 15 deletions
|
|
@ -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
|
||||
) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue