| | |
| | | // 命中目标回调:处理所有被命中的目标 |
| | | protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList) |
| | | { |
| | | // 造成伤害前先处理血量刷新包 |
| | | HandleRefreshHP(); |
| | | |
| | | foreach (var hurt in hitList) |
| | | { |
| | | BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID); |
| | |
| | | |
| | | // 计算总伤害和分段伤害列表 |
| | | long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx); |
| | | List<long> damageList = BattleUtility.DivideDamageToList(damageDivide.ToArray(), totalDamage); |
| | | List<long> damageList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalDamage); |
| | | |
| | | // ============ 第二步:刷新实际血量 ============ |
| | | long fromHp = target.teamHero.curHp; |
| | |
| | | |
| | | // 更新目标血量 |
| | | target.teamHero.curHp = toHp; |
| | | |
| | | |
| | | #if UNITY_EDITOR |
| | | BattleDebug.LogError( |
| | | (caster.Camp == BattleCamp.Red ? "【红方行动】" : "【蓝方行动】") + "\n" + |
| | |
| | | $"血量变化: {fromHp} -> {toHp}" |
| | | ); |
| | | #endif |
| | | |
| | | |
| | | // 只在最后一击时同步HP刷新包 |
| | | bool isLastHit = _hitIndex >= skillConfig.DamageDivide.Length - 1; |
| | | if (isLastHit) |
| | | { |
| | | HandleRefreshHP(hurt); |
| | | } |
| | | |
| | | // ============ 第三步:获取临时数据(掉落、死亡等) ============ |
| | | int objID = (int)target.ObjID; |
| | |
| | | } |
| | | |
| | | // 处理HP刷新包(简化逻辑) |
| | | private void HandleRefreshHP(HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | private void HandleRefreshHP() |
| | | { |
| | | // 查找HP刷新包 |
| | | HB419_tagSCObjHPRefresh refreshPack = BattleUtility.FindObjHPRefreshPack(packList); |