| | |
| | | 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 |
| | |
| | | GameNetSystem.Instance.SendInfo(pack); |
| | | } |
| | | |
| | | //区分不同渠道是否有广告SDK |
| | | 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) |
| | | { |
| | |
| | | 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)) |
| | |
| | | { |
| | | 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; |
| | | } |
| | | } |
| | | |