我在中文和英文社区都能看到一种最常见的计算方式,下面直接举例:
假设一把武器,20-30伤害,40%穿甲200%破甲。打中一个仅剩10点甲的身体护甲。
假设该次攻击roll出20点基础伤害,由于该武器具有200%破甲效率,所以需要5点基础伤害转化为10点破甲伤害,来完全摧毁剩余的10点护甲,此时还剩15点基础伤害会直接打到HP上。
此外,这20点基础伤害乘以40%对应着8点穿甲伤害。有人说此次攻击最终造成的HP伤害应为15+8=23点。也有人说因为此次攻击已完全破甲,所以不会再计算穿甲伤害,最终造成的HP伤害就为15点。
这两种计算结果乃至这种算法本身都是错误的。
查阅英文wiki,正确的算法如下:
对于所有武器,它的破甲伤害和基础伤害都是分别单独roll出的,二者之间并无线性关联。破甲伤害只能作用于护甲,完全无法作用于HP,即使破甲伤害超过剩余甲量,也不会以任何形式转化为对HP的直接伤害。
对于20-30伤害,40%穿甲200%破甲的武器,它的基础伤害范围为20-30,破甲伤害范围为40-60,在攻击一个仅剩10点的身甲时,我们假设分别roll出的结果是:基础伤害为30,破甲伤害为40。
由于破甲伤害40超过剩余的10点甲量,所以护甲被完全摧毁。
穿甲伤害为基础伤害的40%即为30×40%=12点,该伤害扣除剩余甲量(0点)的10%等于12点,直接打在HP上。
此外,由于此次攻击已经完全破甲,因此会附带一个额外伤害打在HP上,该伤害=基础伤害30×(1-穿甲系数40%)-此次攻击的破甲量10点=8点。
最终对HP伤害为12+8=20点。
需要注意的是,只有在护甲被完全摧毁的情况下,才会出现该额外伤害,且该额外伤害不能为负。即如果基础伤害×(1-穿甲系数)<该次攻击破坏的甲量,则该额外伤害为0不为负。
总结一下:
①攻击后剩余甲量不为0时的HP伤害计算公式:HP伤害=max(0,基础伤害×穿甲系数-剩余甲量×10%)
②攻击后剩余甲量为0时的HP伤害计算公式:HP伤害=基础伤害×穿甲系数+max{0,【基础伤害×(1-穿甲系数)-此次攻击破甲量】}。
在攻击无甲目标时由于此次攻击破甲量为0,所以该公式可以直接被简化为基础伤害×(穿甲系数+1-穿甲系数)=基础伤害。

假设一把武器,20-30伤害,40%穿甲200%破甲。打中一个仅剩10点甲的身体护甲。
假设该次攻击roll出20点基础伤害,由于该武器具有200%破甲效率,所以需要5点基础伤害转化为10点破甲伤害,来完全摧毁剩余的10点护甲,此时还剩15点基础伤害会直接打到HP上。
此外,这20点基础伤害乘以40%对应着8点穿甲伤害。有人说此次攻击最终造成的HP伤害应为15+8=23点。也有人说因为此次攻击已完全破甲,所以不会再计算穿甲伤害,最终造成的HP伤害就为15点。
这两种计算结果乃至这种算法本身都是错误的。
查阅英文wiki,正确的算法如下:
对于所有武器,它的破甲伤害和基础伤害都是分别单独roll出的,二者之间并无线性关联。破甲伤害只能作用于护甲,完全无法作用于HP,即使破甲伤害超过剩余甲量,也不会以任何形式转化为对HP的直接伤害。
对于20-30伤害,40%穿甲200%破甲的武器,它的基础伤害范围为20-30,破甲伤害范围为40-60,在攻击一个仅剩10点的身甲时,我们假设分别roll出的结果是:基础伤害为30,破甲伤害为40。
由于破甲伤害40超过剩余的10点甲量,所以护甲被完全摧毁。
穿甲伤害为基础伤害的40%即为30×40%=12点,该伤害扣除剩余甲量(0点)的10%等于12点,直接打在HP上。
此外,由于此次攻击已经完全破甲,因此会附带一个额外伤害打在HP上,该伤害=基础伤害30×(1-穿甲系数40%)-此次攻击的破甲量10点=8点。
最终对HP伤害为12+8=20点。
需要注意的是,只有在护甲被完全摧毁的情况下,才会出现该额外伤害,且该额外伤害不能为负。即如果基础伤害×(1-穿甲系数)<该次攻击破坏的甲量,则该额外伤害为0不为负。
总结一下:
①攻击后剩余甲量不为0时的HP伤害计算公式:HP伤害=max(0,基础伤害×穿甲系数-剩余甲量×10%)
②攻击后剩余甲量为0时的HP伤害计算公式:HP伤害=基础伤害×穿甲系数+max{0,【基础伤害×(1-穿甲系数)-此次攻击破甲量】}。
在攻击无甲目标时由于此次攻击破甲量为0,所以该公式可以直接被简化为基础伤害×(穿甲系数+1-穿甲系数)=基础伤害。
