GM.ts 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. import { _decorator, Component, game } from 'cc';
  2. import { BattleData } from '../battle/BattleData';
  3. import { DataSystem } from '../core/data/DataSystem';
  4. import { Http, HttpMethod } from '../core/net/Http';
  5. import { HttpSystem } from '../core/net/HttpSystem';
  6. import { ISJSB } from '../data/jsb/platform';
  7. import { UserData } from '../data/UserData';
  8. import { UserHeroData } from '../hero/UserHeroData';
  9. const { ccclass, property, requireComponent } = _decorator;
  10. /**
  11. * GM工具
  12. * @author 袁浩
  13. */
  14. @ccclass('GM')
  15. export class GM extends Component {
  16. private static thisObject: GM;
  17. public start() {
  18. GM.thisObject = this;
  19. game.addPersistRootNode(this.node);//常驻节点
  20. let doAction = async (userID: number, cmdStr: string) => {
  21. let cmdList = cmdStr.split(/\s/);
  22. cmdList[0] = cmdList[0] || "";
  23. cmdList[1] = cmdList[1] || "";
  24. cmdList[2] = cmdList[2] || "";
  25. cmdList[3] = cmdList[3] || "";
  26. let cmd = cmdList[0].toLowerCase();
  27. let key = cmdList[1];
  28. let action = cmdList[2].toLowerCase();
  29. let value = cmdList[3];
  30. if (cmd == "log") {
  31. switch (key) {
  32. case "battle"://打印战斗日志
  33. let length = this.battleLogs.length;
  34. if (action) {
  35. length = parseInt(action);
  36. }
  37. let logstr = "";
  38. for (let i = this.battleLogs.length - length; i < this.battleLogs.length; i++) {
  39. const log = this.battleLogs[i];
  40. logstr += (log + "\n");
  41. }
  42. console.log(logstr);
  43. break;
  44. case "http"://开启关闭网络请求日志
  45. HttpSystem.useDebugLog = !HttpSystem.useDebugLog;
  46. console.log(`网络请求日志${HttpSystem.useDebugLog ? '开启' : '关闭'}`);
  47. break;
  48. default:
  49. this.query(userID, cmdStr);
  50. break;
  51. }
  52. }
  53. else if (cmd == "skill") {
  54. switch (key) {
  55. case "clearcd":
  56. if (action == "sel") {
  57. console.log(`当前技能冷却可清除次数:${localStorage.getItem("ClearCdNum") || 3}`);
  58. }
  59. else if (action == "set") {
  60. localStorage.setItem("ClearCdNum", (parseInt(value) || 0) + "")
  61. console.log(`当前技能冷却可清除次数:${(parseInt(value) || 0)}`);
  62. }
  63. else if (action == "add") {
  64. let num = parseInt(localStorage.getItem("ClearCdNum") || "0");
  65. num += parseInt(value);
  66. localStorage.setItem("ClearCdNum", num + "");
  67. console.log(`当前技能冷却可清除次数:${num}`);
  68. }
  69. break;
  70. default:
  71. break;
  72. }
  73. }
  74. else if (cmd == "game") {
  75. if (key == "pause") {
  76. game.pause();
  77. }
  78. else if (key == "resume") {
  79. game.resume();
  80. }
  81. else if (key == "step") {
  82. if (!action) {
  83. game.step();
  84. }
  85. else {
  86. let length = parseInt(action);
  87. for (let index = 0; index < length; index++) {
  88. game.step();
  89. }
  90. }
  91. }
  92. }
  93. else {
  94. this.query(userID, cmdStr);
  95. }
  96. }
  97. globalThis.gm = (cmd: string) => {
  98. let userID = DataSystem.getData(UserData).id;
  99. if (!userID) {
  100. return "请先登录!";
  101. }
  102. else if (cmd == "help") {
  103. console.log(`
  104. 目前共支持如下命令:
  105. 通用命令:
  106. log:
  107. 说明:日志相关功能
  108. 参数:battle、http
  109. 动作支持:无
  110. 示例:log battle 100(显示最近100条战斗日志)、log http(网络请求日志开启/关闭)、log day 0(显示服务器今日时间戳)、log day -1(显示服务器昨日时间戳)、log now(显示服务器当前时间戳)
  111. game:
  112. 说明:暂停/恢复游戏
  113. 参数:pause、resume、step
  114. 动作支持:无
  115. 示例:game pause、game resume、game step、game step 10(运行10帧)
  116. 游戏相关命令:
  117. user:
  118. 说明:设置用户数据
  119. 参数:money(粮草)、diamond(元宝)、bonus(红包币)、prestige(威望)、id(玩家编号)、camp(所属阵营)、level(当前正在战斗的关卡)
  120. 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
  121. hero:
  122. 说明:设置英雄
  123. 参数:英雄编号
  124. 动作支持:add(增加)、remove(减少)、sel(查询)
  125. herochip:
  126. 说明:设置英雄碎片
  127. 参数:英雄编号
  128. 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
  129. recruittimes:
  130. 说明:设置每日招募剩余次数
  131. 参数:单抽还是十连抽,1、10
  132. 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
  133. bank:
  134. 说明:设置存钱罐数据
  135. 参数:bonus(红包币)、lastTime(最后一次领取时间,时间戳,秒)
  136. 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
  137. drawtimes:
  138. 说明:设置每日抽奖剩余次数
  139. 参数:free、video(免费次数、视频次数)
  140. 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
  141. task:
  142. 说明:设置任务相关数据
  143. 参数:lastTime(任务数据最后一次更新时间)、active(活跃度)、yesterdayRewardNum(昨天的奖励数量(红包币))
  144. 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
  145. 示例:gm("user money set 100")、gm("hero 111001 add")
  146. `);
  147. }
  148. else {
  149. doAction(userID, cmd);
  150. }
  151. return `执行 ${cmd}`;
  152. }
  153. }
  154. private async query(userID: number, cmdStr: string) {
  155. let http = this.getComponent(Http) || this.addComponent(Http);
  156. http.useLog = false;
  157. let result = await http.send("/api/td_jj/gm", { node: "tool", userID: userID, cmd: cmdStr }, HttpMethod.GET, false, false);
  158. if (result) {
  159. console.log(result.data.message);
  160. switch (result.cmd) {
  161. case "user":
  162. let userData = DataSystem.getData(UserData);
  163. if (result.data.action != "sel") {
  164. userData[result.data.key] = result.data.value;
  165. let battleData = DataSystem.getData(BattleData);
  166. battleData && (battleData.mission = userData.level);
  167. }
  168. break;
  169. case "hero":
  170. if (result.data.action != "sel") {
  171. http.useLog = true;
  172. DataSystem.getData(UserHeroData).pull(http);
  173. }
  174. break;
  175. case "herochip":
  176. if (result.data.action != "sel") {
  177. http.useLog = true;
  178. DataSystem.getData(UserHeroData).pull(http);
  179. }
  180. break;
  181. case "bank":
  182. break;
  183. default:
  184. break;
  185. }
  186. }
  187. }
  188. private battleLogs: string[] = [];
  189. private addBattleLog(log: string): void {
  190. this.battleLogs.push(log);
  191. }
  192. public static addBattleLog(log: string) {
  193. if (!ISJSB()) {
  194. GM.thisObject.addBattleLog(log);
  195. }
  196. }
  197. }