【乱斗数据】英雄大招充能比率的计算方法——由拜伦的暗改谈起
前情提要:荒野乱斗4.27更新暗改部分分析
(haaan佬就凭着一点wiki数据,分析的七七八八了。毕竟是大神玩家,我这种还要借助datamine的三脚猫根本比不了,大家想学点对局真本事的可以关注一下他~)

先上结论:P=(M*D/400000)*100%
其中M为大招充能乘数,各个英雄之间不同,同一英雄的普攻和大招之间通常也不同
D为英雄1级攻击伤害,只看英雄的1级面板数据,其它因素对此变量无影响
400000为大招充能总量,所有英雄都是一样的,可以理解成大招键是一个总值40w的分数条,从0开始积累,当分数大于等于40w时英雄就可以使用大招了
P为大招充能比率,使用M(普攻)计算P时,将100%/P的结果进一位取整,即为大招充能所需普攻数量(Q)
我们不难看出P与M、P与D之间呈正相关,而P与Q之间呈负相关

案例分析:结合实际的平衡性调整,分析产生“暗改”的原因
首先要明确的一点是,对玩家来说,真正有用的是英雄1级攻击伤害(D)和大招充能所需普攻数量(Q)(此处不讨论自动充能、受击充能等特例,所以夸张点说,P=25%和P=33.3%没有区别,反正都是四下普攻)
但这里的问题是D能够影响P,进而P可能会影响Q。所以单独对D进行调整的时候,有时就不经意影响到了Q。M在这里就起到了很好的作用,想要对D、Q其一调整,而使另一个保持不变,通过调整M来平衡就行了
开头拜伦的“暗改”和最近雅琪的“暗改”的原因也就很明显了:对D进行调整时没有同步调整M,导致Q的值改变
先看雅琪的例子:
M(雅琪)=79 D(调整前)=1280 D(调整后)=1160
解得P(调整前)=25.28% P(调整后)=22.91%,因此Q(调整前)=4 Q(调整后)=5
比起“暗改”说是“忘记回调”可能更为恰当……
关于haaan佬指出的拜伦暗改也完全可以解释了:
M(12月)=112 M(2月)=117 M(4月)=118 M(6月)=131
D(12月)=400 D(2月)=380 D(4月)=340 D(6月)=340
P(12月)=11.2% P(2月)=11.115% P(4月)=10.03% P(6月)=11.14%
Q(12月)=9 Q(2月)=9 Q(4月)=10 Q(6月)=9
4月版本中大幅减少了D,却几乎没有增加M,才造成了Q的增加
而拜伦每发子弹造成三次伤害,一套下来刚好9次,所以效果就格外明显
这种情况处理方法也比较简单,增加M就行了,M并不是游戏内的可见数据(安装包里有),也无需在更新日志里进行说明,之前波克、沙迪的大招充能调整就是在保证D不变的情况下,调整M来影响Q。
而在之前的诸多版本中,有细心的朋友可能注意到有些英雄的P在不影响Q的情况下小幅度增加/减少,这就是对英雄进行平衡性调整的时候带来的影响。而一般情况下,对于没有额外获取大招充能方式的英雄来说,这种小幅度的调整带来的影响也是很小的,可以忽略不计
现存的史魁克大招对大招充能bug就非常奇怪了,本来应该按1级史魁克的大招伤害计算,但不知道为什么把各种加成(拉夫补给/老八伤害放大器/吃鸡能量块)所带来的伤害增益也算进去了

特例说明
固定充能比率(科莱特)
不论对面是什么样的英雄,科莱特的单发充能比率都固定为25%,所以普攻四下一大,大招来回两人一大。这点我想玩过几局就会发现的
自动充能(达里尔、艾德加、梅格机甲形态)
也能用上述公式计算,不过此时D固定为100,由M决定P
M(达里尔/艾德加)=132 M(梅格机甲)=800
解得P(达里尔/艾德加)=3.3% P(梅格机甲)=20%
因此大招充能所需时间T(达里尔/艾德加)=30.3s T(梅格机甲)=5s
艾德加一妙正如同其描述一样,充能比率提高525%,持续4s
那么这个描述就可以改成“艾德加每秒获得20.625%的大招充能,持续4秒”
总共是82.5%的充能,即使用一妙能让艾德加的大招充能时间缩减至9.3s,相当于快了3倍多
范围内自动充能(阿渤图腾、巴兹)
一个是范围内友方,一个是范围内敌方
M(阿渤图腾)=200 M(巴兹)=270
解得P(阿渤图腾)=5% P(巴兹)=6.75%
因此单人大招充能所需时间T(阿渤图腾)=20s T(巴兹)=14.8s
现版本阿渤图腾1000血,每秒掉50,最多也只能存在20s,刚好能充满一个大招
巴兹具体来说是在其充能范围内的每敌方英雄每秒提供6.75%的大招充能,敌人越多的话充能就越快(所以单鸡的组队巴兹很快就能有大招)
移动时自动充能(麦克斯一辉)
机制比较特殊,不能代入上面的公式,没找出来对应的算法:(
6月削过以后现在纯靠一辉65s一个大,要注意的是一辉吃的是速度判定,所以麦克斯自身的大招和斯图一妙这种提升速度的加成,也会稍微增强一辉的充能效果
受击充能(挨打F4)
机制也比较特殊,现版本除了跟所受伤害有关以外,跟英雄各自的最大血量也是有关的
又没找出来对应的算法:(所以大招充能所需时间在这四个英雄之间也有区别
不细算了,你玩个肉不会指望着全靠卖血来充能吧
上个版本我记得是2w伤害换一个大,这个版本算不出来但是可以明显看出的是最大血量越低的英雄,充能所需要的伤害越少

“0.1+0.2”的大难题
看到这里有些人可能会发问:“为什么还要通过公式计算这么复杂呢?直接规定P不好吗?”
我以一个编程门外汉的角度来尝试解答一下。
英雄的碰撞体积,子弹宽度,子弹速度,装弹速度,攻击范围等等……对战中的一切都可以用数据来量化,而数据的多样化才能创造不同的英雄,如果只是用整数描述这些的话,未免太过单调,而且也不符合实际对战中的应用。
那使用小数不就好了?但是使用二进制的计算机和(普遍来说)使用十进制的人类是不一样的。十进制小数是无法精确转换为二进制的——这导致了计算机运算中的“浮点运算误差”
使用excel计算的时候一般会在外面套一个round函数(强制进位),但是这种做法属于亡羊补牢,并没有完全消除误差
那我们何不利用整数值来规定小数,以避免这种误差呢?
再结合大招充能的含义,利用伤害D、充能乘数M、充能总量40w来计算充能比率P就显得十分合理简洁了
充能乘数M的存在,也方便平衡性调整时在不改变伤害D的情况下,调整充能比率P
反过来,如果调整伤害D的时候,忽视了对充能乘数M进行平衡,就会造成充能比率P的异常变动——也就是大家说的“暗改”了
(没有阿渤特定皮伤害bug离谱,真的是“错误地引用了布洛克的爆炸范围”,震惊)
所以虽然这些对战数据对我们来说可以用小数来描述,但是计算机的话,可以说是必须转换为整数,才能保证不会出错。通常在百科类网站(比如fandom)上面看到各种整数型数据,也是因为安装包内本身就是这样的

回顾与小结
“数字可不会说谎”,bug又不会凭空出现,本专栏是我在个人认知范围内对大招充能机制进行的解析,一直很好奇之前拜伦“暗改”和这次雅琪“暗改”的原因,加上个人觉得之前玩家社区内关于大招充能机制的概括“只有佩佩和里昂是按伤害判定,其他固定比例”之类的有点太模糊,终于决定自己做点研究:)
因为充能乘数M表面上是不可见数据,本专栏并不提倡玩家进行理论上的计算。想要解释的是“bug是如何产生的”以及“官方如何进行平衡性调整”,也算是给对游戏机制有所好奇的玩家作一点参考吧
文 / EXiT
Fix your game, Bug Stars!