| | |
| | | using UnityEngine; |
| | | using System; |
| | | using System.Linq; |
| | | using LitJson; |
| | | |
| | | |
| | | public partial class BattlePassManager : GameSystemManager<BattlePassManager> |
| | |
| | | Dictionary<int, BattlePassData> battlePassDataDict = new Dictionary<int, BattlePassData>(); |
| | | public event Action<int> BattlePassDataUpdateEvent; |
| | | |
| | | |
| | | Dictionary<int, int[]> buyZhanlingTypeDict = new Dictionary<int, int[]>(); |
| | | |
| | | |
| | | public override void Init() |
| | | { |
| | | DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; |
| | | PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh; |
| | | DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; |
| | | BlessLVManager.Instance.OnBlessLVUpdateEvent += OnBlessLVUpdateEvent; |
| | | ParseConfig(); |
| | | } |
| | | |
| | | public override void Release() |
| | | { |
| | | DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; |
| | | PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh; |
| | | DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk; |
| | | BlessLVManager.Instance.OnBlessLVUpdateEvent -= OnBlessLVUpdateEvent; |
| | | } |
| | | |
| | | void OnBeforePlayerDataInitialize() |
| | |
| | | { |
| | | var config = FuncConfigConfig.Get("Zhanling"); |
| | | buyZhanlingTypeDict = ConfigParse.ParseIntArrayDict(config.Numerical1); |
| | | battlePassTypeSortList = JsonMapper.ToObject<int[]>(config.Numerical5); |
| | | |
| | | foreach (var type in battlePassTypeSortList) |
| | | { |
| | | redpointCommonDict[type] = new Redpoint(MainRedDot.RedPoint_FundKey, MainRedDot.RedPoint_FundKey * 100 + type); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | HB120_tagMCZhanlingInfo.tagMCZhanling reward = netPack.RewardList[i]; |
| | | if (!battlePassData.battlePassCellDict.ContainsKey((int)reward.NeedValue)) |
| | | { |
| | | battlePassData.battlePassCellDict[(int)reward.NeedValue] = new BattlePassCell(); |
| | | battlePassData.battlePassCellDict[(int)reward.NeedValue] = new BattlePassAwardState(); |
| | | } |
| | | |
| | | BattlePassCell battlePassCell = battlePassData.battlePassCellDict[(int)reward.NeedValue]; |
| | | BattlePassAwardState battlePassCell = battlePassData.battlePassCellDict[(int)reward.NeedValue]; |
| | | battlePassCell.freeRewardState = reward.FreeRewardState; |
| | | battlePassCell.zlRewardState = reward.ZLRewardState; |
| | | battlePassCell.zlRewardStateH = reward.ZLRewardStateH; |
| | |
| | | BattlePassDataUpdateEvent?.Invoke(netPack.ZhanlingType); |
| | | } |
| | | |
| | | #region 红点 |
| | | |
| | | void UpdateRedpoint(int type) |
| | | void OnBlessLVUpdateEvent() |
| | | { |
| | | UpdateCommonBPRedpoint(2); |
| | | } |
| | | |
| | | void OnPlayerDataRefresh(PlayerDataType type) |
| | | { |
| | | switch (type) |
| | | { |
| | | case WeekBattlePassType: |
| | | case PlayerDataType.LV: |
| | | case PlayerDataType.ExAttr1: |
| | | { |
| | | UpdateCommonBPRedpoint(1); |
| | | UpdateCommonBPRedpoint(3); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | void OnPlayerLoginOk() |
| | | { |
| | | foreach (var type in battlePassTypeSortList) |
| | | { |
| | | UpdateCommonBPRedpoint(type); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | void UpdateRedpoint(int type) |
| | | { |
| | | switch ((BattlePassType)type) |
| | | { |
| | | case BattlePassType.LV: |
| | | case BattlePassType.BlessLV: |
| | | case BattlePassType.MainLine: |
| | | case BattlePassType.GuBao: |
| | | case BattlePassType.Arena: |
| | | { |
| | | UpdateCommonBPRedpoint(type); |
| | | break; |
| | | } |
| | | case BattlePassType.Week: |
| | | { |
| | | UpdateWeekRedPoint(); |
| | | break; |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | //是否有任何奖励可以领取 |
| | | public bool HasAnyAward(int type, int totalValue) |
| | | { |
| | |
| | | |
| | | public int JumpIndex(BattlePassData battlePassData, int zhanLingType, int totalValue) |
| | | { |
| | | |
| | | |
| | | var ids = ZhanlingConfig.GetTypeToIDDict(zhanLingType).Values.ToList(); |
| | | ids.Sort(); |
| | | int index = -1; |
| | |
| | | } |
| | | return index; |
| | | } |
| | | |
| | | //是否全部完成(奖励全领取) |
| | | public bool IsAllFinish(int type) |
| | | { |
| | | battlePassDataDict.TryGetValue(type, out BattlePassData battlePassData); |
| | | if (battlePassData == null) |
| | | return false; |
| | | if (battlePassData.allFinishTime != 0) |
| | | return true; |
| | | return false; |
| | | } |
| | | |
| | | public int GetTotalValue(int _type) |
| | | { |
| | | battlePassDataDict.TryGetValue(_type, out BattlePassData battlePassData); |
| | | switch ((BattlePassType)_type) |
| | | { |
| | | case BattlePassType.LV: |
| | | { |
| | | return PlayerDatas.Instance.baseData.LV; |
| | | } |
| | | case BattlePassType.BlessLV: |
| | | { |
| | | return BlessLVManager.Instance.m_TreeLV; |
| | | } |
| | | case BattlePassType.MainLine: |
| | | { |
| | | return PlayerDatas.Instance.baseData.ExAttr1 / 100; |
| | | } |
| | | case BattlePassType.GuBao: |
| | | { |
| | | return (int)battlePassData.value1; |
| | | } |
| | | case BattlePassType.Arena: |
| | | { |
| | | return (int)battlePassData.value1; |
| | | } |
| | | case BattlePassType.Week: |
| | | { |
| | | return (int)battlePassData.value1; |
| | | } |
| | | } |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | |
| | | public class BattlePassCell |
| | | public class BattlePassAwardState |
| | | { |
| | | public byte freeRewardState; // 免费战令奖励是否已领取 |
| | | public byte zlRewardState; // 普通战令奖励是否已领取 |
| | |
| | | public uint allFinishTime; // 全部奖励领取完毕的时间戳,未完毕时该值为0,后端会在0点过天时检查可否重置,前端自行做倒计时表现即可 |
| | | public uint value1; // 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳 |
| | | |
| | | public Dictionary<int, BattlePassCell> battlePassCellDict = new Dictionary<int, BattlePassCell>(); |
| | | public Dictionary<int, BattlePassAwardState> battlePassCellDict = new Dictionary<int, BattlePassAwardState>(); |
| | | } |
| | | |
| | | public enum BattlePassType |
| | | { |
| | | LV = 1, //等级 |
| | | BlessLV = 2, //祝福等级 |
| | | MainLine = 3, //主线关卡 |
| | | GuBao = 4, //古宝 |
| | | Arena = 5, //演武场 |
| | | Week = 6, //周战令 |
| | | } |