| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- using System.Collections.Generic;
- using System.Linq;
- using cfg.GfgCfg;
- using ET;
- namespace GFGGame
- {
- public class BattlePassTaskDataManager : SingletonBase<BattlePassTaskDataManager>
- {
- //是否初始化服务器数据
- public bool initedFromServer;
- //通行证赛季Id
- private int SeasonId;
- //是否购买通行证
- private bool IsBuy;
- private long SeasonEndTime;
- private SelectionCache<int, int> selectionCache;
- //已经领奖levelId
- private HashSet<int> NormalRewards = new HashSet<int>();
- //已经高级领奖levelId
- private HashSet<int> SuperRewards = new HashSet<int>();
- //所有特别奖励
- private List<KeyValuePair<int, int>> 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<Selection<int, int>>();
- foreach (var battlePassCfg in battlePassCfgs)
- {
- selections.Add(new Selection<int, int>(minIndex, battlePassCfg.Level, battlePassCfg.Level,
- Selection<int, int>.SelectionModel.AllInclude));
- minIndex = battlePassCfg.Level + 1;
- }
- selectionCache = new SelectionCache<int, int>(battlePassCfgs[0].Level);
- selectionCache.AddSelection(selections);
- }
- //获取所有特别奖励
- public List<KeyValuePair<int, int>> GetAllSpecialCfg()
- {
- //在需要时再初始化数据
- if (tempItems == null)
- {
- InitItemTemp();
- }
- return tempItems;
- }
- private void InitItemTemp()
- {
- tempItems = new List<KeyValuePair<int, int>>();
- var battlePassCfgs = CommonDataManager.Tables.TblBattlePassCfg.GetGroup1ById(GetSeasonId());
- var items = new Dictionary<int, int>();
- 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<ItemParamProto> GetUpLevelReward(int upLevel)
- {
- var battlePassLevel = GetBattlePassLevel();
- var seasonId = GetSeasonId();
- List<ItemParamProto> 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<BattlePassCfg> GetIsGoodToId(int SeasonId)
- {
- var battlePassCfgs = CommonDataManager.Tables.TblBattlePassCfg.GetGroup2ByIsGood(1);
- List<BattlePassCfg> battlePassTypeCfg = new List<BattlePassCfg>();
- 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<BattlePassCfg>(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;
- }
- }
- }
|