| Main/System/Battle/BattleField/BattleField.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BattleUtility.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/UIComp/BattleHeroInfoBar.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/Battle/BattleField/BattleField.cs
@@ -657,7 +657,7 @@ foreach (var obj in blueTeam) { if (obj is MinggeBattleObject) if (obj == null || obj is not HeroBattleObject) { continue; } @@ -674,7 +674,7 @@ { foreach (var obj in blueTeam) { if (obj is MinggeBattleObject) if (obj == null || obj is not HeroBattleObject) { continue; } Main/System/Battle/BattleUtility.cs
@@ -114,16 +114,25 @@ string result = string.Empty; // 如果是闪避或免疫 则只显示对应文字,不显示数字 if (damage.IsType(DamageType.Dodge) || damage.IsType(DamageType.Immune) || damage.IsType(DamageType.CompletelyDodge)) if (config != null) { result += (char)config.prefix; // 如果是闪避或免疫 则只显示对应文字,不显示数字 if (damage.IsType(DamageType.Dodge) || damage.IsType(DamageType.Immune) || damage.IsType(DamageType.CompletelyDodge)) { result += (char)config.prefix; } else { result = ConvertToArtFont(config, damage.damage); } } else { result = ConvertToArtFont(config, damage.damage); result = damage.damage.ToString(); Debug.LogError("找不到对应的伤害数字配置 attackType : " + damage.attackType); } return result; } Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -295,7 +295,49 @@ /// </summary> public void UpdateDamage(BattleDmgInfo dmgInfo) { // 加入队列 // 验证数据有效性,防止空引用 if (dmgInfo?.battleHurtParam == null) return; // 检查受击者对象有效性 if (dmgInfo.battleHurtParam.hurter?.hurtObj != null) { var hurtObj = dmgInfo.battleHurtParam.hurter.hurtObj; // 检查对象是否已被销毁 if (hurtObj == null || hurtObj.Equals(null)) { Debug.LogWarning($"[UpdateDamage] 受击者对象已被销毁,跳过伤害更新"); return; } // 验证是否能安全获取 maxHp(间接检查 HeroBattleObject 内部状态) if (hurtObj is HeroBattleObject && hurtObj.GetMaxHp() <= 0) { Debug.LogWarning($"[UpdateDamage] 受击者 maxHp 无效,跳过伤害更新"); return; } } // 检查施法者对象有效性 if (dmgInfo.battleHurtParam.caster?.casterObj != null) { var casterObj = dmgInfo.battleHurtParam.caster.casterObj; // 检查对象是否已被销毁 if (casterObj == null || casterObj.Equals(null)) { Debug.LogWarning($"[UpdateDamage] 施法者对象已被销毁,跳过伤害更新"); return; } // 验证是否能安全获取 maxHp if (casterObj is HeroBattleObject && casterObj.GetMaxHp() <= 0) { Debug.LogWarning($"[UpdateDamage] 施法者 maxHp 无效,跳过伤害更新"); return; } } // 数据验证通过,加入队列 damageUpdateQueue.Enqueue(dmgInfo); }