| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- import { _decorator, Component, game } from 'cc';
- import { BattleData } from '../battle/BattleData';
- import { DataSystem } from '../core/data/DataSystem';
- import { Http, HttpMethod } from '../core/net/Http';
- import { HttpSystem } from '../core/net/HttpSystem';
- import { ISJSB } from '../data/jsb/platform';
- import { UserData } from '../data/UserData';
- import { UserHeroData } from '../hero/UserHeroData';
- const { ccclass, property, requireComponent } = _decorator;
- /**
- * GM工具
- * @author 袁浩
- */
- @ccclass('GM')
- export class GM extends Component {
- private static thisObject: GM;
- public start() {
- GM.thisObject = this;
- game.addPersistRootNode(this.node);//常驻节点
- let doAction = async (userID: number, cmdStr: string) => {
- let cmdList = cmdStr.split(/\s/);
- cmdList[0] = cmdList[0] || "";
- cmdList[1] = cmdList[1] || "";
- cmdList[2] = cmdList[2] || "";
- cmdList[3] = cmdList[3] || "";
- let cmd = cmdList[0].toLowerCase();
- let key = cmdList[1];
- let action = cmdList[2].toLowerCase();
- let value = cmdList[3];
- if (cmd == "log") {
- switch (key) {
- case "battle"://打印战斗日志
- let length = this.battleLogs.length;
- if (action) {
- length = parseInt(action);
- }
- let logstr = "";
- for (let i = this.battleLogs.length - length; i < this.battleLogs.length; i++) {
- const log = this.battleLogs[i];
- logstr += (log + "\n");
- }
- console.log(logstr);
- break;
- case "http"://开启关闭网络请求日志
- HttpSystem.useDebugLog = !HttpSystem.useDebugLog;
- console.log(`网络请求日志${HttpSystem.useDebugLog ? '开启' : '关闭'}`);
- break;
- default:
- this.query(userID, cmdStr);
- break;
- }
- }
- else if (cmd == "skill") {
- switch (key) {
- case "clearcd":
- if (action == "sel") {
- console.log(`当前技能冷却可清除次数:${localStorage.getItem("ClearCdNum") || 3}`);
- }
- else if (action == "set") {
- localStorage.setItem("ClearCdNum", (parseInt(value) || 0) + "")
- console.log(`当前技能冷却可清除次数:${(parseInt(value) || 0)}`);
- }
- else if (action == "add") {
- let num = parseInt(localStorage.getItem("ClearCdNum") || "0");
- num += parseInt(value);
- localStorage.setItem("ClearCdNum", num + "");
- console.log(`当前技能冷却可清除次数:${num}`);
- }
- break;
- default:
- break;
- }
- }
- else if (cmd == "game") {
- if (key == "pause") {
- game.pause();
- }
- else if (key == "resume") {
- game.resume();
- }
- else if (key == "step") {
- if (!action) {
- game.step();
- }
- else {
- let length = parseInt(action);
- for (let index = 0; index < length; index++) {
- game.step();
- }
- }
- }
- }
- else {
- this.query(userID, cmdStr);
- }
- }
- globalThis.gm = (cmd: string) => {
- let userID = DataSystem.getData(UserData).id;
- if (!userID) {
- return "请先登录!";
- }
- else if (cmd == "help") {
- console.log(`
- 目前共支持如下命令:
- 通用命令:
- log:
- 说明:日志相关功能
- 参数:battle、http
- 动作支持:无
- 示例:log battle 100(显示最近100条战斗日志)、log http(网络请求日志开启/关闭)、log day 0(显示服务器今日时间戳)、log day -1(显示服务器昨日时间戳)、log now(显示服务器当前时间戳)
- game:
- 说明:暂停/恢复游戏
- 参数:pause、resume、step
- 动作支持:无
- 示例:game pause、game resume、game step、game step 10(运行10帧)
- 游戏相关命令:
- user:
- 说明:设置用户数据
- 参数:money(粮草)、diamond(元宝)、bonus(红包币)、prestige(威望)、id(玩家编号)、camp(所属阵营)、level(当前正在战斗的关卡)
- 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
- hero:
- 说明:设置英雄
- 参数:英雄编号
- 动作支持:add(增加)、remove(减少)、sel(查询)
- herochip:
- 说明:设置英雄碎片
- 参数:英雄编号
- 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
- recruittimes:
- 说明:设置每日招募剩余次数
- 参数:单抽还是十连抽,1、10
- 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
- bank:
- 说明:设置存钱罐数据
- 参数:bonus(红包币)、lastTime(最后一次领取时间,时间戳,秒)
- 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
- drawtimes:
- 说明:设置每日抽奖剩余次数
- 参数:free、video(免费次数、视频次数)
- 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
- task:
- 说明:设置任务相关数据
- 参数:lastTime(任务数据最后一次更新时间)、active(活跃度)、yesterdayRewardNum(昨天的奖励数量(红包币))
- 动作支持:add(增加)、set(设置)、remove(减少)、sel(查询)
- 示例:gm("user money set 100")、gm("hero 111001 add")
- `);
- }
- else {
- doAction(userID, cmd);
- }
- return `执行 ${cmd}`;
- }
- }
- private async query(userID: number, cmdStr: string) {
- let http = this.getComponent(Http) || this.addComponent(Http);
- http.useLog = false;
- let result = await http.send("/api/td_jj/gm", { node: "tool", userID: userID, cmd: cmdStr }, HttpMethod.GET, false, false);
- if (result) {
- console.log(result.data.message);
- switch (result.cmd) {
- case "user":
- let userData = DataSystem.getData(UserData);
- if (result.data.action != "sel") {
- userData[result.data.key] = result.data.value;
- let battleData = DataSystem.getData(BattleData);
- battleData && (battleData.mission = userData.level);
- }
- break;
- case "hero":
- if (result.data.action != "sel") {
- http.useLog = true;
- DataSystem.getData(UserHeroData).pull(http);
- }
- break;
- case "herochip":
- if (result.data.action != "sel") {
- http.useLog = true;
- DataSystem.getData(UserHeroData).pull(http);
- }
- break;
- case "bank":
- break;
- default:
- break;
- }
- }
- }
- private battleLogs: string[] = [];
- private addBattleLog(log: string): void {
- this.battleLogs.push(log);
- }
- public static addBattleLog(log: string) {
- if (!ISJSB()) {
- GM.thisObject.addBattleLog(log);
- }
- }
- }
|