hch
2025-11-21 eb27e5fd31f73b998a4bbd85511a31e40b8c61b7
Main/System/Achievement/AchievementManager.cs
@@ -15,15 +15,26 @@
    public override void Init()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
    }
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
    }
    void OnBeforePlayerDataInitialize()
    {
        achivementDict.Clear();
    }
    void OnFuncStateChangeEvent(int funcID)
    {
        if (funcID == (int)FuncOpenEnum.DayMission)
        {
            UpdateRedpoint(new List<int>() { 1 });
        }
    }
    public void UpdateAchievement(HA340_tagSCSuccessInfoList netPack)
@@ -37,7 +48,7 @@
                achivementDict[info.SuccType] = new Dictionary<string, int>();
            }
            string key = info.CLen > 0 ? info.Conds.ToString() : "";
            string key = info.CLen > 0 ? string.Join("|", info.Conds) : "";
            achivementDict[info.SuccType][key] = (int)info.CurValue;
            OnAchievementUpdateEvent?.Invoke(info.SuccType);
@@ -104,8 +115,8 @@
    //获取成就状态  0: 未领取 1: 未达成 2: 已领取
    public int GetAchievementState(int id)
    {
        var process = GetAchievementProgress(id);
        var config = SuccessConfig.Get(id);
        var process = GetAchievementProgress(config.Type);
        if (process < config.NeedCnt)
        {
            return 1;
@@ -135,6 +146,10 @@
        foreach (var type in _types)
        {
            if (!isOpened(type))
            {
                continue;
            }
            var redpoint = RedpointCenter.Instance.GetRedpoint(redpointDict[type]);
            redpoint.state = RedPointState.None;
            //根据ID判断是否有可领取的
@@ -156,6 +171,19 @@
        }
    }
    bool isOpened(int type)
    {
        if (type == 1)
        {
            if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.DayMission))
            {
                return true;
            }
        }
        return false;
    }
    //根据类型获取所有成就ID, 且是排序后的 未领取>未达成>已领取
    public List<int> GetAchievementIDs(int type)
    {