TaskProxy.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Newtonsoft.Json;
  7. using Newtonsoft.Json.Linq;
  8. using UnityEditor;
  9. /// <summary>
  10. /// 任务模块
  11. /// </summary>
  12. public class TaskProxy : ProxyBase<TaskProxy>
  13. {
  14. public TaskProxy() => this.opeCode = OpeCode.ope_task;
  15. #region ' 过时方法 '
  16. /// <summary>
  17. /// 更新任务数据
  18. /// </summary>
  19. /// <param name="callback"></param>
  20. public void GetTaskInfo(Action callback)
  21. {
  22. Post(CmdCode.cmd_Task_getTaskInfo, new object[] { }, resp =>
  23. {
  24. var p = UserProxy.Instance.player;
  25. p.task = resp.result["task"].ToObject<Info_UserTask>();
  26. callback?.Invoke();
  27. });
  28. }
  29. /// <summary>
  30. /// 领取任务奖励
  31. /// </summary>
  32. /// <param name="taskId"></param>
  33. /// <param name="callback"></param>
  34. public void GetTaskReward(int taskId, Action callback)
  35. {
  36. Post(CmdCode.cmd_Task_getReward, new object[] { taskId }, resp =>
  37. {
  38. var p = UserProxy.Instance.player;
  39. p.baseInfo.gold = Convert.ToInt32(resp.result["gold"].ToString());
  40. p.baseInfo.cash = Convert.ToInt32(resp.result["cash"].ToString());
  41. p.baseInfo.tili = Convert.ToInt32(resp.result["tili"].ToString());
  42. //p.InitFromStore((JObject)resp.result["store"]);
  43. p.task = resp.result["task"].ToObject<Info_UserTask>();
  44. callback?.Invoke();
  45. });
  46. }
  47. /// <summary>
  48. /// 设置关注任务
  49. /// </summary>
  50. /// <param name="taskId"></param>
  51. /// <param name="callback"></param>
  52. public void SetAttentionTask(int taskId, Action callback)
  53. {
  54. Post(CmdCode.cmd_Task_setAttentionTask, new object[] { taskId }, resp =>
  55. {
  56. var p = UserProxy.Instance.player;
  57. p.task.curTaskId = taskId;
  58. callback?.Invoke();
  59. });
  60. }
  61. /// <summary>
  62. /// 领取每日任务活跃点数奖励
  63. /// </summary>
  64. /// <param name="activeNum"></param>
  65. /// <param name="callback"></param>
  66. public void GetActiveReward(int activeNum, Action callback)
  67. {
  68. Post(CmdCode.cmd_Task_getActiveReward, new object[] { activeNum }, resp =>
  69. {
  70. var p = UserProxy.Instance.player;
  71. p.baseInfo.gold = Convert.ToInt32(resp.result["gold"].ToString());
  72. p.baseInfo.cash = Convert.ToInt32(resp.result["cash"].ToString());
  73. p.baseInfo.tili = Convert.ToInt32(resp.result["tili"].ToString());
  74. //p.InitFromStore((JObject)resp.result["store"]);
  75. p.task = resp.result["task"].ToObject<Info_UserTask>();
  76. callback?.Invoke();
  77. });
  78. }
  79. #endregion
  80. /// <summary>
  81. /// [6210] 剧情对话,更新任务步骤的进度
  82. /// </summary>
  83. /// <param name="gate_or_npc_id"></param>
  84. /// <param name="stage"></param>
  85. /// <param name="order"></param>
  86. /// <param name="callback">是否有任务卡状态更新</param>
  87. public void PlotFinish(int gate_or_npc_id, int stage, Action<bool, TaskCardVo> callback)
  88. {
  89. Post(CmdCode.cmd_taskCard_PlotFinish, new object[] { gate_or_npc_id, stage }, resp =>
  90. {
  91. //var p = UserProxy.Instance.player;
  92. var bUpdate = true; // resp.result["taskCardUpdate"].ToObject<bool>();
  93. if (bUpdate)
  94. {
  95. // 更新任务卡
  96. callback?.Invoke(bUpdate, null);
  97. }
  98. else
  99. {
  100. callback?.Invoke(bUpdate, null);
  101. }
  102. });
  103. }
  104. #region ' 已废弃方法 2020年12月14日14:33:43'
  105. /// <summary>
  106. /// [6211]
  107. /// </summary>
  108. [Obsolete("暂未完成-2020年11月18日16:26:33")]
  109. public void PlotExchangeTaskCard(Action callback)
  110. {
  111. Post(CmdCode.cmd_taskCard_PlotExchangeTaskCard, new object[] { }, resp =>
  112. {
  113. callback?.Invoke();
  114. });
  115. }
  116. /// <summary>
  117. /// [6212]剧情对话奖励任务卡(新手引导完成获得第一个卡)
  118. /// </summary>
  119. /// <param name="rwdStr"></param>
  120. /// <param name="callback"></param>
  121. [Obsolete("2020.12.12")]
  122. public void PlotPresentTaskCard(string rwdStr, Action callback)
  123. {
  124. Post(CmdCode.cmd_taskCard_PlotPresentTaskCard, new object[] { rwdStr }, resp =>
  125. {
  126. //var p = UserProxy.Instance.player;
  127. //p.InitFromStore((JObject)resp.result["store"]);
  128. callback?.Invoke();
  129. });
  130. }
  131. /// <summary>
  132. /// [6213]即时奖励型任务卡-结算(当剧情最后一句播完后,且是最后一个step, 直接调用这个)
  133. /// </summary>
  134. /// <param name="taskCardUID"></param>
  135. /// <param name="callback"></param>
  136. [Obsolete("2020.12.12")]
  137. public void ImmetRewardTaskCard(int taskCardUID, Action callback)
  138. {
  139. Post(CmdCode.cmd_taskCard_FinishAndReward, new object[] { taskCardUID }, resp =>
  140. {
  141. //var p = UserProxy.Instance.player;
  142. //p.InitFromStore((JObject)resp.result["store"]);
  143. callback?.Invoke();
  144. });
  145. }
  146. #endregion
  147. /// <summary>
  148. /// 6214 上报杀死怪物事件
  149. /// </summary>
  150. /// <param name="monsterId"></param>
  151. /// <param name="num"></param>
  152. /// <param name="order"></param>
  153. /// <param name="callback">是否有任务卡状态更新</param>
  154. public void ReportKillMonsterEvent(int monsterId, int num, Action<bool, TaskCardVo, TaskCardVo> callback)
  155. {
  156. Post(CmdCode.cmd_taskCard_killMonsterEvent, new object[] { monsterId, num }, resp =>
  157. {
  158. var bUpdate = resp.result["taskCardUpdate"].ToObject<bool>();
  159. if (bUpdate)
  160. {
  161. LogHelper.Log(resp.result); // 更新任务卡
  162. callback?.Invoke(bUpdate, null, null);
  163. }
  164. else
  165. {
  166. callback?.Invoke(false, null, null);
  167. }
  168. });
  169. }
  170. /// <summary>
  171. /// [6215] 任务卡 - 激活任务卡
  172. /// </summary>
  173. /// <param name="taskCardUID"></param>
  174. /// <param name="callback"></param>
  175. public void ActiveTaskCard(int taskCardUID, Action<TaskCardVo> callback)
  176. {
  177. Post(CmdCode.cmd_taskCard_active, new object[] { taskCardUID }, resp =>
  178. {
  179. var p = UserProxy.Instance.player; // 更新任务卡
  180. p.PrivateState = ((JObject)resp.result["priv"]).ToObject<Info_PrivateState>();
  181. callback?.Invoke(p.collectTaskCard.collectTaskCardDic[taskCardUID.ToString()]);
  182. });
  183. }
  184. /// <summary>
  185. /// [6216] 任务卡 - 领取奖励
  186. /// </summary>
  187. /// <param name="taskCardUID"></param>
  188. /// <param name="callback"></param>
  189. public void TaskCard_getReward(int taskCardUID, Action callback)
  190. {
  191. Post(CmdCode.cmd_taskCard_reward, new object[] { taskCardUID }, resp =>
  192. {
  193. var p = UserProxy.Instance.player;
  194. if (p.collectTaskCard.collectTaskCardDic.ContainsKey(taskCardUID.ToString()))
  195. {
  196. var cardMo = p.collectTaskCard.collectTaskCardDic[taskCardUID.ToString()].mo;
  197. p.baseInfo.getNewXp(cardMo.exp);
  198. }
  199. p.baseInfo.gold = Convert.ToInt32(resp.result["gold"].ToString());
  200. p.baseInfo.cash = Convert.ToInt32(resp.result["cash"].ToString());
  201. p.baseInfo.level = Convert.ToInt32(resp.result["lvl"].ToString());
  202. p.PrivateState = ((JObject)resp.result["priv"]).ToObject<Info_PrivateState>();
  203. p.collegeInfo.Initlize(resp.result["college"]);
  204. callback?.Invoke();
  205. });
  206. }
  207. /// <summary>
  208. /// [6217] 更新任务数据
  209. /// </summary>
  210. /// <param name="callback"></param>
  211. public void GetTaskCardInfo(Action callback)
  212. {
  213. Post(CmdCode.cmd_taskCard_info, new object[] { }, resp => callback?.Invoke());
  214. }
  215. /// <summary>
  216. /// [6218] 任务卡 - 步骤事件 完成
  217. /// </summary>
  218. /// <param name="taskCardUID"></param>
  219. /// <param name="stepTypeId"></param>
  220. /// <param name="starOrFinish">1 startAction, 2 finishAction</param>
  221. /// <param name="callback"></param>
  222. public void TaskCardStepActionDone(int taskCardUID, int stepTypeId, int starOrFinish, Action callback)
  223. {
  224. Post(CmdCode.cmd_taskCard_stepActionDone, new object[] { taskCardUID, stepTypeId, starOrFinish }, resp => callback?.Invoke());
  225. }
  226. /// <summary>
  227. /// [6219] 任务卡 - 设定追踪的任务卡
  228. /// </summary>
  229. /// <param name="cardType"></param>
  230. /// <param name="taskCardUID"></param>
  231. /// <param name="callback"></param>
  232. public void TaskCardSetTracingCard(int cardType, int taskCardUID, Action callback)
  233. {
  234. Post(CmdCode.cmd_taskCard_SetTracingCard, new object[] { cardType, taskCardUID }, resp =>
  235. {
  236. var p = UserProxy.Instance.player;
  237. p.PrivateState.taskCardTracing = resp.result.ToObject<Dictionary<int, int>>();
  238. callback?.Invoke();
  239. });
  240. }
  241. /// <summary>
  242. /// [6220] 任务卡 - 检查是否有任务步骤需要回撤(重新登录/唤灵师死亡/切换场景)
  243. /// </summary>
  244. /// <param name="callback"></param>
  245. public void TaskCardCheckStepFallback(Action callback) => Post(CmdCode.cmd_task_stepFallBack, new object[] { }, resp => callback?.Invoke());
  246. /// <summary>
  247. /// [6231] 任务卡商店 - 开启
  248. /// </summary>
  249. /// <param name="callback"></param>
  250. public void TaskCardShop_open(Action<List<TaskCardShopVo>> callback)
  251. {
  252. Post<Ret_OpenTaskShop>(CmdCode.cmd_taskcard_shop_open, new object[] { }, ret =>
  253. {
  254. if (null !=ret)
  255. {
  256. UserProxy.Instance.player.taskCardShop = ret.taskCardShop;
  257. callback?.Invoke(ret.taskCardShop.CurCardVos);
  258. }
  259. });
  260. }
  261. /// <summary>
  262. /// [6231] 任务卡商店 - 购买
  263. /// </summary>
  264. /// <param name="callback"></param>
  265. public void TaskCardShop_Buy(int cardTypeId, Action callback)
  266. {
  267. Post<Ret_TaskCardBuy>(CmdCode.cmd_taskcard_shop_buy, new object[] { cardTypeId, 1 }, ret =>
  268. {
  269. var p = UserProxy.Instance.player;
  270. p.baseInfo.gold = ret.gold; // 同步下花费
  271. p.baseInfo.cash = ret.cash;
  272. callback?.Invoke();
  273. });
  274. }
  275. /// <summary>
  276. /// [6231] 任务卡商店 - 刷新
  277. /// </summary>
  278. /// <param name="callback"></param>
  279. public void TaskCardShop_Refresh(Action<List<TaskCardShopVo>> callback)
  280. {
  281. Post<Ret_TaskCardShopRefresh>(CmdCode.cmd_taskcard_shop_refresh, new object[] { }, ret =>
  282. {
  283. var p = UserProxy.Instance.player;
  284. p.baseInfo.gold = ret.gold;
  285. p.baseInfo.cash = ret.cash;
  286. p.taskCardShop = ret.taskCardShop;
  287. callback?.Invoke(p.taskCardShop.CurCardVos);
  288. });
  289. }
  290. public int DailyTaskProgress()
  291. {
  292. int index = 0;
  293. List<TaskCardVo> taskList = UserProxy.Instance.player.collectTaskCard.GetAllCards().GetSubTypes(2);
  294. string[] sList = GameConfigData.Ins.globalsettings.dailyTask_Common.ToString().Split(',');
  295. foreach (TaskCardVo vo in taskList)
  296. {
  297. if (sList.Contains(vo.typeId) && vo.state == Enum_TaskCardStateType.drawed)
  298. {
  299. index += 1;
  300. }
  301. }
  302. return index;
  303. }
  304. public List<ItemVo> GetDailyTaskExtraPrize()
  305. {
  306. string taskId = GameConfigData.Ins.globalsettings.dailyTask_Common.ToString();
  307. if (!UserProxy.Instance.player.collectTaskCard.collectTaskCardDic.ContainsKey(taskId))
  308. {
  309. return new List<ItemVo>();
  310. }
  311. return sm_item_taskcard.GetMoById(int.Parse(taskId)).RealRewards();
  312. }
  313. /// <summary>
  314. /// 当前追踪的所有任务
  315. /// </summary>
  316. /// <returns></returns>
  317. public List<TaskCardVo> GetTaskTrackInfo()
  318. {
  319. List<TaskCardVo> list = new List<TaskCardVo>();
  320. Dictionary<string, TaskCardVo> collectTaskCardDic = UserProxy.Instance.player.collectTaskCard.collectTaskCardDic;
  321. Dictionary<int, int> taskCardTracing = UserProxy.Instance.player.PrivateState.taskCardTracing;
  322. foreach (KeyValuePair<int,int>kv in taskCardTracing)
  323. {
  324. if (collectTaskCardDic.ContainsKey(kv.Value.ToString()))
  325. {
  326. list.Add(collectTaskCardDic[kv.Value.ToString()]);
  327. }
  328. }
  329. return list;
  330. }
  331. #region 内部类
  332. class Ret_OpenTaskShop {
  333. public Info_TaskCard_Shop taskCardShop;
  334. }
  335. class Ret_TaskCardBuy {
  336. public int gold;
  337. public int cash;
  338. }
  339. class Ret_TaskCardShopRefresh {
  340. public int gold;
  341. public int cash;
  342. public Info_TaskCard_Shop taskCardShop;
  343. }
  344. /// <summary>
  345. /// 任务主界面
  346. /// </summary>
  347. public class UITaskMainVo : Singleton<UITaskMainVo>
  348. {
  349. /// <summary>
  350. /// 剧情任务列表
  351. /// </summary>
  352. /// <returns></returns>
  353. public List<TaskNodeInfo> AllNodeList() =>
  354. GameConfigData.Ins.task_node.Values.ToList().ConvertAll<TaskNodeInfo>(sm => new TaskNodeInfo() { nodeId = sm.typeId });
  355. private Player p = UserProxy.Instance.player;
  356. /// <summary>
  357. /// 每日任务列表
  358. /// </summary>
  359. public List<TaskInfo> dailyTasks => p.task.taskListDaily.Values.ToList();
  360. /// <summary>
  361. /// 活跃度奖励列表
  362. /// </summary>
  363. public List<TaskActiveRewardInfo> activeRewardInfos => GameConfigData.Ins.task_active_reward.Values
  364. .Select(mo => new TaskActiveRewardInfo() { num = int.Parse(mo.num) })
  365. .OrderBy(t => t.num).ToList();
  366. /// <summary>
  367. /// 当前活跃点数
  368. /// </summary>
  369. public int CurActivePoint => p.task.dailyActivePoint;
  370. /// <summary>
  371. /// 最大一档奖励要求的活跃点数
  372. /// </summary>
  373. public int MaxActivePoint => activeRewardInfos.Max(ti => ti.num);
  374. }
  375. #endregion
  376. }