From c8aea6cbef51b3dd41b4d911bc7e6bf89a6e2e2d Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 20 三月 2026 15:14:33 +0800
Subject: [PATCH] 0312 优化红颜定军阁解锁判断

---
 Main/System/BoneField/AdsManager.cs |  179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 168 insertions(+), 11 deletions(-)

diff --git a/Main/System/BoneField/AdsManager.cs b/Main/System/BoneField/AdsManager.cs
index 5033fc5..c22725f 100644
--- a/Main/System/BoneField/AdsManager.cs
+++ b/Main/System/BoneField/AdsManager.cs
@@ -1,26 +1,71 @@
 using System;
 using System.Collections.Generic;
+using UnityEngine;
 public class AdsManager : GameSystemManager<AdsManager>
 {
     //<骞垮憡ID,浠婃棩宸查鍙栧箍鍛婂鍔辨鏁�>
     private Dictionary<int, int> adsInfoDict = new Dictionary<int, int>();
-    public event Action<int, int> OnAdsInfoListUpdateEvent;//ADID ADMapID
+    public event Action<int, int, int> OnAdsInfoListUpdateEvent;//ADID type value
+    public Dictionary<int, Redpoint> redPointDict = new Dictionary<int, Redpoint>();
+
+    public int waitAdID = 0;  //鍥炶皟鍚庡彂鏀惧鍔辩敤
+    int loadErrorCD = 10;   //绛夊緟10绉掑悗鎵嶈兘鍐嶈姹�
+    public float lastLoadErrorTime = 0;
+
     public override void Init()
     {
-        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
+        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++)
+        {
+            var config = ADAwardConfig.Get(keys[i]);
+            if (config.RedpointID == 0)
+            {
+                continue;
+            }
+            redPointDict[keys[i]] = new Redpoint(config.ParentRedpointID, config.RedpointID);
+        }
     }
 
     public override void Release()
     {
-        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
+        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()
     {
+        waitAdID = 0;
         adsInfoDict.Clear();
     }
 
-    public void SendGetReward(int ADID)
+    private void OnUpdateFBInfoChangeEvent(int mapID)
+    {
+        switch (mapID)
+        {
+            case 30010:
+                UpdateBoneAdRedPoint();
+                break;
+        }
+    }
+
+    void SendGetReward(int ADID)
     {
         var pack = new CA504_tagCMPlayerGetReward();
         pack.RewardType = 81;       //  骞垮憡濂栧姳 81
@@ -28,7 +73,51 @@
         GameNetSystem.Instance.SendInfo(pack);
     }
 
+    //鍖哄垎涓嶅悓娓犻亾鏄惁鏈夊箍鍛奡DK
     public void PlayAds(int ADID)
+    {
+        //鏈夊箍鍛婄殑SDK
+        if (VersionConfig.Get().appId == "ryzj" && !GeneralDefine.noAdsChannels.Contains(SDKUtils.channelSign))
+        {
+            //瑙嗛鍔犺浇澶辫触闇�瑕佺瓑10绉掑悗鍐嶈皟鐢�
+            //濂栧姳闇�瑕佽缃爣璇嗗搴斿彂鏀�
+            if (WaitForLoadNewAd())
+            {
+                SysNotifyMgr.Instance.ShowTip("AdLoadFail");
+                return;
+            }
+            waitAdID = ADID;
+            SDKUtils.Instance.PlayAds("b69a2b68bb3d22");
+            return;
+        }
+
+        //娌″箍鍛婄殑SDK 鐩存帴缁欏鍔�
+        GetAdsAward(ADID);
+    }
+
+    public void LoadAds()
+    {
+        if (VersionConfig.Get().appId == "ryzj")
+        {
+            if (WaitForLoadNewAd())
+            {
+                return;
+            }
+            SDKUtils.Instance.LoadAds("b69a2b68bb3d22");
+        }
+    }
+
+    //涓婁竴娆″姞杞藉け璐ワ紝妫�鏌ユ槸鍚﹂渶瑕佺瓑寰�
+    public bool WaitForLoadNewAd()
+    {
+        if (Time.time - lastLoadErrorTime < loadErrorCD)
+        {
+            return true;
+        }
+        return false;
+    }
+
+    public void GetAdsAward(int ADID)
     {
         switch (ADID)
         {
@@ -39,15 +128,37 @@
                 BoneFieldManager.Instance.SendBBeginFBWipeOut(BoneFieldManager.Instance.DataMapID, (int)fbInfo1.PassLineID);
                 break;
             case 2:
-            
                 if (!DungeonManager.Instance.TryGetFBInfoByMapID(TianziBillboradManager.Instance.DataMapID, out var fbInfo2))
                     return;
                 SendGetReward(ADID);
-                BoneFieldManager.Instance.SendBBeginFBWipeOut(TianziBillboradManager.Instance.DataMapID, (int)fbInfo2.PassLineID);
                 break;
+            case 3:
+                //瀵诲疂绫诲瀷
+                HappyXBModel.Instance.HeroCallAfterCheckWish(() =>
+                {
+                    HeroUIManager.Instance.selectCallType = HappXBTitle.HeroCallAdvanced;
+                    HeroUIManager.Instance.selectCallIndex = 0;
+                    SendGetReward(ADID);
+                    TimingGiftManager.Instance.TryAddWhenAllAdsUsed(2, ADID);
+                });
+                break;
+            case 4:
+                TimingGiftManager.Instance.TryAddWhenAllAdsUsed(1, ADID);
+                SendGetReward(ADID);
+                break;
+            case 5:
+                TimingGiftManager.Instance.TryAddWhenAllAdsUsed(7, ADID);
+                GubaoManager.Instance.selectCallIndex = 0;
+                SendGetReward(ADID);
+                break;
+            case 6:
+                SendGetReward(ADID);
+                break;
+
         }
     }
 
+    //宸茶幏鍙栧箍鍛婂鍔辨鏁�
     public int GetADCntByADID(int ADID)
     {
         if (adsInfoDict.IsNullOrEmpty() || !adsInfoDict.ContainsKey(ADID))
@@ -63,14 +174,60 @@
         {
             adsInfoDict[item.ADID] = item.ADCnt;
 
-            int mapID = 0;
-            if (ADAwardConfig.HasKey(item.ADID))
+            if (!ADAwardConfig.HasKey(item.ADID))
             {
-                ADAwardConfig aDAwardConfig = ADAwardConfig.Get(item.ADID);
-                mapID = aDAwardConfig.ADMapID;
+                continue;
             }
-            OnAdsInfoListUpdateEvent?.Invoke(item.ADID, mapID);
+            ADAwardConfig aDAwardConfig = ADAwardConfig.Get(item.ADID);
+            var value = aDAwardConfig.ADAwardValue;
+            var type = aDAwardConfig.ADAwardType;
+            OnAdsInfoListUpdateEvent?.Invoke(item.ADID, type, value);
+
+            UpdateRedpoint();
+
         }
     }
+
+    void UpdateRedpoint()
+    {
+        foreach (var key in redPointDict.Keys)
+        {
+            redPointDict[key].state = RedPointState.None;
+
+            var config = ADAwardConfig.Get(key);
+            if (!FuncOpen.Instance.IsFuncOpen(config.FuncID))
+            {
+                continue;
+            }
+            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;
+    }
 }
 

--
Gitblit v1.8.0