fix(combat): 统一受击无敌闸门并修复 DoT 失效
将无敌判定收口到 PlayerController.TakeDamage(DamageInfo) 单一闸门并认 DamageFlags.IgnoreIFrame,PlayerStats 拆出原始扣血 ApplyDamage;新增 DamageFlags.IsDoT,持续伤害只扣血不打断硬直、不授予无敌。修复 DoT 绕过 HurtBox 时被 flag-blind 的整数 TakeDamage 静默吞没、且 FinalDamage 未结算(恒为0)的双重失效;敌人侧 DoT 标记 IsDoT 避免每 Tick 重置硬直。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -159,6 +159,14 @@ namespace BaseGames.Enemies
|
||||
return;
|
||||
}
|
||||
|
||||
// ── 持续伤害(DoT):只扣血与受击反馈,不打断/不重置硬直状态 ──
|
||||
// 否则燃烧/中毒每个 Tick 都会把敌人重新打入 Hurt 并 InterruptAll,形成硬直锁。
|
||||
if (info.Flags.HasFlag(DamageFlags.IsDoT))
|
||||
{
|
||||
OnDamageTaken(info);
|
||||
return;
|
||||
}
|
||||
|
||||
// ── 受击分级(KnockUp > Stagger > Hurt)──────────────────────
|
||||
PoiseLevel curPoise = _poiseSource?.GetCurrentPoiseLevel() ?? PoiseLevel.None;
|
||||
bool causesStagger = info.Flags.HasFlag(DamageFlags.ForceBreak)
|
||||
|
||||
Reference in New Issue
Block a user