hch
2025-09-03 f27e132391f11de7a199d27a32c142f41d002295
Main/System/Battle/Skill/SkillBase.cs
@@ -93,6 +93,8 @@
   // 1·移动到距离阵容位置n码的距离(如2号位,5号位)释放(即战场中央此类)
   public virtual void Cast()
   {
      EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, battleField.guid, skillConfig, caster.teamHero);
      BattleDebug.LogError(GetType().Name + " Skill Cast Start");
      //   高亮所有本次技能相关的目标
      HighLightAllTargets();
@@ -360,19 +362,40 @@
            continue;
         }
         // 伤害分布 (万分比)
         int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
         long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
         // 保证所有分配项加起来等于totalDamage,避免因整除导致的误差
         List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage);
         OnHitEachTarget(target, totalDamage, damageList, ref hurt);
         OnHitEachTarget(_hitIndex, target, hurt);
      }
      HandleDead();
   }
   protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
   {
      // 伤害分布 (万分比)
      int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
      long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
      // 保证所有分配项加起来等于totalDamage,避免因整除导致的误差
      List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage);
      // public uint ObjID;
      // public uint AttackTypes;        // 飘血类型汇总,支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避
      // public uint HurtHP;        // 飘血值,求余亿部分
      // public uint HurtHPEx;        // 飘血值,整除亿部分
      // public uint CurHP;        // 更新剩余血量,求余亿部分
      // public uint CurHPEx;        // 更新剩余血量,整除亿部分
      // public uint SuckHP;        // 本次伤害转化的吸血量
      // public uint BounceHP;        // 本次伤害反弹的伤害量
      //   TODO YYL AttackTypes  要表现成什么样呢? 支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避
      target.Hurt(damageList, totalDamage, hurt.AttackTypes);
      //   TODO YYL 这里是要做统一计算后再hurt跟suckhp还是怎样
      // caster.SuckHp(hurt.SuckHP);//   吸血
      // caster.HurtByReflect(hurt.BounceHP);// 反弹伤害
   }
   protected void HandleDead()
   {
@@ -483,12 +506,6 @@
   protected virtual void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
   {
      target.Hurt(damageList, totalDamage, hurt.AttackTypes);
   }
   protected void CheckAfterDeadhPack()
   {
      List<int> removeIndexList = new List<int>();
@@ -551,6 +568,11 @@
         {
            return false;
         }
         else
         {
            OnSkillFinished();
            skillEffect = null;
         }
      }
      return isFinished;
@@ -563,6 +585,14 @@
   public void OnSkillFinished()
   {
      if (skillEffect != null)
      {
         if (!skillEffect.IsFinished())
         {
            return;
         }
      }
      BattleDebug.LogError(GetType().Name + " Skill Finished");
      while (packList.Count > 0)
      {