|
|
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()
|
{
|
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);
|
}
|
}
|
}
|
|
#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;
|
}
|
|
}
|