====== 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