yyl
12 小时以前 725b7b2374f43582a2d78b2cae3f8303359651b8
Main/System/BattlePass/BattlePassManager.cs
@@ -3,6 +3,7 @@
using UnityEngine;
using System;
using System.Linq;
using LitJson;
public partial class BattlePassManager : GameSystemManager<BattlePassManager>
@@ -11,17 +12,25 @@
    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()
@@ -33,6 +42,12 @@
    {
        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);
        }
    }
@@ -54,10 +69,10 @@
            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;
@@ -67,12 +82,51 @@
        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;
@@ -80,6 +134,9 @@
        }
    }
    #endregion
    //是否有任何奖励可以领取
    public bool HasAnyAward(int type, int totalValue)
    {
@@ -231,7 +288,7 @@
    public int JumpIndex(BattlePassData battlePassData, int zhanLingType, int totalValue)
    {
        var ids = ZhanlingConfig.GetTypeToIDDict(zhanLingType).Values.ToList();
        ids.Sort();
        int index = -1;
@@ -255,10 +312,54 @@
        }
        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;        // 普通战令奖励是否已领取
@@ -273,5 +374,15 @@
    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,    //周战令
}