====== HOI4 伤害计算 ======
===== 名词 =====
^ 名称 ^ 解释 ^
^ 软攻 | 对软度部分的攻击能力 |
^ 硬攻 | 对硬度部分的攻击能力 |
^ 防御 | 防御方的防御力 |
^ 突破 | 进攻方的防御力 |
^ 护甲 | 护甲>穿甲则受到伤害 ×50%,并且对于装甲部队来说会有额外伤害加成 |
^ 穿甲 | 穿透护甲的能力 |
^ 组织度 | 组织度为0则会退出战斗 |
^ 硬度 | 软度 + 硬度 = 1。影响部队受到攻击类型的比例 |
===== 伤害计算 =====
- 战斗时分为攻击方与防御方。
- 攻击力:无论攻击或防御,都会用到软攻、硬攻来计算攻击力。
- 防御力:
* 进攻方的防御力是突破,完全用不到防御。
* 防御方的防御力是防御,完全用不到突破。
- 根据单位的软度/硬度分别计算受到的软攻/硬攻伤害部分。
====模型====
* 一个模型可以有很多种表达方式,在此使用一种便于想象的模型来表述
* 将攻击力看作攻击次数,防御力看作防御次数。双方每小时(称为回合)进行一次交火,会执行相应次数的攻击与防御。假设具体数值如下:
^ ^攻击力^防御^突破|
^进攻方|100|0|100|
^防御方|40|20|200|
===进攻方造成组织度伤害===
''00_defines.lua'' 中有如下定义:
LAND_COMBAT_ORG_DICE_SIZE = 4
LAND_COMBAT_ORG_DAMAGE_MODIFIER = 0.05
BASE_CHANCE_TO_AVOID_HIT = 90
CHANCE_TO_AVOID_HIT_AT_NO_DEF = 60
* 进攻方攻击力为100,攻击了100次,而防御方防御只有20,只进行了20次**有效防御**,另外80次攻击受到**无防御时伤害**。
* **有防御时伤害**:有效防御发生时,每次攻击受到的伤害为 (随机数1~4可以当做期望值为2.5):
随机数 × 有效防御时被命中率 × 基本系数
= LAND_COMBAT_ORG_DICE_SIZE × ( 1 - BASE_CHANCE_TO_AVOID_HIT ) × LAND_COMBAT_ORG_DAMAGE_MODIFIER
= 2.5 × 10% × 0.05
= 0.0125
* **无防御时伤害**:当防御次数耗尽时会受到无防御攻击,此时伤害为:
随机数 × 无防御时被命中率 × 基本系数
= LAND_COMBAT_ORG_DICE_SIZE × ( 1 - CHANCE_TO_AVOID_HIT_AT_NO_DEF ) × LAND_COMBAT_ORG_DAMAGE_MODIFIER
= 2.5 × 40% × 0.05
= 0.05
* 因此防御方受到伤害为
20 × 0.0125 + ( 100 - 20 ) × 0.05
= 0.25 + 4
= 4.25
===防御方造成组织度伤害===
- 防御方攻击力仅40,进攻方突破为100。因此防御方对进攻方的攻击是全部处于有效防御范围内的。
- 一回合内40次攻击总伤害为:40 × 0.0125 = 0.5。
----
====装甲单位伤害额外加成====
defines中有一个参数
LAND_COMBAT_ORG_ARMOR_ON_SOFT_DICE_SIZE = 6
* 游戏中单位分为**装甲单位**和**非装甲单位**。被分为装甲类型的单位,在攻击时在**软攻**方面有额外加成。
* **触发此加成有个条件**:敌方的穿甲值不高于本方护甲值。
* 无视目标单位类型,无论是装甲单位还是非装甲单位,只要满足上面这些条件,就可以触发加成。
* 效果是: 伤害计算公式中的 **随机数** __最大值__从 **4** 变为 **6**。 但此伤害只作用于目标的**软度**部分。
* 随机数 1~6 的期望值为 3.5。
我们继续使用之前的例子,并添加一些参数:
- 进攻方使用的是 装甲 单位。
- 防御方使用的是软度100%的单位。
- 防御方的穿甲不能穿透进攻方的护甲。
此时进攻方的伤害能力产生了变化:
- 每回合有效防御伤害: 3.5 × 10% × 0.05 = 0.0175。
- 每回合无防御时伤害: 3.5 × 40% × 0.05 = 0.7。
- 实际就是 有**装甲单位伤害额外加成**的单位 对非装甲部分能造成1.4倍的伤害。
=====软度/硬度=====
为了便于理解,只考虑一方的进攻力与另一方的防御力。
^ ^ 软攻 ^ 硬攻 ^ 防御 ^ 硬度 ^
^ 攻击方 | 1000 | 200 | | |
^ 防御方 | | | 500 | 70% |
* 软攻攻击硬度70%的单位,只有30%的攻击有效,即''1000 × 30% = 300 次''。
* 硬攻攻击硬度70%的单位,只有70%的攻击有效,即''200 × 70% = 140 次''。
* 此时总攻击次数为:''300 + 140 = 440 次''。
* 因为防御方防御为500,因此所有伤害均为有效防御伤害:0.0125。
* 总伤害:''440 × 0.0125 = 5.5''。
===若防御方防御为200===
有效防御伤害 + 无防御伤害
200 × 0.0125 + 240 × 0.05
= 2.5 + 12
= 14.5
===若进攻方有装甲伤害额外加成,防御方防御依然为200===
此时需将软攻造成的伤害和硬攻造成的伤害分开计算。
软攻伤害部分 + 硬攻伤害部分
14.5 × ( 300/440 ) × 1.4 + 14.5 × ( 140/440 ) × 1
= 13.84 + 4.61
= 18.45
或从头计算
( 有效防御软伤害 + 无防御软伤害 ) × 1.4
+ ( 有效防御硬伤害 + 无防御硬伤害 ) × 1
=[ 300/440 × 200 × 0.0125 + 300/440 × (440-200) × 0.05 ] × 1.4
+ [ 140/440 × 200 × 0.0125 + 140/440 × (440-200) × 0.05 ] × 1