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
|
|
@ -72,8 +72,13 @@ export class BuffManager {
|
||||||
buff = _.merge({
|
buff = _.merge({
|
||||||
status: true,
|
status: true,
|
||||||
isForever: false,
|
isForever: false,
|
||||||
|
is: {},
|
||||||
...this.defaultBuff
|
...this.defaultBuff
|
||||||
}, buff);
|
}, buff);
|
||||||
|
if (buff.isForever)
|
||||||
|
buff.is.forever = true;
|
||||||
|
if (buff.range && !Array.isArray(buff.range))
|
||||||
|
buff.range = [buff.range];
|
||||||
if (!buff.source) {
|
if (!buff.source) {
|
||||||
if (buff.name.includes('核心') || buff.name.includes('天赋'))
|
if (buff.name.includes('核心') || buff.name.includes('天赋'))
|
||||||
buff.source = 'Talent';
|
buff.source = 'Talent';
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ export interface buff {
|
||||||
/** Buff状态,true生效,false无效 */
|
/** Buff状态,true生效,false无效 */
|
||||||
status: boolean
|
status: boolean
|
||||||
/** Buff是否常驻 */
|
/** Buff是否常驻 */
|
||||||
isForever: boolean
|
isForever?: boolean
|
||||||
/** Buff名称 */
|
/** Buff名称 */
|
||||||
name: string
|
name: string
|
||||||
/** Buff来源 */
|
/** Buff来源 */
|
||||||
|
|
@ -80,7 +80,7 @@ export interface buff {
|
||||||
* - 当技能参数不存在**redirect**时,**range**作用范围向后覆盖
|
* - 当技能参数不存在**redirect**时,**range**作用范围向后覆盖
|
||||||
* - 当技能参数存在**redirect**时,**range**须全匹配,**redirect**向后覆盖
|
* - 当技能参数存在**redirect**时,**range**须全匹配,**redirect**向后覆盖
|
||||||
*/
|
*/
|
||||||
range?: string[] | anomaly[]
|
range?: string[] | anomaly[] | "追加攻击"[]
|
||||||
/**
|
/**
|
||||||
* Buff增益技能类型**生效技能**
|
* Buff增益技能类型**生效技能**
|
||||||
* - 不同于**range**,仅全匹配时该值生效,不会向后覆盖
|
* - 不同于**range**,仅全匹配时该值生效,不会向后覆盖
|
||||||
|
|
@ -110,8 +110,18 @@ export interface buff {
|
||||||
buffM: BuffManager
|
buffM: BuffManager
|
||||||
calc: Calculator
|
calc: Calculator
|
||||||
}) => boolean) | number
|
}) => 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>()
|
let depth = 0, weakMapCheck = new WeakMap<buff, boolean>()
|
||||||
/**
|
/**
|
||||||
* Buff管理器
|
* Buff管理器
|
||||||
|
|
@ -143,8 +153,13 @@ export class BuffManager {
|
||||||
buff = _.merge({
|
buff = _.merge({
|
||||||
status: true,
|
status: true,
|
||||||
isForever: false,
|
isForever: false,
|
||||||
|
is: {},
|
||||||
...this.defaultBuff
|
...this.defaultBuff
|
||||||
}, buff)
|
}, buff)
|
||||||
|
if (buff.isForever)
|
||||||
|
buff.is.forever = true
|
||||||
|
if (buff.range && !Array.isArray(buff.range))
|
||||||
|
buff.range = [buff.range]
|
||||||
if (!buff.source) {
|
if (!buff.source) {
|
||||||
if (buff.name.includes('核心') || buff.name.includes('天赋')) buff.source = 'Talent'
|
if (buff.name.includes('核心') || buff.name.includes('天赋')) buff.source = 'Talent'
|
||||||
else if (buff.name.includes('额外能力')) buff.source = 'Addition'
|
else if (buff.name.includes('额外能力')) buff.source = 'Addition'
|
||||||
|
|
@ -169,14 +184,14 @@ export class BuffManager {
|
||||||
return this.buffs
|
return this.buffs
|
||||||
}
|
}
|
||||||
|
|
||||||
_filter<T extends keyof buff>(buffs: buff[], type: T, value: buff[T]): buff[]
|
_filter<T extends filterable>(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(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(buffs: buff[], fnc: (buff: buff, index: number) => boolean): buff[]
|
||||||
_filter<T extends keyof buff>(
|
_filter<T extends filterable>(
|
||||||
buffs: buff[],
|
buffs: buff[],
|
||||||
param:
|
param:
|
||||||
| T
|
| 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),
|
| ((buff: buff, index: number) => boolean),
|
||||||
valueOcalc?: buff[T] | Calculator
|
valueOcalc?: buff[T] | Calculator
|
||||||
) {
|
) {
|
||||||
|
|
@ -268,22 +283,22 @@ export class BuffManager {
|
||||||
/**
|
/**
|
||||||
* 根据单个指定属性筛选buff,不作进一步判断
|
* 根据单个指定属性筛选buff,不作进一步判断
|
||||||
*/
|
*/
|
||||||
filter<T extends keyof buff>(type: T, value: buff[T]): buff[]
|
filter<T extends filterable>(type: T, value: buff[T]): buff[]
|
||||||
/**
|
/**
|
||||||
* 根据多个指定属性筛选 **启用状态** 的buff
|
* 根据多个指定属性筛选 **启用状态** 的buff
|
||||||
* - 对伤害类型range数组的筛选,只要其中有一个符合即认为满足
|
* - 对伤害类型range数组的筛选,只要其中有一个符合即认为满足
|
||||||
* - 存在重定向时,range须全匹配,redirect向后覆盖
|
* - 存在重定向时,range须全匹配,redirect向后覆盖
|
||||||
* - 不存在重定向时,range向后覆盖
|
* - 不存在重定向时,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
|
* 根据指定函数筛选buff
|
||||||
*/
|
*/
|
||||||
filter(fnc: (buff: buff, index: number) => boolean): buff[]
|
filter(fnc: (buff: buff, index: number) => boolean): buff[]
|
||||||
filter<T extends keyof buff>(
|
filter<T extends filterable>(
|
||||||
param:
|
param:
|
||||||
| T
|
| 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),
|
| ((buff: buff, index: number) => boolean),
|
||||||
valueOcalc?: buff[T] | Calculator
|
valueOcalc?: buff[T] | Calculator
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,10 @@ export class Calculator {
|
||||||
skill.element = elementType2element(this.avatar.element_type);
|
skill.element = elementType2element(this.avatar.element_type);
|
||||||
if (!skill.name || !skill.type)
|
if (!skill.name || !skill.type)
|
||||||
return logger.warn('无效skill:', skill);
|
return logger.warn('无效skill:', skill);
|
||||||
|
if (skill.check && +skill.check) {
|
||||||
|
const num = skill.check;
|
||||||
|
skill.check = ({ avatar }) => avatar.rank >= num;
|
||||||
|
}
|
||||||
this.skills.push(skill);
|
this.skills.push(skill);
|
||||||
return this.skills;
|
return this.skills;
|
||||||
}
|
}
|
||||||
|
|
@ -249,7 +253,14 @@ export class Calculator {
|
||||||
calc_value(value, buff) {
|
calc_value(value, buff) {
|
||||||
switch (typeof value) {
|
switch (typeof value) {
|
||||||
case 'number': return value;
|
case 'number': return value;
|
||||||
case 'function': return +value({ avatar: this.avatar, buffM: this.buffM, calc: this }) || 0;
|
case 'function': {
|
||||||
|
if (buff)
|
||||||
|
buff.status = false;
|
||||||
|
const v = +value({ avatar: this.avatar, buffM: this.buffM, calc: this }) || 0;
|
||||||
|
if (buff)
|
||||||
|
buff.status = true;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
case 'string': return charData[this.avatar.id].buff?.[value]?.[this.get_SkillLevel(value[0]) - 1] || 0;
|
case 'string': return charData[this.avatar.id].buff?.[value]?.[this.get_SkillLevel(value[0]) - 1] || 0;
|
||||||
case 'object': {
|
case 'object': {
|
||||||
if (!Array.isArray(value) || !buff)
|
if (!Array.isArray(value) || !buff)
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ export class Calculator {
|
||||||
readonly avatar: ZZZAvatarInfo
|
readonly avatar: ZZZAvatarInfo
|
||||||
readonly skills: skill[] = []
|
readonly skills: skill[] = []
|
||||||
private cache: { [type: string]: damage } = {}
|
private cache: { [type: string]: damage } = {}
|
||||||
private props: damage['props'] = {}
|
private props: Exclude<damage['props'], undefined> = {}
|
||||||
/** 当前正在计算的技能 */
|
/** 当前正在计算的技能 */
|
||||||
skill: skill
|
skill: skill
|
||||||
defaultSkill: { [key in keyof skill]?: skill[key] } = {}
|
defaultSkill: { [key in keyof skill]?: skill[key] } = {}
|
||||||
|
|
@ -173,6 +173,10 @@ export class Calculator {
|
||||||
}, skill)
|
}, skill)
|
||||||
if (!skill.element) skill.element = elementType2element(this.avatar.element_type)
|
if (!skill.element) skill.element = elementType2element(this.avatar.element_type)
|
||||||
if (!skill.name || !skill.type) return logger.warn('无效skill:', skill)
|
if (!skill.name || !skill.type) return logger.warn('无效skill:', skill)
|
||||||
|
if (skill.check && +skill.check) {
|
||||||
|
const num = skill.check as unknown as number
|
||||||
|
skill.check = ({ avatar }) => avatar.rank >= num
|
||||||
|
}
|
||||||
this.skills.push(skill)
|
this.skills.push(skill)
|
||||||
return this.skills
|
return this.skills
|
||||||
}
|
}
|
||||||
|
|
@ -300,7 +304,7 @@ export class Calculator {
|
||||||
logger.error('伤害计算错误:', e)
|
logger.error('伤害计算错误:', e)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}).filter(v => v && v.result?.expectDMG && !v.skill?.isHide)
|
}).filter(v => v && v.result?.expectDMG && !v.skill?.isHide) as damage[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -386,7 +390,12 @@ export class Calculator {
|
||||||
calc_value(value: buff['value'], buff?: buff) {
|
calc_value(value: buff['value'], buff?: buff) {
|
||||||
switch (typeof value) {
|
switch (typeof value) {
|
||||||
case 'number': return value
|
case 'number': return value
|
||||||
case 'function': return +value({ avatar: this.avatar, buffM: this.buffM, calc: this }) || 0
|
case 'function': {
|
||||||
|
if (buff) buff.status = false
|
||||||
|
const v = +value({ avatar: this.avatar, buffM: this.buffM, calc: this }) || 0
|
||||||
|
if (buff) buff.status = true
|
||||||
|
return v
|
||||||
|
}
|
||||||
case 'string': return charData[this.avatar.id].buff?.[value]?.[this.get_SkillLevel(value[0]) - 1] || 0
|
case 'string': return charData[this.avatar.id].buff?.[value]?.[this.get_SkillLevel(value[0]) - 1] || 0
|
||||||
case 'object': {
|
case 'object': {
|
||||||
if (!Array.isArray(value) || !buff) return 0
|
if (!Array.isArray(value) || !buff) return 0
|
||||||
|
|
@ -405,7 +414,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, {
|
||||||
element: skill?.element,
|
element: skill?.element,
|
||||||
range: [skill?.type],
|
range: [skill?.type],
|
||||||
redirect: skill?.redirect,
|
redirect: skill?.redirect,
|
||||||
|
|
|
||||||
|
|
@ -229,6 +229,9 @@ Buff来源可分为三大类:武器、套装、角色(影画、核心被动
|
||||||
> - 侵蚀
|
> - 侵蚀
|
||||||
> - 紊乱
|
> - 紊乱
|
||||||
|
|
||||||
|
> - 追加攻击
|
||||||
|
> - 直接以“追加攻击”命名
|
||||||
|
|
||||||
#### 技能类型命名解释说明
|
#### 技能类型命名解释说明
|
||||||
|
|
||||||
1. 首字母为技能所属**基类**,不可更改、不可单独作为技能名,后跟字母表示技能分支
|
1. 首字母为技能所属**基类**,不可更改、不可单独作为技能名,后跟字母表示技能分支
|
||||||
|
|
|
||||||
52
model/damage/character/波可娜/calc.js
Normal file
52
model/damage/character/波可娜/calc.js
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
/** @type {import('../../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
name: '1影',
|
||||||
|
type: '暴击率',
|
||||||
|
value: 0.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2影',
|
||||||
|
type: '攻击力',
|
||||||
|
value: 0.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '6影',
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.15,
|
||||||
|
range: ['EPLP', 'EPLZ']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '6影额外能力:业务搭档',
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.3,
|
||||||
|
check: 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '额外能力:业务搭档',
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.3,
|
||||||
|
check: ({ avatar }) => avatar.rank < 6,
|
||||||
|
range: ['追加攻击']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
/** @type {import('../../Calculator.ts').Calculator['skills']} */
|
||||||
|
export const skills = [
|
||||||
|
{ name: '普攻:捷击三段', type: 'AP3' },
|
||||||
|
{ name: '长按普攻:跃击', type: 'AX' },
|
||||||
|
{ name: '闪避反击:睚眦必报', type: 'CF' },
|
||||||
|
{
|
||||||
|
name: '特殊技:噬爪·噩梦袭影',
|
||||||
|
type: 'EPLP',
|
||||||
|
redirect: '追加攻击'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '噬爪·噩梦袭影终结一击',
|
||||||
|
type: 'EPLZ',
|
||||||
|
redirect: '追加攻击'
|
||||||
|
},
|
||||||
|
{ name: '强化特殊技:噬爪·瞬步', type: 'EQ' },
|
||||||
|
{ name: '连携技:嗨,想不到吧', type: 'RL' },
|
||||||
|
{ name: '终结技:噢,游戏时间', type: 'RZ' }
|
||||||
|
]
|
||||||
28
model/damage/character/波可娜/data.json
Normal file
28
model/damage/character/波可娜/data.json
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"skill": {
|
||||||
|
"AP3": [
|
||||||
|
1.676,1.829,1.982,2.135,2.288,2.441,2.594,2.747,2.9,3.053,3.206,3.359,3.512,3.665,3.818,3.971
|
||||||
|
],
|
||||||
|
"AX": [
|
||||||
|
1.35,1.473,1.596,1.719,1.842,1.965,2.088,2.211,2.334,2.457,2.58,2.703,2.826,2.949,3.072,3.195
|
||||||
|
],
|
||||||
|
"CF": [
|
||||||
|
2.017,2.202,2.386,2.57,2.754,2.938,3.122,3.306,3.49,3.674,3.858,4.041,4.226,4.41,4.594,4.778
|
||||||
|
],
|
||||||
|
"EPLP": [
|
||||||
|
0.463,0.505,0.549,0.592,0.635,0.678,0.721,0.764,0.807,0.85,0.893,0.936,0.979,1.021,1.065,1.108
|
||||||
|
],
|
||||||
|
"EPLZ": [
|
||||||
|
0.535,0.584,0.633,0.682,0.731,0.78,0.829,0.878,0.927,0.976,1.025,1.074,1.123,1.172,1.221,1.27
|
||||||
|
],
|
||||||
|
"EQ": [
|
||||||
|
3.477,3.794,4.111,4.428,4.745,5.062,5.379,5.696,6.013,6.33,6.647,6.964,7.281,7.598,7.915,8.232
|
||||||
|
],
|
||||||
|
"RL": [
|
||||||
|
5.341,5.827,6.313,6.799,7.285,7.771,8.257,8.743,9.229,9.715,10.201,10.687,11.173,11.659,12.145,12.631
|
||||||
|
],
|
||||||
|
"RZ": [
|
||||||
|
13.938,15.206,16.474,17.742,19.01,20.278,21.546,22.814,24.082,25.35,26.618,27.886,29.154,30.422,31.69,32.958
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
69
model/damage/character/零号·安比/calc.js
Normal file
69
model/damage/character/零号·安比/calc.js
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
/** @type {import('../../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
name: '2影',
|
||||||
|
type: '暴击率',
|
||||||
|
value: 0.12,
|
||||||
|
isForever: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '4影',
|
||||||
|
type: '无视抗性',
|
||||||
|
value: 0.12,
|
||||||
|
element: 'Electric'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '核心被动:电位差',
|
||||||
|
type: '增伤',
|
||||||
|
value: 'T1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '核心被动:电位差',
|
||||||
|
type: '暴击伤害',
|
||||||
|
value: ({ calc }) => calc.get_CRITDMG() * calc.calc_value('T2'),
|
||||||
|
range: ['追加攻击']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '额外能力:超频',
|
||||||
|
type: '暴击率',
|
||||||
|
value: 0.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '额外能力:超频',
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.25,
|
||||||
|
range: ['追加攻击'],
|
||||||
|
is: {
|
||||||
|
team: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
/** @type {import('../../Calculator.ts').Calculator['skills']} */
|
||||||
|
export const skills = [
|
||||||
|
{ name: '感电每次', type: '感电' },
|
||||||
|
{ name: '普攻:电击穿五段', type: 'AP5' },
|
||||||
|
{ name: '闪避反击:地闪回击', type: 'CF' },
|
||||||
|
{ name: '特殊技:苍光0', type: 'EPC0', isHide: true },
|
||||||
|
{
|
||||||
|
name: '特殊技:苍光',
|
||||||
|
type: 'EPC',
|
||||||
|
redirect: '追加攻击',
|
||||||
|
after: ({ damage }) => damage.add('EPC0')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '特殊技:雷殛',
|
||||||
|
type: 'EPL',
|
||||||
|
redirect: '追加攻击'
|
||||||
|
},
|
||||||
|
{ name: '强化特殊技:极雷断空', type: 'EQ' },
|
||||||
|
{ name: '连携技:疾跃落雷', type: 'RL' },
|
||||||
|
{ name: '终结技:斩空掠电', type: 'RZ' },
|
||||||
|
{
|
||||||
|
name: '6影电磁涡流',
|
||||||
|
type: 'Y6',
|
||||||
|
check: 6,
|
||||||
|
fixedMultiplier: 10,
|
||||||
|
redirect: '追加攻击'
|
||||||
|
}
|
||||||
|
]
|
||||||
36
model/damage/character/零号·安比/data.json
Normal file
36
model/damage/character/零号·安比/data.json
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"skill": {
|
||||||
|
"AP5": [
|
||||||
|
1.485,1.62,1.755,1.89,2.025,2.16,2.295,2.43,2.565,2.7,2.835,2.97,3.105,3.24,3.375,3.51
|
||||||
|
],
|
||||||
|
"CF": [
|
||||||
|
2.506,2.734,2.962,3.19,3.418,3.646,3.874,4.102,4.33,4.558,4.786,5.014,5.242,5.47,5.698,5.926
|
||||||
|
],
|
||||||
|
"EPC0": [
|
||||||
|
0.43,0.47,0.51,0.55,0.59,0.63,0.67,0.71,0.75,0.79,0.83,0.87,0.91,0.95,0.99,1.03
|
||||||
|
],
|
||||||
|
"EPC": [
|
||||||
|
1.672,1.824,1.976,2.128,2.28,2.432,2.584,2.736,2.888,3.04,3.192,3.344,3.496,3.648,3.8,3.952
|
||||||
|
],
|
||||||
|
"EPL": [
|
||||||
|
1.881,2.052,2.223,2.394,2.565,2.736,2.907,3.078,3.249,3.42,3.591,3.762,3.933,4.104,4.275,4.446
|
||||||
|
],
|
||||||
|
"EQ": [
|
||||||
|
3.796,4.142,4.488,4.834,5.18,5.526,5.872,6.218,6.564,6.91,7.256,7.602,7.948,8.294,8.64,8.986
|
||||||
|
],
|
||||||
|
"RL": [
|
||||||
|
5.638,6.151,6.664,7.177,7.69,8.203,8.716,9.229,9.742,10.255,10.768,11.281,11.794,12.307,12.82,13.333
|
||||||
|
],
|
||||||
|
"RZ": [
|
||||||
|
17.349,18.927,20.505,22.083,23.661,25.239,26.817,28.395,29.973,31.551,33.129,34.707,36.285,37.863,39.441,41.019
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buff": {
|
||||||
|
"T1": [
|
||||||
|
0.125,0.145,0.165,0.188,0.208,0.23,0.25
|
||||||
|
],
|
||||||
|
"T2": [
|
||||||
|
0.15,0.175,0.2,0.225,0.25,0.275,0.3
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
20
model/damage/set/如影相随.js
Normal file
20
model/damage/set/如影相随.js
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
/** @type {import('../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.15,
|
||||||
|
check: 2,
|
||||||
|
range: ['CC', '追加攻击'],
|
||||||
|
isForever: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '攻击力',
|
||||||
|
value: 0.04 * 3,
|
||||||
|
check: 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '暴击率',
|
||||||
|
value: 0.04 * 3,
|
||||||
|
check: 4
|
||||||
|
}
|
||||||
|
]
|
||||||
14
model/damage/set/法厄同之歌.js
Normal file
14
model/damage/set/法厄同之歌.js
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
/** @type {import('../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
type: '异常精通',
|
||||||
|
value: 45,
|
||||||
|
check: 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.25,
|
||||||
|
element: 'Ether',
|
||||||
|
check: 4
|
||||||
|
}
|
||||||
|
]
|
||||||
17
model/damage/weapon/牺牲洁纯.js
Normal file
17
model/damage/weapon/牺牲洁纯.js
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
/** @type {import('../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
type: '暴击伤害',
|
||||||
|
value: [0.3, 0.345, 0.39, 0.435, 0.48],
|
||||||
|
isForever: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '暴击伤害',
|
||||||
|
value: [0.1, 0.115, 0.13, 0.145, 0.16].map(v => v * 3),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: [0.2, 0.23, 0.26, 0.29, 0.32],
|
||||||
|
element: 'Electric'
|
||||||
|
}
|
||||||
|
]
|
||||||
8
model/damage/weapon/裁纸刀.js
Normal file
8
model/damage/weapon/裁纸刀.js
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
/** @type {import('../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: [0.15, 0.173, 0.195, 0.218, 0.24],
|
||||||
|
element: 'Physical'
|
||||||
|
}
|
||||||
|
]
|
||||||
Loading…
Add table
Add a link
Reference in a new issue