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:
2026-06-11 16:30:56 +08:00
parent 523f7c842a
commit 0491e3f919
8 changed files with 54 additions and 15 deletions

View File

@@ -116,7 +116,8 @@ namespace BaseGames.Enemies.StatusEffects
Amount = (int)_damagePerTick,
FinalDamage = (int)_damagePerTick,
Type = DamageType.Fire,
Flags = DamageFlags.None,
// IsDoT持续伤害只扣血不让每个 Tick 都把敌人重新打入 Hurt/InterruptAll避免硬直锁
Flags = DamageFlags.IsDoT,
};
enemy.TakeDamage(info);
}