跳转到内容

📊计算详情 details

伤害计算必须变量,主要导出伤害计算列表

JavaScript
export const details = [
  {
    // 伤害类型标题,自拟,展示在角色面板详情下方伤害计算列表的左侧
    title: "",
    // 伤害值
    dmg: (attr, dmg) => dmg()
  }, {
  }...
]

下面将详细说明dmg如何编写

dmg箭头函数传入attrdmg两个变量,其中attr主要传入当前角色的详情、状态、天赋倍率等

attr

输出(无特殊标注则为两中游戏类型通用)类型说明
talentObject输出talentLevel技能等级与各技能的倍率详情
charIdNumber角色id
uidString用户uid
levelNumber角色等级
consNumber角色命座
trees [sr]Object角色点量行迹数组
weaponObject角色携带武器详情(name-武器名,affix-武器精炼/叠影,level-武器等级)
mastery [gs]String精通buff
attrObject角色、敌人状态
paramsObject自定义参数
refineNumber武器精炼/叠影 - 1
weaponTypeNameString武器类型
elementString元素类型
calcFunction传入对象,以base+plus+(base*pct)计算对象中的值
artisObject圣遗物/遗器名及其数量

attr通常情况下为解构后传入,如传入技能详情

JavaScript
/**
 * talent.a["技能伤害"]输出为数字或数组,原神的计算中,该数字为百分比数字,而星铁中为小数,但dmg中会区分,此处无需在意
 */
({ talent }, dmg) => dmg(talent.a["技能伤害"], "a")

dmg

值得注意的是,dmg本身也为一个匿名函数,提供通用的基础计算

作为函数时:

输出类型说明
dmgNumber暴击伤害
avgNumber期望伤害

作为对象时:

输出类型说明
basicFunction基础数值计算方式,通常用于计算不以攻击力为基础属性的计算
reactionFunction固定的元素反应/持续伤害/击破伤害的计算
dynamicFunction动态加成计算方式
healFunction治疗量计算
shieldFunction护盾计算
swirlFunction扩散反应计算

作为函数

dmg作为函数时,可实现与其下函数basicreactiondynamic的互相转换

输入类型默认值说明
pctNumNumber0技能倍率
talentStringfalse天赋类型
eleStringfalse元素反应类型
basicNumNumber0基础数值(basic函数的数值,通常不在此处使用)
modeStringtalent模式(某些内部判断必须,通常不在此处使用)
dynamicDataObjectfalse动态属性(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

输入类型默认值说明
basicNumNumber0基础数值
talentStringfalse天赋类型
eleStringfalse元素反应类型
dynamicDataObjectfalse动态属性
输出类型说明
dmgNumber暴击伤害
avgNumber期望伤害
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

输入类型默认值说明
eleStringfalse元素反应类型
talentStringfy天赋类型
输出类型说明
avgNumber伤害数值
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

输入类型默认值说明
pctNumNumber0技能倍率
talentStringfalse天赋类型
dynamicDataObjectfalse动态属性
eleStringfalse元素反应类型
输出类型说明
dmgNumber暴击伤害
avgNumber期望伤害
JavaScript
// 动态增伤40%普攻伤害
({ talent }, { dynamic }) => dynamic(talent.a["技能伤害"], "a", { dynamicDmg: 40 })
// 动态增伤40%普攻一段蒸发伤害
({ talent }, { dynamic }) => dynamic(talent.a["一段伤害"], "a", { dynamicDmg: 40 }, "蒸发")

heal

输入类型默认值说明
numNumber治疗量
输出类型说明
avgNumber治疗量
JavaScript
// 以防御力为基础属性的治疗量计算
({ talent, attr, calc }, { heal }) => heal(calc(attr.def) * talent.e["治疗量2"][0] / 100 + talent.e["治疗量2"][1])

shield

输入类型默认值说明
numNumber护盾量
输出类型说明
avgNumber治疗量
JavaScript
// 以生命值为基础属性的护盾计算
({ talent, calc, attr }, { shield }) => shield(calc(attr.hp) * talent.e["护盾吸收量2"][0] / 100 + talent.e["护盾吸收量2"][1])

swirl

输入类型默认值说明
输出类型说明
avgNumber扩散反应伤害
JavaScript
// 扩散反应计算
({}, { swirl }) => swirl()