DNF的伤害计算
在之前的博客《观察LOL的数值系统》中,我粗略观察了LOL的数值系统,虽然有很多不确定的地方,但是其中关于伤害计算公式我还是比较确信的。但是DNF伤害计算公式的研究难度,相比LOL要困难很多,有以下几个原因:
- 伤害值不是固定的,而是有一定范围浮动。(尽管看起来浮动值很小)
- 牵扯到很多方面的数值,而他们的结算优先级也需要考虑
- 修炼道场中不显示更详细的属性(例如防御力等)
前言
- 文档中的很多小数都只保留了1~3位。
- 计算出伤害期望与实际打出的伤害差别在50以内都认作是计算正确。
测试环境
“伤害”受多个自身数值的加成,也会因对方防御力等数值而减免,而这些加成/减免数值很多并不会显示,这对测试分析造成了极大的妨碍。
因此,分析伤害的首要目标是发现一个0加成、0减免的测试环境。在此测试环境下,实际输出的伤害等于理论伤害。这里,我发现的环境是:
用几乎是刚创建的15级女鬼剑,使用技能【波动斩】,对修炼道场中的【陨石】进行输出:
可以看到,我的面板物理攻击
为424
,【波动斩】的物理攻击力加成
为158%
,这样伤害期望是:
424
×
158
%
=
669.92
424 \times158\%=669.92
424×158%=669.92
而显示的伤害和此值相差极小。这说明现在就是想要的测试环境,这意味着:
- 【陨石】的伤害减免为0。如果我用相同的角色和技能去输出另一个对象发现小于伤害期望,则说明另一个对象的伤害减免高于0,具体的值也可以计算。
- 我现在的角色的伤害加成为0。如果我用其他角色的其他技能去输出【陨石】发现高于伤害期望,则说明其他角色在测试时伤害加成高于0,具体的值也可以计算。
当然,这个推论严格意义上不“严谨”。因为,如果加成和减免相互抵消(即加成百分比和减免百分比互为倒数),最终的伤害依旧等于伤害期望。也就是说,“加成为0”和“减免为0”这两个推论其实是“相互证明”的,即一个如果成立,那就证明了另一个一定成立;反之,一个是错误的,那就证明了另一个一定是错误的。
然而,对于二者的正确性我还是有一定自信的。首先,这种互为倒数的关系是不容易达到的。其次,【陨石】作为建筑,它的防御力是0,这是很多资料上显示的;而我的角色也是刚创建,我有理由相信目前没什么额外的“加成”。因此这里我很有自信说:现在这个测试环境中,加成和减免都为0。
技能伤害加成类型
1.百分比
技能描述为:物理/魔法攻击力:X%
。公式比较直接:
技
能
基
础
伤
害
=
人
物
面
板
物
理
/
魔
法
攻
击
×
技
能
百
分
比
倍
率
技能基础伤害=人物面板物理/魔法攻击 \times 技能百分比倍率
技能基础伤害=人物面板物理/魔法攻击×技能百分比倍率
实例就是测试环境中的例子。
2.固伤
技能描述为:物理/魔法攻击力:X
。公式为:
技
能
基
础
伤
害
=
(
1.0
+
人
物
面
板
力
量
/
魔
法
×
0.004
)
×
技
能
面
板
攻
击
力
技能基础伤害=(1.0+ 人物面板力量/魔法\times0.004)\times技能面板攻击力
技能基础伤害=(1.0+人物面板力量/魔法×0.004)×技能面板攻击力
例如:
【火焰吐息】的伤害预期是:
(
1.0
+
667
×
0.004
)
×
1413
=
5182.88
(1.0+667\times0.004)\times1413=5182.88
(1.0+667×0.004)×1413=5182.88。结果符合预期。
由于
1.0
0.004
=
250
\frac{1.0}{0.004}=250
0.0041.0=250,所以相当于每250点力量/智力提升了一倍的技能面板攻击力
。
3.武器百分比
技能描述为物理/魔法武器攻击力X%
。计算方式还没有太明确,但是这种描述的技能现在看来是比较少的。
4.武器固伤
同上。
人物面板物理/魔法攻击力计算公式
人物面板物理/魔法攻击力
的计算公式为:
人
物
面
板
物
理
/
魔
法
攻
击
力
=
(
1.0
+
人
物
面
板
力
量
/
魔
法
×
0.004
)
×
基
础
物
理
/
魔
法
攻
击
力
人物面板物理/魔法攻击力=(1.0+ 人物面板力量/魔法\times0.004)\times基础物理/魔法攻击力
人物面板物理/魔法攻击力=(1.0+人物面板力量/魔法×0.004)×基础物理/魔法攻击力
而基础物理/魔法攻击力
的值主要由武器物理/魔法攻击力
贡献,不过也有其他的方面有贡献。即:
基
础
物
理
/
魔
法
攻
击
力
=
武
器
物
理
/
魔
法
攻
击
力
+
其
他
物
理
/
魔
法
攻
击
力
提
升
基础物理/魔法攻击力 = 武器物理/魔法攻击力+其他物理/魔法攻击力提升
基础物理/魔法攻击力=武器物理/魔法攻击力+其他物理/魔法攻击力提升
例如:
我的武器魔法攻击力
为1083
(注意,武器面板中有两个“魔法攻击”,这里要用下面的数值做计算)。
而被动技能【唤醒】提升了65
的魔法攻击力
。
因此,人物面板魔法攻击力
的预期为:
(
1.0
+
1140
×
0.004
)
×
(
1083
+
65
)
=
6382.88
(1.0+1140\times0.004)\times(1083+65)=6382.88
(1.0+1140×0.004)×(1083+65)=6382.88
结果符合预期。
独立攻击力的加成
独立攻击力
仅对固伤
类技能有效。公式为:
技
能
面
板
攻
击
力
=
人
物
面
板
独
立
攻
击
力
×
固
伤
技
能
伤
害
系
数
技能面板攻击力=人物面板独立攻击力\times固伤技能伤害系数
技能面板攻击力=人物面板独立攻击力×固伤技能伤害系数
其中我这里指的固伤技能伤害系数
每个技能都不一样,虽然没有在面板中显示出来,但是可以简单计算出来。例如:
【G-14手雷】目前的固伤技能伤害系数
就是
1537
÷
578
=
2.659
1537\div578=2.659
1537÷578=2.659。
则当我的独立攻击力
提高后,技能面板攻击力也就对应变成了:
904
×
2.659
=
2405
904\times2.659=2405
904×2.659=2405。
结果符合预期。
属性强化
人物面板的属性强化将会对特定属性的攻击有加成效果,公式为:
属
强
加
成
=
(
人
物
面
板
属
强
+
11
)
×
0.0045
属强加成=(人物面板属强+11)\times0.0045
属强加成=(人物面板属强+11)×0.0045
(其中关于数值的求证可见 【附录1】 )
例如:
则伤害期望为:
1060
×
244
%
×
(
1.0
+
(
43
+
11
)
×
0.0045
)
=
3214.9
1060\times244\%\times(1.0+(43+11)\times0.0045)=3214.9
1060×244%×(1.0+(43+11)×0.0045)=3214.9
结果符合预期。
由于
1.0
0.0045
=
222.2
\frac{1.0}{0.0045}=222.2
0.00451.0=222.2,所以也可以粗略看做是22点法强提升了10%的基础伤害
由于
11
×
0.0045
=
5
%
11\times0.0045=5\%
11×0.0045=5%,所以也可以看做,0属强下属性伤害也会有5%的加成。
暴击伤害加成
暴击伤害加成系数
初始为150%
,这个值可以简单直接算出来:
不过有一些装备可以提升这个暴击伤害加成系数
,例如:
公式简单直接:
暴
击
伤
害
加
成
系
数
=
150
%
×
(
1.0
+
暴
击
增
伤
百
分
比
)
暴击伤害加成系数=150\%\times(1.0+暴击增伤百分比)
暴击伤害加成系数=150%×(1.0+暴击增伤百分比)
例如,上图装备穿戴后暴击伤害加成系数
应为
150
%
×
112
%
=
168
%
150\%\times112\%=168\%
150%×112%=168%
下图测试中可算暴击伤害确实是非暴击伤害的168%
:
“额外伤害增加量”与“最终伤害增加”
额外伤害增加量
的描述是攻击时,额外增加X%的伤害增加量。例如:
最终伤害增加
的描述是最终伤害+ X%,例如:
二者的描述十分类似,看起来都是提供一个(1.0+X%)的加成系数。但是当两种加成并存,并且有多个装备同时有加成时,最终加成的结果可能存在 “理解上的歧义”。经过试验(详细可见附录2),我得出最终加成系数的公式为:
(
1.0
+
额
外
伤
害
增
加
量
百
分
比
)
×
(
1.0
+
最
终
伤
害
增
加
百
分
比
)
(1.0+额外伤害增加量百分比)\times(1.0+最终伤害增加百分比)
(1.0+额外伤害增加量百分比)×(1.0+最终伤害增加百分比)
这解决的歧义是:
- 两件装备均有同一个增伤类型时,最终效果为二者相加。例如,两件都是
20%
的最终伤害增加
,则结果是40%
的最终伤害增加
,即相当于未加成时的140%
。而不是叠加(即 120 % × 120 % = 144 % 120\%\times120\%=144\% 120%×120%=144%)。 - 两种增伤类型是叠加的关系,即
20%
的最终伤害增加
和20%
的额外伤害增加量
最终效果是144%
。
附加伤害
描述是攻击时,附加X%的伤害
。这个容易计算,直接用小字附加到最后的伤害上(无论是否暴击):
如果有多个附加伤害
的效果,则他们分别独立地作用于附加前的伤害上。
总结
这一篇博客观察了伤害计算公式,主要的部分应该都提到了,但我想一定还有很多未被提及的伤害加成类型,要了解那些就需要做更多类似的实验了。
然而,实际打出的伤害并不是能运用这一篇博客的公式就能求出的。因为还有减伤
,而它又和等级
、物理/魔法防御
、属性抗性
等数值有关。而这个问题相比伤害计算公式更难以实验,因为修炼道场中并不能看到敌人的这些数值。
附录1:属性强化相关参数的求解证明
关于属性强化加成,网上很多资料都指出:22点属强对应10% ,实际测试很相近,但还是有不可忽略的误差。另外,我在测试时也发现属强为0时,属性攻击仍旧有加成,因此我怀疑人物有隐藏的属性加成值未写在人物面板上。
《DNF伤害提升小课堂:属性强化与属性抗性》这篇文章指出人物有11点的隐藏属强。而在《DNF“属强系数”原来这么计算》这篇文章中也指出属强加成系数其实为0.0045(之所以22点属强对应10%看起来正确是因为
1
0.0045
=
222.2
\frac{1}{0.0045}=222.2
0.00451=222.2)。
这里,我想做实验求证一下数值的正确性。
首先,假定属强加成是线性增强的并且人物有隐藏属强,则属强加成公式应该看起来像:
属
强
加
成
=
(
人
物
面
板
属
强
+
人
物
隐
藏
属
强
)
×
属
强
加
成
系
数
属强加成=(人物面板属强+人物隐藏属强)\times属强加成系数
属强加成=(人物面板属强+人物隐藏属强)×属强加成系数
由于公式中属强加成
和人物面板属强
都是可见的,因此求解剩余两个未知数就是目标。这个式子可以转换为二元一次方程,因此只要有两组数据就可以求解。:
测试的技能选择为【冰晶坠】:
可以算出,0属强加成情况下,伤害期望为:
1060
×
470
%
=
4982
1060\times470\%=4982
1060×470%=4982。
下面,在两种人物面板属强
情况下对伤害进行测定:
实际伤害的平均值为:5233
,那实际的加成为
(
5233
4982
−
1.0
)
(\frac{5233}{4982}-1.0)
(49825233−1.0)
实际伤害的平均值为6200
,那实际加成为
(
6200
4982
−
1.0
)
(\frac{6200}{4982}-1.0)
(49826200−1.0)
下面,假设人物隐藏属强=x
,属强加成系数=y
。则方程组就为:
{
5233
4982
−
1.0
=
x
y
6200
4982
−
1.0
=
(
x
+
43
)
y
解
得
{
x
=
11.161
y
=
0.0045139
\begin{cases} \frac{5233}{4982}-1.0=xy \\ \frac{6200}{4982}-1.0=(x+43)y \end{cases} 解得 \begin{cases} x= 11.161\\ y=0.0045139 \end{cases}
{49825233−1.0=xy49826200−1.0=(x+43)y解得{x=11.161y=0.0045139
结果和预期相符:人物隐藏属强
为11
,而属强加成系数
为0.0045
附录2:“额外伤害增加量”与“最终伤害增加”公式证明
首先,确保目前已经知道了当前人物的所有加成效果:
使用【地裂 波动剑】做测试:
尝试查看当前状态下的加成。
发现一觉被动技能【心眼】有对这个技能进行加成13.5%
考虑上这一13.5%
加成,和我当前智力1237
,和【地裂 波动剑】的固定伤害21544
。伤害预期是:
21544
×
(
1.0
+
1237
×
0.004
)
×
(
1.0
+
13.5
%
)
=
145443
21544\times(1.0+1237\times0.004)\times(1.0+13.5\%)=145443
21544×(1.0+1237×0.004)×(1.0+13.5%)=145443
伤害符合预期,这可以证明当前我释放【地裂 波动剑】时只有【心眼】的加成。
下面,穿戴一些有“额外伤害增加量”与“最终伤害增加”效果的装备:
目前有4个防具有最终伤害增加
效果,算上3套装效果后数值合计为52%
。有2个首饰有额外伤害增加量
效果,数值合计为20%
。
首先,看穿上装备之后面板的状态:
此时,在不考虑“额外伤害增加量”与“最终伤害增加”效果下,伤害预期应该为:
32716
×
(
1.0
+
1668
×
0.004
)
×
(
1.0
+
13.5
%
)
=
284882
32716\times(1.0+1668\times0.004)\times(1.0+13.5\%)=284882
32716×(1.0+1668×0.004)×(1.0+13.5%)=284882
假设“额外伤害增加量”与“最终伤害增加”叠加的加成系数公式为:
(
1.0
+
额
外
伤
害
增
加
量
百
分
比
)
×
(
1.0
+
最
终
伤
害
增
加
百
分
比
)
(1.0+额外伤害增加量百分比)\times(1.0+最终伤害增加百分比)
(1.0+额外伤害增加量百分比)×(1.0+最终伤害增加百分比)
则伤害期望应该是:
284882
×
(
1.0
+
32
%
)
×
(
1.0
+
20
%
)
=
519625
284882\times(1.0+32\%)\times(1.0+20\%)=519625
284882×(1.0+32%)×(1.0+20%)=519625
结果符合预期:
这证明了公式是对的