| 
  
 | 
using System;  
 | 
using System.Collections.Generic;  
 | 
using System.Linq;  
 | 
using UnityEngine;  
 | 
  
 | 
public class OfficialRankManager : GameSystemManager<OfficialRankManager>  
 | 
{  
 | 
  
 | 
    #region 官职任务  
 | 
    //当前官职的任务状态  
 | 
    int taskAwardState;  
 | 
    Dictionary<int, int> taskValues = new Dictionary<int, int>();  
 | 
    public event Action RealmMissionRefreshEvent;  
 | 
  
 | 
    public Dictionary<int, int> mainLevelDict = new Dictionary<int, int>();    //id:索引 用于判断还需多少关  
 | 
    public override void Init()  
 | 
    {  
 | 
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;  
 | 
        BlessLVManager.Instance.OnBlessLVUpdateEvent += UpdateRedpoint;  
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitialize;  
 | 
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += UpdateRedpoint;  
 | 
  
 | 
  
 | 
        var levelList = MainLevelConfig.GetKeys().ToList();  
 | 
        levelList.Sort();  
 | 
        for (int i = 0; i < levelList.Count; i++)  
 | 
        {   
 | 
            mainLevelDict[levelList[i]] = i;  
 | 
        }  
 | 
    }  
 | 
  
 | 
    public override void Release()  
 | 
    {  
 | 
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;  
 | 
        BlessLVManager.Instance.OnBlessLVUpdateEvent -= UpdateRedpoint;  
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitialize;  
 | 
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= UpdateRedpoint;  
 | 
    }  
 | 
  
 | 
    void BeforePlayerDataInitialize()  
 | 
    {  
 | 
        taskValues.Clear();  
 | 
        taskAwardState = 0;  
 | 
    }  
 | 
  
 | 
  
 | 
    void PlayerDataRefresh(PlayerDataType type)  
 | 
    {  
 | 
        if (type == PlayerDataType.LV ||  
 | 
            type == PlayerDataType.ExAttr1  
 | 
        )  
 | 
        {  
 | 
            //等级 通关  
 | 
            UpdateRedpoint();  
 | 
        }  
 | 
        else if (type == PlayerDataType.RealmLevel)  
 | 
        {  
 | 
            if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin)  
 | 
                return;  
 | 
            //升级成功表现  
 | 
                if (!UIManager.Instance.IsOpened<OfficialLVUPSuccessWin>())  
 | 
                {  
 | 
                    UIManager.Instance.OpenWindow<OfficialLVUPSuccessWin>();  
 | 
                }  
 | 
        }  
 | 
    }  
 | 
  
 | 
    // 返回服务端的记录任务奖励状态 0未领取  1已领取  
 | 
    public int GetMissionAwardState(int id)  
 | 
    {  
 | 
        return (taskAwardState & (int)Math.Pow(2, id)) != 0 ? 1 : 0;  
 | 
    }  
 | 
  
 | 
    // 1    等级达到x级    x级          
 | 
    // 2    通过主线关卡    关卡ID      
 | 
    // 3    消耗战锤    x个     (仅通知这个)  
 | 
    // 4    祝福树    等级      
 | 
    //客户端显示的任务状态 0 代表进行中 1 代表可领取 2 代表已领取  
 | 
    public int GetMissionState(int realm, int missionID)  
 | 
    {  
 | 
        var config = RealmLVUPTaskConfig.GetID(realm, missionID);  
 | 
        var type = config.TaskType;  
 | 
  
 | 
        if (GetMissionAwardState(missionID) == 1)  
 | 
        {  
 | 
            return 2;  
 | 
        }  
 | 
  
 | 
        switch (type)  
 | 
        {  
 | 
            case 1:  
 | 
                return PlayerDatas.Instance.baseData.LV >= config.NeedValueList[0] ? 1 : 0;  
 | 
            case 2:  
 | 
                //策划配置关卡ID为201,即 过关2-1(0/1) ,使用 ExAttr1 值判断,如ExAttr1值为20103代表当前已经过了第2章第1关第3波,包含了波,需要击败该关卡boss后才算该关过关  
 | 
                return PlayerDatas.Instance.baseData.ExAttr1 / 100 > config.NeedValueList[0] ? 1 : 0;  
 | 
            case 3:  
 | 
                return taskValues.ContainsKey(missionID) && taskValues[missionID] >= config.NeedValueList[0] ? 1 : 0;  
 | 
                  
 | 
            case 4:  
 | 
                return BlessLVManager.Instance.m_TreeLV >= config.NeedValueList[0] ? 1 : 0;  
 | 
  
 | 
            default:  
 | 
                return 0;  
 | 
        }  
 | 
  
 | 
    }  
 | 
  
 | 
    public void GetMissionProcess(int id, out int process, out int total)  
 | 
    {  
 | 
        var config = RealmLVUPTaskConfig.GetID(PlayerDatas.Instance.baseData.realmLevel, id);  
 | 
        var type = config.TaskType;  
 | 
        process = 1;  
 | 
        total = 1;  
 | 
        switch (type)  
 | 
        {  
 | 
            case 1:  
 | 
                process = PlayerDatas.Instance.baseData.LV;  
 | 
                total = config.NeedValueList[0];  
 | 
                break;  
 | 
            case 2:  
 | 
                process = PlayerDatas.Instance.baseData.ExAttr1 / 100 > config.NeedValueList[0] ? 1 : 0;  
 | 
                total = 1;  
 | 
                break;  
 | 
            case 3:  
 | 
                process = taskValues.ContainsKey(id) ? taskValues[id] : 0;  
 | 
                total = config.NeedValueList[0];  
 | 
                break;  
 | 
            case 4:  
 | 
                process = BlessLVManager.Instance.m_TreeLV;  
 | 
                total = config.NeedValueList[0];  
 | 
                break;  
 | 
        }  
 | 
  
 | 
    }  
 | 
  
 | 
  
 | 
  
 | 
    public void RequestAllAwards(int id)  
 | 
    {  
 | 
        // var missisons = RealmLVUPTaskConfig.GetMissionIDs(PlayerDatas.Instance.baseData.realmLevel);  
 | 
        // for (int i = 0; i < missisons.Count; i++)  
 | 
        // {  
 | 
        //     var state = GetMissionState(PlayerDatas.Instance.baseData.realmLevel, missisons[i]);  
 | 
        //     if (state == 1)  
 | 
        //     {  
 | 
        //         CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward();  
 | 
        //         pak.RewardType = 68;  
 | 
        //         pak.DataEx = (uint)missisons[i];  
 | 
        //         GameNetSystem.Instance.SendInfo(pak);  
 | 
        //     }  
 | 
        // }  
 | 
          
 | 
        CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward();  
 | 
        pak.RewardType = 68;  
 | 
        pak.DataEx = (uint)id;  
 | 
        GameNetSystem.Instance.SendInfo(pak);  
 | 
    }  
 | 
  
 | 
    #endregion  
 | 
  
 | 
    public void ReceivePackage(HA311_tagMCSyncRealmInfo package)  
 | 
    {  
 | 
        taskAwardState = (int)package.TaskAwardState;  
 | 
        for (int i = 0; i < package.TaskValueCount; i++)  
 | 
        {  
 | 
            taskValues[package.TaskValueList[i].TaskID] = (int)package.TaskValueList[i].TaskValue;  
 | 
        }  
 | 
  
 | 
        RealmMissionRefreshEvent?.Invoke();  
 | 
        UpdateRedpoint();  
 | 
    }  
 | 
  
 | 
    Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_OfficialKey);  
 | 
    void UpdateRedpoint()  
 | 
    {  
 | 
        redpoint.state = RedPointState.None;  
 | 
  
 | 
        var ids = RealmLVUPTaskConfig.GetMissionIDs(PlayerDatas.Instance.baseData.realmLevel);  
 | 
        bool finish = true;  
 | 
        foreach (var id in ids)  
 | 
        {  
 | 
            if (GetMissionAwardState(id) != 1)  
 | 
            {  
 | 
                if (GetMissionState(PlayerDatas.Instance.baseData.realmLevel, id) == 1)  
 | 
                {  
 | 
                    redpoint.state = RedPointState.Simple;  
 | 
                }  
 | 
  
 | 
                finish = false;  
 | 
            }  
 | 
        }  
 | 
          
 | 
        if (finish)  
 | 
            redpoint.state = RedPointState.Simple;  
 | 
    }  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    public Color GetOfficialRankColor(int quality)  
 | 
    {  
 | 
  
 | 
        switch (quality)  
 | 
        {  
 | 
            case 1:  
 | 
                // bbbbbb  
 | 
                return new Color32(187, 187, 187, 255);  
 | 
            case 2:  
 | 
                // ffffff  
 | 
                return new Color32(255, 255, 255, 255);  
 | 
            case 3:  
 | 
                // bbd5ff  
 | 
                return new Color32(187, 213, 255, 255);  
 | 
            case 4:  
 | 
                // e4bbfe  
 | 
                return new Color32(228, 187, 254, 255);  
 | 
            case 5:  
 | 
                // f7eba4  
 | 
                return new Color32(247, 235, 164, 255);  
 | 
            case 6:  
 | 
                // ffc096  
 | 
                return new Color32(255, 192, 150, 255);  
 | 
            case 7:  
 | 
                // fe9896  
 | 
                return new Color32(254, 152, 150, 255);  
 | 
            case 8:  
 | 
                // ffaffe  
 | 
                return new Color32(255, 174, 254, 255);  
 | 
            case 9:  
 | 
                // ffefcl  
 | 
                return new Color32(255, 239, 203, 255);  
 | 
            case 10:  
 | 
                // e9fffa  
 | 
                return new Color32(233, 255, 250, 255);  
 | 
            case 11:  
 | 
                // f5ddff  
 | 
                return new Color32(245, 221, 255, 255);  
 | 
            case 12:  
 | 
                // b3fcfe  
 | 
                return new Color32(179, 252, 254, 255);  
 | 
            case 13:  
 | 
                // ffd0f7  
 | 
                return new Color32(255, 208, 247, 255);  
 | 
        }  
 | 
        return Color.white;  
 | 
    }  
 | 
  
 | 
}  
 |