yyl
2025-09-05 bb145d27787e6d54cb4bf0995cf11a41d1c9e67d
125 【战斗】战斗系统 强制结束战斗(haverest)
18个文件已修改
346 ■■■■■ 已修改文件
Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/BuffMountAction.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleManager.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleUtility.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/RecordPlayer/RecordAction.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/RecordPlayer/RecordPlayer.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/DirectlyHealSkill.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/RebornSkill.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/SkillBase.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletSkillEffect.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/NormalSkillEffect.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/SkillEffect.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
@@ -30,6 +30,7 @@
        {
            battleField.DistributeNextPackage();
        }
    }
Main/System/Battle/BattleField/BattleField.cs
@@ -508,12 +508,11 @@
    public virtual void HaveRest()
    {
        //  休息状态
        battleObjMgr.HaveRest(BattleCamp.Red);
        battleObjMgr.DestroyTeam(BattleCamp.Blue);
        battleEffectMgr.HaveRest();
        battleTweenMgr.HaveRest();
        recordPlayer.HaveRest();
        battleObjMgr.HaveRest(BattleCamp.Red);
        battleObjMgr.DestroyTeam(BattleCamp.Blue);
        SetBattleMode(BattleMode.Stop);
    }
Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs
@@ -27,6 +27,12 @@
        isFinish = true;
    }
    public override void ForceFinish()
    {
        onComplete?.Invoke();
        base.ForceFinish();
    }
    public override bool IsFinished()
    {
        return isFinish;
Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
@@ -8,7 +8,7 @@
    public BattleStartAction(BattleField _battleField)
        : base(RecordActionType.BattleStart, _battleField, null)
    {
    }
    public override bool IsFinished()
@@ -17,9 +17,9 @@
    }
    public override void Run()
    {
        base.Run();
    public override void Run()
    {
        base.Run();
        if (isRun)
            return;
@@ -37,5 +37,14 @@
        });
        isRun = true;
    }
    public override void ForceFinish()
    {
        //正常开始之后到界面出现之前都点不了 所以这边不用强制完成 接口留着
        base.ForceFinish();
        // 完成就开始显示UI
    }
}
Main/System/Battle/BattleField/RecordActions/BuffMountAction.cs
@@ -16,10 +16,10 @@
        onComplete = _onComplete;
    }
    public override bool IsFinished()
    {
        return isFinish;
    }
    public override bool IsFinished()
    {
        return isFinish;
    }
    public override void Run()
@@ -43,6 +43,12 @@
            isFinish = true;
            return;
        }
    }
    public override void ForceFinish()
    {
        //  1帧就结束了 不管
        base.ForceFinish();
    }
}
Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -12,10 +12,10 @@
        deadPackList = _deadPackList;
    }
    public override bool IsFinished()
    {
        return isFinish;
    }
    public override bool IsFinished()
    {
        return isFinish;
    }
    public override void Run()
@@ -39,13 +39,13 @@
                    if (isLastOne)
                    {
                        isFinish = true;
                        isFinish = true;
                    }
                });
            }
            return;
        }
    }
    private void OnDeathAnimationEnd(BattleObject deadObj)
@@ -56,4 +56,10 @@
            deadObj.PerformDrop();
        }
    }
    public override void ForceFinish()
    {
        //  设置结束flag 记得清空motionBase里的事件
        base.ForceFinish();
    }
}
Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -22,10 +22,19 @@
        return skillBase.IsFinished();
    }
    public override void Run()
    public override void ForceFinish()
    {
        base.Run();
        //  设置结束flag 记得清空motionBase里的事件
        if (null != skillBase)
        {
            skillBase.ForceFinished();
        }
        base.ForceFinish();
    }
    public override void Run()
    {
        base.Run();
        if (null == skillBase)
        {
@@ -43,5 +52,5 @@
        skillBase.Cast();
        isCast = true;
    }
    }
}
Main/System/Battle/BattleManager.cs
@@ -159,6 +159,8 @@
                    }
                }
                // 合并所有相关包
                CustomB421ActionPack actionPack = CustomB421ActionPack.CreateB421ActionPack(GetGUID(b421Pack.packUID), b421PackList);
@@ -191,7 +193,17 @@
        // b421跟b426的包已经处理完了
            packQueue = new Queue<GameNetPackBasic>(newPackList);
        packQueue.Clear();
        for (int i = 0; i < newPackList.Count; i++)
        {
            var pack = newPackList[i];
            packQueue.Enqueue(pack);
        }
            // packQueue = new Queue<GameNetPackBasic>(newPackList);
        DistributeNextPackage();
    }
Main/System/Battle/BattleUtility.cs
@@ -251,6 +251,12 @@
        else if (_num == 109) return config.nums[12]; // 'm'
        else if (_num == 98)  return config.nums[13]; // 'b'
        else if (_num == 116) return config.nums[14]; // 't'
        int targetNum = _num - 48;
        if (targetNum >= config.nums.Length || targetNum < 0)
        {
            Debug.LogError("damage config " + config.TypeID + " _num is " +  _num + " out of range");
            return _num;
        }
        return config.nums[_num - 48];
    }
Main/System/Battle/RecordPlayer/RecordAction.cs
@@ -14,12 +14,12 @@
    protected bool isRunOnce = false;
    public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj)
    {
        actionType = _actionType;
    public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj)
    {
        actionType = _actionType;
        battleField = _battleField;
        battleObject = _battleObj;
    }
    }
    public RecordActionType actionType;
@@ -30,7 +30,12 @@
    public virtual void Run()
    {
    }
    public virtual void ForceFinish()
    {
        isFinish = true;
    }
}
Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -72,14 +72,13 @@
            for (int i = immediatelyActionList.Count - 1; i >= 0; i--)
            {
                var action = immediatelyActionList[i];
                if (action.IsFinished())
                {
                    removeIndexList.Add(i);
                }
                else
                if (!action.IsFinished())
                {
                    action.Run();
                    continue;
                }
                removeIndexList.Add(i);
            }
            for (int i = removeIndexList.Count - 1; i >= 0; i--)
@@ -154,8 +153,23 @@
    public void HaveRest()
    {
        for (int i = 0; i < immediatelyActionList.Count; i++)
        {
            immediatelyActionList[i].ForceFinish();
        }
        immediatelyActionList.Clear();
        if (currentRecordAction != null)
        {
            currentRecordAction.ForceFinish();
        }
        currentRecordAction = null;
        recordActionQueue.Clear();
        while (recordActionQueue.Count > 0)
        {
            recordActionQueue.Dequeue().ForceFinish();
        }
    }
    public void Release()
Main/System/Battle/Skill/DirectlyHealSkill.cs
@@ -15,33 +15,24 @@
    }
    public override void Run()
    {
        if (null != skillEffect)
        {
            skillEffect.Run();
        }
        base.Run();
    }
    // //    前摇结束
    // public override void OnStartSkillFrameEnd()
    // {
    //     skillEffect = SkillEffectFactory.CreateSkillEffect(
    //             caster,
    //             skillConfig,
    //             tagUseSkillAttack
    //         );
    //     if (skillEffect != null)
    //     {
    //         skillEffect.Play(OnHitTargets);
    //     }
    // }
    //    前摇结束
    public override void OnStartSkillFrameEnd()
    {
        skillEffect = SkillEffectFactory.CreateSkillEffect(
                caster,
                skillConfig,
                tagUseSkillAttack
            );
        if (skillEffect != null)
        {
            skillEffect.Play(OnHitTargets);
        }
    }
    protected override void OnHitTargets(int _healIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> healList)
    {
        base.OnHitTargets(_healIndex, healList);
    }
    // protected override void OnHitTargets(int _healIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> healList)
    // {
    //     base.OnHitTargets(_healIndex, healList);
    // }
}
Main/System/Battle/Skill/RebornSkill.cs
@@ -6,7 +6,6 @@
public class RebornSkill : SkillBase
{
    protected SkillEffect skillEffect;
    public RebornSkill(BattleObject _caster, SkillConfig _skillCfg,
            HB427_tagSCUseSkill _vNetData, List<GameNetPackBasic> _packList, BattleField _battleField)
@@ -15,29 +14,6 @@
    }
    public override void Run()
    {
        if (null != skillEffect)
        {
            skillEffect.Run();
        }
        base.Run();
    }
    //    前摇结束
    public override void OnStartSkillFrameEnd()
    {
        skillEffect = SkillEffectFactory.CreateSkillEffect(
                caster,
                skillConfig,
                tagUseSkillAttack
            );
        if (skillEffect != null)
        {
            skillEffect.Play(OnHitTargets);
        }
    }
Main/System/Battle/Skill/SkillBase.cs
@@ -106,7 +106,7 @@
        switch (skillConfig.castMode)
        {
            case SkillCastMode.Self:
                CastImpl();
                CastImpl(OnAttackFinish);
                break;
            case SkillCastMode.Enemy:
                CastToEnemy();
@@ -175,12 +175,8 @@
                        () =>
                        {
                            //    回到原来的位置
                            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
                            {
                                TurnBack(null, 1f);
                                caster.motionBase.PlayAnimation(MotionName.idle, true);
                                OnAllAttackMoveFinished();
                            });
                            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime,
                                OnAttackFinish);
                        }
                    , -1f);
                });
@@ -200,17 +196,13 @@
            return;
        }
        var mainHurt = tagUseSkillAttack.HurtList[0];
        int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
        BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)mainHurt.ObjID);
        if (mainTarget == null)
        {
            Debug.LogError("目标为空 mainTarget == null ObjID : " + mainHurt.ObjID);
            OnSkillFinished();
            return;
        }
        BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
        MoveToTarget(mainTarget.heroRectTrans, new Vector2(skillConfig.CastDistance, 0), moveTime, () =>
        RectTransform targetTrans = battleField.GetTeamNode(battleCamp, mainTargetPosNum);
        MoveToTarget(targetTrans, new Vector2(skillConfig.CastDistance, 0), moveTime, () =>
        {
            //    到位置转身(不一定非要转身 但是流程要写)
            TurnBack(() =>
@@ -222,12 +214,8 @@
                        () =>
                        {
                            //    回到原来的位置
                            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
                            {
                                TurnBack(null, 1f);
                                caster.motionBase.PlayAnimation(MotionName.idle, true);
                                OnAllAttackMoveFinished();
                            });
                            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime,
                                OnAttackFinish);
                        }
                    , -1f);
                });
@@ -256,17 +244,20 @@
                        () =>
                        {
                            //    回到原来的位置
                            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
                            {
                                TurnBack(null, 1f);
                                caster.motionBase.PlayAnimation(MotionName.idle, true);
                                OnAllAttackMoveFinished();
                            });
                            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum),
                                Vector2.zero, moveTime, OnAttackFinish);
                        }
                    , -1f);
                });
            }, -1f);
        });
    }
    protected void OnAttackFinish()
    {
        TurnBack(null, 1f);
        OnAllAttackMoveFinished();
        caster.motionBase.PlayAnimation(MotionName.idle, true);
    }
@@ -294,7 +285,7 @@
                skillConfig,
                tagUseSkillAttack
            );
        if (skillEffect != null)
        // if (skillEffect != null)
        {
            skillEffect.Play(OnHitTargets);
        }
@@ -315,7 +306,7 @@
    /// <param name="times"></param>
    public virtual void OnMiddleFrameStart(int times)
    {
        if (skillEffect != null)
        // if (skillEffect != null)
        {
            skillEffect.OnMiddleFrameStart(times);
        }
@@ -323,7 +314,7 @@
    public virtual void OnMiddleFrameEnd(int times, int hitIndex)
    {
        if (skillEffect != null)
        // if (skillEffect != null)
        {
            skillEffect.OnMiddleFrameEnd(times, hitIndex);
        }
@@ -334,7 +325,10 @@
    /// </summary>
    public virtual void OnFinalFrameStart()
    {
        // if (skillEffect != null)
        {
            skillEffect.OnFinalFrameStart();
        }
    }
    /// <summary>
@@ -342,7 +336,12 @@
    /// </summary>
    public virtual void OnFinalFrameEnd()
    {
        // if (skillEffect != null)
        {
            skillEffect.OnFinalFrameEnd();
        }
        HandleDead();
    }
@@ -375,7 +374,7 @@
            OnHitEachTarget(_hitIndex, target, hurt);
        }
        HandleDead();
    }
@@ -587,7 +586,29 @@
    public virtual void ForceFinished()
    {
        skillEffect?.ForceFinished();
        isFinished = true;
        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_"))
                {
                    BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
                    otherSkillAction = combinePack.CreateSkillAction();
                    //    强制结束其他技能
                    otherSkillAction.ForceFinish();
                    return;
                }
            }
            PackageRegedit.Distribute(pack);
        }
    }
    public void OnSkillFinished()
Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
@@ -74,5 +74,10 @@
        caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, bulletEffect);
    }
    public virtual void ForceFinish()
    {
        finished = true;
    }
    public bool IsFinished => finished;
}
Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -127,6 +127,8 @@
        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, (index, hitList) =>
        {
            if (isFinish)
                return;
            // 击中就销毁子弹
            caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
            // 播放子弹爆炸特效
@@ -165,6 +167,10 @@
        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, (index, hitList) =>
        {
            if (isFinish)
                return;
            foreach (var hurt in hitList)
            {
                BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
@@ -218,6 +224,15 @@
        }
    }
    public override void ForceFinished()
    {
        base.ForceFinished();
        foreach (var bulletCurve in bulletCurves)
        {
            bulletCurve.ForceFinish();
        }
    }
    public override bool IsFinished()
    {
        bool isCurveFinish = false;
Main/System/Battle/SkillEffect/NormalSkillEffect.cs
@@ -47,6 +47,14 @@
        }
        onHit?.Invoke(hitIndex, tagUseSkillAttack.HurtList.ToList());
    }
    /// <summary>
    /// 后摇结束
    /// </summary>
    public override void OnFinalFrameEnd()
    {
        base.OnFinalFrameEnd();
        isFinish = true;
    }
}
Main/System/Battle/SkillEffect/SkillEffect.cs
@@ -51,8 +51,29 @@
        caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.MStartEffectId, caster.heroGo.transform, caster.Camp);
    }
    
    /// <summary>
    /// 后摇开始
    /// </summary>
    public virtual void OnFinalFrameStart()
    {
    }
    /// <summary>
    /// 后摇结束
    /// </summary>
    public virtual void OnFinalFrameEnd()
    {
    }
    public virtual bool IsFinished()
    {
        return isFinish;
    }
    public virtual void ForceFinished()
    {
        isFinish = true;
    }
}