using System; using System.Collections.Generic; public class AdsManager : GameSystemManager { //<广告ID,今日已领取广告奖励次数> private Dictionary adsInfoDict = new Dictionary(); public event Action OnAdsInfoListUpdateEvent;//ADID type value public Dictionary redPointDict = new Dictionary(); public override void Init() { 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.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) { var pack = new CA504_tagCMPlayerGetReward(); pack.RewardType = 81; // 广告奖励 81 pack.DataEx = (uint)ADID; // 广告奖励ID GameNetSystem.Instance.SendInfo(pack); } //如果有广告SDK接入,该函数改成回调触发 public void PlayAds(int ADID) { switch (ADID) { case 1: if (!DungeonManager.Instance.TryGetFBInfoByMapID(BoneFieldManager.Instance.DataMapID, out var fbInfo1)) return; SendGetReward(ADID); 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); break; case 3: //寻宝类型 HappyXBModel.Instance.HeroCallAfterCheckWish(() => { HeroUIManager.Instance.selectCallType = HappXBTitle.HeroCallAdvanced; HeroUIManager.Instance.selectCallIndex = 0; SendGetReward(ADID); }); break; case 4: case 6: SendGetReward(ADID); break; case 5: GubaoManager.Instance.selectCallIndex = 0; SendGetReward(ADID); break; } } //已获取广告奖励次数 public int GetADCntByADID(int ADID) { if (adsInfoDict.IsNullOrEmpty() || !adsInfoDict.ContainsKey(ADID)) return 0; return adsInfoDict[ADID]; } public void UpdateAdsInfoList(HA722_tagSCADInfoList vNetData) { if (vNetData == null || vNetData.ADInfoList.IsNullOrEmpty()) return; foreach (var item in vNetData.ADInfoList) { adsInfoDict[item.ADID] = item.ADCnt; if (!ADAwardConfig.HasKey(item.ADID)) { continue; } 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; } }