using System.Collections.Generic; using System.Linq; using ET; namespace GFGGame { public class TaskInfo { public int ID; public int State; //任务奖励状态 由ConstBonusStatus定义 public long Progress; //进度 } public class TaskDataManager : SingletonBase { //解锁的任务列表 public Dictionary TaskInfosDic = new Dictionary(); //已解锁的任务类型对应的任务id列表 public Dictionary> TaskType2TaskIdListDic = new Dictionary>(); //获取某个类型任务数据 public Dictionary GetTaskInfos(int taskType) { return TaskType2TaskIdListDic.TryGetValue(taskType, out var taskIds) ? taskIds.ToDictionary(taskId => taskId, taskId => TaskInfosDic[taskId]) : new Dictionary(); } public void UpdateTaskInfo(int taskId, TaskInfo info) { //获取任务配置 var cfg = TaskCfgArray.Instance.GetCfg(taskId); if (cfg == null) { Log.Error($"出现了没有配置的任务id{taskId}"); return; } TaskInfosDic.TryGetValue(taskId, out var taskInfo); if (taskInfo == null) { TaskInfosDic.Add(taskId, info); TaskType2TaskIdListDic.TryGetValue(cfg.funcType, out var taskIds); if (taskIds == null) { taskIds = new List(); TaskType2TaskIdListDic.Add(cfg.funcType, taskIds); } taskIds.Add(taskId); } else { TaskInfosDic[taskId] = info; } } //RemoveTaskInfo public void RemoveTaskInfo(int taskId) { TaskInfosDic.Remove(taskId); //获取任务配置 var cfg = TaskCfgArray.Instance.GetCfg(taskId); if (cfg == null) { Log.Error($"出现了没有配置的任务id{taskId}"); return; } var funcType = cfg.funcType; TaskType2TaskIdListDic.TryGetValue(funcType, out var taskIds); if (taskIds == null) return; taskIds.Remove(taskId); if (taskIds.Count == 0) TaskType2TaskIdListDic.Remove(funcType); } public void UpdateTaskState(int taskId, int state) { TaskInfosDic.TryGetValue(taskId, out var taskInfo); if (taskInfo == null) { Log.Error($"出现了不存在的任务id{taskId}"); return; } taskInfo.State = state; } /// /// 获取任务列表 /// /// public List GetTaskCfgs(int taskType) { var cfgs = new List(); TaskType2TaskIdListDic.TryGetValue(taskType, out var taskIds); if (taskIds == null) return cfgs; cfgs.AddRange(taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId))); cfgs.Sort((a, b) => { var stateA = TaskInfosDic[a.id].State == 1 ? 1 : -1; var stateB = TaskInfosDic[b.id].State == 1 ? 1 : -1; if (stateA > stateB) return -1; return stateB > stateA ? 1 : TaskInfosDic[a.id].State.CompareTo(TaskInfosDic[b.id].State); }); return cfgs; } /// /// 获取任务列表 /// /// public List GetTaskCfgs(int[] taskIds) { var cfgs = new List(); if (taskIds == null) return cfgs; cfgs.AddRange(taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId))); cfgs.Sort((a, b) => { var stateA = TaskInfosDic[a.id].State == 1 ? 1 : -1; var stateB = TaskInfosDic[b.id].State == 1 ? 1 : -1; if (stateA > stateB) return -1; return stateB > stateA ? 1 : TaskInfosDic[a.id].State.CompareTo(TaskInfosDic[b.id].State); }); return cfgs; } /// /// 根据任务id获取任务状态 /// 0未完成,1可领取,2已领取 /// /// public int GetTaskStateById(int taskId) { return !TaskInfosDic.ContainsKey(taskId) ? 0 : TaskInfosDic[taskId].State; } /// /// 根据任务id获取任务进度 /// /// /// public long GetTaskProgressById(int taskId) { return !TaskInfosDic.ContainsKey(taskId) ? 0 : TaskInfosDic[taskId].Progress; } public string GetTaskDesc(int taskId) { var taskCfg = TaskCfgArray.Instance.GetCfg(taskId); var activeRewardCfg = TaskTypeCfgArray.Instance.GetCfg(taskCfg.type); switch ((ConstTaskType)activeRewardCfg.id) { case ConstTaskType.CompleteInstanceZones: var name = EctypeCfgArray.Instance.GetCfgsBytype(taskCfg.paramsArr[0])[0].typeName; if (taskCfg.paramsArr.Length > 1) { name = EctypeCfgArray.Instance .GetCfgBytypeAndsubType(taskCfg.paramsArr[0], taskCfg.paramsArr[1]).subName; } return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), name); case ConstTaskType.UseItem: case ConstTaskType.AddItem: var cfg = ItemCfgArray.Instance.GetCfg(taskCfg.paramsArr[0]); return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), cfg.name); case ConstTaskType.Suitsynthesis: var suitCfg = SuitCfgArray.Instance.GetCfg(taskCfg.paramsArr[0]); return string.Format(activeRewardCfg.desc, suitCfg.name); case ConstTaskType.UpgradeCardLvl: return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), taskCfg.paramsArr[0]); case ConstTaskType.UpgradeCardStar: return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), taskCfg.paramsArr[0]/5); case ConstTaskType.FinishStory: case ConstTaskType.FinishInstanceZones: { return string.Format(activeRewardCfg.desc, taskCfg.paramsArr[0]); } case ConstTaskType.PlayTheLuckyBox: var luckyBoxId = taskCfg.paramsArr[0]; var luckyBoxCfg = LuckyBoxCfgArray.Instance.GetCfg(luckyBoxId); return string.Format(activeRewardCfg.desc, luckyBoxCfg.name, taskCfg.GetTargetCount()); case ConstTaskType.UpgradeCardSkill: return string.Format(activeRewardCfg.desc, taskCfg.paramsArr[0], taskCfg.GetTargetCount()); default: return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount()); } } public bool CheckTaskRewardCanGet(int taskFuncType) { var taskInfos = TaskDataManager.Instance.GetTaskInfos(taskFuncType); if (taskInfos.Select(taskInfo => taskInfo.Value).Any(info => info.State == ConstBonusStatus.CAN_GET)) { if (taskFuncType == TaskFuncType.BattlePass && !BattlePassTaskDataManager.Instance.GetIsBuy()) { return false; } else { return true; } } return false; } public void Clear() { TaskInfosDic.Clear(); TaskType2TaskIdListDic.Clear(); } public int[][] GetReward(TaskCfg taskCfg) { var activityId = taskCfg.activityId; if (activityId == 0) return taskCfg.rewardsArr; return !ActivityGlobalDataManager.Instance.IsActivityOpen(activityId) ? taskCfg.rewardsArr : taskCfg.activityRewardsArr; } } }