yyl
2025-08-08 3bc28c54e82721b7858eaa3507f0f65a4041736d
Main/System/Battle/Skill/SkillBase.cs
@@ -7,7 +7,7 @@
public class SkillBase
{
   protected H0604_tagUseSkillAttack tagUseSkillAttack;
   protected HB427_tagSCUseSkill tagUseSkillAttack;
   protected SkillConfig skillConfig;
@@ -27,13 +27,13 @@
   protected List<GameNetPackBasic> packList;
   protected SkillBase otherSkill;
   protected SkillRecordAction otherSkillAction;
   protected List<H0704_tagRolePackRefresh> dropPackList = new List<H0704_tagRolePackRefresh>();
   protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
   public SkillBase(BattleObject _caster, SkillConfig _skillCfg, H0604_tagUseSkillAttack vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null)
   public SkillBase(BattleObject _caster, SkillConfig _skillCfg, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null)
   {
      caster = _caster;
      skillConfig = _skillCfg;
@@ -41,7 +41,7 @@
      battleField = _battleField;
      packList = _packList;
   }
   }
   public virtual void Run()
   {
@@ -49,7 +49,21 @@
      {
         curFrame++;
      }
      if (otherSkillAction != null)
      {
         if (otherSkillAction.IsFinished())
         {
            otherSkillAction = null;
            OnSkillFinished();
         }
         else
         {
            otherSkillAction.Run();
         }
      }
   }
   protected virtual void OnActiveSkillFrame()
   {
@@ -96,10 +110,19 @@
            break;
         case SkillCastMode.Target:
            // 目标是敌方主目标
            BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.AttackID);
            if (tagUseSkillAttack.HurtCount <= 0)
            {
               Debug.LogError("技能攻击包没有目标 HurtCount <= 0");
               OnSkillFinished();
               return;
            }
            var mainHurt = tagUseSkillAttack.HurtList[0];
            BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)mainHurt.ObjID);
            if (mainTarget == null)
            {
               Debug.LogError("目标为空 mainTarget == null AttackID : " + tagUseSkillAttack.AttackID);
               Debug.LogError("目标为空 mainTarget == null ObjID : " + mainHurt.ObjID);
               OnSkillFinished();
               return;
            }
@@ -209,11 +232,11 @@
   }
   //   命中目标后的回调 正常是以各技能的方式来处理的
   protected virtual void OnHitTargets(int _hitIndex, List<H0604_tagUseSkillAttack.tagSkillHurtObj> hitList)
   protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
   {
      for (int i = 0; i < hitList.Count; i++)
      {
         H0604_tagUseSkillAttack.tagSkillHurtObj hurt = hitList[i];
         HB427_tagSCUseSkill.tagSCUseSkillHurt hurt = hitList[i];
         BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
         if (target == null)
@@ -261,9 +284,9 @@
      return fixedDamageList;
   }
   protected virtual void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref H0604_tagUseSkillAttack.tagSkillHurtObj hurt)
   protected virtual void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
   {
      target.Hurt(damageList, totalDamage, hurt.AttackType);
      target.Hurt(damageList, totalDamage, hurt.AttackTypes);
      //   击中目标的时候,不管近战远程 都确认一下是否有爆炸特效 然后播放
      if (skillConfig.ExplosionEffectId > 0)
@@ -441,6 +464,24 @@
   public void OnSkillFinished()
   {
      while (packList.Count > 0)
      {
         var pack = packList[0];
         packList.RemoveAt(0);
         if (pack is CustomHB426CombinePack)
         {
            var combinePack = pack as CustomHB426CombinePack;
            if (combinePack.startTag.Tag.StartsWith("Skill_"))
            {
               otherSkillAction = combinePack.CreateSkillAction();
               return;
            }
         }
         PackageRegedit.Distribute(pack);
      }
      isFinished = true;
   }
}