hch
2025-11-20 ed98029a88cd89702980ac7c40b711afddc5aeb2
Main/System/Battle/BattleManager.cs
@@ -2,6 +2,7 @@
using UnityEngine;
using LitJson;
using System;
using System.Linq;
public class BattleManager : GameSystemManager<BattleManager>
{
@@ -23,10 +24,13 @@
            QuickSetting.Instance.SendPackage();
        }
    }
    public readonly int[] speedIndexfuncIdArr = new int[] { 34, 35, 36 };  // 战斗倍数对应的功能ID
    public readonly int passFuncId = 33;    // 跳过战斗对应的功能ID
    public int passRound;   // 超过X回合可跳过
    public int fightGuideID;
    public int fightGuideMainLevelLimit;
    public int fightGuideNoClickSeconds;
    public int[] challengeBossGuides;
    public Action<string, BattleField> onBattleFieldCreate;
@@ -54,6 +58,10 @@
        fightGuideID = int.Parse(config.Numerical1);
        fightGuideMainLevelLimit = int.Parse(config.Numerical2);
        fightGuideNoClickSeconds = int.Parse(config.Numerical3);
        challengeBossGuides = JsonMapper.ToObject<int[]>(config.Numerical4);
        config = FuncConfigConfig.Get("BattleButton");
        passRound= int.Parse(config.Numerical1);
    }
@@ -67,8 +75,8 @@
    protected void OnPlayerLoginOk()
    {
        long exAttr1 = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.ExAttr1);
        long exAttr2 = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.ExAttr2);
        long exAttr1 = PlayerDatas.Instance.baseData.ExAttr1;
        long exAttr2 = PlayerDatas.Instance.baseData.ExAttr2;
        int MapID = 1;
        int FuncLineID = (int)exAttr2;
@@ -139,6 +147,7 @@
        {
            if (!allow)
            {
                _package.socketType = ServerType.MainFight;
                packQueue.Enqueue(_package);
            }
        }
@@ -161,6 +170,7 @@
        List<GameNetPackBasic> newPackList = ParseBattlePackList(string.Empty, packQueueSnapshot);
#if UNITY_EDITOR
        Action printNewPack = () =>
        {
            string temp = "After AnalysisPackQueueAndDistribute newPackList count: " + newPackList.Count + "\n";
@@ -183,7 +193,7 @@
        };
        printNewPack();
#endif
        // HashSet<int> skipIndexes = new HashSet<int>();
        // // 这里已经是按照Dequeue的顺序了
@@ -269,11 +279,11 @@
    public static List<GameNetPackBasic> ParseBattlePackList(string guid, List<GameNetPackBasic> packQueueSnapshot)
    {
        var list = CustomHB426CombinePack.CombineToSkillPackFromList(guid, packQueueSnapshot);
        string str = "ParseBattlePackList \n";
        for (int i = 0; i < list.Count; i++)
        {
            str += "  " + list[i].GetType().Name + "\n";
        }
        // string str = "ParseBattlePackList \n";
        // for (int i = 0; i < list.Count; i++)
        // {
        //     str += "  " + list[i].GetType().Name + "\n";
        // }
        // BattleDebug.LogError(str);
        return list;
@@ -484,10 +494,17 @@
                isCreate = false;
            }
            else
            {
            {
                BattleDebug.LogError("战场已存在 先进行销毁");
                battleField.Destroy();
            }
        }
        var bf = GetBattleFieldByMapID(MapID);
        if (bf != null && !string.IsNullOrEmpty(guid))
        {
            BattleDebug.LogError("相同地图ID的战场已存在 先进行销毁");
            bf.Destroy();
        }
        if (isCreate)
@@ -586,24 +603,31 @@
        return null;
    }
    /// <summary>
    /// 检查是否有非主线战斗(如竞技场、白骨等)正在进行
    /// </summary>
    /// <returns>如果有任何非主线战斗且未结束,则返回true</returns>
    public bool IsOtherBattleInProgress()
    //发进入战斗包
    private float lastTime = 0f;
    private float turnCoolDown = 0.5f; // 冷却时间
    public void SendTurnFight(uint mapID, uint funcLineID = 0, byte tagType = 0, uint tagID = 0, uint[] valueList = null)
    {
        foreach (var kvp in battleFields)
        // 连续频繁发包,触发提示
        float currentTime = Time.time;
        if (currentTime - lastTime < turnCoolDown)
        {
            BattleField battleField = kvp.Value;
            // 检查战场是否有效且尚未结束
            if (battleField == null || battleField.IsBattleFinish)
                continue;
            // MapID 1 (StoryBattleField) 和 2 (StoryBossBattleField) 都是主线
            if (battleField.MapID == 1 || battleField.MapID == 2)
                continue;
            return true;
            SysNotifyMgr.Instance.ShowTip("BattleCoolDown");
            return;
        }
        return false;
        lastTime = currentTime;
        CB410_tagCMTurnFight pack = new CB410_tagCMTurnFight();
        pack.MapID = mapID;
        pack.FuncLineID = funcLineID;
        pack.TagType = tagType;
        pack.TagID = tagID;
        if (!valueList.IsNullOrEmpty())
        {
            pack.ValueList = valueList;
            pack.ValueCount = (byte)valueList.Length;
        }
        GameNetSystem.Instance.SendInfo(pack);
    }
    // 获取当前正在显示的战斗场景名称,如果没有则返回空字符串
@@ -622,4 +646,32 @@
        }
        return "";
    }
    // 获取当前正在显示的战斗场景,如果没有则返回null
    public BattleField GetActiveBattleFieldByName(string battleName)
    {
        foreach (var kvp in battleFields)
        {
            BattleField battleField = kvp.Value;
            if (battleField == null)
                continue;
            var name = battleField.ToString();
            if (name == battleName)
                return battleField;
        }
        return null;
    }
    public void DestroyAllBattleField()
    {
        var battleFieldsList = battleFields.Values.ToList();
        foreach (var battleField in battleFieldsList)
        {
            if (battleField == null)
                continue;
            battleField.Destroy();
        }
    }
}