using System.Collections.Generic; using System.Linq; using cfg.GfgCfg; using ET; namespace GFGGame { public class BattlePassTaskDataManager : SingletonBase { //是否初始化服务器数据 public bool initedFromServer; //通行证赛季Id private int SeasonId; //是否购买通行证 private bool IsBuy; private long SeasonEndTime; private SelectionCache selectionCache; //已经领奖levelId private HashSet NormalRewards = new HashSet(); //已经高级领奖levelId private HashSet SuperRewards = new HashSet(); //所有特别奖励 private List> tempItems; public int GetSeasonId() { return SeasonId; } public void AddNormalReward(int levelId) { NormalRewards.Add(levelId); } public void AddSuperReward(int levelId) { SuperRewards.Add(levelId); } public void SetSeasonId(int seasonId) { SeasonId = seasonId; //设置赛季结束时间 //获取赛季配置 var seasonCfg = CommonDataManager.Tables.TblBattlePassOpenCfg.GetOrDefault(seasonId); if (seasonCfg == null) return; SeasonEndTime = TimeUtil.GetResetTimeSec(seasonCfg.EndTime); } public void SetIsBuy(bool isBuy) { IsBuy = isBuy; } public bool GetIsBuy() { return IsBuy; } //0:未完成 1:可领取 2:已领取 3:继续领取 public int GetRewardState(int level) { var battlePassLevel = GetBattlePassLevel(); if (level > battlePassLevel) return 0; if (!NormalRewards.Contains(level)) return 1; if (!IsBuy) return 3; return SuperRewards.Contains(level) ? 2 : 1; } //检查普通领取状态 public bool CheckLevelRewardGet(int levelId) { return NormalRewards.Contains(levelId); } //检查高级领取状态 public bool CheckSuperLevelRewardGet(int levelId) { return SuperRewards.Contains(levelId); } //获取赛季结束时间 public long GetSeasonEndTime() { return SeasonEndTime; } //获取通行证当前等级 public int GetBattlePassLevel() { return GameGlobal.myNumericComponent.GetAsInt(NumericType.PassLevel); } //获取通行证当前经验 public long GetBattlePassExp() { return ItemDataManager.GetItemNum(ConstItemID.BATTLE_PASS_CURRENCY); } public BattlePassCfg GetSpecialCfg(int level) { //在需要时再初始化数据 if (selectionCache == null) { SetSpecialCfgCache(); } var targetLevel = selectionCache.GetValueNoCache(level); return CommonDataManager.Tables.TblBattlePassCfg.GetGroup1ByIdAndLevel(SeasonId, targetLevel)[0]; } private void SetSpecialCfgCache() { var battlePassCfgs = GetIsGoodToId(GetSeasonId()); var minIndex = 0; var selections = new List>(); foreach (var battlePassCfg in battlePassCfgs) { selections.Add(new Selection(minIndex, battlePassCfg.Level, battlePassCfg.Level, Selection.SelectionModel.AllInclude)); minIndex = battlePassCfg.Level + 1; } selectionCache = new SelectionCache(battlePassCfgs[0].Level); selectionCache.AddSelection(selections); } //获取所有特别奖励 public List> GetAllSpecialCfg() { //在需要时再初始化数据 if (tempItems == null) { InitItemTemp(); } return tempItems; } private void InitItemTemp() { tempItems = new List>(); var battlePassCfgs = CommonDataManager.Tables.TblBattlePassCfg.GetGroup1ById(GetSeasonId()); var items = new Dictionary(); foreach (var itemsInfo in battlePassCfgs.SelectMany(battlePassCfg => battlePassCfg.BonusSpecial)) { items.TryGetValue(itemsInfo.ItemId, out var num); items[itemsInfo.ItemId] = num + itemsInfo.Count; } foreach (var item in items) { tempItems.Add(item); } } //获取升级奖励 public List GetUpLevelReward(int upLevel) { var battlePassLevel = GetBattlePassLevel(); var seasonId = GetSeasonId(); List rs = null; for (var i = upLevel; i > 0; i--) { var passLevel = battlePassLevel + i; var cfg = CommonDataManager.Tables.TblBattlePassCfg.GetGroup1ByIdAndLevel(seasonId, passLevel)[0]; if (cfg == null) continue; var mergeBonus = ItemUtil.MergeBonus(cfg.BonusNormal.ToGfgGameItemParam(), cfg.BonusSpecial.ToGfgGameItemParam()); rs = ItemUtil.MergeBonus(rs, mergeBonus); } return rs; } public bool GetHadCanGetReward() { if (!initedFromServer) { return false; } var battlePassLevel = GetBattlePassLevel(); var isBuy = GetIsBuy(); for (var i = 1; i <= battlePassLevel; i++) { if (!NormalRewards.Contains(i)) return true; if (!isBuy) continue; if (!SuperRewards.Contains(i)) return true; } return false; } public void Clear() { SeasonId = 0; IsBuy = false; SeasonEndTime = 0; selectionCache = null; NormalRewards.Clear(); SuperRewards.Clear(); tempItems = null; initedFromServer = false; } //筛选出大奖数据 public List GetIsGoodToId(int SeasonId) { var battlePassCfgs = CommonDataManager.Tables.TblBattlePassCfg.GetGroup2ByIsGood(1); List battlePassTypeCfg = new List(); foreach (var info in battlePassCfgs) { if (info.Id == SeasonId) battlePassTypeCfg.Add(info); } battlePassTypeCfg.Sort((BattlePassCfg a, BattlePassCfg b) => { if (a.Level < b.Level) return -1; return 1; }); return battlePassTypeCfg; } //一键获取是否领取状态 public bool CheckStoreBrocadeWeavRed() { var seid = GetSeasonId(); if (seid == 0) { return false; } //var battlePassCfgs = GetIsGoodToId(GetSeasonId()); var list = CommonDataManager.Tables.TblBattlePassCfg.GetGroup1ById(seid); if (list == null) { return false; } var _rewardCfgs = new List(list); var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy(); for (int level = 1; level < _rewardCfgs.Count; level++) { var state = GetRewardState(level); bool normalRewardGet = (state == 1); if (normalRewardGet) return true; bool superLevelRewardGet = (isBuy && !CheckSuperLevelRewardGet(level) && state == 1); if (superLevelRewardGet) return true; } return false; } } }