yyl
2025-07-29 6577831ab2883bd05448ce0b1f9f913a9944fc78
Main/System/Battle/BattleManager.cs
@@ -17,25 +17,41 @@
        base.Init();
        // StartStoryBattle();
        logicUpdate.Start(Run);
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
    }
    public override void Release()
    {
        base.Release();
        logicUpdate.Destroy();
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
    }
    public void CreateStoryBattle(int MapID, int FuncLineID, JsonData extendData, List<TeamBase> redTeamList, List<TeamBase> blueTeamList)
    protected void OnPlayerLoginOk()
    {
        ulong exAttr1 = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.ExAttr1);
        ulong exAttr2 = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.ExAttr2);
        int MapID = 0;
        int FuncLineID = (int)exAttr2;
        CreateStoryBattle(MapID, FuncLineID, null, null);
    }
    //  上游戏的时候 等战斗阵容更新完毕 创建主线副本 敌方的数据可以暂时不显示 己方表现为睡觉
    //  如果主线副本存在 那么维持当前的副本不变
    protected void CreateStoryBattle(int MapID, int FuncLineID, JsonData extendData, List<TeamBase> blueTeamList = null)
    {
        if (null == storyBattleField)
        {
            storyBattleField = new StoryBattleField();
        }
            storyBattleField.guid = string.Empty; // 主线副本的guid为空
            var redTeamList = new List<TeamBase>();
            redTeamList.Add(TeamManager.Instance.GetTeam(TeamType.Story));
        storyBattleField.Init(MapID, FuncLineID, extendData, redTeamList, blueTeamList);
    }
    }
    public void OnBattleClose(BattleField _battleField)
    {
@@ -43,7 +59,7 @@
    }
#region 截断网络派发包 只收入当前包的后续
#region 截断网络派发包 只收入当前包的后续 b425是主线的 非主线的包并不会走b425
    private bool allow = true;
    private Queue<GameNetPackBasic> packQueue = new Queue<GameNetPackBasic>();
@@ -62,6 +78,10 @@
            else
            {
                allow = true;
                //  发送战报片段结束包
                AnalysisPackQueueAndDistribute();
            }
        }
        else
@@ -75,12 +95,80 @@
        return allow;
    }
    protected void AnalysisPackQueueAndDistribute()
    {
        List<GameNetPackBasic> packQueueSnapshot = new List<GameNetPackBasic>(packQueue);
        List<GameNetPackBasic> newPackList = new List<GameNetPackBasic>();
        //  这里已经是按照Dequeue的顺序了
        for (int i = 0; i < packQueueSnapshot.Count; i++)
        {
            GameNetPackBasic pack = packQueueSnapshot[i];
            //  碰到B421 截断 往下收集b421里的全部内容
            if (pack is HB421_tagMCTurnFightObjAction)
            {
                HB421_tagMCTurnFightObjAction b421Pack = pack as HB421_tagMCTurnFightObjAction;
                List<GameNetPackBasic> b421PackList = new List<GameNetPackBasic>();
                i++;    //  跳过当前的B421包
                for (; i < packQueueSnapshot.Count; i++)
                {
                    GameNetPackBasic nextPack = packQueueSnapshot[i];
                    if (nextPack is HB421_tagMCTurnFightObjAction)
                    {
                        // 遇到了其他B421 启动角色的Action开始,
                        // B421后再碰到B421一定是有一个人的行动结束了 回退一个位置
                        i--;
                        break;
                    }
                    else
                    {
                        b421PackList.Add(nextPack);
                    }
                }
                //  可能没用了 主要就是利用一下skill的combine 暂留 看之后还有没有别的需求
                CustomB421ActionPack actionPack = CustomB421ActionPack.CreateB421ActionPack(GetGUID(b421Pack.packUID), b421PackList);
                while (actionPack.actionPacks.Count > 0)
                {
                    GameNetPackBasic actionPackItem = actionPack.actionPacks.Dequeue();
                    newPackList.Add(actionPackItem);
                }
            }
            else
            {
                newPackList.Add(pack);
            }
        }
        //  b421跟b426的包已经处理完了
        packQueue = new Queue<GameNetPackBasic>(newPackList);
        DistributeNextPackage();
    }
    public bool DistributeNextPackage()
    {
        if (packQueue.Count > 0)
        {
            GameNetPackBasic pack = packQueue.Dequeue();
            if (pack is CustomHB426CombinePack)
            {
                CustomHB426CombinePack combinePack = pack as CustomHB426CombinePack;
                combinePack.Distribute();
            }
            else
            {
            PackageRegedit.Distribute(pack);
            }
            return true;
        }
        else
@@ -191,15 +279,18 @@
            battleField.Destroy();
        }
        if (string.IsNullOrEmpty(guid))
        {
            battleField = storyBattleField;
        }
        else
        {
        battleField = BattleFieldFactory.CreateBattleField(guid, MapID, FuncLineID, extendData, redTeamList, blueTeamList);
        }
        battleFields.Add(guid, battleField);
        if (string.Empty == guid)
        {
            storyBattleField = battleField as StoryBattleField;
        }
        battleField.Init(MapID, FuncLineID, extendData, redTeamList, blueTeamList);
        return battleField;
    }