伤害计算机制(1.0.1版本)

CGM模组中的伤害计算机制有枪击和爆炸两种伤害之分,两种伤害的计算方式不同,影响因素也不同,本资料的依据为1.0.1版本的源代码。


影响枪击伤害的因素

枪击造成伤害的前提是子弹必须直接击中目标实体,此机制适用于本模组中除了榴弹榴弹发射器火箭筒以外的其他武器。顺便一提,由于震撼弹不会造成伤害,本资料不予讨论。影响枪击伤害的因素如下:

爆头

爆头是从0.15.0版本开始加入的设定,用本模组中的枪支射击原版生物和玩家的头部时将造成更高的伤害。可在配置文件中修改和取消这一设置。将配置文件中的enableHeadShots设置为true即可启用爆头机制,而后修改headShotDamageMultiplier的数值可以决定爆头造成的伤害倍数(默认是1.25倍)。

暴击

暴击是从1.0版本开始加入的设定,可在配置文件中修改这一设置。修改criticalDamageMultiplier的数值可以决定暴击的伤害倍数(默认是1.5倍)。暴击这一设定无法直接取消,但可以通过将暴击伤害倍数设置成1倍的方式使其实质上不生效。顺便一提,在1.0.1版本中,所有武器的初始暴击率都是0%,武器的暴击率完全由穿甲弹附魔所决定,该附魔每升一级,被附魔武器的暴击率便会提升5%,因此默认情况下武器最大的暴击率只能达到20%。

附魔

本模组中的以下附魔会直接或者间接影响武器的伤害(顺便一提,以下三个附魔互相冲突):

  • 穿甲弹

    如前文所述,穿甲弹附魔会影响武器的暴击率,从而间接影响武器的伤害。

  • 加速器

    加速器附魔会提升枪支的伤害,每升一级被附魔枪支的伤害提升默认伤害的10%。

  • 纵火者

    纵火者附魔会点燃被附魔武器(包括榴弹发射器和火箭筒)射出的弹药直接击中的可以被点燃的方块/实体。点燃对于生物的伤害详见此页面

弹药伤害

弹药伤害是枪击伤害数值的基础和重要来源,当武器在没有受到附魔、配件、弹药伤害衰减的情况下击中生物并且没有触发爆头或者暴击机制时,弹药伤害便是最终的伤害数值(会造成爆炸伤害的武器除外)。在0.16.0及之后的版本中,弹药伤害写于模组jar文件的..\data\cgm\guns目录里对应的武器属性json文件中,查看和修改弹药伤害的方式详见此教程;对于早于0.16.0的版本,弹药伤害的查看和修改方式详见此教程。顺便一提,在游戏中将鼠标悬停于武器物品图标上就可以通过工具提示直接查看武器的弹药伤害数值,该数值不代表武器的最终伤害。

发射量

发射量是指单次开火射出的弹药数量。某些特殊的武器,比如霰弹枪,发射量会超过1。当数值超过1时,每颗子弹会均分每次开火能造成的总伤害,这意味着一次射出的子弹越多,每颗子弹造成的伤害越少。发射量的查看和修改方式详见此页面

弹药伤害随生命周期衰减

弹药伤害随生命周期衰减是本模组关于弹药伤害的一种设定,其作用是使弹药在被射出之后的伤害与弹药的飞行距离呈负相关。弹药伤害随生命周期衰减的机制详见此页面

配件属性

属性(官方汉化译为“额外”)是从本模组1.0版本开始加入的设定,这一设定允许武器的配件能够以预设的方式改变武器的性能。每个武器配件至少有一个属性。关于配件属性的更多信息详见此页面


影响爆炸伤害的因素

爆炸伤害不需要弹药直接命中目标实体,只要目标实体位于爆心的一定半径之内就会受到伤害。爆炸伤害机制适用于本模组中不适用枪击伤害机制的武器(震撼弹除外)。值得注意的是,由于爆炸伤害不是定值,因此只能通过假设理想状态来推断可能造成的最大伤害。影响爆炸伤害的因素如下(你也可以直接查看MCWIKI上关于爆炸的介绍,根据1.0.1的源代码,本模组的爆炸伤害模式明显借鉴了原版爆炸的伤害模式):

爆炸影响半径

爆炸影响半径不仅是决定爆炸伤害机制是否发生作用的因素,也是影响爆炸伤害数值的最主要因素。根据1.0.1版本的源代码,爆炸影响半径的来源有两种,一是直接在配置文件中定义,如榴弹和火箭筒的爆炸范围;二是将弹药伤害数值除以5得到爆炸影响半径,仅适用于榴弹发射器,见源代码中的GrenadeEntity.java的第33、39、45行。顺便一提,榴弹发射器的伤害还会受到弹药伤害随生命周期衰减(如果启用)、发射量(如果大于1)、配件属性(如果能安装)和加速器附魔的影响。

目标距爆心距离

根据1.0.1版本的源代码,通常,目标距离爆心越近,伤害越大,但并非绝对,这种因素在某些情况会被其他因素(比如爆炸接触率)干预而失效。

爆炸接触率

爆炸接触率的计算详见此页面。爆炸接触率越大,伤害越大。当爆炸接触率为0时,位于爆炸影响范围内的实体所受到的伤害恒为1。

附魔

  • 穿甲弹

    如前文所述,穿甲弹附魔会间接影响武器的弹药伤害,从而影响榴弹发射器的爆炸伤害。此附魔不会影响榴弹和火箭筒的伤害。

  • 加速器

    加速器附魔会提升枪支的伤害,每升一级被附魔枪支的伤害提升默认伤害的10%。此附魔会导致榴弹发射器的爆炸影响范围变大,从而影响榴弹发射器的伤害。此附魔不会影响榴弹和火箭筒的伤害。

  • 纵火者

    纵火者附魔会点燃被附魔武器(包括榴弹发射器和火箭筒)射出的弹药直接击中的可以被点燃的方块/实体。点燃对于生物的伤害详见此页面。此附魔不会影响榴弹的伤害。

枪击伤害的计算机制

由于枪击伤害的计算机制难以用公式简单概括,故本资料将按照逻辑顺序分步描述。

  • 第一步:取武器的弹药伤害数值,加上写于源代码IGunModifier.java第59行中的额外伤害数值(0);

  • 第二步:如果该武器启用了弹药伤害随生命周期衰减机制,则作如下运算:

    第一步的数值 * (弹药的生命周期 - (弹药已发射(存在)的时间 - 1)) / 弹药的生命周期

    否则,保留第一步数值;

  • 第三步:将第二步所得数值除以武器的发射量;

  • 第四步:将武器配件属性对武器伤害的影响应用到第三步的数值上进行计算;

  • 第五步:将加速器附魔对武器伤害的影响应用到第四步的数值上进行计算;

  • 第六步:将第五步所得数值与0进行比较,取较大值;

  • 第七步:在区间[0.0,1.0)内取一次随机数,如果随机数小于武器的暴击率则将第六步所得数值乘以暴击伤害倍数,否则保留第六步原数值;

  • 第八步:检测此次射击是否为爆头,若为爆头则将第七步所得伤害再乘以爆头伤害倍数,否则保留第七步原数值。

以上,第八步所得数值即为枪击伤害的最终数值。当然,该数值的应用也会受到原版机制(如护甲等)影响,但不在本资料讨论范围内。

爆炸伤害的计算机制

根据1.0.1版本的源代码,爆炸伤害机制可用如下公式计算:

爆炸伤害 = (A * A + A) / 2 * 7 * (爆炸影响半径 * 2) + 1
其中:A = (1 - 目标距爆心距离 / (爆炸影响半径 * 2)) * 爆炸接触率

值得注意的是,榴弹发射器的爆炸影响半径需要将其弹药伤害数值进行枪击伤害的计算机制的前六步运算后再除以5得出,而榴弹和火箭筒的爆炸影响半径则是在配置文件中直接给定。

短评加载中..