using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public class OfficialRankManager : GameSystemManager { #region 官职任务 //当前官职的任务状态 int taskAwardState; Dictionary taskValues = new Dictionary(); public event Action RealmMissionRefreshEvent; public Dictionary mainLevelDict = new Dictionary(); //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()) { UIManager.Instance.OpenWindow(); } } } // 返回服务端的记录任务奖励状态 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; } }