魔兽及Dota的热度过去数年了,但我仍然觉得它是最经典游戏之一。为情怀补票了重制版~
心火骑士打不动
亡灵全靠一个球
...
为控制变量,暂抛开实战中的各种复杂因素,单从护甲这个属性本身来看看它对攻击防御的影响
护甲伤害计算
魔兽中,每一点护甲相当于6%的0护甲最大生命值,这里说的是“兑换”的关系,1000血,1护甲,相当于1060血,0护甲;1000血,5点甲的时候,+1护甲并不能代表1060血5点甲
基于这个定义,我们按给出血量兑换公式:
H1 = H0 * (1 + 0.06 * n)
其中 H0 是原始生命值,H1是将n点护甲兑换成生命值后的0护甲生命值
那么护甲对伤害减少了多少呢?根据血量公式,可以理解为,原本打出H0伤害就可以杀死这个单位,可是因为有了n点护甲,现在需要打出H1的伤害才能杀死它,那么伤害减免(比例)就是
Dr = (H1 - H0) / H1
带入血量兑换公式,化简得伤害减免公式:
Dr = n / (n + 100 / 6)
做出函数图像:
每个坐标点上标记了护甲值及其对应的伤害减免,打开游戏,验证一下伤害减免的公式对不 :D
护甲:1
护甲:2
护甲:4
护甲:6
护甲:7
护甲:9
可见,完全正确!
那么心火骑士真的强到打不动了吗?
给骑士升三防,加上圣骑士的三级光环,骑士就有5+6+6=17点甲(现在1.36.1版本的圣骑士虔诚光环是+2+4+6护甲了)
此时再加上心灵之火5点甲,高达22点甲,看看图
惊奇的发现,三防骑士踩着三级光环,心灵之火只给他减免了57%-50%=7%的伤害!
如果没有三级光环,心灵之火给三防骑士也只减免了9%!
护甲的伤害减免函数是增长率越来越低的,所以越在低护甲的时候增加护甲,伤害能减免的越多,性价比越高
问题来了,心火骑士强吗?强,但是还不够强,如果把这5点甲给憎恶(初始2点甲),可以带来19%的伤害减免,比骑士升三防的效果还要好!
可在实战中,心火骑士为什么打不动,因为实战中有了心灵之火,就肯定有很多大师级牧师,牧师可以加血的,对这种高护甲的单位,牧师加的每一点血都更有“质量”,所以打不动。堆护甲同时又加血,牧师的技能真是相辅相成
闪避护符为啥被嫌弃呢?
比如一个英雄3点甲(伤害减免15%),打到一个闪避护符,这个装备带来的伤害减免为(1 - 15%) - (1 - 15%)(1 - 15%) = 13%
相当于增加了3~4点护甲,效果也不差,同理如果英雄本身护甲越高,闪避护符效果越弱,那么它也就相当于一个普通的防御指环了,不如同等级的血牌。
实战中,跟防御指环一样,敌人是可以根据我方英雄的装备来决定是否攻击他的,英雄防御过高,敌人可以选择击杀我方的其他单位,所以提高防御的作用通常不大;并且这种防御型装备对打野怪练级效率几乎没有裨益。
另外,女妖的诅咒,增加33%的伤害减免,可是显著大于升三防的,神技啊!更加神技的是深渊魔王的吼,一级就-30%攻击力,相当于至少+7的护甲(单位本身护甲越高,就等效越多的护甲增加)
减甲
说完了加护甲,再来看看减护甲。
减护甲并不是线性兑换6%的血,不然就会减成负数的生命值,这太变态了,也不合理。举个例子,Dota 大鱼人点灯,16级鱼人减15点甲,6% * 15 = 90%,那么500血的单位50点攻击力就可以一下打死,
16级的鱼人远高于50点攻击力,近战兵500+血,0点甲,如果这时鱼人点灯了,可以一下普攻a死吗?不能。如果再出强袭这种减甲的装备,对方的血量被兑换为负数,小兵都是自动死亡?或者一碰就挂?显然不合理。
所以减甲的血量兑换不是线性的,而是指数递减的,即每减一点甲,血量少6%,但是是在之前兑换后的血量上再减6%:
H1 = H0 * (1 - 6%) ^ n
推导出伤害减免公式(负数,也就是伤害加成):
Dr = (H * (1 - 6%) ^ n - H) / H * (1 - 6%) ^ n
化简,取绝对值,得:
Dr = 1 - 0.94 ^ n
做出图像:
进入游戏,验证一下~
护甲-2
护甲-3
护甲-4
完全正确!
公式是指数函数,容易得出,是单调递增且递增越来越慢的,也就是说减甲也是性价比越来越低的。
以公式和图像可知,最高性价比的护甲加减,就是0点甲附近。如果腐球打在1~2点甲的单位上,这个腐球就是MVP,哈哈!
减甲与加攻击力的兑换关系
先说结论,护甲减免的比例和攻击力加成的比例是不能直接等效的。
假如一个单位的护甲能减免20%的伤害,100点攻击力打上去,就是80点伤害,减掉这部分护甲,就能造成100点伤害;如果兑换成攻击力加成,需要125点攻击力,被护甲减免20%后,也能造成100点伤害,也就是说,20%的减甲等效于25%的护攻击力加成。
精灵之火-4护甲,施放在一个0护甲的单位(没有升防的远程兵,二本空军,大多都是0护甲)上,伤害加成22%,如果释放在2~3护甲的单位,加成18%~19%,按平均20%算,相当于熊的咆哮。
亡灵的球有多厉害?国内平台的1.27亡灵腐球-5护甲,至少相当于3级强击光环!
附:画图代码
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.use('Qt5Agg')
# 定义 x 取值范围
x = np.arange(0, 23, 1)
# 加护甲公式
y = x / (x + 100 / 6)
# 显示坐标点的数值
for i, (x_i, y_i) in enumerate(zip(x, y)):
plt.annotate("({}: {:.0f}%)".format(x_i, y_i * 100),
xy=(x_i, y_i), xytext=(5, -10),
textcoords='offset points', fontsize=6,
)
# 绘制函数图像
plt.plot(x, y, 'go-')
# 显示图像
plt.show()
x = np.arange(0, 16, 1)
# 减护甲公式
y = 1 - pow(0.94, x)
for i, (x_i, y_i) in enumerate(zip(x, y)):
plt.annotate("({}: {:.0f}%)".format(x_i, y_i * 100),
xy=(x_i, y_i), xytext=(5, -10),
textcoords='offset points', fontsize=10,
)
plt.plot(x, y, 'ro-')
plt.show()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。