伤害公式

2018/03/072344 浏览综合
看大家想要伤害计算公式很久了,本来我想用统计方法搞一个,后来觉得太麻烦了,所以直接看了源码。
TapTap
伤害公式是(嫌公式太复杂的话,后面有计算伤害的例子):
伤害 = (类型系数×最大兵力 ×血量百分比作用项 ×属性差作用项 + 武器伤害加成 – 对方武器伤害抵御)× 兵种克制系数 ×技能系数
其中,
类型系数对于普通伤害是0.3,对于技能伤害是0.4。
最大兵力就是攻击方体力上限。
属性对于普通攻击和技能是只攻击方攻击力和防御方防御力。对于类似贾诩1技能的法术技能,它为攻击方谋略与防守方谋略。
血量百分比作用项,描述了血量百分比的作用。它等于攻击方(现在血量/最大血量)^0.85,当攻击方属性高于防守方属性时,它有下限0.3,当攻击方属性抵御防守方属性时,它有下限0.2。该项值与血量百分比的函数关系如下图:
TapTap
蓝线为我方属性高于对方时,黄线为低于时。两条线后面部分是重合的。其实指数0.85离1很近了,这一项其实类似直线。所以这一项的值刚开始随体力几乎线性下降,当攻击方体力降到24%(攻击方属性高)或者15%(攻击方属性低)时,这一项不再下降,也就是说,当体力下降到一定程度(24%或15%),伤害就不变了。
(题外话,设计这个0.85次幂的动机很迷,如果是为了使曲线上凸,让刚开始时伤害随体力下降慢,削弱先后手的天壤之别,那也选一个小于0.5的值嘛,0.85太接近1了,基本上就是线性的)
属性差作用项,描述了属性差的作用。当攻击方属性高时,它等于1+ 0.025×(攻击方属性–防守方属性),有上限3。当攻击方属性低时,它等于1+ 0.015×(攻击方属性–防守方属性),有下限0.2。该项值与属性差的函数关系如下图:
TapTap
图上可以直观的看出,如果属性差高于80或者低于–67,那么更大的属性差不再改变伤害值
武器伤害加成,你的武器里面有一项属性叫伤害增加,就是它。如果是电脑攻击玩家,对方是小兵的话这一项是0,,对方是武将的话我没测试过,估计也是0。
武器伤害抵御,武器属性里面有一项叫伤害抵御的,就是它。挨打的时候才用得到,打电脑时,电脑这一项和前面一样不出意外都是0。
兵种克制系数,如果克制是10%,这一项就是1.1,如果克制是-30%,这一项就是0.7。兵种克制可以在战斗界面里查询到,比如长枪打剑盾克制是10%。
技能系数,就是技能描述里面的武力加成或者谋略加成什么的,比如对于张飞1级1技能重兵顺劈来说,它就是0.4。
注意如果公式算出伤害小于1,那么伤害取1。
如果是反击,那么在乘上反击系数,即反击伤害 = 正常计算的伤害 ×反击系数。并注意反击时兵力用受到伤害之前的兵力计算。
反击系数 = (兵种反击值/100)×兵种克制系数
(这里我看到的代码里面应该是没写乘以兵种克制系数,但是我测试的时候乘上去才能得到真实伤害。逻辑上也不应该乘,因为计算伤害时已经乘过了,可能是彩蛋)
兵种反击值是指发起反击的兵种的这个值,剑盾30,长枪60,刀斧40,魔剑40。弓弩和法师不反击。如果有技能加反击值,加上对应值就行。可以看出枪兵天然反击值就高
下面举几个例子证明一下公式是对的,也介绍一下具体怎么算。
我方前下赵云准备对敌方上排发动技能长驱♂直入(打一行,不受反击,武力加成0.6),赵云现在满血,赵云属性,对方弩兵属性如下图:
TapTap
TapTap
TapTap
赵云血量2832满血,攻击112,对方防御93,枪兵对弩兵加成1.1,武器伤害加成182,对方武器防御0,技能系数,现在是技能攻击类型系数为0.4
先计算血量百分比作用,赵云满血,1^0.85 = 1
再计算属性差作用,1+0.025×(112-93) = 1.475
最后和起来 (0.4×2832×1×1.475+ 182 – 0)×1.1×0.6 = 1222.9
验证一下:
TapTap
果然是1222。
再举一个例子,还是刚才那场战斗,赵云普通攻击对方使用过技能的剑盾,打出伤害642,受到反击30,剑盾技能、对剑盾伤害、剑盾反击伤害如图:
TapTap
TapTap
TapTap
验算一下是不是这些伤害。
已知赵云体力2433/2832,攻击112,防御83,枪兵对盾兵加成1.1,武器伤害加成182,武器伤害抵御168,敌方体力808/3746,攻击80,防御112,盾兵对枪兵加成0.7,敌方武器伤害加成和伤害抵御0,敌方使用过技能抵御(0.3+71×0.001=0.371)伤害,盾兵基础反击值30,技能反击值加成20。
所以赵云对剑盾伤害:
普通攻击,类型系数0.3
血量百分比作用 = (2433/2832)^0.85 = 0.879
属性差作用 = 1+0.025×(112-112) = 1
对方技能抵御伤害比例0.371,所以造成(1-0.371)的伤害。
伤害为(0.3×2832×0.879+ 182)×1.1×(1-0.371) = 642.6
剑盾对赵云反击:
普通攻击,类型系数0.3
血量百分比作用 = (808/3746)^0.85 = 0.271 因为攻击方属性低,所以该项下限是0.2,没有触及。
属性差作用 = 1+0.015×(80-83) = 0.955
反击系数 = (30+20)/100×0.7 = 0.35
反击伤害为 = (0.3×3746×0.271×0.955 + 0 – 168)×0.35 = 30.1
符合图中的伤害。
后话:
这个伤害公式算者比较复杂,要用的话得自己写一个脚本去算,所以可能也没人用,毕竟升级一下武将和武器什么问题都解决了,这也就是官方不公布公式的理由吧。而且剧情游戏以看剧情为主,不用太在意战斗。
PS. 查看源码的办法比较复杂,一两句话说不清楚,可能官方也不希望论坛上出现这样的方法。所以如果你对技术有兴趣,请自行寻找相关办法,如果只是对内容有兴趣,建议就算了吧,源码里面会有很多剧透,影响游戏体验,毕竟探索未知是这种单机游戏的乐趣。
当然还是可以简单剧透一下,和大家感觉一样,游戏越到后面推进需要的资源越多,当然对应的也会出现更有意思的新东西,所以大家请提前做好精神和物质的双重准备。(比如提前充个半年卡什么的。。。)
PPS. 对于不同的技能,开发者尽职尽责地单独写的计算公式,我也没有全部都看一遍,所以可能有些技能有例外。
PPS. 根据程序注释,伤害公式在公测之后改过,所以公测之前产生的攻略可能已经失效,大家参考思路就好。
16
41
26