yyl
2025-09-14 6d2304d5ae39a4d78b30204dfa8ad9db2f054336
125 【战斗】战斗系统 修复技能播放偶尔会出现死循环的bug
3个文件已修改
51 ■■■■ 已修改文件
Main/System/Battle/BattleObject/BattleObject.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Motion/MotionBase.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/SkillBase.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs
@@ -265,10 +265,12 @@
    public virtual void Hurt(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
    {
        PopDamage(damageValues, _totalDamage, hurt, skillConfig);
        BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig);
        motionBase.PlayAnimation(MotionName.hit, false);
        if (dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage())
        {
            motionBase.PlayAnimation(MotionName.hit, false);
        }
    }       
    public void SuckHp(uint suckHP, SkillConfig skillConfig)
@@ -334,7 +336,7 @@
    }
    // 伤害还要看 是否闪避 暴击 and so on 需要有一个DamageType 服务器应该会给
    protected virtual void PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
    protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
    {
        BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig);
@@ -356,6 +358,7 @@
        // YYL TODO 是否需要挂在在自身的follow点上
        EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
        return battleDmgInfo;
    }
    public RectTransform GetAliasTeamNode()
Main/System/Battle/Motion/MotionBase.cs
@@ -118,8 +118,8 @@
        {
            if (trackEntryCompleteDict.TryGetValue(currentTrackEntry, out var __onComplete))
            {
                __onComplete?.Invoke();
                trackEntryCompleteDict.Remove(currentTrackEntry);
                __onComplete?.Invoke();
            }
            currentTrackEntry = null;
        }
@@ -336,8 +336,8 @@
        // 只调用本次TrackEntry的回调
        if (trackEntryCompleteDict.TryGetValue(trackEntry, out var cb))
        {
            cb?.Invoke();
            trackEntryCompleteDict.Remove(trackEntry);
            cb?.Invoke();
        }
    }
@@ -345,10 +345,33 @@
    public virtual void Run()
    {
// #if UNITY_EDITOR
//         List<int> removeIndex = new List<int>();
// #endif
        for (int i = runActionList.Count - 1; i >= 0; i--)
        {
            runActionList[i]?.Invoke();
// #if UNITY_EDITOR
//             try
//             {
// #endif
                runActionList[i]?.Invoke();
// #if UNITY_EDITOR
//             }
//             catch (System.Exception ex)
//             {
//                 removeIndex.Add(i);
//                 BattleDebug.LogError($"执行RunAction时发生异常: {ex.Message}\n{ex.StackTrace}");
//             }
// #endif
        }
// #if UNITY_EDITOR
//         // 移除失败的Action
//         for (int i = 0; i < removeIndex.Count; i++)
//         {
//             runActionList.RemoveAt(removeIndex[i]);
//         }
// #endif
    }
    public virtual void Pause()
Main/System/Battle/Skill/SkillBase.cs
@@ -151,12 +151,12 @@
        // battleField.battleTweenMgr.OnPlayTween(tweener);
    }
    protected void MoveToTarget(RectTransform target, Vector2 offset, Action onComplete = null)
    protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null)
    {
        //    原地释放
        if (skillConfig.CastDistance >= 9999)
        {
            onComplete?.Invoke();
            _onComplete?.Invoke();
            return;
        }
@@ -164,7 +164,7 @@
        var tweener = BattleUtility.MoveToTarget(caster.heroRectTrans, target, offset, () =>
        {
            caster.motionBase.PlayAnimation(MotionName.idle, true);
            onComplete?.Invoke();
            _onComplete?.Invoke();
        });
        battleField.battleTweenMgr.OnPlayTween(tweener);
    }
@@ -236,9 +236,9 @@
                    TurnBack(
                        () =>
                        {
                            RectTransform rectTransform = battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum);
                            //    回到原来的位置
                            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero,
                                OnAttackFinish);
                            MoveToTarget(rectTransform, Vector2.zero, OnAttackFinish);
                        }
                    , -1f);
                });
@@ -404,6 +404,7 @@
    protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
    {
        // 伤害分布 (万分比)
        // Debug.LogError("skillConfig.DamageDivide.Count " + skillConfig.DamageDivide.Length + " _hitIndex " + _hitIndex);
        int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
        long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);