using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public class OSActivityManager : GameSystemManager { Dictionary rankOpenDays = new Dictionary(); //排行榜类型:【开始开服天, 结束开服天】 public Dictionary mainLevelRankAwards = new Dictionary(); //主线关卡名次:奖励 public Dictionary heroCallRankAwards = new Dictionary(); //武将招募名次:奖励 public List osHeroCallGiftSortList = new List(); //开服招募礼包 充值ID + 100000000 //开服榜对应的功能ID Dictionary rankTypeToFuncID = new Dictionary() { {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) { 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 (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; osHeroCallRedpoint.state = RedPointState.None; osGalaRedpoint3.state = RedPointState.None; if (StoreModel.Instance.freeShopDict.Count == 0) return; if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroCall)) { 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)) { 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 osGalaScoreAwards = new Dictionary(); // 开服庆典积分奖励 积分:奖励 public Dictionary typeToGuideID = new Dictionary(); public List osGalaChangeSortList = new List(); //兑换列表(商店5) public List osGalaGiftSortList = new List(); //开服庆典礼包 充值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() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OSGala)) { return false; } //结束后延迟一天关闭展示 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 }