mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 13:17:32 +00:00
803 lines
25 KiB
JavaScript
803 lines
25 KiB
JavaScript
import _ from 'lodash';
|
||
import { getMapData } from '../../utils/file.js';
|
||
import { calculate_damage } from './role.js';
|
||
import { ZZZAvatarInfo } from '../avatar.js';
|
||
const skilldict = getMapData('SkillData');
|
||
/**
|
||
* 角色加成
|
||
* @param {ZZZAvatarInfo} data 角色信息
|
||
* @param {ZZZAvatarInfo['damage_basic_properties']['base_detail']} base_detail 基础属性
|
||
* @param {ZZZAvatarInfo['damage_basic_properties']['bonus_detail']} bonus_detail 套装加成
|
||
* @returns {{
|
||
* title: string,
|
||
* value: {name: string, value: number}[]
|
||
* }[]} 伤害列表
|
||
*/
|
||
export const avatar_ability = (data, base_detail, bonus_detail) => {
|
||
const damagelist = [];
|
||
switch (data.id) {
|
||
// 艾莲
|
||
case 1191: {
|
||
/** 处理命座加成 */
|
||
if (data.rank >= 1) {
|
||
const CriticalChanceBase = _.get(bonus_detail, 'CriticalChanceBase', 0);
|
||
bonus_detail['CriticalChanceBase'] = CriticalChanceBase + 0.12;
|
||
}
|
||
if (data.rank >= 2) {
|
||
const ES_CriticalDamageBase = _.get(
|
||
bonus_detail,
|
||
'ES_CriticalDamageBase',
|
||
0
|
||
);
|
||
bonus_detail['ES_CriticalDamageBase'] = ES_CriticalDamageBase + 0.6;
|
||
const EH_CriticalDamageBase = _.get(
|
||
bonus_detail,
|
||
'EH_CriticalDamageBase',
|
||
0
|
||
);
|
||
bonus_detail['EH_CriticalDamageBase'] = EH_CriticalDamageBase + 0.6;
|
||
}
|
||
if (data.rank >= 6) {
|
||
const PenRatio = _.get(bonus_detail, 'PenRatioBase', 0);
|
||
bonus_detail['PenRatioBase'] = PenRatio + 0.2;
|
||
|
||
const C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0);
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + 2.5;
|
||
}
|
||
|
||
/** 处理天赋加成 */
|
||
/** 获取天赋等级与加成倍率 */
|
||
const CDB = getskilllevelnum(data.id, data.skills, 'T', 'T');
|
||
const C_CriticalDamageBase = _.get(
|
||
bonus_detail,
|
||
'C_CriticalDamageBase',
|
||
0
|
||
);
|
||
bonus_detail['C_CriticalDamageBase'] = C_CriticalDamageBase + CDB;
|
||
const A_CriticalDamageBase = _.get(
|
||
bonus_detail,
|
||
'A_CriticalDamageBase',
|
||
0
|
||
);
|
||
bonus_detail['A_CriticalDamageBase'] = A_CriticalDamageBase + CDB;
|
||
|
||
const IceDmgAdd = _.get(bonus_detail, 'Ice_DmgAdd', 0);
|
||
bonus_detail['Ice_DmgAdd'] = IceDmgAdd + 0.3;
|
||
|
||
/** 计算伤害 */
|
||
/** 计算普攻伤害 */
|
||
const skill_multiplier1 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'A',
|
||
'A'
|
||
);
|
||
const damagelist1 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'A',
|
||
'A',
|
||
'Ice',
|
||
skill_multiplier1,
|
||
data.level
|
||
);
|
||
const damage1 = {
|
||
title: '普通攻击:急冻修剪法',
|
||
value: damagelist1,
|
||
};
|
||
damagelist.push(damage1);
|
||
|
||
/** 计算冲刺伤害 */
|
||
const skill_multiplier2 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'C',
|
||
'C'
|
||
);
|
||
const damagelist2 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'C',
|
||
'C',
|
||
'Ice',
|
||
skill_multiplier2,
|
||
data.level
|
||
);
|
||
const damage2 = {
|
||
title: '冲刺攻击:冰渊潜袭',
|
||
value: damagelist2,
|
||
};
|
||
damagelist.push(damage2);
|
||
|
||
/** 计算特殊技伤害 */
|
||
const skill_multiplier3 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'E',
|
||
'EH'
|
||
);
|
||
const damagelist3 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'EUP',
|
||
'EH',
|
||
'Ice',
|
||
skill_multiplier3,
|
||
data.level
|
||
);
|
||
const damage3 = {
|
||
title: '强化特殊技:横扫',
|
||
value: damagelist3,
|
||
};
|
||
damagelist.push(damage3);
|
||
|
||
const skill_multiplier4 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'E',
|
||
'ES'
|
||
);
|
||
const damagelist4 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'EUP',
|
||
'ES',
|
||
'Ice',
|
||
skill_multiplier4,
|
||
data.level
|
||
);
|
||
const damage4 = {
|
||
title: '强化特殊技:鲨卷风',
|
||
value: damagelist4,
|
||
};
|
||
damagelist.push(damage4);
|
||
|
||
/** 计算连携技伤害 */
|
||
const skill_multiplier5 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'R',
|
||
'RL'
|
||
);
|
||
const damagelist5 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'RL',
|
||
'RL',
|
||
'Ice',
|
||
skill_multiplier5,
|
||
data.level
|
||
);
|
||
const damage5 = {
|
||
title: '连携技:雪崩',
|
||
value: damagelist5,
|
||
};
|
||
damagelist.push(damage5);
|
||
|
||
/** 计算终结技伤害 */
|
||
const skill_multiplier6 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'R',
|
||
'R'
|
||
);
|
||
const damagelist6 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'R',
|
||
'R',
|
||
'Ice',
|
||
skill_multiplier6,
|
||
data.level
|
||
);
|
||
const damage6 = {
|
||
title: '终结技:永冬狂宴',
|
||
value: damagelist6,
|
||
};
|
||
damagelist.push(damage6);
|
||
break;
|
||
}
|
||
// 朱鸢
|
||
case 1241: {
|
||
/** 处理命座加成 */
|
||
if (data.rank >= 2) {
|
||
let A_DmgAdd = _.get(bonus_detail, 'A_DmgAdd', 0);
|
||
bonus_detail['A_DmgAdd'] = A_DmgAdd + 0.5;
|
||
let C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0);
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + 0.5;
|
||
}
|
||
if (data.rank >= 4) {
|
||
let Ether_ResistancePenetration = _.get(
|
||
bonus_detail,
|
||
'Ether_ResistancePenetration',
|
||
0
|
||
);
|
||
bonus_detail['Ether_ResistancePenetration'] =
|
||
Ether_ResistancePenetration + 0.25;
|
||
}
|
||
|
||
/** 处理天赋加成 */
|
||
/** 获取天赋等级与加成倍率 */
|
||
const DMG_ADD = getskilllevelnum(data.id, data.skills, 'T', 'T');
|
||
let A_DmgAdd = _.get(bonus_detail, 'A_DmgAdd', 0);
|
||
bonus_detail['A_DmgAdd'] = A_DmgAdd + DMG_ADD;
|
||
|
||
let C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0);
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + DMG_ADD;
|
||
|
||
let CriticalChanceBase = _.get(bonus_detail, 'CriticalChanceBase', 0);
|
||
bonus_detail['CriticalChanceBase'] = CriticalChanceBase + 0.3;
|
||
|
||
/** 计算伤害 */
|
||
/** 计算普攻伤害 */
|
||
const skill_multiplier1 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'A',
|
||
'A'
|
||
);
|
||
const damagelist1 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'A',
|
||
'A',
|
||
'Ether',
|
||
skill_multiplier1,
|
||
data.level
|
||
);
|
||
const damage1 = {
|
||
title: '普通攻击:请勿抵抗',
|
||
value: damagelist1,
|
||
};
|
||
damagelist.push(damage1);
|
||
|
||
/** 计算冲刺伤害 */
|
||
const skill_multiplier2 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'C',
|
||
'C'
|
||
);
|
||
const damagelist2 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'C',
|
||
'C',
|
||
'Ether',
|
||
skill_multiplier2,
|
||
data.level
|
||
);
|
||
const damage2 = {
|
||
title: '冲刺攻击:火力压制',
|
||
value: damagelist2,
|
||
};
|
||
damagelist.push(damage2);
|
||
|
||
/** 计算强化特殊技伤害 */
|
||
const skill_multiplier3 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'E',
|
||
'EUP'
|
||
);
|
||
let damagelist3 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'EUP',
|
||
'EUP',
|
||
'Ether',
|
||
skill_multiplier3,
|
||
data.level
|
||
);
|
||
if (data.rank >= 6) {
|
||
let damagelist_add = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'EUP',
|
||
'EUP',
|
||
'Ether',
|
||
2.2,
|
||
data.level
|
||
);
|
||
damagelist3['cd'] = damagelist3['cd'] + damagelist_add['cd'] * 4;
|
||
damagelist3['qw'] = damagelist3['qw'] + damagelist_add['qw'] * 4;
|
||
}
|
||
const damage3 = {
|
||
title: '强化特殊技:全弹连射',
|
||
value: damagelist3,
|
||
};
|
||
damagelist.push(damage3);
|
||
|
||
/** 计算连携技伤害 */
|
||
const skill_multiplier4 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'R',
|
||
'RL'
|
||
);
|
||
const damagelist4 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'RL',
|
||
'RL',
|
||
'Ether',
|
||
skill_multiplier4,
|
||
data.level
|
||
);
|
||
const damage4 = {
|
||
title: '连携技:歼灭模式',
|
||
value: damagelist4,
|
||
};
|
||
damagelist.push(damage4);
|
||
|
||
/** 计算终结技伤害 */
|
||
const skill_multiplier5 = getskilllevelnum(
|
||
data.id,
|
||
data.skills,
|
||
'R',
|
||
'R'
|
||
);
|
||
const damagelist5 = calculate_damage(
|
||
base_detail,
|
||
bonus_detail,
|
||
'R',
|
||
'R',
|
||
'Ether',
|
||
skill_multiplier5,
|
||
data.level
|
||
);
|
||
const damage5 = {
|
||
title: '终结技:歼灭模式MAX',
|
||
value: damagelist5,
|
||
};
|
||
damagelist.push(damage5);
|
||
break;
|
||
}
|
||
// 11号
|
||
case 1041: {
|
||
/** 处理命座加成 */
|
||
if (data.rank >= 2) {
|
||
let A_DmgAdd = _.get(bonus_detail, 'A_DmgAdd', 0);
|
||
bonus_detail['A_DmgAdd'] = A_DmgAdd + 0.36;
|
||
let C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0);
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + 0.36;
|
||
}
|
||
if (data.rank >= 6) {
|
||
let A_ResistancePenetration = _.get(bonus_detail, 'A_ResistancePenetration', 0);
|
||
bonus_detail['A_ResistancePenetration'] = A_ResistancePenetration + 0.25;
|
||
let C_ResistancePenetration = _.get(bonus_detail, 'C_ResistancePenetration', 0);
|
||
bonus_detail['C_ResistancePenetration'] = C_ResistancePenetration + 0.25;
|
||
}
|
||
|
||
/** 处理天赋加成 */
|
||
/** 获取天赋等级与加成倍率 */
|
||
const DMG_ADD = getskilllevelnum(data.id, data.skills, 'T', 'T');
|
||
let A_DmgAdd = _.get(bonus_detail, 'A_DmgAdd', 0);
|
||
bonus_detail['A_DmgAdd'] = A_DmgAdd + DMG_ADD;
|
||
let C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0);
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + DMG_ADD;
|
||
|
||
let Fire_DmgAdd = _.get(bonus_detail, 'Fire_DmgAdd', 0);
|
||
bonus_detail['Fire_DmgAdd'] = Fire_DmgAdd + 0.1;
|
||
|
||
/** 计算伤害 */
|
||
/** 计算普攻伤害 */
|
||
const skill_multiplier1 = getskilllevelnum(data.id, data.skills, 'A', 'A');
|
||
const damagelist1 = calculate_damage(base_detail, bonus_detail, 'A', 'A', 'Fire', skill_multiplier1, data.level);
|
||
const damage1 = {
|
||
title: '普通攻击:火力镇压',
|
||
value: damagelist1,
|
||
};
|
||
damagelist.push(damage1);
|
||
|
||
/** 计算冲刺伤害 */
|
||
const skill_multiplier2 = getskilllevelnum(data.id, data.skills, 'C', 'C');
|
||
const damagelist2 = calculate_damage(base_detail, bonus_detail, 'C', 'C', 'Fire', skill_multiplier2, data.level);
|
||
const damage2 = {
|
||
title: '闪避反击:逆火',
|
||
value: damagelist2,
|
||
};
|
||
damagelist.push(damage2);
|
||
|
||
/** 计算强化特殊技伤害 */
|
||
const skill_multiplier3 = getskilllevelnum(data.id, data.skills, 'E', 'E');
|
||
let damagelist3 = calculate_damage(base_detail, bonus_detail, 'E', 'E', 'Fire', skill_multiplier3, data.level);
|
||
const damage3 = {
|
||
title: '强化特殊技:盛燃烈火',
|
||
value: damagelist3,
|
||
};
|
||
damagelist.push(damage3);
|
||
|
||
/** 计算连携技伤害 */
|
||
const skill_multiplier4 = getskilllevelnum(data.id, data.skills, 'R', 'RL');
|
||
const damagelist4 = calculate_damage(base_detail, bonus_detail, 'RL', 'RL', 'Fire', skill_multiplier4, data.level);
|
||
const damage4 = {
|
||
title: '连携技:昂扬烈焰',
|
||
value: damagelist4,
|
||
};
|
||
damagelist.push(damage4);
|
||
|
||
/** 计算终结技伤害 */
|
||
const skill_multiplier5 = getskilllevelnum(data.id, data.skills, 'R', 'R');
|
||
const damagelist5 = calculate_damage(base_detail, bonus_detail, 'R', 'R', 'Fire', skill_multiplier5, data.level);
|
||
const damage5 = {
|
||
title: '终结技:轰鸣烈焰',
|
||
value: damagelist5,
|
||
};
|
||
damagelist.push(damage5);
|
||
break;
|
||
}
|
||
// 青衣
|
||
case 1251: {
|
||
/** 处理命座加成 */
|
||
if (data.rank >= 1) {
|
||
let ignore_defence = _.get(bonus_detail, 'ignore_defence', 0);
|
||
bonus_detail['ignore_defence'] = ignore_defence + 0.15;
|
||
let CriticalChanceBase = _.get(bonus_detail, 'CriticalChanceBase', 0);
|
||
bonus_detail['CriticalChanceBase'] = CriticalChanceBase + 0.2;
|
||
}
|
||
if (data.rank >= 2) {
|
||
let T_stundmgmultiplier = _.get(bonus_detail, 'T_stundmgmultiplier', 0);
|
||
bonus_detail['T_stundmgmultiplier'] = T_stundmgmultiplier * 1.35;
|
||
}
|
||
if (data.rank >= 6) {
|
||
let All_ResistancePenetration = _.get(bonus_detail, 'All_ResistancePenetration', 0);
|
||
bonus_detail['All_ResistancePenetration'] = All_ResistancePenetration + 0.20;
|
||
let A_CriticalDamageBase = _.get(bonus_detail, 'A_CriticalDamageBase', 0);
|
||
bonus_detail['A_CriticalDamageBase'] = A_CriticalDamageBase + 1;
|
||
}
|
||
|
||
/** 处理天赋加成 */
|
||
/** 获取天赋等级与加成倍率 */
|
||
const TF = getskilllevelnum(data.id, data.skills, 'T', 'T');
|
||
let stundmgmultiplier = _.get(bonus_detail, 'stundmgmultiplier', 0);
|
||
bonus_detail['stundmgmultiplier'] = stundmgmultiplier + TF * 20;
|
||
let ImpactRatio = _.get(bonus_detail, 'ImpactRatio', 0);
|
||
if (ImpactRatio > 120) {
|
||
if (ImpactRatio >= 220) {
|
||
let AttackDelta = _.get(bonus_detail, 'AttackDelta', 0);
|
||
bonus_detail['AttackDelta'] = AttackDelta + 600;
|
||
} else {
|
||
let AttackDelta = _.get(bonus_detail, 'AttackDelta', 0);
|
||
bonus_detail['AttackDelta'] = (AttackDelta - 120) * 6;
|
||
}
|
||
}
|
||
|
||
/** 计算伤害 */
|
||
/** 计算普攻伤害 */
|
||
const skill_multiplier1 = getskilllevelnum(data.id, data.skills, 'A', 'A');
|
||
const damagelist1 = calculate_damage(base_detail, bonus_detail, 'A', 'A', 'Electric', skill_multiplier1, data.level);
|
||
const damage1 = {
|
||
title: '普通攻击:醉花月云转',
|
||
value: damagelist1,
|
||
};
|
||
damagelist.push(damage1);
|
||
|
||
/** 计算冲刺伤害 */
|
||
const skill_multiplier2 = getskilllevelnum(data.id, data.skills, 'C', 'C');
|
||
const damagelist2 = calculate_damage(base_detail, bonus_detail, 'C', 'C', 'Electric', skill_multiplier2, data.level);
|
||
const damage2 = {
|
||
title: '闪避反击:意不尽',
|
||
value: damagelist2,
|
||
};
|
||
damagelist.push(damage2);
|
||
|
||
/** 计算强化特殊技伤害 */
|
||
const skill_multiplier3 = getskilllevelnum(data.id, data.skills, 'E', 'E');
|
||
let damagelist3 = calculate_damage(base_detail, bonus_detail, 'E', 'E', 'Ether', skill_multiplier3, data.level);
|
||
const damage3 = {
|
||
title: '强化特殊技:月上海棠',
|
||
value: damagelist3,
|
||
};
|
||
damagelist.push(damage3);
|
||
|
||
/** 计算连携技伤害 */
|
||
const skill_multiplier4 = getskilllevelnum(data.id, data.skills, 'R', 'RL');
|
||
const damagelist4 = calculate_damage(base_detail, bonus_detail, 'RL', 'RL', 'Electric', skill_multiplier4, data.level);
|
||
const damage4 = {
|
||
title: '连携技:太平令',
|
||
value: damagelist4,
|
||
};
|
||
damagelist.push(damage4);
|
||
|
||
/** 计算终结技伤害 */
|
||
const skill_multiplier5 = getskilllevelnum(data.id, data.skills, 'R', 'R');
|
||
const damagelist5 = calculate_damage(base_detail, bonus_detail, 'R', 'R', 'Electric', skill_multiplier5, data.level);
|
||
const damage5 = {
|
||
title: '终结技:八声甘州',
|
||
value: damagelist5,
|
||
};
|
||
damagelist.push(damage5);
|
||
break;
|
||
}
|
||
// 猫又
|
||
case 1021: {
|
||
/** 处理命座加成 */
|
||
if (data.rank >= 1) {
|
||
let Physical_ResistancePenetration = _.get(bonus_detail, 'Physical_ResistancePenetration', 0);
|
||
bonus_detail['Physical_ResistancePenetration'] = Physical_ResistancePenetration + 0.16;
|
||
}
|
||
if (data.rank >= 4) {
|
||
let CriticalChanceBase = _.get(bonus_detail, 'CriticalChanceBase', 0);
|
||
bonus_detail['CriticalChanceBase'] = CriticalChanceBase * 0.14;
|
||
}
|
||
if (data.rank >= 6) {
|
||
let CriticalDamageBase = _.get(bonus_detail, 'CriticalDamageBase', 0);
|
||
bonus_detail['CriticalDamageBase'] = CriticalDamageBase + 0.54;
|
||
}
|
||
|
||
/** 处理天赋加成 */
|
||
/** 获取天赋等级与加成倍率 */
|
||
const TF = getskilllevelnum(data.id, data.skills, 'T', 'T');
|
||
let DmgAdd = _.get(bonus_detail, 'DmgAdd', 0);
|
||
bonus_detail['DmgAdd'] = DmgAdd + TF;
|
||
let E_DmgAdd = _.get(bonus_detail, 'E_DmgAdd', 0);
|
||
bonus_detail['E_DmgAdd'] = E_DmgAdd + 0.7;
|
||
|
||
/** 计算伤害 */
|
||
/** 计算普攻伤害 */
|
||
const skill_multiplier1 = getskilllevelnum(data.id, data.skills, 'A', 'A');
|
||
const damagelist1 = calculate_damage(base_detail, bonus_detail, 'A', 'A', 'Physical', skill_multiplier1, data.level);
|
||
const damage1 = {
|
||
title: '普通攻击:猫猫爪刺',
|
||
value: damagelist1,
|
||
};
|
||
damagelist.push(damage1);
|
||
|
||
/** 计算冲刺伤害 */
|
||
const skill_multiplier2 = getskilllevelnum(data.id, data.skills, 'C', 'C');
|
||
const damagelist2 = calculate_damage(base_detail, bonus_detail, 'C', 'C', 'Physical', skill_multiplier2, data.level);
|
||
const damage2 = {
|
||
title: '闪避反击:虚影双刺',
|
||
value: damagelist2,
|
||
};
|
||
damagelist.push(damage2);
|
||
|
||
/** 计算强化特殊技伤害 */
|
||
const skill_multiplier3 = getskilllevelnum(data.id, data.skills, 'E', 'E');
|
||
let damagelist3 = calculate_damage(base_detail, bonus_detail, 'E', 'E', 'Physical', skill_multiplier3, data.level);
|
||
const damage3 = {
|
||
title: '强化特殊技:超~凶奇袭!',
|
||
value: damagelist3,
|
||
};
|
||
damagelist.push(damage3);
|
||
|
||
/** 计算连携技伤害 */
|
||
const skill_multiplier4 = getskilllevelnum(data.id, data.skills, 'R', 'RL');
|
||
const damagelist4 = calculate_damage(base_detail, bonus_detail, 'RL', 'RL', 'Physical', skill_multiplier4, data.level);
|
||
const damage4 = {
|
||
title: '连携技:刃爪挥击',
|
||
value: damagelist4,
|
||
};
|
||
damagelist.push(damage4);
|
||
|
||
/** 计算终结技伤害 */
|
||
const skill_multiplier5 = getskilllevelnum(data.id, data.skills, 'R', 'R');
|
||
const damagelist5 = calculate_damage(base_detail, bonus_detail, 'R', 'R', 'Physical', skill_multiplier5, data.level);
|
||
const damage5 = {
|
||
title: '终结技:刃爪强袭',
|
||
value: damagelist5,
|
||
};
|
||
damagelist.push(damage5);
|
||
break;
|
||
}
|
||
// 安东
|
||
case 1111: {
|
||
/** 处理命座加成 */
|
||
if (data.rank >= 4) {
|
||
let CriticalChanceBase = _.get(bonus_detail, 'CriticalChanceBase', 0);
|
||
bonus_detail['CriticalChanceBase'] = CriticalChanceBase + 0.1;
|
||
}
|
||
if (data.rank >= 6) {
|
||
let A_DmgAdd = _.get(bonus_detail, 'A_DmgAdd', 0);
|
||
bonus_detail['A_DmgAdd'] = A_DmgAdd + 0.24;
|
||
let C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0);
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + 0.24;
|
||
}
|
||
|
||
/** 处理天赋加成 */
|
||
/** 获取天赋等级与加成倍率 */
|
||
const TF = getskilllevelnum(data.id, data.skills, 'T', 'T');
|
||
const TF2 = getskilllevelnum(data.id, data.skills, 'T', 'T2');
|
||
|
||
let A_DmgAdd = _.get(bonus_detail, 'A_DmgAdd', 0);
|
||
bonus_detail['A_DmgAdd'] = A_DmgAdd + TF2;
|
||
let C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0);
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + TF2;
|
||
|
||
let E_DmgAdd = _.get(bonus_detail, 'E_DmgAdd', 0);
|
||
bonus_detail['E_DmgAdd'] = E_DmgAdd + TF;
|
||
let L_DmgAdd = _.get(bonus_detail, 'L_DmgAdd', 0);
|
||
bonus_detail['L_DmgAdd'] = L_DmgAdd + TF;
|
||
let R_DmgAdd = _.get(bonus_detail, 'R_DmgAdd', 0);
|
||
bonus_detail['R_DmgAdd'] = R_DmgAdd + TF;
|
||
|
||
/** 计算伤害 */
|
||
/** 计算普攻伤害 */
|
||
const skill_multiplier1 = getskilllevelnum(data.id, data.skills, 'A', 'A');
|
||
const damagelist1 = calculate_damage(base_detail, bonus_detail, 'A', 'A', 'Electric', skill_multiplier1, data.level);
|
||
const damage1 = {
|
||
title: '普通攻击:热血上工操',
|
||
value: damagelist1,
|
||
};
|
||
damagelist.push(damage1);
|
||
|
||
/** 计算冲刺伤害 */
|
||
const skill_multiplier2 = getskilllevelnum(data.id, data.skills, 'C', 'C');
|
||
const damagelist2 = calculate_damage(base_detail, bonus_detail, 'C', 'C', 'Electric', skill_multiplier2, data.level);
|
||
const damage2 = {
|
||
title: '闪避反击:过载钻击',
|
||
value: damagelist2,
|
||
};
|
||
damagelist.push(damage2);
|
||
|
||
/** 计算强化特殊技伤害 */
|
||
const skill_multiplier3 = getskilllevelnum(data.id, data.skills, 'E', 'E');
|
||
let damagelist3 = calculate_damage(base_detail, bonus_detail, 'E', 'E', 'Electric', skill_multiplier3, data.level);
|
||
const damage3 = {
|
||
title: '特殊技:爆发钻击',
|
||
value: damagelist3,
|
||
};
|
||
damagelist.push(damage3);
|
||
|
||
/** 计算连携技伤害 */
|
||
const skill_multiplier4 = getskilllevelnum(data.id, data.skills, 'R', 'RL');
|
||
const damagelist4 = calculate_damage(base_detail, bonus_detail, 'RL', 'RL', 'Electric', skill_multiplier4, data.level);
|
||
const damage4 = {
|
||
title: '连携技:转转转!',
|
||
value: damagelist4,
|
||
};
|
||
damagelist.push(damage4);
|
||
|
||
/** 计算终结技伤害 */
|
||
const skill_multiplier5 = getskilllevelnum(data.id, data.skills, 'R', 'R');
|
||
const damagelist5 = calculate_damage(base_detail, bonus_detail, 'R', 'R', 'Electric', skill_multiplier5, data.level);
|
||
const damage5 = {
|
||
title: '终结技:转转转转转!',
|
||
value: damagelist5,
|
||
};
|
||
damagelist.push(damage5);
|
||
break;
|
||
}
|
||
// 星见雅
|
||
case 1091: {
|
||
/** 处理命座加成 */
|
||
if (data.rank >= 1) {
|
||
const AUP_IgnoreDefence = _.get(bonus_detail, 'AUP_IgnoreDefence', 0)
|
||
bonus_detail['AUP_IgnoreDefence'] = AUP_IgnoreDefence + 0.36
|
||
}
|
||
if (data.rank >= 2) {
|
||
const A_DmgAdd = _.get(bonus_detail, 'A_DmgAdd', 0)
|
||
bonus_detail['A_DmgAdd'] = A_DmgAdd + 0.30
|
||
const C_DmgAdd = _.get(bonus_detail, 'C_DmgAdd', 0)
|
||
bonus_detail['C_DmgAdd'] = C_DmgAdd + 0.30
|
||
const CriticalChanceBase = _.get(bonus_detail, 'CriticalChanceBase', 0)
|
||
bonus_detail['CriticalChanceBase'] = CriticalChanceBase + 0.15
|
||
}
|
||
if (data.rank >= 4) {
|
||
const TP_DmgAdd = _.get(bonus_detail, 'TP_DmgAdd', 0)
|
||
bonus_detail['TP_DmgAdd'] = TP_DmgAdd + 0.3
|
||
}
|
||
if (data.rank >= 6) {
|
||
const AUP_DmgAdd = _.get(bonus_detail, 'AUP_DmgAdd', 0)
|
||
bonus_detail['AUP_DmgAdd'] = AUP_DmgAdd + 0.3
|
||
}
|
||
|
||
/** 处理天赋加成 */
|
||
/** 获取天赋等级与加成倍率 */
|
||
const AUP_DmgAdd = _.get(bonus_detail, 'AUP_DmgAdd', 0)
|
||
bonus_detail['AUP_DmgAdd'] = AUP_DmgAdd + 0.6
|
||
const AUP_ResistancePenetration = _.get(bonus_detail, 'AUP_ResistancePenetration', 0)
|
||
bonus_detail['AUP_ResistancePenetration'] = AUP_ResistancePenetration + 0.3 // 紊乱无视冰抗
|
||
const R_DmgAdd = _.get(bonus_detail, 'R_DmgAdd', 0) // 终结技30%冰伤加成
|
||
bonus_detail['R_DmgAdd'] = R_DmgAdd + 0.3
|
||
|
||
logger.debug('最终bonus_detail', bonus_detail)
|
||
/** 计算伤害 */
|
||
/** 计算普攻伤害 */
|
||
const A_multiplier = getskilllevelnum(data.id, data.skills, 'A', 'A')
|
||
const A_damage = calculate_damage(base_detail, bonus_detail, 'A', 'A', 'Ice', A_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '普通攻击:风花五段',
|
||
value: A_damage,
|
||
})
|
||
|
||
/** 计算闪避反击伤害 */
|
||
const C_multiplier = getskilllevelnum(data.id, data.skills, 'C', 'C')
|
||
const C_damage = calculate_damage(base_detail, bonus_detail, 'C', 'C', 'Ice', C_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '闪避反击:寒雀',
|
||
value: C_damage,
|
||
})
|
||
|
||
/** 计算霜灼·破伤害 */
|
||
const TP_multiplier = getskilllevelnum(data.id, data.skills, 'T', 'TP')
|
||
const TP_damage = calculate_damage(base_detail, bonus_detail, 'TP', 'TP', 'Ice', TP_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '霜灼·破',
|
||
value: TP_damage,
|
||
})
|
||
|
||
/** 计算蓄力攻击伤害 */
|
||
const AUP1_multiplier = getskilllevelnum(data.id, data.skills, 'A', 'AUP1')
|
||
const AUP1_damage = calculate_damage(base_detail, bonus_detail, 'AUP', 'AUP1', 'Ice', AUP1_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '蓄力攻击:一段蓄',
|
||
value: AUP1_damage,
|
||
})
|
||
const AUP2_multiplier = getskilllevelnum(data.id, data.skills, 'A', 'AUP2')
|
||
const AUP2_damage = calculate_damage(base_detail, bonus_detail, 'AUP', 'AUP2', 'Ice', AUP2_multiplier, data.level)
|
||
if (data.rank >= 6) { // 6命累加蓄力伤害
|
||
AUP2_damage['cd'] += AUP1_damage['cd']
|
||
AUP2_damage['qw'] += AUP1_damage['qw']
|
||
}
|
||
damagelist.push({
|
||
title: '蓄力攻击:二段蓄',
|
||
value: AUP2_damage,
|
||
})
|
||
const AUP3_multiplier = getskilllevelnum(data.id, data.skills, 'A', 'AUP3')
|
||
const AUP3_damage = calculate_damage(base_detail, bonus_detail, 'AUP', 'AUP3', 'Ice', AUP3_multiplier, data.level)
|
||
if (data.rank >= 6) {
|
||
AUP3_damage['cd'] += AUP2_damage['cd']
|
||
AUP3_damage['qw'] += AUP2_damage['qw']
|
||
}
|
||
damagelist.push({
|
||
title: '蓄力攻击:三段蓄',
|
||
value: AUP3_damage,
|
||
})
|
||
|
||
/** 计算特殊技伤害 */
|
||
const E_multiplier = getskilllevelnum(data.id, data.skills, 'E', 'EF')
|
||
const E_damage = calculate_damage(base_detail, bonus_detail, 'EUP', 'EF', 'Ice', E_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '强化特殊技:飞雪',
|
||
value: E_damage,
|
||
})
|
||
|
||
const EZ_multiplier = getskilllevelnum(data.id, data.skills, 'E', 'EF2')
|
||
const EZ_damage = calculate_damage(base_detail, bonus_detail, 'EUP', 'EF2', 'Ice', EZ_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '强化特殊技:飞雪(二段)',
|
||
value: EZ_damage,
|
||
})
|
||
|
||
/** 计算连携技伤害 */
|
||
const RL_multiplier = getskilllevelnum(data.id, data.skills, 'R', 'RL')
|
||
const RL_damage = calculate_damage(base_detail, bonus_detail, 'RL', 'RL', 'Ice', RL_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '连携技:春临',
|
||
value: RL_damage,
|
||
})
|
||
|
||
/** 计算终结技伤害 */
|
||
const R_multiplier = getskilllevelnum(data.id, data.skills, 'R', 'R')
|
||
const R_damage = calculate_damage(base_detail, bonus_detail, 'R', 'R', 'Ice', R_multiplier, data.level)
|
||
damagelist.push({
|
||
title: '终结技:名残雪',
|
||
value: R_damage,
|
||
})
|
||
break
|
||
}
|
||
}
|
||
logger.debug(logger.green(data.name_mi18n + '伤害:'), damagelist)
|
||
return damagelist
|
||
};
|
||
|
||
export const getskilllevelnum = (avatarId, skills, skilltype, skillname) => {
|
||
let skill_typeid = 0;
|
||
if (skilltype == 'A') skill_typeid = 0;
|
||
else if (skilltype == 'C') skill_typeid = 2;
|
||
else if (skilltype == 'E') skill_typeid = 1;
|
||
else if (skilltype == 'R') skill_typeid = 3;
|
||
else if (skilltype == 'L') skill_typeid = 6;
|
||
else if (skilltype == 'T') skill_typeid = 5;
|
||
let skilllevel =
|
||
Number(
|
||
skills.find(property => property.skill_type === skill_typeid)?.level || 1
|
||
) - 1;
|
||
return skilldict[avatarId][skillname][skilllevel];
|
||
};
|
||
|
||
export const has_calculation = avatarId => {
|
||
return Object.keys(skilldict).includes(avatarId.toString());
|
||
};
|