yyl
2025-10-11 68ceec72d78d328f9eaa05fce40caf99fe333ba1
Main/System/NewBieGuidance/NewBieCenter.cs
@@ -30,12 +30,15 @@
    List<int> allGuides = new List<int>();
    public List<int> completeGuidesBuf = new List<int>();
    //因其他原因导致的等待显示的引导窗口,在OpenWindow时会触发复查,但时机太晚增加关闭界面时触发
    List<string> waitGuideWinNames = new List<string>();
    bool inited = false;
    public event Action guideStepChangeEvent;
    public event Action guideBeginEvent;
    public event Action<int> guideCompletedEvent;
    public override void Init()
    {
@@ -44,6 +47,7 @@
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
        UIManager.Instance.OnOpenWindow += OnOpenWindow;
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
    }
    public override void Release()
@@ -53,6 +57,7 @@
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
    }
    void OnOpenWindow(UIBase _ui)
@@ -61,6 +66,22 @@
        if (guides != null)
        {
            TryStartNewBieGuides(guides);
        }
    }
    //关闭其他界面时复查有没需要等待的引导
    void OnCloseWindow(UIBase _ui)
    {
        foreach (var winName in waitGuideWinNames)
        {
            var guides = GuideConfig.GetGuideListByWinName(winName);
            if (guides != null)
            {
                if (TryStartNewBieGuides(guides))
                {
                    break;
                }
            }
        }
    }
@@ -78,7 +99,7 @@
        var guides = GuideConfig.GetGuideListByType((int)GuideTriggerType.MissionClick);
        if (guides != null)
        {
            TryStartNewBieGuides(guides);
            TryStartNewBieGuides(guides, true);
        }
    }
@@ -142,7 +163,8 @@
    }
    //找出可进行的引导
    public void TryStartNewBieGuides(List<int> _guides)
    //isOrgTrigger 是否是原生触发,如点击的只能是原生触发,其他的都不能
    public bool TryStartNewBieGuides(List<int> _guides, bool isOrgTrigger = false)
    {
        if (!inited)
        {
@@ -157,15 +179,14 @@
        if (_guides == null)
        {
            return;
            return false;
        }
        if (currentGuide != 0)
        {
            return;
            return false;
        }
        var ok = false;
        for (int i = 0; i < _guides.Count; i++)
        {
            var guideId = _guides[i];
@@ -181,33 +202,57 @@
                continue;
            }
            ok = CheckGuideCondition(guideId);
            if (ok && currentGuide != guideId)
            if (currentGuide != guideId && CheckGuideCondition(guideId, isOrgTrigger))
            {
                StartNewBieGuide(guideId);
                break;
                return StartNewBieGuide(guideId);
            }
        }
        return false;
    }
    public void StartNewBieGuide(int _id)
    bool WaitGuide(int _id)
    {
        var config = GuideConfig.Get(_id);
        if (UIManager.Instance.ExistAnyFullScreenOrMaskWin(config.WinName))
        {
            if (!waitGuideWinNames.Contains(config.WinName))
            {
                waitGuideWinNames.Add(config.WinName);
            }
            return true;
        }
        return false;
    }
    public bool StartNewBieGuide(int _id)
    {
        if (_id == 0)
        {
            Debug.LogError("请检查引导id = 0 的情况");
            return;
            return false;
        }
        var config = GuideConfig.Get(_id);
        if (config == null)
        {
            Debug.LogError($"没有该引导ID,请检查引导id = {_id} 的情况");
            return;
            return false;
        }
        AutoFightModel.Instance.isPause = true;
        if (WaitGuide(_id))
        {
            return false;
        }
        if (waitGuideWinNames.Contains(config.WinName))
        {
            waitGuideWinNames.Remove(config.WinName);
        }
        BattleManager.Instance.storyBattleField.IsPause = true;
        currentGuide = _id;
        guideStep = config.Steps.Length > 0 ? config.Steps[0] : 0;
@@ -226,7 +271,13 @@
            guideStepChangeEvent?.Invoke();
        }
        UIManager.Instance.CloseWindow<ChatWin>();
        return true;
    }
    bool IsNeedRecord(int _id)
    {
        return GuideConfig.Get(_id).NoRecord == 0;
    }
    public void FinishNewBieGuide(int _id)
@@ -235,6 +286,8 @@
        currentGuide = 0;
        UIManager.Instance.CloseWindow<NewBieWin>();
        if (IsNeedRecord(_id))
        {
        if (!completeGuidesBuf.Contains(guideRecord))
        {
            completeGuidesBuf.Add(guideRecord);
@@ -244,16 +297,19 @@
        send.GuideIndex = (byte)_id;
        send.IsOK = 1;
        GameNetSystem.Instance.SendInfo(send);
        }
        if (guideCompletedEvent != null)
        {
            guideCompletedEvent(guideRecord);
        }
        AutoFightModel.Instance.isPause = false;
        BattleManager.Instance.storyBattleField.IsPause = false;
    }
    public void RemoveNewBieGuide(int _id)
    {
        if (IsNeedRecord(_id))
    {
        if (!completeGuidesBuf.Contains(_id))
        {
@@ -265,24 +321,32 @@
        send.IsOK = 1;
        GameNetSystem.Instance.SendInfo(send);
    }
    }
    public void FinishCurrentGuideWithoutCloseWin()
    {
        var guideRecord = currentGuide;
        currentGuide = 0;
        if (IsNeedRecord(guideRecord))
        {
            if (!completeGuidesBuf.Contains(guideRecord))
            {
        completeGuidesBuf.Add(guideRecord);
            }
        var send = new CA222_tagCMSetGuideOK();
        send.GuideIndex = (byte)guideRecord;
        send.IsOK = 1;
        GameNetSystem.Instance.SendInfo(send);
        }
        if (guideCompletedEvent != null)
        {
            guideCompletedEvent(guideRecord);
        }
        AutoFightModel.Instance.isPause = false;
        BattleManager.Instance.storyBattleField.IsPause = false;
    }
    public void ReportGuideStepComplete(int _step)
@@ -315,8 +379,8 @@
    }
    public bool CheckGuideCondition(int _guideId)
    //isOrgTrigger 是否是原生触发,如点击的只能是原生触发,其他的都不能
    public bool CheckGuideCondition(int _guideId, bool isOrgTrigger)
    {
        var config = GuideConfig.Get(_guideId);
        if (config == null)
@@ -347,11 +411,18 @@
                case GuideTriggerType.Map:
                    return PlayerDatas.Instance.baseData.ExAttr1 >= config.Condition;
                case GuideTriggerType.MissionClick:
                    return TaskManager.Instance.GetMainTaskType() == config.Condition;
                //只有真正点击才可以触发
                if (isOrgTrigger)
                {
                    return TaskManager.Instance.GetMainTaskType() == config.Condition && TaskManager.Instance.GetMainTaskState() != 2;
                }
                return false;
                default:
                    return false;
            }
    }
    public void CompleteAllGuides()
    {
@@ -363,11 +434,15 @@
        currentGuide = 0;
        UIManager.Instance.CloseWindow<NewBieWin>();
        completeGuidesBuf.Clear();
        var allGuideKeys = GuideConfig.GetKeys();
        for (int i = 0; i < allGuideKeys.Count; i++)
        {
            if (IsNeedRecord(allGuideKeys[i]))
            {
            completeGuidesBuf.Add(allGuideKeys[i]);
        }
        }
    }