let mpImage = require('./mp-image'); let mpApp = require('./mp-app'); let mp_info = { ra: null, apiBaseUrl: "http://192.168.1.12:800/", /** * 检测次数间隔时间(大约每33毫秒检测一次,1秒30次) */ detectInterval: 1000 / 3, detectTimer: null, AutoFightInfo: { isAutoFight: false, thread: null, zhandouCount: 0, isZhanDou: false, currentRounds: 0, fightTimer: null, /** * 自动战斗间隔时间(500毫秒) */ autoFightInterval: 500, /** * */ isFengShou: false, isLaDao: false, }, User: { status: -1, // 未知。1未战斗,2战斗中 update: false, ws: null, thread: null, autoSeekFightThread: null }, Task: { autoSeekTask: false, thread: null }, startTask() { this.Task.autoSeekTask = true; this.Task.thread = threads.start(() => this.autoTask()); }, getNeiZhiDaNao(url, mImage) { let img = this.getCaptureScreen(); var base = images.toBase64(img, format = "jpeg", quality = 50) img.recycle(); //判断当前位置区域 var postData = { image: base, mImage: "" }; if (mImage != null) { postData.mImage = mImage; } var response = http.postJson(url, postData); console.log(url, response.body.string(), response.body.json()); if (response == null) { return null; } var data = response.body.json(); return data; }, autoTask() { console.log('开启帮派自动任务', this.apiBaseUrl); var panduanweizhi = this.apiBaseUrl + "api/Task/PanDuanWeiZhi"; var taskList = this.apiBaseUrl + "api/Task/TaskList"; var piPei = this.apiBaseUrl + "api/Task/PiPei"; while (this.Task.autoSeekTask) { var data = this.getNeiZhiDaNao(panduanweizhi, null); if (data == null) { sleep(5000) break; } if (data.action == "click") { console.log(data.data.x, data.data.y); click(data.data.x, data.data.y) //休眠500毫秒 sleep(1000); } var data1 = this.getNeiZhiDaNao(taskList); if (data1 == null) { sleep(5000) break; } if (data1.action == "ok") { console.log('模拟按键OK'); KeyCode("KEYCODE_DPAD_CENTER"); sleep(1000); KeyCode("KEYCODE_DPAD_CENTER"); sleep(500); KeyCode("KEYCODE_DPAD_CENTER"); sleep(500); } //再次点击帮派主管 click(data.data.x, data.data.y) this.完成帮派任务(data, piPei, taskList); sleep(2000); } }, 完成帮派任务(data, piPei, taskList) { //休眠500毫秒 sleep(1000); //判断是否在任务列表中 var data1 = this.getNeiZhiDaNao(taskList, null); if (data1 == null) { sleep(5000) return; } if (data1.action == "ok") { //等于帮派列表 console.log('模拟按键OK'); KeyCode("KEYCODE_DPAD_CENTER"); } // var 完成任务 = this.getNeiZhiDaNao(piPei, "detect_tigers/帮派/renwuweiwanc.png") if (完成任务.action != null && 完成任务.action != "") { KeyCode("KEYCODE_DPAD_CENTER"); console.log('模拟按键OK'); KeyCode("KEYCODE_DPAD_CENTER"); sleep(1000); KeyCode("KEYCODE_DPAD_CENTER"); sleep(500); KeyCode("KEYCODE_DPAD_CENTER"); sleep(500); console.log('任务完成'); return; } //任务未完成 KeyCode("KEYCODE_DPAD_CENTER"); sleep(100) var data1 = this.getNeiZhiDaNao(taskList, null); if (data1 == null) { KeyCode("KEYCODE_DPAD_CENTER"); sleep(1000) } var 更换帮派任务 = this.getNeiZhiDaNao(piPei, "detect_tigers/帮派/genghuan.png") if (更换帮派任务.action == "ok") { //任务未完成 click(更换帮派任务.data.x, 更换帮派任务.data.y) sleep(500) var 确定更换帮派任务 = this.getNeiZhiDaNao(piPei, "detect_tigers/帮派/genghuanqueding.png") if (确定更换帮派任务.action == "ok") { KeyCode("KEYCODE_DPAD_CENTER"); console.log('模拟按键OK'); KeyCode("KEYCODE_DPAD_CENTER"); sleep(1000); KeyCode("KEYCODE_DPAD_CENTER"); sleep(500); } } }, stopTask() { this.Task.autoSeekTask = false; this.Task.thread.interrupt(); this.Task.thread = null; }, startUser(userId) { let ws = new WebSocket('ws://192.168.1.12:800/ws?id=' + userId); ws .on(WebSocket.EVENT_OPEN, (res, ws) => { console.log('WebSocket 已连接'); }) .on(WebSocket.EVENT_MESSAGE, (message, ws) => { console.log('接收到消息'); }) .on(WebSocket.EVENT_TEXT, (text, ws) => { console.info('接收到文本消息:'); console.info(`text: ${text}`); if (text != null && text != '') { var objx = JSON.parse(text); if (objx != null) { if (objx.Action == "click") { console.log('点击坐标'); Tap(objx.Data.X, objx.Data.Y) setTimeout(() => { console.log('点击坐标284, 369'); Tap(284, 369) console.log('点击坐标173, 714'); Tap(173, 714) }, 500) // sleep(50); } } } }) .on(WebSocket.EVENT_BYTES, (bytes, ws) => { console.info('接收到字节数组消息:'); console.info(`utf8: ${bytes.utf8()}`); // console.info(`base64: ${bytes.base64()}`); // console.info(`md5: ${bytes.md5()}`); // console.info(`hex: ${bytes.hex()}`); }) .on(WebSocket.EVENT_CLOSING, (code, reason, ws) => { console.log('WebSocket 关闭中'); }) .on(WebSocket.EVENT_CLOSED, (code, reason, ws) => { console.log('WebSocket 已关闭'); console.log(`code: ${code}`); if (reason) console.log(`reason: ${reason}`); }) .on(WebSocket.EVENT_FAILURE, (err, res, ws) => { console.error('WebSocket 连接失败'); console.error(err); }); this.User.update = true; this.User.ws = ws; var that = this; this.User.thread = threads.start(function () { while (that.User.update || true) { // try { let img2 = captureScreen(); let _bytes = images.toBytes(img2, format = "jpeg", quality = 40) let javaArr = java.lang.reflect.Array .newInstance(java.lang.Byte.TYPE, _bytes.length + 1); javaArr[0] = 0x02; for (let index = 0; index < _bytes.length; index++) { javaArr[index + 1] = _bytes[index]; } ws.send(new okio.ByteString(javaArr)); } catch (error) { console.log(error); } sleep(that.detectInterval); } }); }, //自动找怪 startAutoSeekFight() { console.log('启动'); if (this.User.update && this.User.autoSeekFightThread == null) { var that = this; var ws = this.User.ws; this.User.autoSeekFightThread = threads.start(function () { while (that.User.update) { console.log('开始自动找怪'); // try { if (that.AutoFightInfo.isZhanDou) { console.log('自动战斗中,结束'); sleep(2000); continue; } console.log('开始发送数据'); let img2 = that.getCaptureScreen(); let _bytes = images.toBytes(img2, format = "jpeg", quality = 50) let javaArr = java.lang.reflect.Array .newInstance(java.lang.Byte.TYPE, _bytes.length + 1); javaArr[0] = 0x04; for (let index = 0; index < _bytes.length; index++) { javaArr[index + 1] = _bytes[index]; } ws.send(new okio.ByteString(javaArr)); } catch (error) { console.log('出现问题', error); } sleep(3000); } }); } }, //自动找怪 stopAutoSeekFight() { if (this.User.autoSeekFightThread != null) { this.User.autoSeekFightThread.interrupt(); this.User.autoSeekFightThread = null; } }, stopUser() { // thread if (this.User.thread != null) { this.User.update = false; this.User.ws.close(WebSocket.CODE_CLOSE_NORMAL, 'Closed by user'); this.User.thread.interrupt(); this.User.thread = null; } }, /** * 启动自动打怪 */ startAutoFight(ra) { this.ra = ra; if (this.AutoFightInfo.isAutoFight) { toastLog(`自动打怪已经运行中`); return false; } toastLog(`开始自动打怪`); this.AutoFightInfo.isAutoFight = true; var that = this; this.AutoFightInfo.thread = threads.start(function () { while (that.AutoFightInfo.isAutoFight) { try { // let file = mpApp.userSaveFilePath + "autoFight.png"; let img1 = captureScreen(); var img = images.copy(img1); if (img != null) { that.autoFight(img); img.recycle(); } } catch (error) { console.log(error); } sleep(0.5 * 1000); // 保持线程运行,可以根据需求调整 } // clearInterval(that.AutoFightInfo.fightTimer); }); toastLog(`自动打怪已经开始`); return true; }, stopAutoFight() { if (this.AutoFightInfo.isAutoFight) { // 停止定时器 this.AutoFightInfo.isAutoFight = false; // clearInterval(this.AutoFightInfo.fightTimer); // clearInterval(this.detectTimer); this.AutoFightInfo.thread.interrupt(); this.AutoFightInfo.thread = null; toastLog(`停止自动打怪`); } }, fight() { click(293, 292); sleep(20); click(77, 816); sleep(20); click(270, 435); sleep(20); click(77, 816); }, fight1() { click(250, 374); sleep(50); click(318, 342); sleep(50); click(153, 288); sleep(20); click(77, 816); sleep(20); click(270, 435); sleep(20); click(77, 816); }, fight2() { click(275, 420); sleep(50); click(290, 387); sleep(50); click(281, 785); sleep(50); click(153, 288); sleep(20); click(77, 816); sleep(20); click(270, 435); sleep(20); click(77, 816); }, /** * 自动打怪逻辑 */ autoFight(img) { // console.log('开始自动打怪'); var isZhanDou = findImage(img, mpImage._image.yijianfayan, { threshold: 0.5 }); let zhandou = mpImage._image.zhandou; var p = findImage(img, zhandou, { threshold: 0.5 }); if (p != null) { isZhanDou = p; } // 判断是否在战斗中 if (isZhanDou == null) { if (this.AutoFightInfo.isZhanDou) { // 战斗刚结束 sleep(2000); this.AutoFightInfo.isZhanDou = false; console.log(`本次共战斗${this.AutoFightInfo.currentRounds}回合`); if (this.AutoFightInfo.currentRounds > 3) { sleep(50); KeyCode("KEYCODE_2"); sleep(10); KeyCode("KEYCODE_2"); sleep(10); KeyCode("KEYCODE_2"); sleep(10); KeyCode("KEYCODE_2"); } this.AutoFightInfo.currentRounds = 0; } return; } else if (isZhanDou != null && !this.AutoFightInfo.isZhanDou) { this.AutoFightInfo.isZhanDou = true; this.AutoFightInfo.zhandouCount++; } if (isZhanDou != null) { // console.log('战斗中'); } console.log(p); if (p != null) { console.log(p.x, p.y); if (this.AutoFightInfo.isFengShou && (this.AutoFightInfo.currentRounds == 0 || this.AutoFightInfo.currentRounds == 2)) { this.fight1(); } else if (this.AutoFightInfo.isLaDao && (this.AutoFightInfo.currentRounds == 0 || this.AutoFightInfo.currentRounds == 3 || this.AutoFightInfo.currentRounds == 6)) { this.fight2(); } else { this.fight(); } // 回合数+1 this.AutoFightInfo.currentRounds++; } }, reaw() { var thread = threads.start(function () { KeyCode("KEYCODE_9"); sleep(120); var img = captureScreen(); var wanjia1xit1 = findImage(img, mpImage._image.玩家系统, { threshold: 0.5 }); var mallList = ocr.detect([127, 252, 284, 486]); console.log(mallList); if (mallList != null) { for (let index = 0; index < mallList.length; index++) { let element = mallList[index]; console.log(element); if (element.label.indexOf("玩家") > -1) { console.log('玩家系统坐标', element.bounds); click(element.bounds); break; } } } sleep(200); KeyCode("KEYCODE_DPAD_DOWN"); sleep(200); KeyCode("KEYCODE_DPAD_DOWN"); sleep(200); KeyCode("KEYCODE_DPAD_DOWN"); sleep(200); KeyCode("KEYCODE_DPAD_CENTER"); sleep(200); KeyCode("KEYCODE_DPAD_CENTER"); sleep(200); KeyCode("KEYCODE_DPAD_CENTER"); }); thread.waitFor(); }, /** * 获取屏幕图片 * @returns 屏幕截图 */ getCaptureScreen() { try { let img1 = captureScreen(); var img = images.copy(img1); return img; } catch (error) { return this.getCaptureScreen(); } }, 帮派任务() { var that = this; threads.start(function () { var image = that.getCaptureScreen(); }); }, }; module.exports = mp_info;