yyl
2025-09-04 cdf7098c937c5f4a70383ef70897bf9fedbb3d99
Main/System/Battle/Skill/SkillBase.cs
@@ -39,6 +39,8 @@
   protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
   protected bool moveFinished = false;
   public SkillBase(BattleObject _caster, SkillConfig _skillCfg, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null)
   {
      caster = _caster;
@@ -46,6 +48,8 @@
      tagUseSkillAttack = vNetData;
      battleField = _battleField;
      packList = _packList;
   }
@@ -95,12 +99,10 @@
   {
      EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, battleField.guid, skillConfig, caster.teamHero);
      BattleDebug.LogError(GetType().Name + " Skill Cast Start");
      //   高亮所有本次技能相关的目标
      HighLightAllTargets();
      //   距离配成负数要转身 TurnBack
      BattleDebug.LogError(GetType().Name + " Skill CastMode : " + skillConfig.castMode);
      switch (skillConfig.castMode)
      {
         case SkillCastMode.Self:
@@ -119,15 +121,15 @@
         //    DashToTarget(() => BackToOrigin(OnSkillFinished));
         //    break;
         default:
            BattleDebug.LogError("暂时不支持其他的方式释放 有需求请联系策划 技能id:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
            Debug.LogError("暂时不支持其他的方式释放 有需求请联系策划 技能id:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
            OnSkillFinished();
            break;
      }
   }
   protected void MoveToTarget(RectTransform target, Vector2 offset, float duration, Action onComplete = null)
   {
      BattleDebug.LogError("Move to target , target is " + target.name);
      //   原地释放
      if (skillConfig.CastDistance >= 9999)
      {
@@ -193,7 +195,7 @@
      // 目标是敌方主目标
      if (tagUseSkillAttack.HurtCount <= 0)
      {
         BattleDebug.LogError("技能攻击包没有目标 HurtCount <= 0");
         Debug.LogError("技能攻击包没有目标 HurtCount <= 0");
         OnSkillFinished();
         return;
      }
@@ -203,7 +205,7 @@
      BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)mainHurt.ObjID);
      if (mainTarget == null)
      {
         BattleDebug.LogError("目标为空 mainTarget == null ObjID : " + mainHurt.ObjID);
         Debug.LogError("目标为空 mainTarget == null ObjID : " + mainHurt.ObjID);
         OnSkillFinished();
         return;
      }
@@ -235,7 +237,7 @@
   protected virtual void OnAllAttackMoveFinished()
   {
      moveFinished = true;
   }
   protected void CastToAllies()
@@ -285,7 +287,7 @@
   }
   //   技能开始
   public virtual void OnSkillStart()
   public void OnSkillStart()
   {
      skillEffect = SkillEffectFactory.CreateSkillEffect(
            caster,
@@ -296,6 +298,9 @@
      {
         skillEffect.Play(OnHitTargets);
      }
   }
   //   技能前摇帧结束
@@ -310,12 +315,18 @@
   /// <param name="times"></param>
   public virtual void OnMiddleFrameStart(int times)
   {
      skillEffect.OnMiddleFrameStart(times);
      if (skillEffect != null)
      {
         skillEffect.OnMiddleFrameStart(times);
      }
   }
   public virtual void OnMiddleFrameEnd(int times, int hitIndex)
   {
      skillEffect.OnMiddleFrameEnd(times, hitIndex);
      if (skillEffect != null)
      {
         skillEffect.OnMiddleFrameEnd(times, hitIndex);
      }
   }
   /// <summary>
@@ -358,13 +369,12 @@
         BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
         if (target == null)
         {
            BattleDebug.LogError("目标为空 target == null ObjId : " + hurt.ObjID);
            Debug.LogError("目标为空 target == null ObjId : " + hurt.ObjID);
            continue;
         }
         OnHitEachTarget(_hitIndex, target, hurt);
      }
      HandleDead();
   }
@@ -389,11 +399,11 @@
      //   TODO YYL AttackTypes  要表现成什么样呢? 支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避
      target.Hurt(damageList, totalDamage, hurt.AttackTypes);
      target.Hurt(damageList, totalDamage, hurt, skillConfig);
      //   TODO YYL 这里是要做统一计算后再hurt跟suckhp还是怎样
      // caster.SuckHp(hurt.SuckHP);//   吸血
      // caster.HurtByReflect(hurt.BounceHP);// 反弹伤害
      caster.SuckHp(hurt.SuckHP, skillConfig);//   吸血
      caster.HurtByReflect(hurt.BounceHP, skillConfig);// 反弹伤害
   }
@@ -413,7 +423,6 @@
      // 处理掉落包 提前distribute之后 PackManager才有掉落物 所以不跟assignexp一样distribute
      foreach (var _dropPack in dropPackList)
      {
         BattleDebug.LogError("distribute pack " + _dropPack.GetType().Name);
         PackageRegedit.Distribute(_dropPack);
         packList.Remove(_dropPack);
      }
@@ -456,8 +465,6 @@
         packList.Remove(deadPack);
      }
      deadPackList.Clear();
   }
@@ -575,7 +582,7 @@
         }
      }
      return isFinished;
      return isFinished && moveFinished;
   }
   public virtual void ForceFinished()
@@ -593,7 +600,6 @@
         }
      }
      BattleDebug.LogError(GetType().Name + " Skill Finished");
      while (packList.Count > 0)
      {
         var pack = packList[0];
@@ -604,11 +610,11 @@
            var combinePack = pack as CustomHB426CombinePack;
            if (combinePack.startTag.Tag.StartsWith("Skill_"))
            {
               BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
               otherSkillAction = combinePack.CreateSkillAction();
               return;
            }
         }
         BattleDebug.LogError("distribute pack " + pack.GetType().Name);
         PackageRegedit.Distribute(pack);
      }