📊计算详情 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()