TaskDataManager.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using ET;
  4. namespace GFGGame
  5. {
  6. public class TaskInfo
  7. {
  8. public int ID;
  9. public int State; //任务奖励状态 由ConstBonusStatus定义
  10. public long Progress; //进度
  11. public int FuncType;
  12. }
  13. public class TaskDataManager : SingletonBase<TaskDataManager>
  14. {
  15. //解锁的任务列表
  16. public Dictionary<int, TaskInfo> TaskInfosDic = new Dictionary<int, TaskInfo>();
  17. //已解锁的任务类型对应的任务id列表
  18. public Dictionary<int, List<int>> TaskType2TaskIdListDic = new Dictionary<int, List<int>>();
  19. //成就类别进度
  20. private List<AchievementTaskTypePro> saveAchievementTaskTypeProList;
  21. //获取某个类型任务数据
  22. public Dictionary<int, TaskInfo> GetTaskInfos(int taskType)
  23. {
  24. return TaskType2TaskIdListDic.TryGetValue(taskType, out var taskIds)
  25. ? taskIds.ToDictionary(taskId => taskId, taskId => TaskInfosDic[taskId])
  26. : new Dictionary<int, TaskInfo>();
  27. }
  28. public void UpdateTaskInfo(int taskId, TaskInfo info)
  29. {
  30. TaskInfosDic.TryGetValue(taskId, out var taskInfo);
  31. if (taskInfo == null)
  32. {
  33. TaskInfosDic.Add(taskId, info);
  34. TaskType2TaskIdListDic.TryGetValue(info.FuncType, out var taskIds);
  35. if (taskIds == null)
  36. {
  37. taskIds = new List<int>();
  38. TaskType2TaskIdListDic.Add(info.FuncType, taskIds);
  39. }
  40. taskIds.Add(taskId);
  41. }
  42. else
  43. {
  44. TaskInfosDic[taskId] = info;
  45. }
  46. }
  47. //RemoveTaskInfo
  48. public void RemoveTaskInfo(int taskId)
  49. {
  50. TaskInfosDic.Remove(taskId);
  51. //获取任务配置
  52. var cfg = TaskCfgArray.Instance.GetCfg(taskId);
  53. if (cfg == null)
  54. {
  55. Log.Error($"出现了没有配置的任务id{taskId}");
  56. return;
  57. }
  58. var funcType = cfg.funcType;
  59. TaskType2TaskIdListDic.TryGetValue(funcType, out var taskIds);
  60. if (taskIds == null) return;
  61. taskIds.Remove(taskId);
  62. if (taskIds.Count == 0) TaskType2TaskIdListDic.Remove(funcType);
  63. }
  64. public void UpdateTaskState(int taskId, int state)
  65. {
  66. TaskInfosDic.TryGetValue(taskId, out var taskInfo);
  67. if (taskInfo == null)
  68. {
  69. Log.Error($"出现了不存在的任务id{taskId}");
  70. return;
  71. }
  72. taskInfo.State = state;
  73. }
  74. /// <summary>
  75. /// 获取任务列表
  76. /// </summary>
  77. /// <returns></returns>
  78. public List<TaskCfg> GetTaskCfgs(int taskType)
  79. {
  80. var cfgs = new List<TaskCfg>();
  81. TaskType2TaskIdListDic.TryGetValue(taskType, out var taskIds);
  82. if (taskIds == null) return cfgs;
  83. cfgs.AddRange(taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId)));
  84. cfgs.Sort((a, b) =>
  85. {
  86. var stateA = TaskInfosDic[a.id].State == 1 ? 1 : -1;
  87. var stateB = TaskInfosDic[b.id].State == 1 ? 1 : -1;
  88. if (stateA > stateB) return -1;
  89. return stateB > stateA ? 1 : TaskInfosDic[a.id].State.CompareTo(TaskInfosDic[b.id].State);
  90. });
  91. return cfgs;
  92. }
  93. /// <summary>
  94. /// 获取任务成就列表
  95. /// </summary>
  96. /// <returns></returns>
  97. public List<TaskCfg> GetTaskAchieveCfgs(int taskType)
  98. {
  99. var cfgs = new List<TaskCfg>();
  100. TaskType2TaskIdListDic.TryGetValue(taskType, out var taskIds);
  101. if (taskIds == null) return cfgs;
  102. cfgs.AddRange(taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId)));
  103. cfgs.Sort((a, b) =>
  104. {
  105. var stateA = TaskInfosDic[a.id].State == 1 ? 1 : -1;
  106. var stateB = TaskInfosDic[b.id].State == 1 ? 1 : -1;
  107. if (stateA > stateB)
  108. return -1;
  109. else if(stateA < stateB)
  110. return 1;
  111. else {
  112. if (TaskInfosDic[a.id].State.CompareTo(TaskInfosDic[b.id].State) > 0)
  113. return 1;
  114. else if (TaskInfosDic[a.id].State.CompareTo(TaskInfosDic[b.id].State) < 0)
  115. return -1;
  116. else {
  117. if (a.id > b.id)
  118. return 1;
  119. else
  120. return -1;
  121. }
  122. }
  123. });
  124. return cfgs;
  125. }
  126. /// <summary>
  127. /// 获取任务列表
  128. /// </summary>
  129. /// <returns></returns>
  130. public List<TaskCfg> GetTaskCfgs(int[] taskIds)
  131. {
  132. var cfgs = new List<TaskCfg>();
  133. if (taskIds == null) return cfgs;
  134. cfgs.AddRange(taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId)));
  135. cfgs.Sort((a, b) =>
  136. {
  137. var stateA = TaskInfosDic[a.id].State == 1 ? 1 : -1;
  138. var stateB = TaskInfosDic[b.id].State == 1 ? 1 : -1;
  139. if (stateA > stateB) return -1;
  140. return stateB > stateA ? 1 : TaskInfosDic[a.id].State.CompareTo(TaskInfosDic[b.id].State);
  141. });
  142. return cfgs;
  143. }
  144. /// <summary>
  145. /// 根据任务id获取任务状态
  146. /// </summary>0未完成,1可领取,2已领取
  147. /// <param name="taskId"></param>
  148. /// <returns></returns>
  149. public int GetTaskStateById(int taskId)
  150. {
  151. return !TaskInfosDic.ContainsKey(taskId) ? 0 : TaskInfosDic[taskId].State;
  152. }
  153. /// <summary>
  154. /// 根据任务id获取任务进度
  155. /// </summary>
  156. /// <param name="taskId"></param>
  157. /// <returns></returns>
  158. public long GetTaskProgressById(int taskId)
  159. {
  160. return !TaskInfosDic.ContainsKey(taskId) ? 0 : TaskInfosDic[taskId].Progress;
  161. }
  162. public string GetTaskDesc(int taskId)
  163. {
  164. var taskCfg = TaskCfgArray.Instance.GetCfg(taskId);
  165. var activeRewardCfg = TaskTypeCfgArray.Instance.GetCfg(taskCfg.type);
  166. switch ((ConstTaskType)activeRewardCfg.id)
  167. {
  168. case ConstTaskType.CompleteInstanceZones:
  169. var name = EctypeCfgArray.Instance.GetCfgsBytype(taskCfg.paramsArr[0])[0].typeName;
  170. if (taskCfg.paramsArr.Length > 1)
  171. {
  172. name = EctypeCfgArray.Instance
  173. .GetCfgBytypeAndsubType(taskCfg.paramsArr[0], taskCfg.paramsArr[1]).subName;
  174. }
  175. return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), name);
  176. case ConstTaskType.UseItem:
  177. case ConstTaskType.AddItem:
  178. var cfg = ItemCfgArray.Instance.GetCfg(taskCfg.paramsArr[0]);
  179. return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), cfg.name);
  180. case ConstTaskType.Suitsynthesis:
  181. var suitCfg = SuitCfgArray.Instance.GetCfg(taskCfg.paramsArr[0]);
  182. return string.Format(activeRewardCfg.desc, suitCfg.name);
  183. case ConstTaskType.UpgradeCardLvl:
  184. return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), taskCfg.paramsArr[0]);
  185. case ConstTaskType.UpgradeCardStar:
  186. return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount(), taskCfg.paramsArr[0]/5);
  187. case ConstTaskType.FinishStory:
  188. case ConstTaskType.FinishInstanceZones:
  189. {
  190. return string.Format(activeRewardCfg.desc, taskCfg.paramsArr[0]);
  191. }
  192. case ConstTaskType.PlayTheLuckyBox:
  193. var luckyBoxId = taskCfg.paramsArr[0];
  194. var luckyBoxCfg = LuckyBoxCfgArray.Instance.GetCfg(luckyBoxId);
  195. return string.Format(activeRewardCfg.desc, luckyBoxCfg.name, taskCfg.GetTargetCount());
  196. case ConstTaskType.UpgradeCardSkill:
  197. return string.Format(activeRewardCfg.desc, taskCfg.paramsArr[0], taskCfg.GetTargetCount());
  198. case ConstTaskType.CollectParts:
  199. string itemType = ItemTypeCfgArray.Instance.GetCfg(taskCfg.paramsArr[0]).name;
  200. return string.Format(activeRewardCfg.desc, itemType, taskCfg.GetTargetCount());
  201. default: return string.Format(activeRewardCfg.desc, taskCfg.GetTargetCount());
  202. }
  203. }
  204. public bool CheckTaskRewardCanGet(int taskFuncType)
  205. {
  206. var taskInfos = TaskDataManager.Instance.GetTaskInfos(taskFuncType);
  207. if (taskInfos.Select(taskInfo => taskInfo.Value).Any(info => info.State == ConstBonusStatus.CAN_GET))
  208. {
  209. if (taskFuncType == TaskFuncType.BattlePass && !BattlePassTaskDataManager.Instance.GetIsBuy())
  210. {
  211. return false;
  212. }
  213. else
  214. {
  215. return true;
  216. }
  217. }
  218. return false;
  219. }
  220. public bool CheckTaskSubRewardCanGet(int taskFuncType, int taskFuncSub)
  221. {
  222. var _cfgsAll = TaskDataManager.Instance.GetTaskCfgs(taskFuncType);
  223. foreach (var info in _cfgsAll)
  224. {
  225. if (info.achievementType == taskFuncSub + 1) {
  226. if (TaskDataManager.Instance.GetTaskStateById(info.id) == 1)
  227. return true;
  228. }
  229. }
  230. return false;
  231. }
  232. public void Clear()
  233. {
  234. TaskInfosDic.Clear();
  235. TaskType2TaskIdListDic.Clear();
  236. }
  237. public int[][] GetReward(TaskCfg taskCfg)
  238. {
  239. var activityId = taskCfg.activityId;
  240. if (activityId == 0) return taskCfg.rewardsArr;
  241. return !ActivityGlobalDataManager.Instance.IsActivityOpen(activityId)
  242. ? taskCfg.rewardsArr
  243. : taskCfg.activityRewardsArr;
  244. }
  245. public void SaveAchievementTaskTypeProList(List<AchievementTaskTypePro> AchievementTaskTypeProList)
  246. {
  247. saveAchievementTaskTypeProList = AchievementTaskTypeProList;
  248. }
  249. public void SaveAchievementTaskTypePro(AchievementTaskTypePro AchievementTaskTypePro)
  250. {
  251. foreach (var info in saveAchievementTaskTypeProList) {
  252. if (info.AchievementType == AchievementTaskTypePro.AchievementType) {
  253. info.AchievementType = AchievementTaskTypePro.AchievementType;
  254. info.CompleteTaskNum = AchievementTaskTypePro.CompleteTaskNum;
  255. }
  256. }
  257. }
  258. public List<AchievementTaskTypePro> GetAchievementTaskTypeProList()
  259. {
  260. return saveAchievementTaskTypeProList;
  261. }
  262. }
  263. }