TaskModel.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import Gamecfg from "../../../common/gameCfg";
  2. import { gameMethod } from "../../../common/gameMethod";
  3. import { xlsTaskMain } from "../../../common/xlsConfig";
  4. import EventMng from "../../../manager/EventMng";
  5. import { MsgItemChange_s } from "../../../shared/item/server/MsgItemChange_s";
  6. import { ResTaskInfo } from "../../../shared/task/PtlTaskInfo";
  7. import { I18n } from "../../../utils/I18nUtil";
  8. import { TaskMainEvent } from "../../const/EventConst";
  9. import { TaskKind } from "../../const/TypeConst";
  10. import GameDataCenter from "../../GameDataCenter";
  11. import { TaskModelData } from "./TaskModelData";
  12. export default class TaskModel extends TaskModelData {
  13. readonly GuanQiaNum = 5;
  14. readonly TaskPopCloseCd: number = 5;
  15. readonly TaskPopTime: number = 0.2;
  16. lastPopTaskId: number = null;
  17. //引导手指的id
  18. curHandTaskId = 0;
  19. //最后一次记录任务id
  20. private _lastTaskId: number = 0;
  21. constructor() {
  22. super("task");
  23. }
  24. onRegister(): void {
  25. GameDataCenter.gameServer.ListenMsg("item/server/ItemChange_s", this.onTaskChange, this);
  26. }
  27. onTaskChange(msg: MsgItemChange_s) {
  28. for (let key in msg) {
  29. if (Object.prototype.hasOwnProperty.call(msg, key)) {
  30. this.taskInfo[key] = msg[key];
  31. }
  32. }
  33. EventMng.emit(TaskMainEvent.UP_INFO);
  34. }
  35. setTaskInfo(res: ResTaskInfo) {
  36. this.taskInfo = res;
  37. this._lastTaskId = res.id;
  38. }
  39. checkMainTaskCount(conf: xlsTaskMain, ismax: boolean = false) {
  40. let actTaskMain = GameDataCenter.task.taskInfo;
  41. let max = this.checkMax(conf.kind, conf.need);
  42. let num = this.checkNum(conf.kind, actTaskMain?.cons, conf.need);
  43. let cons = ismax ? max : Math.min(num, max);
  44. return `${cons}/${max}`;
  45. }
  46. /**
  47. * 任务当前进度值
  48. * @param kind 任务类型
  49. * @param val 当前进度值
  50. * @param need 任务需求值
  51. * @returns
  52. */
  53. checkNum(kind: string, val: number, need: number) {
  54. let num = 0;
  55. switch (kind) {
  56. default:
  57. num = val;
  58. break;
  59. }
  60. return num;
  61. }
  62. /**
  63. * 任务进度的最大值
  64. * @param kind 任务类型
  65. * @param need 任务需求值
  66. * @returns
  67. */
  68. checkMax(kind: string, need: number) {
  69. let max = 1;
  70. switch (kind) {
  71. default:
  72. max = need;
  73. break;
  74. }
  75. return max;
  76. }
  77. /**
  78. * 获得任务类型的任务进度
  79. * @param kind 任务类型
  80. * @param val 当前进度值
  81. * @param need 任务需求值
  82. * @returns x/y
  83. */
  84. getTaskCount(kind: string, val: number, need: number) {
  85. let max = this.checkMax(kind, need);
  86. let num = this.checkNum(kind, val, need);
  87. let cons = Math.min(num, max);
  88. return `${cons}/${max}`;
  89. }
  90. /**
  91. * 获得任务类型对应的任务描述
  92. * @param kind 任务类型
  93. * @param need 任务需求值
  94. * @returns 任务描述
  95. */
  96. getTaskDesc(kind: string | number, need: number) {
  97. switch (kind) {
  98. default:
  99. return I18n.getTaskDesc(kind, need);
  100. }
  101. }
  102. //当前任务是否完成
  103. public curTaskIsFinish() {
  104. let actTaskMain = GameDataCenter.task.taskInfo;
  105. let conf = Gamecfg.taskMain.getItem(actTaskMain?.id.toString());
  106. if (actTaskMain.cons >= conf?.need) {
  107. return true;
  108. } else {
  109. return false;
  110. }
  111. }
  112. //指定任务是否完成
  113. public TaskIdIsFinish(id: string) {
  114. let actTaskMain = GameDataCenter.task.taskInfo;
  115. if (actTaskMain?.id.toString() != id) {
  116. return false;
  117. }
  118. let conf = Gamecfg.taskMain.getItem(actTaskMain?.id.toString());
  119. if (!gameMethod.isEmpty(conf) && actTaskMain?.cons >= conf.need) {
  120. return true;
  121. } else {
  122. return false;
  123. }
  124. }
  125. /**
  126. * 检测当前是否是最后一个任务
  127. * 如果是,则返回最后一个任务
  128. * @returns
  129. */
  130. checkIsMax(): xlsTaskMain {
  131. let id = GameDataCenter.task.taskInfo?.id ?? 0;
  132. let conf = Gamecfg.taskMain.getItem(id + "");
  133. if (conf) return null;
  134. let last = Gamecfg.taskMainByNextid.getItem(id + "");
  135. return last;
  136. }
  137. //发送消息
  138. async sendTaskInfo() {
  139. let ret = await GameDataCenter.gameServer.ReqApi("task/TaskInfo", {});
  140. if (ret?.res) {
  141. this.setTaskInfo(ret.res);
  142. EventMng.emit(TaskMainEvent.UP_INFO);
  143. }
  144. }
  145. async sendTaskRwd(callback?: Function) {
  146. let ret = await GameDataCenter.gameServer.ReqApi("task/TaskRwd", {});
  147. if (ret?.res) {
  148. this.setTaskInfo(ret.res);
  149. callback && callback();
  150. EventMng.emit(TaskMainEvent.UP_INFO);
  151. }
  152. }
  153. }