生命值
跳转到导航
跳转到搜索
生命值是游戏内单位的基础属性之一。当一个单位生命值归零时,若非特殊情况,这个单位将会离场。
但在内部处理中,因为各种原因,生命值的处理变得比较复杂,这里仅对生命值(“血条”)本身为对象讨论。
截至简体中文2.6.21版本,生命值实际上分为三个部分:常规生命值,溢出生命值,负生命值
常规生命值
通常情况下的生命值,在游戏中表现为我方单位模型下的“蓝条”、敌方单位模型下的“橙条”/“红条”(领袖级单位)。
大多数情况下所指的“血条”即为常规生命值。
- 每个单位的生命值拥有0的下限与其最大生命值的上限。
- 当最大生命值发生变化时,生命值将同时变化,使得生命值比例不变。
- 各类与生命比例相关的判定均判断常规生命值。
- 拥有溢出生命值与负生命值的单位在被获取生命值时仍然会获取到其常规生命值的数值与比例(例如集成战略收藏品“扣挠之手”的基于当前生命比例的伤害,不会将溢出生命值与负生命值加入计算)。
溢出生命值
即超出最大生命值部分的生命值(“额外血条”)。
在游戏中表现为覆盖在原有血条上、从左侧追加的淡色条。
- 对于角色类单位和巨型敌人,存在与最大生命值相关的溢出生命值上限。
- 其中巨型敌人溢出生命值上限固定为100%最大生命值;角色类单位默认为50%最大生命值,可后续调整。
- 溢出生命值在仅应用modifier时被判定,此时其将与常规生命值一同用于计算生命值的扣减(如伤害)或储存(如追加生命值)。
- 对于不使用modifier的生命值调整(如生命恢复效果)将无视溢出生命值相关判定。
- 其中,对于增加生命值的modifier,需要携带特殊Flag:HEAL_CAN_GENERAL_SHIELD_FLAG,才能产生溢出生命值。
因此对于角色类单位而言,通常见不到“额外”的生命值。
- 其中,对于增加生命值的modifier,需要携带特殊Flag:HEAL_CAN_GENERAL_SHIELD_FLAG,才能产生溢出生命值。
虽然常规情况下见不到角色类单位有溢出生命值,但并不意味着溢出生命值与角色类单位完全无关。
- 对于过量治疗的处理通常会临时启用溢出生命值。
负生命值
即生命值“归零”后,在表现上相当于以负数值参与计算的一种生命值。
于墟版本所加入,最初用于斩业星熊第一天赋“我执”状态的判定。
在游戏中表现为从左侧开始的暗红色条。
- 并非常规生命值降至负数,而是以一段新的“负数血条”来进行生命计算,且该数值实际为正值。
- 任何实体类单位均存在与最大生命值相关的负生命值上限,负生命值上限默认为0×最大生命值;该上限可后续调整。
- 当最大生命值发生变化时,负生命值不会发生变化。
- 当负生命值上限>0时,计算生命值变动将考虑负生命值的影响,与常规生命值一同计算生命值的扣减(如伤害,此时为增加)或储存(如追加生命值,此时为扣减)。
- 这个计算在重设生命值时被判定,无法被绕过;但可以通过force属性无视负生命值机制设置常规生命值为0。
- 此时具体判定将会发生较为复杂的变化:
- 重设生命值时,若目标值>0:
①若目标值>当前常规生命值:使用负生命值抵消此次(部分)生命增加并重新计算目标值;
②否则:仅计算在常规生命值上。 - 否则,若目标值≤0:
①若当前常规生命值>1:设置负生命值为 |目标值| - 当前常规生命值;
②否则:设置负生命值为 当前负生命值 + |目标值|;
Fin:收尾判定:若此时负生命值大于等于负生命值上限,则触发生命值归0前(OnBeforeTrySetHpZero)事件。 - 以上计算完成后:
将负生命值clamp到 (0, 负生命值上限) 区间。
如果持有不死:区间上限变为 负生命值上限-1。 - 设置常规生命值(下限为1)。
若负生命值=负生命值上限,视为生命值归0。
- 重设生命值时,若目标值>0:
- 在上述计算后,若负生命值>0,则常规生命值在大多数情况下会变为1。
- 负生命值上限为0时,可以视作负生命值机制处于未激活状态,不参与各类判定。
- 负生命值即将超出上限的情形,大部分情况下等价于未激活负生命值时,常规生命值即将不高于0的情形(比如触发OnBeforeTrySetHpZero事件,判定不死等)。
但注意:负生命值上限>0时,在生命值归0前(OnBeforeTrySetHpZero)事件中,无法直接阻止当次生命归0行为,此时对应的成功阻止生命归0后(OnPostTrySetHpZero)通常也无法正常生效。
在这种情况下,免死效果几乎无法正常生效。
- 负生命值即将超出上限的情形,大部分情况下等价于未激活负生命值时,常规生命值即将不高于0的情形(比如触发OnBeforeTrySetHpZero事件,判定不死等)。