雨果伤害计算等

This commit is contained in:
UCPr 2025-08-12 02:47:00 +08:00
parent 14af1a20e1
commit 151f87093a
20 changed files with 340 additions and 53 deletions

View file

@ -14,23 +14,37 @@ export interface skill {
type: string
/** 属性类型,不指定时,默认取角色属性 */
element: element
/** 技能倍率数组于character/角色名/data.json中自动获取该json中不存在相应数据时可填写该值以填写值为准 */
skillMultiplier?: number[]
/** 指定常数倍率(可吃倍率增益) */
fixedMultiplier?: number
/**
*
* @default number[] character//data.json中自动获取
* @number
*
* @string
* type`calc.get_SkillMultiplier(skill.multiplier)`
* @array
* - **`技能等级-1`**
* - character//data.json中自动获取
* @function
*
*/
multiplier?: number | string | number[] | (({ avatar, buffM, calc }: {
avatar: ZZZAvatarInfo
buffM: BuffManager
calc: Calculator
}) => number)
/** 指定局内固定属性 */
props?: { [key in buffType]?: number }
/**
*
*
* X"()Y()使Y的类型
* - range须全匹配redirect向后覆盖
* - range向后覆盖
* - range向后覆盖生效
* - range与type全匹配时生效redirect向后覆盖生效
*
*
*/
redirect?: string | string[] | anomaly[] | "追加攻击"[]
/** 是否为主要技能。`true`时%XX伤害 默认计算该技能 */
/** 是否为主要技能。`true`时%XX伤害 默认计算该技能且会作为角色伤害排名依据 */
isMain?: boolean
/** 角色面板伤害统计中是否隐藏显示 */
isHide?: boolean
@ -269,12 +283,29 @@ export class Calculator {
}, this)
const areas = {} as damage['areas']
if (skill.before) skill.before({ avatar: this.avatar, calc: this, usefulBuffs, skill, props, areas })
logger.debug(`有效buff*${usefulBuffs.length}/${this.buffM.buffs.length}`)
const isAnomaly = typeof anomalyEnum[skill.type.slice(0, 2) as anomaly] === 'number'
if (!areas.BasicArea) {
let Multiplier = props.
if (!Multiplier) {
if (skill.fixedMultiplier) {
Multiplier = skill.fixedMultiplier
if (skill.multiplier) { // 显式指定
switch (typeof skill.multiplier) {
case 'number':
Multiplier = skill.multiplier
break
case 'string':
Multiplier = this.get_SkillMultiplier(skill.multiplier)
break
case 'object':
Multiplier = skill.multiplier[this.get_SkillLevel(skill.type[0]) - 1]
break
case 'function':
Multiplier = skill.multiplier({ avatar: this.avatar, buffM: this.buffM, calc: this })
break
default:
Multiplier = this.get_SkillMultiplier(skill.type)
logger.warn('无效的技能倍率:', skill)
}
} else if (isAnomaly) {
Multiplier = (
skill.type.startsWith('紊乱') ?
@ -282,8 +313,7 @@ export class Calculator {
this.get_AnomalyMultiplier(skill, usefulBuffs, skill.name.includes('每') ? 1 : 0)
) || 0
} else {
if (skill.skillMultiplier) Multiplier = skill.skillMultiplier[this.get_SkillLevel(skill.type[0]) - 1]
else Multiplier = this.get_SkillMultiplier(skill.type)
Multiplier = this.get_SkillMultiplier(skill.type)
}
const ExtraMultiplier = this.get_ExtraMultiplier(skill, usefulBuffs)
Multiplier += ExtraMultiplier