lcy
2026-01-22 ceabc7dde8514ed6bcfadfb5fe9fb37c45cc370e
136 白骨盈野-客户端  重构红点逻辑

1.修复最高层时不显示扫荡红点
2.修复白骨盈野的广告红点显示
3.防范频繁点击扫荡按钮,限制0.5s
4.战力和等级变化时也会更新红点
8个文件已修改
136 ■■■■ 已修改文件
Main/System/BoneField/AdsManager.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BoneField/BoneFieldChallengeButton.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BoneField/BoneFieldManager.cs 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BoneField/BoneFieldWin.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/ChallengeTab/BoneFieldTabHandler.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BoneBattleFailWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BoneBattleVictoryWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/BoneField/AdsManager.cs
@@ -10,6 +10,8 @@
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEvent;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += UpdateRedpoint;
        DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        var keys = ADAwardConfig.GetKeys();
        for (int i = 0; i < keys.Count; i++)
@@ -27,11 +29,33 @@
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEvent;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= UpdateRedpoint;
        DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
    }
    private void OnFuncStateChangeEvent(int funcId)
    {
        switch (funcId)
        {
            case (int)FuncOpenEnum.BoneBattle:
                UpdateBoneAdRedPoint();
                break;
        }
    }
    public void OnBeforePlayerDataInitializeEvent()
    {
        adsInfoDict.Clear();
    }
    private void OnUpdateFBInfoChangeEvent(int mapID)
    {
        switch (mapID)
        {
            case 30010:
                UpdateBoneAdRedPoint();
                break;
        }
    }
    void SendGetReward(int ADID)
@@ -122,9 +146,33 @@
            }
            if (GetADCntByADID(key) < config.ADCntMax)
            {
                switch (key)
                {
                    //白骨
                    case 1:
                        UpdateBoneAdRedPoint();
                        break;
                    default:
                redPointDict[key].state = RedPointState.Simple;
                        break;
            }
        }
    }
}
    private void UpdateBoneAdRedPoint()
    {
        int key = 1;
        if (!ADAwardConfig.HasKey(key))
            return;
        var config = ADAwardConfig.Get(key);
        if (!FuncOpen.Instance.IsFuncOpen(config.FuncID))
            return;
        if (redPointDict.IsNullOrEmpty() || !redPointDict.ContainsKey(key))
            return;
        bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
        redPointDict[key].state = isNoChallenge ? RedPointState.None : RedPointState.Simple;
    }
}
Main/System/BoneField/BoneFieldChallengeButton.cs
@@ -21,8 +21,8 @@
        this.isHasNextLineID = isHasNextLineID;
        this.lvLimitMin = lvLimitMin;
        isLvOk = PlayerDatas.Instance.baseData.LV >= lvLimitMin;
        long myFightPower = PlayerDatas.Instance.baseData.FightPower;
        imgChallengeRed.SetActive(isLvOk && isHasNextLineID && myFightPower >= bossFightPower);
        bool isShowRed = BoneFieldManager.Instance.IsShowChallengeRed();
        imgChallengeRed.SetActive(isShowRed);
        txtChallengeLv.SetActive(!isLvOk);
        txtChallengeLv.text = Language.Get("BoneField07", lvLimitMin);
        txtChallengeYes.SetActive(isLvOk && isHasNextLineID);
Main/System/BoneField/BoneFieldManager.cs
@@ -5,13 +5,13 @@
    public readonly int DataMapID = 30010;  // 白骨盈野(战锤秘境)
    public readonly int MinStartLineID = 1;    // funcLineID从1开始
    public readonly int funcId = 9;  //功能ID
    public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.BoneFieldRepoint);
    public override void Init()
    {
        DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
        AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
        TimeMgr.Instance.OnDayEvent += OnDayEvent;
    }
@@ -20,12 +20,13 @@
        DungeonManager.Instance.UpdateFBInfoListEvent -= OnUpdateFBInfoChangeEvent;
        AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
        TimeMgr.Instance.OnDayEvent -= OnDayEvent;
    }
    private void OnFuncStateChangeEvent(int obj)
    {
        if (obj != funcId)
        if (obj != (int)FuncOpenEnum.BoneBattle)
            return;
        UpdateRedPoint();
    }
@@ -51,39 +52,75 @@
        UpdateRedPoint();
    }
    private void OnPlayerDataRefresh(PlayerDataType type)
    {
        if (type == PlayerDataType.FightPower)
        {
            UpdateRedPoint();
        }
        else if (type == PlayerDataType.LV)
        {
            UpdateRedPoint();
        }
    }
    public void UpdateRedPoint()
    {
        parentRedpoint.state = RedPointState.None;
        if (!FuncOpen.Instance.IsFuncOpen(funcId))
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BoneBattle))
            return;
        bool isShowChallengeRed = IsShowChallengeRed();
        if (isShowChallengeRed)
        {
            parentRedpoint.state = RedPointState.Simple;
            return;
        }
        bool isShowSweepRed = IsShowSweepRed();
        if (isShowSweepRed)
        {
            parentRedpoint.state = RedPointState.Simple;
            return;
        }
    }
    public bool IsShowChallengeRed()
    {
        if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
            return;
            return false;
        bool isHasNextLineID = IsHasNextLineID(fbInfo);
        int nowPassLineID = GetNowPassLineID(fbInfo);
        DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID);
        if (!DungeonConfig.HasKey(dungeonID))
            return;
            return false;
        DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID);
        bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin;
        long myFightPower = PlayerDatas.Instance.baseData.FightPower;
        if (myFightPower >= dungeonConfig.FightPower)
        {
            if (isLvOk && isHasNextLineID)
            {
                parentRedpoint.state = RedPointState.Simple;
        return isLvOk && isHasNextLineID && myFightPower >= dungeonConfig.FightPower;
            }
        }
        else
    public bool IsShowSweepRed()
        {
        bool isNoChallenge = IsNoChallenge();
        if (isNoChallenge)
            return false;
            if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
            {
                bool isSweepCountOk = showrealRemainSweepCount > 0;
                if (isSweepCountOk)
                {
                    parentRedpoint.state = RedPointState.Simple;
                return true;
                }
            }
        return false;
        }
    public bool IsNoChallenge()
    {
        if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
            return true;
        return fbInfo.PassLineID <= 0;
    }
    public bool IsHasNextLineID(FBInfo fBInfo)
Main/System/BoneField/BoneFieldWin.cs
@@ -165,8 +165,8 @@
        DisplaySkillWordsList(lineupConfig);
        DisplayItemCellList(challengeItemCells1, dungeonConfig.PassAwardList);
        DisplayItemCellList(challengeItemCells2, dungeonConfig.PassAwardList);
        if (fbInfo.PassLineID > 0)
        bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
        if (!isNoChallenge)
        {
            DungeonConfig.TryGetDungeonID(dataMapID, (int)fbInfo.PassLineID, out int sweepDungeonID);
            if (!DungeonConfig.HasKey(dungeonID))
@@ -189,8 +189,9 @@
    public void DisplayChallengeButton(DungeonConfig dungeonConfig, FBInfo fBInfo)
    {
        transNoChallenge.SetActive(fBInfo.PassLineID <= 0);
        transHasChallenge.SetActive(fBInfo.PassLineID > 0);
        bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
        transNoChallenge.SetActive(isNoChallenge);
        transHasChallenge.SetActive(!isNoChallenge);
        btnChallenge1.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower);
        btnChallenge2.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower);
    }
@@ -204,8 +205,9 @@
        bool isSweepCountOk = showrealRemainSweepCount > 0;
        btnSweep.interactable = isSweepCountOk;
        imgSweep.gray = !isSweepCountOk;
        long myFightPower = PlayerDatas.Instance.baseData.FightPower;
        imgSweepRed.SetActive(isSweepCountOk && myFightPower < dungeonConfig.FightPower);
        bool isShowChallengeRed = BoneFieldManager.Instance.IsShowChallengeRed();
        bool isShowSweepRed = BoneFieldManager.Instance.IsShowSweepRed();
        imgSweepRed.SetActive(!isShowChallengeRed && isShowSweepRed);
        txtTodaySweepCount.SetActive(showSweepMaxCount > showrealRemainSweepCount);
        txtTodaySweepCount.text = UIHelper.AppendColor(isSweepCountOk ? TextColType.LightGreen : TextColType.Red, Language.Get("BoneField08", showrealRemainSweepCount, showSweepMaxCount));
Main/System/ChallengeTab/BoneFieldTabHandler.cs
@@ -5,7 +5,7 @@
{
    protected override int GetIndex() => 2;
    protected override int GetOpenState() => 0; // 0=FuncID
    protected override int GetFuncId() => BoneFieldManager.Instance.funcId;
    protected override int GetFuncId() => (int)FuncOpenEnum.BoneBattle;
    protected override int GetRedpointId() => MainRedDot.BoneFieldRepoint;
    protected override string GetCountInfo()
Main/System/Settlement/BoneBattleFailWin.cs
@@ -36,7 +36,7 @@
    protected override void OnPreOpen()
    {
        int funcId = BoneFieldManager.Instance.funcId;
        int funcId = (int)FuncOpenEnum.BoneBattle;
        txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
        if (!FirstChargeManager.Instance.GetLocalFail())
        {
Main/System/Settlement/BoneBattleVictoryWin.cs
@@ -22,7 +22,7 @@
    {
        scroller.OnRefreshCell += OnRefreshCell;
        CreateScroller();
        int funcId = BoneFieldManager.Instance.funcId;
        int funcId = (int)FuncOpenEnum.BoneBattle;
        txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
    }
Main/Utility/EnumHelper.cs
@@ -817,6 +817,7 @@
    Official = 3,//内政
    BeautyMM = 7,//红颜 
    GoldRush = 8, //淘金
    BoneBattle = 9, //白骨盈野
    Realm = 10, //境界 官职
    Guild = 11,// 公会
    BlessLV = 12, //祝福等级