优化伤害计算等

This commit is contained in:
UCPr 2025-05-31 18:51:04 +08:00
parent 7ace8908ff
commit 95a2ee64de
50 changed files with 173 additions and 221 deletions

View file

@ -20,16 +20,8 @@ export type element = keyof typeof elementEnum
/** 异常类型 */
export type anomaly = keyof typeof anomalyEnum
/**
* Buff来源
* @Weapon
* @Set
* @Rank
* @Talent
* @Addition
* @Skill
*/
export type buffSource = 'Weapon' | 'Set' | 'Rank' | 'Talent' | 'Addition' | 'Skill'
/** Buff来源 */
export type buffSource = '音擎' | '套装' | '技能' | '影画' | '核心被动' | '额外能力'
export enum buffTypeEnum {
// 通用乘区
@ -48,8 +40,6 @@ export type buffType = keyof typeof buffTypeEnum
export interface buff {
/** Buff状态true生效false无效 */
status: boolean
/** Buff是否常驻 */
isForever?: boolean
/** Buff名称 */
name: string
/** Buff来源 */
@ -57,34 +47,35 @@ export interface buff {
/** Buff增益的类型 */
type: buffType
/**
* Buff增益数值
* Buff增益数值
* @number
* -
* - buff增益类型为**/////** **<1**则将此值理解为**初始属性****百分比提高**
* @array
* buff.source自动选择对应等级/source
* - Weapon
* - Talent/Addition
* @function
*
* @string
* buff提高值可能随技能/data.json的"buff"value即为键名
* @array
* buff.source自动选择对应等级/source
* -
* -
* @function
*
*/
value: number | (({ avatar, buffM, calc }: {
value: number | string | number[] | (({ avatar, buffM, calc }: {
avatar: ZZZAvatarInfo
buffM: BuffManager
calc: Calculator
}) => number) | string | number[]
}) => number)
/**
* Buff增益技能类型****
* - **redirect****range**
* - **redirect****range****redirect**
* - 使**include****exclude**
*/
range?: string[] | anomaly[] | "追加攻击"[]
/**
* Buff增益技能类型****
* - **range**
* - **range****include**buff对全部技能生
* - **range****include**buff对**exclude**
* - **range****include**buff生效
* - **redirect****range****include****include****redirect**
*/
@ -100,7 +91,7 @@ export interface buff {
/**
* buff是否生效
* @function
*
*
* @number
* - buff.source为Set时>=
* - buff.source为Rank时>=
@ -112,8 +103,6 @@ export interface buff {
}) => boolean) | number
/** Buff描述符 */
is: {
/** 是否常驻 @default false*/
forever?: boolean
/** 是否团队增益 @default false */
team?: boolean
/** 为团队增益时,同名效果是否可叠加 @default false */
@ -148,29 +137,26 @@ export class BuffManager {
return this.buffs
}
// 简化参数
if (!buff.name && (buff.source || this.defaultBuff.source) === 'Set' && this.defaultBuff.name && typeof buff.check === 'number')
if (!buff.name && (buff.source || this.defaultBuff.source) === '套装' && this.defaultBuff.name && typeof buff.check === 'number')
buff.name = this.defaultBuff.name + buff.check
const oriBuff = buff
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 = oriBuff.range = [buff.range]
if (!buff.source) {
if (buff.name.includes('核心') || buff.name.includes('天赋')) buff.source = oriBuff.source = 'Talent'
else if (buff.name.includes('额外能力')) buff.source = oriBuff.source = 'Addition'
else if (buff.name.includes('影')) buff.source = oriBuff.source = 'Rank'
else if (buff.name.includes('技')) buff.source = oriBuff.source = 'Skill'
if (buff.name.includes('核心') || buff.name.includes('天赋')) buff.source = oriBuff.source = '核心被动'
else if (buff.name.includes('额外能力')) buff.source = oriBuff.source = '额外能力'
else if (buff.name.includes('影')) buff.source = oriBuff.source = '影画'
else if (buff.name.includes('技')) buff.source = oriBuff.source = '技能'
}
if (!buff.name || !buff.value || !buff.source || !buffTypeEnum[buffTypeEnum[buff.type]])
return logger.warn('无效buff', buff)
// 武器buff职业检查
if (buff.source === 'Weapon') {
// 音擎buff职业检查
if (buff.source === '音擎') {
const professionCheck = (avatar: ZZZAvatarInfo) => {
const weapon_profession = avatar.weapon?.profession
if (!weapon_profession) return true
@ -179,7 +165,7 @@ export class BuffManager {
const oriCheck = typeof buff.check === 'function' && buff.check
buff.check = ({ avatar, buffM, calc }) => professionCheck(avatar) && (!oriCheck || oriCheck({ avatar, buffM, calc }))
// 影画buff影画数检查
} else if (buff.source === 'Rank') {
} else if (buff.source === '影画') {
buff.check ??= oriBuff.check = +buff.name.match(/\d/)!?.[0]
}
this.buffs.push(buff)
@ -248,8 +234,8 @@ export class BuffManager {
}
if (buff.check) {
if (typeof buff.check === 'number') {
if (buff.source === 'Set' && (this.setCount[buff.name.replace(/\d$/, '')] < buff.check)) return false
else if (buff.source === 'Rank' && (this.avatar.rank < buff.check)) return false
if (buff.source === '套装' && (this.setCount[buff.name.replace(/\d$/, '')] < buff.check)) return false
else if (buff.source === '影画' && (this.avatar.rank < buff.check)) return false
} else if (valueOcalc) {
if (weakMapCheck.has(buff)) {
// console.log(`depth${depth} ${buff.name}${weakMapCheck.get(buff)}`)