再来看83火热的剑圣
同样,这些装备和冰甲都是为了消除26点初始敏捷对攻速的影响。
可以看到即使不计算26点敏捷加成,剑圣的攻击速度仍然有121点,也就是说,剑圣的补偿攻速是21点。
补偿攻速与其他攻速(敏捷、装备、技能效果加成)是什么关系呢?由于这是个为了解释面板显示问题而衍生的常量,自然和面板的显示有关。在看两张图你就会明白补偿攻速和其他攻速是什么关系了。
这是600点攻速的jugg,攻击间隔是0.24,而0.24≠1.4/600=0.23
那么剑圣极限攻击间隔时,面板上的攻速应该是多少呢?看下图
621的攻速下,达到了最低的攻击间隔0.23,你应该注意到了,这21点攻速正是我前面说的剑圣的补偿攻速。
很明显,补偿攻速与其他攻速在面板上是直接相加的,而正是由于在面板上是直接相加的,导致对于基础攻击间隔不是1.7的英雄来说,他们的AT*AS≠BAS。
接着看几张图
第一张炼金是没有开大的,第二张则是开了三级大的,四张图都消除了敏捷的攻速加成。
对比四个模型的攻击速度和攻击间隔,如果你对数字足够敏感,应该会发现这里显示的AS和AT,AS*AT=1.7。
没错,dota2面板都是以1.7的基础攻击间隔来计算的,当英雄不受任何攻速加成的影响的时候,根据面板上显示的攻击速度和攻击间隔计算出来的基础攻击间隔都是1.7。这就是我前面一直说的,V社在攻速显示方面的一个奇葩设定,而正是因为都是基于1.7的基础攻击间隔来计算攻击间隔的,因此V社程序员不得不引入补偿攻速这个常量,来使AS和AT符合AS*AT=BAS这个公式。
对于基础攻击间隔不是1.7的英雄来说,补偿攻速CAS、攻击速度AS、攻击间隔AT、1.7这四个量有什么关系呢?经过多次实测,我总结出这个公式:
1.7/(1+CAS%)/(AS%-CAS%)=AT <=>1.7/(AS%+AS%*CAS%-CAS%*CAS%)=AT
其中,AS=100+IAS+CAS,因此这个公式又可以写成
1.7/(1+CAS%)/(1+IAS%)=1.7/(1+CAS%+IAS%+CAS%*IAS%)=AT
这就是补偿攻速CAS在面板显示中的作用。
举个栗子,上图中剑圣的攻击速度是100,而攻击间隔却是1.77,这正是因为存在补偿攻速这个常量,导致攻击间隔产生了偏移,利用上面的公式可以进行计算,AS是100,CAS是21,那么IAS=AS-100-CAS=-21,1.77≈1.7/(1+21%)/(1-21%)
再来看这两张图,600攻速的剑圣,攻击间隔是0.24秒,AS=600,IAS=AS-100-21=479,0.24=1.7/(1+21%)/(600%-21%)=1.7/(1+21%)/(1+479%),
同理,621攻速的剑圣,攻击间隔是0.23秒,AS=621,IAS=AS-100-21=500,0.23=1.7/(1+21%)/(621%-21%)=1.7/(1+21%)/(1+500%)
充分说明这个算式是正确的。
如果你曾经对dota2的攻速做过较为详细的研究,特别是测试中用到了基础攻击间隔不是1.7的英雄时,肯定遇到过面板上显示的攻击间隔和攻击速度与基础攻击间隔不对应的问题,然而,当攻击速度越大时,比如你在测试极限攻击间隔时,会发现貌似面板上显示的攻击间隔和攻击速度计算出来的基础攻击间隔越来越接近真正的基础攻击间隔,从1.7/(1+CAS%+IAS%+CAS%*IAS%)=AT这个公式也可以看出来,当IAS越来越大时,CAS的影响就越来越小。
既然对于基础攻击间隔不是1.7的英雄来说,面板显示的攻击速度是错误的,那么正确显示的攻击速度应该是多少呢?
实际上很简单,攻击间隔是正确的,那么直接把1.7/AT就可以得出正确的AS了,只是这个正确的AS可以说毫无实战意义,甚至在研究的演算过程中,都没有存在意义,但这至少比错误的显示要好得多。
最后献上总表截图
点击可看大图
最后的最后,再做个总结吧,进阶篇确实有点难以理解。
基础篇的内容很简单,大家只需要记住BAT÷(1+IAS%)=BAT÷AS%=AT这个公式就对了。
而进阶篇则主要讲了dota2攻速显示面板上的一个问题,由于所有英雄都是按照1.7的基础攻击间隔的模型来计算攻速和攻击间隔的,因此对于一些基础攻击间隔不是1.7的英雄来说,势必要引入一个特殊的常量,这个常量被本人命名为补偿攻速(或校准攻速)CAS,然而攻速面板显示的攻击速度却是直接把补偿攻速与其他攻速相加,这导致面板上显示的攻击速度和攻击间隔与基础攻击间隔无法对应,多次实验下,总结出了1.7/(1+CAS%)/(AS%-CAS%)=AT <=>1.7/(AS%+AS%*CAS%-CAS%*CAS%)=AT和1.7/(1+CAS%)/(1+IAS%)=1.7/(1+CAS%+IAS%+CAS%*IAS%)=AT这两个算式,解释了面板的显示问题。
对比较BAT=AS%*AT和1.7=(1+CAS%)/(AS%-CAS%)*AT这两个算式,你会发现前者其实就是后者在CAS为0的情况下化简得出的。