yyl
2025-07-29 6577831ab2883bd05448ce0b1f9f913a9944fc78
Main/System/Battle/Skill/DirectlyDamageSkill.cs
@@ -6,93 +6,79 @@
public class DirectlyDamageSkill : SkillBase
{
   public DirectlyDamageSkill(BattleObject _caster, SkillConfig _skillCfg,
         H0604_tagUseSkillAttack vNetData, BattleField _battleField) : base(_caster, _skillCfg, vNetData, _battleField)
   {
   protected SkillEffect skillEffect;
   public DirectlyDamageSkill(BattleObject _caster, SkillConfig _skillCfg,
         H0604_tagUseSkillAttack _vNetData, List<GameNetPackBasic> _packList, BattleField _battleField)
         : base(_caster, _skillCfg, _vNetData, _packList, _battleField)
   {
      foreach (var pack in packList)
      {
         Debug.LogError("directly damage skill pack type is " + pack.GetType());
      }
   }
   public override void Run()
   {
      base.Run();
   }
    protected override void OnTriggerEvent(int triggerIndex, int triggerFrame)
    {
      if (0 == triggerIndex)
      if (null != skillEffect)
      {
         List<BattleObject> targetList = GetTargetList();
         //   子类实现具体的技能逻辑
         SkillEffect effect = SkillEffectFactory.CreateSkillEffect(caster, skillConfig, tagUseSkillAttack);
         if (null != effect)
         {
            //   如果是子弹类型的
            effect.Play((hitIndex, hurList) =>
            {
               for (int i = 0; i < hurList.Count; i++)
               {
                  var hurt = hurList[i];
                  BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
                  List<long> damageList = new List<long>();
                  //   计算伤害 分段的话
                  if (hitIndex >= skillConfig.DamageDivide.Length)
                  {
                     Debug.LogError("DamageDivide有问题 需要检查 只显示一段伤害 取triggerFrames的");
                     long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx) / (skillConfig.TriggerFrames.Length == 0 ? 1 : skillConfig.TriggerFrames.Length);
                     damageList.Add(totalDamage);
                  }
                  else
                  {
                     long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
                     if (hitIndex >= skillConfig.DamageDivide.Length)
                     {
                        int[] tenKDamagePercentArray = skillConfig.DamageDivide[hitIndex];
                        long factDamage = totalDamage;
                        for (int j = 0; j < tenKDamagePercentArray.Length; j++)
                        {
                           long damage = (long)(Mathf.Round(factDamage * tenKDamagePercentArray[j] / 10000.0f));
                           damageList.Add(damage);
                        }
                     }
                  }
                  target.Hurt(damageList, hurt.AttackType);
               }
            });
         }
        }
   }
   protected override void DoSkillLogic(Action _onComplete = null)
   {
      //   开始记录帧数
      startCounting = true;
   }
#if UNITY_EDITOR_STOP_USING
   //   伤害列表理应由服务器发给客户端 这边只做粗浅模拟
   public override List<Dictionary<int, List<int>>> GetDamageList(BattleField battleField)
   {
      List<Dictionary<int, List<int>>> damageList = new List<Dictionary<int, List<int>>>();
      List<BattleObject> affectList = GetTargetList(battleField);
      Dictionary<int, List<int>> oneRoundDamage = new Dictionary<int, List<int>>();
      for (int j = 0; j < affectList.Count; j++)
      {
         BattleObject obj = affectList[j];
         List<int> tryDmgList = caster.TryAttack(obj, skillConfig);
         oneRoundDamage.Add(obj.ObjID, tryDmgList);
         skillEffect.Run();
      }
      damageList.Add(oneRoundDamage);
      return damageList;
      base.Run();
   }
#endif
   //   技能动画播放完毕
   protected override void DoSkillLogic(Action _onComplete = null)
   {
      // if (skillConfig.EffectId > 0)
      // {
      //    // 播放技能特效
      //    caster.battleField.battleEffectMgr.PlayEffect(
      //       caster.ObjID,
      //       skillConfig.EffectId,
      //       caster.heroGo.transform
      //    );
      // }
      _onComplete?.Invoke();
   }
   //   前摇结束
   protected override void OnStartSkillFrame()
   {
      skillEffect = SkillEffectFactory.CreateSkillEffect(
            caster,
            skillConfig,
            tagUseSkillAttack
         );
      if (skillEffect != null)
      {
         skillEffect.Play(OnHitTargets);
      }
   }
   protected override void OnHitTargets(int _hitIndex, List<H0604_tagUseSkillAttack.tagSkillHurtObj> hitList)
   {
      base.OnHitTargets(_hitIndex, hitList);
    }
   protected override void OnHitEachTarget(BattleObject target, List<long> damageList, ref H0604_tagUseSkillAttack.tagSkillHurtObj hurt)
   {
      base.OnHitEachTarget(target, damageList, ref hurt);
   }
   //  中摇结束
   protected override void OnActiveSkillFrame()
   {
   }
   //   后摇结束
   protected override void OnEndSkillFrame()
   {
   }
}