|
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
|
public class OSActivityManager : GameSystemManager<OSActivityManager>
|
{
|
Dictionary<int, int[]> rankOpenDays = new Dictionary<int, int[]>(); //排行榜类型:【开始开服天, 结束开服天】
|
public Dictionary<int, int[][]> mainLevelRankAwards = new Dictionary<int, int[][]>(); //主线关卡名次:奖励
|
public Dictionary<int, int[][]> heroCallRankAwards = new Dictionary<int, int[][]>(); //武将招募名次:奖励
|
|
public List<int> osHeroCallGiftSortList = new List<int>(); //开服招募礼包 充值ID + 100000000
|
|
//开服榜对应的功能ID
|
Dictionary<int, int> rankTypeToFuncID = new Dictionary<int, int>()
|
{
|
{3, 45},
|
{4, 46},
|
};
|
|
|
|
public override void Init()
|
{
|
|
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitialize;
|
StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshStore;
|
FuncOpen.Instance.OnFuncStateChangeEvent += FuncStateChange;
|
|
ParseConfig();
|
}
|
|
public override void Release()
|
{
|
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitialize;
|
StoreModel.Instance.RefreshBuyShopLimitEvent -= RefreshStore;
|
FuncOpen.Instance.OnFuncStateChangeEvent -= FuncStateChange;
|
}
|
|
void BeforePlayerDataInitialize()
|
{
|
osGalaScore = 0; //当前积分 累计的;消耗的是货币55
|
osGalaAwardState = 0; //按位记录是否领取
|
}
|
|
void ParseConfig()
|
{
|
var config = FuncConfigConfig.Get("OSABillboard");
|
rankOpenDays = ConfigParse.ParseIntArrayDict(config.Numerical1);
|
mainLevelRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
|
heroCallRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3);
|
|
var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSHeroCall];
|
var _list = RechargeManager.Instance.GetCTGIDListByType(18);
|
|
for (int i = 0; i < list.Count; i++)
|
{
|
var item = list[i];
|
osHeroCallGiftSortList.Add(item.shopId);
|
}
|
for (int i = 0; i < _list.Count; i++)
|
{
|
osHeroCallGiftSortList.Add(_list[i] + 100000000);
|
}
|
|
ParseOSGalaConfig();
|
}
|
|
// 开服排行活动是否开启
|
public bool IsOpened(int rankType, bool needLastDay = true)
|
{
|
if (!rankTypeToFuncID.ContainsKey(rankType))
|
{
|
return false;
|
}
|
|
if (!FuncOpen.Instance.IsFuncOpen(rankTypeToFuncID[rankType]))
|
{
|
return false;
|
}
|
|
//功能开启里有开始天以开启为准,活动结束后延迟一天关闭展示
|
if (!rankOpenDays.ContainsKey(rankType))
|
{
|
return false;
|
}
|
|
var openDays = rankOpenDays[rankType];
|
if (needLastDay)
|
{
|
if (TimeUtility.OpenDay > openDays[1])
|
{
|
return false;
|
}
|
}
|
else
|
{
|
if (TimeUtility.OpenDay >= openDays[1])
|
{
|
return false;
|
}
|
}
|
|
return true;
|
}
|
|
public int GetEndTime(int rankType)
|
{
|
if (!rankOpenDays.ContainsKey(rankType))
|
{
|
return 0;
|
}
|
var openDays = rankOpenDays[rankType];
|
|
return TimeUtility.GetRemindTimeByOpenDay(openDays[1]);
|
}
|
|
int CmpGift(int a, int b)
|
{
|
bool isSaleOutA = false;
|
bool isSaleOutB = false;
|
|
if (a < 100000000)
|
{
|
//商店
|
isSaleOutA = StoreModel.Instance.GetShopIDState(a) == 1;
|
}
|
else
|
{
|
RechargeManager.Instance.TryGetRechargeCount(a % 100000000, out RechargeCount countData);
|
if (countData.totalCount >= CTGConfig.Get(a % 100000000).DailyBuyCount)
|
{
|
isSaleOutA = true;
|
}
|
}
|
if (b < 100000000)
|
{
|
isSaleOutB = StoreModel.Instance.GetShopIDState(b) == 1;
|
}
|
else
|
{
|
RechargeManager.Instance.TryGetRechargeCount(b % 100000000, out RechargeCount countData);
|
if (countData.totalCount >= CTGConfig.Get(b % 100000000).DailyBuyCount)
|
{
|
isSaleOutB = true;
|
}
|
}
|
if (isSaleOutA != isSaleOutB)
|
{
|
return isSaleOutA ? 1 : -1;
|
}
|
|
return a.CompareTo(b);
|
}
|
|
//开服招募榜礼包
|
public void RefreshGiftSortList()
|
{
|
osHeroCallGiftSortList.Sort(CmpGift);
|
}
|
|
void RefreshStore()
|
{
|
UpdateRedpoint();
|
}
|
|
|
Redpoint osMainLevelRedpoint = new Redpoint(MainRedDot.RedPoint_OSMainLevel);
|
Redpoint osHeroCallRedpoint = new Redpoint(MainRedDot.RedPoint_OSHeroCard);
|
|
public void UpdateRedpoint()
|
{
|
osMainLevelRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None;
|
osGalaRedpoint2.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSGalaChange) ? RedPointState.Simple : RedPointState.None;
|
|
osHeroCallRedpoint.state = RedPointState.None;
|
osGalaRedpoint3.state = RedPointState.None;
|
|
if (StoreModel.Instance.freeShopDict.Count == 0) return;
|
|
if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroCall) && IsOpened(4, false))
|
{
|
var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSHeroCall];
|
|
for (int i = 0; i < shopList.Count; i++)
|
{
|
var shopID = shopList[i];
|
var config = StoreConfig.Get(shopID);
|
if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
|
{
|
osHeroCallRedpoint.state = RedPointState.Simple;
|
break;
|
}
|
}
|
}
|
|
if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSGalaGift) && IsOpenedOSGala(false))
|
{
|
var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSGalaGift];
|
|
for (int i = 0; i < shopList.Count; i++)
|
{
|
var shopID = shopList[i];
|
var config = StoreConfig.Get(shopID);
|
if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
|
{
|
osGalaRedpoint3.state = RedPointState.Simple;
|
break;
|
}
|
}
|
}
|
}
|
|
private void FuncStateChange(int funcId)
|
{
|
switch ((FuncOpenEnum)funcId)
|
{
|
case FuncOpenEnum.OSMainLevl:
|
case FuncOpenEnum.OSHeroCall:
|
UpdateRedpoint();
|
break;
|
}
|
}
|
|
#region 开服庆典
|
//开服庆典
|
public int osGalaOpenDays = 0; //持续天数
|
public Dictionary<int, int[][]> osGalaScoreAwards = new Dictionary<int, int[][]>(); // 开服庆典积分奖励 积分:奖励
|
public Dictionary<int, int> typeToGuideID = new Dictionary<int, int>();
|
public List<int> osGalaChangeSortList = new List<int>(); //兑换列表(商店5)
|
public List<int> osGalaGiftSortList = new List<int>(); //开服庆典礼包 充值ID + 100000000
|
|
public int osGalaScore = 0; //当前积分 累计的;消耗的是货币55
|
public int osGalaAwardState = 0; //按位记录是否领取
|
public event Action OnOSGalaDataChangeEvent;
|
|
// 兑换商店
|
Redpoint osGalaRedpoint2 = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 2);
|
// 礼包免费
|
Redpoint osGalaRedpoint3 = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 3);
|
// 总奖励
|
Redpoint osGalaRedpoint4 = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 4);
|
|
|
public void UpdateOSGalaData(HAB05_tagSCOSACelebrationInfo netPack)
|
{
|
osGalaScore = (int)netPack.PointTotal;
|
osGalaAwardState = (int)netPack.PointAward;
|
OnOSGalaDataChangeEvent?.Invoke();
|
UpdateGalaRedpoint();
|
}
|
|
public bool IsOpenedOSGala(bool needLastDay = true)
|
{
|
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OSGala))
|
{
|
return false;
|
}
|
if (needLastDay)
|
{
|
//结束后延迟一天关闭展示
|
return TimeUtility.OpenDay <= osGalaOpenDays;
|
}
|
else
|
{
|
return TimeUtility.OpenDay < osGalaOpenDays;
|
}
|
}
|
|
// 是否已领取奖励
|
public bool IsGotAward(int index)
|
{
|
return (osGalaAwardState & (1 << index)) != 0;
|
}
|
|
// 是否可领取奖励
|
public bool CanGetAward(int index, int score)
|
{
|
if (IsGotAward(index))
|
{
|
return false;
|
}
|
|
if (osGalaScore < score)
|
{
|
return false;
|
}
|
|
return true;
|
}
|
|
void ParseOSGalaConfig()
|
{
|
var config = FuncConfigConfig.Get("OSACelebration");
|
osGalaOpenDays = int.Parse(config.Numerical1);
|
osGalaScoreAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
|
|
config = FuncConfigConfig.Get("Achievement");
|
typeToGuideID = ConfigParse.ParseIntDict(config.Numerical1);
|
|
|
var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSGalaChange];
|
for (int i = 0; i < list.Count; i++)
|
{
|
var item = list[i];
|
osGalaChangeSortList.Add(item.shopId);
|
}
|
|
var _list1 = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSGalaGift];
|
var _list2 = RechargeManager.Instance.GetCTGIDListByType(19);
|
for (int i = 0; i < _list1.Count; i++)
|
{
|
var item = _list1[i];
|
osGalaGiftSortList.Add(item.shopId);
|
}
|
for (int i = 0; i < _list2.Count; i++)
|
{
|
osGalaGiftSortList.Add(_list2[i] + 100000000);
|
}
|
}
|
|
public void RefreshOSGalaGiftSortList()
|
{
|
osGalaGiftSortList.Sort(CmpGift);
|
}
|
|
public void RefreshOSGalaChangeSortList()
|
{
|
osGalaGiftSortList.Sort(CmpGift);
|
}
|
|
void UpdateGalaRedpoint()
|
{
|
osGalaRedpoint4.state = RedPointState.None;
|
var keys = osGalaScoreAwards.Keys.ToList();
|
keys.Sort();
|
for (int i = 0; i < keys.Count; i++)
|
{
|
var score = keys[i];
|
if (CanGetAward(i, score))
|
{
|
osGalaRedpoint4.state = RedPointState.Simple;
|
return;
|
}
|
}
|
|
}
|
#endregion
|
}
|