📊计算详情 details
伤害计算必须变量,主要导出伤害计算列表
JavaScript
export const details = [
{
// 伤害类型标题,自拟,展示在角色面板详情下方伤害计算列表的左侧
title: "",
// 伤害值
dmg: (attr, dmg) => dmg()
}, {
}...
]
下面将详细说明dmg如何编写
dmg箭头函数传入attr
与dmg
两个变量,其中attr
主要传入当前角色的详情、状态、天赋倍率等
attr
输出(无特殊标注则为两中游戏类型通用) | 类型 | 说明 |
---|---|---|
talent | Object | 输出talentLevel技能等级与各技能的倍率详情 |
charId | Number | 角色id |
uid | String | 用户uid |
level | Number | 角色等级 |
cons | Number | 角色命座 |
trees [sr] | Object | 角色点量行迹数组 |
weapon | Object | 角色携带武器详情(name -武器名,affix -武器精炼/叠影,level -武器等级) |
mastery [gs] | String | 精通buff |
attr | Object | 角色、敌人状态 |
params | Object | 自定义参数 |
refine | Number | 武器精炼/叠影 - 1 |
weaponTypeName | String | 武器类型 |
element | String | 元素类型 |
calc | Function | 传入对象,以base+plus+(base*pct) 计算对象中的值 |
artis | Object | 圣遗物/遗器名及其数量 |
attr通常情况下为解构后传入,如传入技能详情
JavaScript
/**
* talent.a["技能伤害"]输出为数字或数组,原神的计算中,该数字为百分比数字,而星铁中为小数,但dmg中会区分,此处无需在意
*/
({ talent }, dmg) => dmg(talent.a["技能伤害"], "a")
dmg
值得注意的是,dmg本身也为一个匿名函数,提供通用的基础计算
作为函数时:
输出 | 类型 | 说明 |
---|---|---|
dmg | Number | 暴击伤害 |
avg | Number | 期望伤害 |
作为对象时:
输出 | 类型 | 说明 |
---|---|---|
basic | Function | 基础数值计算方式,通常用于计算不以攻击力为基础属性的计算 |
reaction | Function | 固定的元素反应/持续伤害/击破伤害的计算 |
dynamic | Function | 动态加成计算方式 |
heal | Function | 治疗量计算 |
shield | Function | 护盾计算 |
swirl | Function | 扩散反应计算 |
作为函数
dmg作为函数时,可实现与其下函数basic,reaction与dynamic的互相转换
输入 | 类型 | 默认值 | 说明 |
---|---|---|---|
pctNum | Number | 0 | 技能倍率 |
talent | String | false | 天赋类型 |
ele | String | false | 元素反应类型 |
basicNum | Number | 0 | 基础数值(basic函数的数值,通常不在此处使用) |
mode | String | talent | 模式(某些内部判断必须,通常不在此处使用) |
dynamicData | Object | false | 动态属性(dynamic函数的数值,通常不在此处使用) |
JavaScript
// 普攻一段伤害
({ talent }, dmg) => dmg(talent.a["一段伤害"], "a")
// 普攻一段蒸发伤害
({ talent }, dmg) => dmg(talent.a["一段伤害"], "a", "蒸发")
// 普攻一段40%增伤伤害
({ talent }, dmg) => dmg(talent.a["一段伤害"], "a", false, 0, "talent", { dynamicDmg: 40 })
basic
输入 | 类型 | 默认值 | 说明 |
---|---|---|---|
basicNum | Number | 0 | 基础数值 |
talent | String | false | 天赋类型 |
ele | String | false | 元素反应类型 |
dynamicData | Object | false | 动态属性 |
输出 | 类型 | 说明 |
---|---|---|
dmg | Number | 暴击伤害 |
avg | Number | 期望伤害 |
JavaScript
// 以生命值为基础属性计算普攻伤害(此处talent.a["技能伤害"]为星铁计算示例,输出为小数,无需/100)
({ talent, attr, calc }, { basic }) => basic(calc(attr.hp) * talent.a["技能伤害"], "a")
// 以生命值为基础属性计算普攻一段蒸发伤害(此处talent.a["一段伤害"]为原神计算示例,输出为百分比数字,计算时需/100转换为小数)
({ talent, attr, calc }, { basic }) => basic(calc(attr.hp) * talent.a["一段伤害"] / 100, "a", "蒸发")
// 以生命值为基础属性计算40%增伤普攻一段伤害
({ talent, attr, calc }, { basic }) => basic(calc(attr.hp) * talent.a["一段伤害"] / 100, "a", false, { dynamicDmg: 40 })
reaction
输入 | 类型 | 默认值 | 说明 |
---|---|---|---|
ele | String | false | 元素反应类型 |
talent | String | fy | 天赋类型 |
输出 | 类型 | 说明 |
---|---|---|
avg | Number | 伤害数值 |
JavaScript
// 扩散反应伤害
({}, { reaction }) => reaction("swirl")
// 燃烧反应伤害
({}, { reaction }) => reaction("burning")
// 物理击破伤害(10韧性怪)
({}, { reaction }) => {
return {
avg: reaction("physicalBreak").avg / 0.9 * (10 + 2) / 4
}
}
// 超击破伤害
({}, { reaction }) => {
return {
avg: reaction("superBreak").avg / 0.9
}
}
dynamic
输入 | 类型 | 默认值 | 说明 |
---|---|---|---|
pctNum | Number | 0 | 技能倍率 |
talent | String | false | 天赋类型 |
dynamicData | Object | false | 动态属性 |
ele | String | false | 元素反应类型 |
输出 | 类型 | 说明 |
---|---|---|
dmg | Number | 暴击伤害 |
avg | Number | 期望伤害 |
JavaScript
// 动态增伤40%普攻伤害
({ talent }, { dynamic }) => dynamic(talent.a["技能伤害"], "a", { dynamicDmg: 40 })
// 动态增伤40%普攻一段蒸发伤害
({ talent }, { dynamic }) => dynamic(talent.a["一段伤害"], "a", { dynamicDmg: 40 }, "蒸发")
heal
输入 | 类型 | 默认值 | 说明 |
---|---|---|---|
num | Number | 治疗量 |
输出 | 类型 | 说明 |
---|---|---|
avg | Number | 治疗量 |
JavaScript
// 以防御力为基础属性的治疗量计算
({ talent, attr, calc }, { heal }) => heal(calc(attr.def) * talent.e["治疗量2"][0] / 100 + talent.e["治疗量2"][1])
shield
输入 | 类型 | 默认值 | 说明 |
---|---|---|---|
num | Number | 护盾量 |
输出 | 类型 | 说明 |
---|---|---|
avg | Number | 治疗量 |
JavaScript
// 以生命值为基础属性的护盾计算
({ talent, calc, attr }, { shield }) => shield(calc(attr.hp) * talent.e["护盾吸收量2"][0] / 100 + talent.e["护盾吸收量2"][1])
swirl
输入 | 类型 | 默认值 | 说明 |
---|
输出 | 类型 | 说明 |
---|---|---|
avg | Number | 扩散反应伤害 |
JavaScript
// 扩散反应计算
({}, { swirl }) => swirl()