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, 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.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()
|
{
|
waitAdID = 0;
|
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)
|
{
|
if (!InvestModel.Instance.IsInvested(InvestModel.monthCardType) &&
|
!InvestModel.Instance.IsInvested(InvestModel.foreverCardType))
|
{
|
//有广告的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)
|
{
|
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);
|
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))
|
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;
|
}
|
}
|