hch
2025-09-04 62188b271cce5e3aec5ca40d58c30f08643e2f60
Main/System/Battle/BattleManager.cs
@@ -143,14 +143,13 @@
                List<GameNetPackBasic> b421PackList = new List<GameNetPackBasic>();
                i++;    // 跳过当前的B421包
                // 收集所有非B421包,直到遇到下一个B421或队列结束
                for (; i < packQueueSnapshot.Count; i++)
                {
                    GameNetPackBasic nextPack = packQueueSnapshot[i];
                    if (nextPack is HB421_tagMCTurnFightObjAction)
                    {
                        // 遇到了其他B421 启动角色的Action开始,
                        // B421后再碰到B421一定是有一个人的行动结束了 回退一个位置
                        i--;
                        i--; // 回退一个位置,留给外层循环处理
                        break;
                    }
                    else
@@ -160,7 +159,7 @@
                    }
                }
                // 可能没用了 主要就是利用一下skill的combine 暂留 看之后还有没有别的需求
                // 合并所有相关包
                CustomB421ActionPack actionPack = CustomB421ActionPack.CreateB421ActionPack(GetGUID(b421Pack.packUID), b421PackList);
                newPackList.Add(actionPack);
@@ -178,7 +177,7 @@
            Debug.LogWarning($"连续空战斗片段封包次数:{continousEmptyCount}");
            if (continousEmptyCount >= MaxContinousEmptyCount)
            {
                BattleDebug.LogError("连续多次没有战斗片段封包,自动回城休息!");
                Debug.LogError("连续多次没有战斗片段封包,自动回城休息!");
                MainFightRequest(0); // 0-停止战斗回城
                continousEmptyCount = 0;
                packQueue.Clear();
@@ -190,8 +189,9 @@
            continousEmptyCount = 0; // 有包就重置
        }
        // b421跟b426的包已经处理完了
        packQueue = new Queue<GameNetPackBasic>(newPackList);
            packQueue = new Queue<GameNetPackBasic>(newPackList);
        DistributeNextPackage();
    }
@@ -199,42 +199,55 @@
    //  专属于主线战斗的派发
    public bool DistributeNextPackage()
    {
        if (packQueue.Count > 0)
        if (packQueue == null)
        {
            GameNetPackBasic pack = packQueue.Peek();
            bool dequeue = false;
            if (pack is CustomHB426CombinePack)
            {
                CustomHB426CombinePack combinePack = pack as CustomHB426CombinePack;
                packQueue.Dequeue();
                combinePack.Distribute();
            }
            else if (pack is CustomB421ActionPack)
            {
                CustomB421ActionPack actionPack = pack as CustomB421ActionPack;
                dequeue = !actionPack.Distribute();
            }
            else
            {
                BattleDebug.LogError("distribute pack " + pack.GetType().Name);
                packQueue.Dequeue();
                PackageRegedit.Distribute(pack);
            }
            if (dequeue && packQueue.Count > 0)
            {
                packQueue.Dequeue();
            }
            return true;
            Debug.LogWarning("DistributeNextPackage: packQueue为空或已处理完毕");
            return false;
        }
        else
        if (packQueue.Count <= 0)
        {
            return false;
        }
        GameNetPackBasic pack = null;
        try
        {
            pack = packQueue.Dequeue();
        }
        catch (Exception ex)
        {
            Debug.LogError("DistributeNextPackage: Peek异常 " + ex);
            return false;
        }
        try
        {
            if (pack is CustomHB426CombinePack combinePack)
            {
                combinePack.Distribute();
            }
            else if (pack is CustomB421ActionPack actionPack)
            {
                actionPack.Distribute();
            }
            else
            {
                PackageRegedit.Distribute(pack);
            }
        }
        catch (Exception ex)
        {
            Debug.LogError("DistributeNextPackage: 分发包异常 " + ex);
            // 出错时主动移除当前包,防止死循环
            if (packQueue.Count > 0)
            {
                packQueue.Dequeue();
            }
            return false;
        }
        return packQueue.Count > 0;
    }
    public void OnConnected()
@@ -314,7 +327,6 @@
        }
        var pack = queue.Dequeue();
        BattleDebug.LogError("distribute pack " + pack.GetType().Name);
        PackageRegedit.Distribute(pack);
@@ -324,7 +336,6 @@
            battlePackRelationList.Remove(guid);
        }
        BattleDebug.LogError("BattlePackage count is " + queue.Count);
    }
    #endregion
@@ -396,7 +407,7 @@
    // 0-停止战斗回城   -  玩家主动点击回城时发送
    // 1-设置消耗倍值   -  玩家设置消耗倍值,对应到玩家useHarmerCount的值
    // 2-挑战关卡小怪   -  玩家点击开始战斗时发送,仅从休息状态到开始战斗时发送即可
    // 3-挑战关卡boss   -  玩家请求挑战该关卡boss时发送
    // 3-重定义暂未使用
    // 4-继续战斗          -   玩家主线战斗中(包含主线小怪、主线boss),前端表现完后端同步的战斗片段后,可再回复该值,后端会根据战斗逻辑及流程自动回复下一段的战斗片段封包,一直循环
    public void MainFightRequest(byte reqType, uint reqValue = 0)
    {