mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 13:17:32 +00:00
新增「席德」伤害计算;新增拂晓生花、月光骑士颂套装计算;新增狸法七变化、机巧心种音擎计算
This commit is contained in:
parent
219edc91de
commit
9e0f95a71b
14 changed files with 208 additions and 19 deletions
|
|
@ -71,7 +71,7 @@ export class BuffManager {
|
||||||
buff.source = oriBuff.source = '核心被动';
|
buff.source = oriBuff.source = '核心被动';
|
||||||
else if (buff.name.includes('额外能力'))
|
else if (buff.name.includes('额外能力'))
|
||||||
buff.source = oriBuff.source = '额外能力';
|
buff.source = oriBuff.source = '额外能力';
|
||||||
else if (buff.name.includes('影'))
|
else if (/^\d影/.test(buff.name))
|
||||||
buff.source = oriBuff.source = '影画';
|
buff.source = oriBuff.source = '影画';
|
||||||
else if (buff.name.includes('技'))
|
else if (buff.name.includes('技'))
|
||||||
buff.source = oriBuff.source = '技能';
|
buff.source = oriBuff.source = '技能';
|
||||||
|
|
@ -88,8 +88,8 @@ export class BuffManager {
|
||||||
const oriCheck = typeof buff.check === 'function' && buff.check;
|
const oriCheck = typeof buff.check === 'function' && buff.check;
|
||||||
buff.check = ({ avatar, buffM, calc }) => professionCheck(avatar) && (!oriCheck || oriCheck({ avatar, buffM, calc }));
|
buff.check = ({ avatar, buffM, calc }) => professionCheck(avatar) && (!oriCheck || oriCheck({ avatar, buffM, calc }));
|
||||||
}
|
}
|
||||||
else if (buff.source === '影画') {
|
else if (buff.source === '影画' && !buff.check) {
|
||||||
buff.check ??= oriBuff.check = +buff.name.match(/\d/)?.[0];
|
buff.check = oriBuff.check = +buff.name[0];
|
||||||
}
|
}
|
||||||
this.buffs.push(buff);
|
this.buffs.push(buff);
|
||||||
return this.buffs;
|
return this.buffs;
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ export class BuffManager {
|
||||||
if (!buff.source) {
|
if (!buff.source) {
|
||||||
if (buff.name.includes('核心') || buff.name.includes('天赋')) buff.source = oriBuff.source = '核心被动'
|
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 = '影画'
|
else if (/^\d影/.test(buff.name)) 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]])
|
if (!buff.name || !buff.value || !buff.source || !buffTypeEnum[buffTypeEnum[buff.type]])
|
||||||
|
|
@ -167,8 +167,8 @@ export class BuffManager {
|
||||||
const oriCheck = typeof buff.check === 'function' && buff.check
|
const oriCheck = typeof buff.check === 'function' && buff.check
|
||||||
buff.check = ({ avatar, buffM, calc }) => professionCheck(avatar) && (!oriCheck || oriCheck({ avatar, buffM, calc }))
|
buff.check = ({ avatar, buffM, calc }) => professionCheck(avatar) && (!oriCheck || oriCheck({ avatar, buffM, calc }))
|
||||||
// 影画buff影画数检查
|
// 影画buff影画数检查
|
||||||
} else if (buff.source === '影画') {
|
} else if (buff.source === '影画' && !buff.check) {
|
||||||
buff.check ??= oriBuff.check = +buff.name.match(/\d/)!?.[0]
|
buff.check = oriBuff.check = +buff.name[0]
|
||||||
}
|
}
|
||||||
this.buffs.push(buff)
|
this.buffs.push(buff)
|
||||||
return this.buffs
|
return this.buffs
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ export class Calculator {
|
||||||
}
|
}
|
||||||
const base = {};
|
const base = {};
|
||||||
types.forEach(t => base[t] = t.includes('百分比') ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', ''))] * subBaseValueData[t][0] : subBaseValueData[t][0]);
|
types.forEach(t => base[t] = t.includes('百分比') ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', ''))] * subBaseValueData[t][0] : subBaseValueData[t][0]);
|
||||||
logger.debug('词条变化值:', base);
|
logger.debug(logger.red('副词条差异计算变化值:'), base);
|
||||||
const buffs = types.map(t => ({
|
const buffs = types.map(t => ({
|
||||||
name: t,
|
name: t,
|
||||||
shortName: prop.nameToShortName3(t),
|
shortName: prop.nameToShortName3(t),
|
||||||
|
|
@ -297,7 +297,7 @@ export class Calculator {
|
||||||
}
|
}
|
||||||
const base = {};
|
const base = {};
|
||||||
types.forEach(t => base[t] = (t.includes('百分比') || ['异常掌控', '冲击力', '能量自动回复'].includes(t)) ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', ''))] * mainBaseValueData[t][0] : mainBaseValueData[t][0]);
|
types.forEach(t => base[t] = (t.includes('百分比') || ['异常掌控', '冲击力', '能量自动回复'].includes(t)) ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', ''))] * mainBaseValueData[t][0] : mainBaseValueData[t][0]);
|
||||||
logger.debug(logger.red('词条变化值:'), base);
|
logger.debug(logger.red('主词条差异计算变化值:'), base);
|
||||||
const buffs = types.map(t => {
|
const buffs = types.map(t => {
|
||||||
const data = {
|
const data = {
|
||||||
name: t,
|
name: t,
|
||||||
|
|
|
||||||
|
|
@ -451,7 +451,7 @@ export class Calculator {
|
||||||
}
|
}
|
||||||
const base: { [type: string]: number } = {}
|
const base: { [type: string]: number } = {}
|
||||||
types.forEach(t => base[t] = t.includes('百分比') ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', '')) as keyof ZZZAvatarInfo['base_properties']] * subBaseValueData[t][0] : subBaseValueData[t][0])
|
types.forEach(t => base[t] = t.includes('百分比') ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', '')) as keyof ZZZAvatarInfo['base_properties']] * subBaseValueData[t][0] : subBaseValueData[t][0])
|
||||||
logger.debug('词条变化值:', base)
|
logger.debug(logger.red('副词条差异计算变化值:'), base)
|
||||||
const buffs: {
|
const buffs: {
|
||||||
name: subStatKeys
|
name: subStatKeys
|
||||||
shortName: string
|
shortName: string
|
||||||
|
|
@ -502,7 +502,7 @@ export class Calculator {
|
||||||
}
|
}
|
||||||
const base: { [type: string]: number } = {}
|
const base: { [type: string]: number } = {}
|
||||||
types.forEach(t => base[t] = (t.includes('百分比') || ['异常掌控', '冲击力', '能量自动回复'].includes(t)) ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', '')) as keyof ZZZAvatarInfo['base_properties']] * mainBaseValueData[t][0] : mainBaseValueData[t][0])
|
types.forEach(t => base[t] = (t.includes('百分比') || ['异常掌控', '冲击力', '能量自动回复'].includes(t)) ? this.avatar.base_properties[prop.nameZHToNameEN(t.replace('百分比', '')) as keyof ZZZAvatarInfo['base_properties']] * mainBaseValueData[t][0] : mainBaseValueData[t][0])
|
||||||
logger.debug(logger.red('词条变化值:'), base)
|
logger.debug(logger.red('主词条差异计算变化值:'), base)
|
||||||
const buffs: {
|
const buffs: {
|
||||||
name: mainStatKeys
|
name: mainStatKeys
|
||||||
shortName: string
|
shortName: string
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,9 @@ export function avatar_calc(avatar) {
|
||||||
weapon_buff(avatar.weapon, buffM);
|
weapon_buff(avatar.weapon, buffM);
|
||||||
set_buff(avatar.equip, buffM);
|
set_buff(avatar.equip, buffM);
|
||||||
if (m.buffs) {
|
if (m.buffs) {
|
||||||
const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '影画') || typeof v.check !== 'number' || v.check <= avatar.rank);
|
const vaildBuffs = m.buffs.filter(v => v.source ?
|
||||||
|
(v.source !== '影画' || typeof v.check !== 'number' || v.check <= avatar.rank) :
|
||||||
|
(!/^\d影/.test(v.name) || +v.name[0] <= avatar.rank));
|
||||||
buffM.new(vaildBuffs);
|
buffM.new(vaildBuffs);
|
||||||
}
|
}
|
||||||
if (m.skills)
|
if (m.skills)
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,10 @@ export function avatar_calc(avatar: ZZZAvatarInfo) {
|
||||||
weapon_buff(avatar.weapon, buffM)
|
weapon_buff(avatar.weapon, buffM)
|
||||||
set_buff(avatar.equip, buffM)
|
set_buff(avatar.equip, buffM)
|
||||||
if (m.buffs) {
|
if (m.buffs) {
|
||||||
const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '影画') || typeof v.check !== 'number' || v.check <= avatar.rank)
|
// 预筛选影画buff
|
||||||
|
const vaildBuffs = m.buffs.filter(v => v.source ?
|
||||||
|
(v.source !== '影画' || typeof v.check !== 'number' || v.check <= avatar.rank) :
|
||||||
|
(!/^\d影/.test(v.name) || +v.name[0] <= avatar.rank))
|
||||||
buffM.new(vaildBuffs)
|
buffM.new(vaildBuffs)
|
||||||
}
|
}
|
||||||
if (m.skills) calc.new(m.skills)
|
if (m.skills) calc.new(m.skills)
|
||||||
|
|
@ -199,6 +202,7 @@ export function set_buff(equips: ZZZAvatarInfo['equip'], buffM: BuffManager) {
|
||||||
if (!m) continue
|
if (!m) continue
|
||||||
buffM.default('name', name)
|
buffM.default('name', name)
|
||||||
if (m.buffs) {
|
if (m.buffs) {
|
||||||
|
// 预筛选套装buff
|
||||||
const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '套装') || typeof v.check !== 'number' || v.check <= count)
|
const vaildBuffs = m.buffs.filter(v => (v.source && v.source !== '套装') || typeof v.check !== 'number' || v.check <= count)
|
||||||
buffM.new(vaildBuffs)
|
buffM.new(vaildBuffs)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
79
model/damage/character/「席德」/calc.js
Normal file
79
model/damage/character/「席德」/calc.js
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
/** @type {import('../../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
name: '1影',
|
||||||
|
type: '暴击伤害',
|
||||||
|
value: 0.3,
|
||||||
|
range: ['AB']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2影',
|
||||||
|
type: '无视防御',
|
||||||
|
value: 0.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2影',
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.05 * 24,
|
||||||
|
include: ['AZ']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '4影',
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.2,
|
||||||
|
range: ['AZ']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '6影',
|
||||||
|
type: '暴击伤害',
|
||||||
|
value: 0.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '核心被动:花链协议',
|
||||||
|
type: '攻击力',
|
||||||
|
value: 'T1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '核心被动:花链协议',
|
||||||
|
type: '暴击伤害',
|
||||||
|
value: 'T2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '核心被动:花链协议',
|
||||||
|
type: '增伤',
|
||||||
|
value: 'T3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '额外能力:奇兵轰临',
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.3,
|
||||||
|
range: ['AZ', 'AB', 'RZ']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '额外能力:奇兵轰临',
|
||||||
|
type: '无视抗性',
|
||||||
|
value: 0.25,
|
||||||
|
element: 'Electric',
|
||||||
|
range: ['AZ', 'AB', 'RZ']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
/** @type {import('../../Calculator.ts').Calculator['skills']} */
|
||||||
|
export const skills = [
|
||||||
|
{ name: '感电每次', type: '感电' },
|
||||||
|
{ name: '普攻:霜蕊轮舞四段', type: 'AP4' },
|
||||||
|
{ name: '普攻:落华·重戮', type: 'AZ' },
|
||||||
|
{ name: '普攻:落华·崩坠一式', type: 'AB1' },
|
||||||
|
{ name: '普攻:落华·崩坠二式', type: 'AB2', isMain: true },
|
||||||
|
{ name: '闪避反击:裂萼纷华', type: 'CF' },
|
||||||
|
{ name: '支援突击:绯芯爆裂', type: 'LT' },
|
||||||
|
{ name: '长按强E:铁萼雨幕', type: 'EQX' },
|
||||||
|
{ name: '连携技:落霞风暴', type: 'RL' },
|
||||||
|
{ name: '终结技:机芯花园·绽放!', type: 'RZ' },
|
||||||
|
{
|
||||||
|
name: '6影普攻:落华·重戮额外激光',
|
||||||
|
type: 'Y6',
|
||||||
|
check: 6,
|
||||||
|
multiplier: 1.65 * 3
|
||||||
|
}
|
||||||
|
]
|
||||||
42
model/damage/character/「席德」/data.json
Normal file
42
model/damage/character/「席德」/data.json
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"skill": {
|
||||||
|
"AP4": [
|
||||||
|
3.586,3.912,4.238,4.564,4.89,5.216,5.542,5.868,6.194,6.52,6.846,7.172,7.498,7.824,8.15,8.476
|
||||||
|
],
|
||||||
|
"AZ": [
|
||||||
|
1.666,1.818,1.97,2.122,2.274,2.426,2.578,2.73,2.882,3.034,3.186,3.338,3.49,3.642,3.794,3.946
|
||||||
|
],
|
||||||
|
"AB1": [
|
||||||
|
5.283,5.764,6.245,6.726,7.207,7.688,8.169,8.65,9.131,9.612,10.093,10.574,11.055,11.536,12.017,12.498
|
||||||
|
],
|
||||||
|
"AB2": [
|
||||||
|
9.894,10.794,11.694,12.594,13.494,14.394,15.294,16.194,17.094,17.994,18.894,19.794,20.694,21.594,22.494,23.394
|
||||||
|
],
|
||||||
|
"CF": [
|
||||||
|
3.201,3.492,3.783,4.074,4.365,4.656,4.947,5.238,5.529,5.82,6.111,6.402,6.693,6.984,7.275,7.566
|
||||||
|
],
|
||||||
|
"LT": [
|
||||||
|
4.56,4.975,5.39,5.805,6.22,6.635,7.05,7.465,7.88,8.295,8.71,9.125,9.54,9.955,10.37,10.785
|
||||||
|
],
|
||||||
|
"EQX": [
|
||||||
|
6.834,7.456,8.078,8.7,9.322,9.944,10.566,11.188,11.81,12.432,13.054,13.676,14.298,14.92,15.542,16.164
|
||||||
|
],
|
||||||
|
"RL": [
|
||||||
|
7.342,8.01,8.678,9.346,10.014,10.682,11.35,12.018,12.686,13.354,14.022,14.69,15.358,16.026,16.694,17.362
|
||||||
|
],
|
||||||
|
"RZ": [
|
||||||
|
32.497,35.452,38.407,41.362,44.317,47.272,50.227,53.182,56.137,59.092,62.047,65.002,67.957,70.912,73.867,76.822
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buff": {
|
||||||
|
"T1": [
|
||||||
|
100,225,350,475,600,725,1000
|
||||||
|
],
|
||||||
|
"T2": [
|
||||||
|
0.15,0.175,0.2,0.225,0.25,0.275,0.3
|
||||||
|
],
|
||||||
|
"T3": [
|
||||||
|
0.125,0.145,0.165,0.185,0.205,0.225,0.25
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -55,10 +55,12 @@ export function calc(buffM, calc, avatar) {
|
||||||
range: ['']
|
range: ['']
|
||||||
})
|
})
|
||||||
/** 注册技能 */
|
/** 注册技能 */
|
||||||
calc.new({ name: '普通攻击:', type: '' })
|
calc.new({ name: '普攻:', type: 'AP' })
|
||||||
calc.new({ name: '强化特殊技:', type: '' })
|
calc.new({ name: '闪避反击:', type: 'CF' })
|
||||||
calc.new({ name: '连携技:', type: '' })
|
calc.new({ name: '支援突击:', type: 'LT' })
|
||||||
calc.new({ name: '终结技:', type: '' })
|
calc.new({ name: '强E:', type: 'EQ' })
|
||||||
|
calc.new({ name: '连携技:', type: 'RL' })
|
||||||
|
calc.new({ name: '终结技:', type: 'RZ' })
|
||||||
calc.new({ name: '', type: '' })
|
calc.new({ name: '', type: '' })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,7 +118,7 @@ export const skills = [
|
||||||
{ name: '普攻:', type: 'AP' },
|
{ name: '普攻:', type: 'AP' },
|
||||||
{ name: '闪避反击:', type: 'CF' },
|
{ name: '闪避反击:', type: 'CF' },
|
||||||
{ name: '支援突击:', type: 'LT' },
|
{ name: '支援突击:', type: 'LT' },
|
||||||
{ name: '强化特殊技:', type: 'EQ' },
|
{ name: '强E:', type: 'EQ' },
|
||||||
{ name: '连携技:', type: 'RL' },
|
{ name: '连携技:', type: 'RL' },
|
||||||
{ name: '终结技:', type: 'RZ' },
|
{ name: '终结技:', type: 'RZ' },
|
||||||
{ name: '', type: '' },
|
{ name: '', type: '' },
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
"AP": [
|
"AP": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"CC": [
|
"CF": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"CF": [
|
"LT": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"EQ": [
|
"EQ": [
|
||||||
|
|
|
||||||
21
model/damage/set/拂晓生花.js
Normal file
21
model/damage/set/拂晓生花.js
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
/** @type {import('../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.15,
|
||||||
|
check: 2,
|
||||||
|
range: ['A']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.2,
|
||||||
|
check: 4,
|
||||||
|
range: ['A']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.2,
|
||||||
|
check: ({ avatar, buffM }) => buffM.setCount.拂晓生花 >= 4 && avatar.avatar_profession === 1, // 仅强攻角色
|
||||||
|
range: ['A']
|
||||||
|
}
|
||||||
|
]
|
||||||
9
model/damage/set/月光骑士颂.js
Normal file
9
model/damage/set/月光骑士颂.js
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
/** @type {import('../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: 0.18,
|
||||||
|
check: ({ avatar, buffM }) => buffM.setCount.月光骑士颂 >= 4 && avatar.avatar_profession === 4, // 仅支援角色
|
||||||
|
is: { team: true }
|
||||||
|
}
|
||||||
|
]
|
||||||
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.15, 0.17, 0.19, 0.21, 0.23]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '增伤',
|
||||||
|
value: [0.125, 0.145, 0.165, 0.185, 0.2].map(v => v * 2),
|
||||||
|
element: 'Electric'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '无视防御',
|
||||||
|
value: [0.2, 0.23, 0.26, 0.29, 0.32],
|
||||||
|
range: ['A', 'RZ']
|
||||||
|
}
|
||||||
|
]
|
||||||
13
model/damage/weapon/狸法七变化.js
Normal file
13
model/damage/weapon/狸法七变化.js
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
/** @type {import('../BuffManager.ts').BuffManager['buffs']} */
|
||||||
|
export const buffs = [
|
||||||
|
{
|
||||||
|
type: '异常掌控',
|
||||||
|
value: [30, 34, 39, 43, 48],
|
||||||
|
check: ({ avatar }) => avatar.element_type === 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: '异常精通',
|
||||||
|
value: [60, 69, 78, 87, 96],
|
||||||
|
is: { team: true }
|
||||||
|
}
|
||||||
|
]
|
||||||
Loading…
Add table
Add a link
Reference in a new issue