| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | using System.Collections.Generic;using System.Linq;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 = new List<KeyValuePair<int, int>>();        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 = BattlePassOpenCfgArray.Instance.GetCfg(seasonId);            if (seasonCfg == null) return;            SeasonEndTime = TimeUtil.GetResetTimeSec(seasonCfg.endTime);            SetSpecialCfgCache();            InitItemTemp();        }        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)        {            var targetLevel = selectionCache.GetValueNoCache(level);            return BattlePassCfgArray.Instance.GetCfgByidAndlevel(SeasonId, targetLevel);        }        private void SetSpecialCfgCache()        {            var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByidAndisGood(GetSeasonId(), 1);            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()        {            return tempItems;        }        private void InitItemTemp()        {            tempItems.Clear();            var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByid(GetSeasonId());            var items = new Dictionary<int, int>();            foreach (var itemsInfo in battlePassCfgs.SelectMany(battlePassCfg => battlePassCfg.bonusSpecialArr))            {                items.TryGetValue(itemsInfo[0], out var num);                items[itemsInfo[0]] = num + itemsInfo[1];            }            foreach (var item in items)            {                tempItems.Add(item);            }        }        //获取升级奖励        public int[][] GetUpLevelReward(int upLevel)        {            var battlePassLevel = GetBattlePassLevel();            var seasonId = GetSeasonId();            int[][] rs = null;            for (var i = upLevel; i > 0; i--)            {                var passLevel = battlePassLevel + i;                var cfg = BattlePassCfgArray.Instance.GetCfgByidAndlevel(seasonId, passLevel);                if (cfg == null) continue;                var mergeBonus = ItemUtil.MergeBonus(cfg.bonusNormalArr, cfg.bonusSpecialArr);                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.Clear();            initedFromServer = false;        }    }}
 |