yyl
2026-01-19 1f9d43e8c0d6e72b91fc0c31eef5e3fe0897bea2
125 修复 部分战斗卡死
2个文件已修改
74 ■■■■■ 已修改文件
Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Motion/MotionBase.cs 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -110,19 +110,15 @@
        if (isCast)
            return;
        Played();
        if (fromSkill != null)
        if (skillBase.caster.motionBase.CanCastSkill(skillBase.skillConfig))
        {
            BattleDebug.LogError("cast skill from skill : " + fromSkill.skillConfig.SkillID);
            // Debug.LogError("cast skill id is " + skillBase.skillConfig.SkillID);
            skillBase.fromSkill = fromSkill;
            skillBase.Cast();
            isCast = true;
        }
        // Debug.LogError("cast skill id is " + skillBase.skillConfig.SkillID);
        skillBase.fromSkill = fromSkill;
        skillBase.Cast();
        isCast = true;
    }
}
Main/System/Battle/Motion/MotionBase.cs
@@ -31,7 +31,9 @@
    private Dictionary<SkillBase, int> subSkillTrackMap = new Dictionary<SkillBase, int>();
    
    private SkeletonIllusionShadow illusionShadow;
    private bool playingSkillAnim = false;
    private bool playingSkill = false;
    private bool playingSkillWithAnim = false;
    private bool isUnderControl = false;
@@ -85,12 +87,13 @@
        skeletonAnim = null;
        skeleton = null;
        currentTrack = null;
        playingSkillAnim = false;
        playingSkill = false;
        playingSkillWithAnim = false;
    }
    public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop, Action onComplete = null)
    {
        if (playingSkillAnim || animState == null) return null;
        if (playingSkill || animState == null) return null;
        if (currentTrack != null && !currentTrack.IsComplete && trackEntryCallbacks.TryGetValue(currentTrack, out var prevCallback))
        {
@@ -253,9 +256,11 @@
                currentTrack = skillTrack;
            
            activeSkillTracks[trackIndex] = skillTrack;
            playingSkillWithAnim = true;
        }
        
        playingSkillAnim = true;
        playingSkill = true;
        int currentLoop = 0, triggerCount = 0, failCount = 0;
        bool beginTriggered = false, finalStarted = false, finalEnded = false, middleStarted = false;
@@ -291,7 +296,13 @@
                
                // 只有当没有其他活跃技能时才复位 playingSkillAnim
                if (activeSkillTracks.Count == 0)
                    playingSkillAnim = false;
                {
                    playingSkillWithAnim = false;
                    playingSkill = false;
                }
                
                RemoveAction(frameHandler);
                return;
@@ -336,7 +347,10 @@
                    }
                    
                    if (activeSkillTracks.Count == 0)
                        playingSkillAnim = false;
                    {
                        playingSkill = false;
                        playingSkillWithAnim = false;
                    }
                    return;
                }
@@ -358,7 +372,10 @@
                    }
                    
                    if (activeSkillTracks.Count == 0)
                        playingSkillAnim = false;
                    {
                        playingSkillWithAnim = false;
                        playingSkill = false;
                    }
                    return;
                }
            }
@@ -451,13 +468,18 @@
                    // 只有当没有其他活跃技能时才复位 playingSkillAnim
                    if (activeSkillTracks.Count == 0)
                        playingSkillAnim = false;
                    {
                        playingSkill = false;
                    }
                    RemoveAction(frameHandler);
                    onComplete?.Invoke();
                    skillBase.OnFinalFrameEnd();
                    if (hasAnim)
                    {
                        playingSkillWithAnim = false;
                        skillTrack = null;
                    }
                }
            }
        };
@@ -533,7 +555,7 @@
        if (entry == null)
        {
            // playingSkillAnim || animState == null
            Debug.LogError("SetControledAnimation PlayAnimation hit failed : reason : " + (playingSkillAnim ? "playingSkillAnim" : "animState == null"));
            Debug.LogError("SetControledAnimation PlayAnimation hit failed : reason : " + (playingSkill ? "playingSkillAnim" : "animState == null"));
            return;
        }
@@ -618,7 +640,7 @@
        currentTrack = null;
        
        playingSkillAnim = false;
        playingSkill = false;
        PlayAnimation(MotionName.idle, true);
    }
@@ -651,7 +673,7 @@
        currentTrack = null;
        
        // 5. 重置所有状态标志
        playingSkillAnim = false;
        playingSkill = false;
        isUnderControl = false;
        
        // 6. 重置时间相关字段(关键!)
@@ -694,9 +716,13 @@
        }
    }
    public bool CanCastSkill()
    public bool CanCastSkill(SkillConfig skillConfig)
    {
        //  上次释放的技能 释放结束了没有
        return !playingSkillAnim;
        return !playingSkillWithAnim || string.IsNullOrEmpty(skillConfig.SkillMotionName);
    }
    public bool CanStartDeath()
    {
        return !playingSkillWithAnim;
    }
}