|
|
|
@ -3,9 +3,10 @@ package com.example.jmacro.wjdr.demo;
|
|
|
|
|
import com.example.jmacro.wjdr.JMacro;
|
|
|
|
|
import com.example.jmacro.wjdr.JMacroThread;
|
|
|
|
|
import com.example.jmacro.wjdr.base.ScreenRect;
|
|
|
|
|
import com.example.jmacro.wjdr.demo.task.TaskMineAttack;
|
|
|
|
|
import com.example.jmacro.wjdr.demo.task.TaskMining;
|
|
|
|
|
import com.example.jmacro.wjdr.demo.task.TaskRewards;
|
|
|
|
|
import com.example.jmacro.wjdr.demo.task.Task_探险领取;
|
|
|
|
|
import com.example.jmacro.wjdr.demo.task.Task_离线收益;
|
|
|
|
|
import com.example.jmacro.wjdr.demo.task.Task_自动采矿;
|
|
|
|
|
import com.example.jmacro.wjdr.demo.task.Task_采矿被攻击;
|
|
|
|
|
import com.example.jmacro.wjdr.util.Logger;
|
|
|
|
|
import com.example.jmacro.wjdr.util.TaskUtil;
|
|
|
|
|
|
|
|
|
@ -14,11 +15,6 @@ import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
public class DemoThread extends JMacroThread {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 视口
|
|
|
|
|
*/
|
|
|
|
|
private ScreenRect gameScreen;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 脚本线程
|
|
|
|
|
*/
|
|
|
|
@ -44,30 +40,31 @@ public class DemoThread extends JMacroThread {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public ScreenRect getScreen() {
|
|
|
|
|
return gameScreen;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
// 定位mumu bar
|
|
|
|
|
Logger.info("定位慕慕窗口");
|
|
|
|
|
public synchronized ScreenRect location() {
|
|
|
|
|
// 定位窗口
|
|
|
|
|
Logger.info("定位窗口");
|
|
|
|
|
ScreenRect mumu = jMacro.findPic("慕慕_工具栏", 0.95d);
|
|
|
|
|
if (mumu == null) {
|
|
|
|
|
throw new IllegalStateException("未检测到MuMu,请开启MuMu模拟器");
|
|
|
|
|
Logger.error("定位窗口失败");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
Logger.info("定位慕慕窗口成功");
|
|
|
|
|
// 计算应用窗口返回
|
|
|
|
|
gameScreen = new ScreenRect();
|
|
|
|
|
ScreenRect gameScreen = new ScreenRect();
|
|
|
|
|
gameScreen.setLeft(mumu.getLeft() - 428);
|
|
|
|
|
gameScreen.setTop(mumu.getBottom() + 7);
|
|
|
|
|
gameScreen.setRight(mumu.getRight());
|
|
|
|
|
gameScreen.setBottom(mumu.getBottom() + 951);
|
|
|
|
|
Logger.info("应用窗口位置:" + gameScreen.toString());
|
|
|
|
|
Logger.info("应用窗口大小:{}x{}", gameScreen.getRight() - gameScreen.getLeft(), gameScreen.getBottom() - gameScreen.getTop());
|
|
|
|
|
return gameScreen;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
// 获取启动图标
|
|
|
|
|
Logger.info("定位启动图标");
|
|
|
|
|
ScreenRect launch = jMacro.waitAndFindPic(gameScreen, "启动图标", 0.8);
|
|
|
|
|
ScreenRect launch = jMacro.waitAndFindPic(screenRect, "启动图标", 0.9, 5, TimeUnit.SECONDS);
|
|
|
|
|
if (launch != null) {
|
|
|
|
|
Logger.info("启动图标坐标:", launch.toString());
|
|
|
|
|
Logger.info("启动程序");
|
|
|
|
@ -81,38 +78,45 @@ public class DemoThread extends JMacroThread {
|
|
|
|
|
while (true) {
|
|
|
|
|
jMacro.delay();
|
|
|
|
|
{ // 定位弹框,关闭弹框
|
|
|
|
|
Logger.info("检测到广告弹框");
|
|
|
|
|
ScreenRect rect = jMacro.matchPic(gameScreen, "城镇_充值_L448,36", 0.8d);
|
|
|
|
|
ScreenRect rect = jMacro.matchPic(screenRect, "城镇_充值_L448,36", 0.8d);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
jMacro.mouseLeftClick(rect);
|
|
|
|
|
Logger.info("检测到广告弹框,关闭弹框");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
jMacro.delay();
|
|
|
|
|
{ // 定位离线收益弹框,关闭弹框
|
|
|
|
|
ScreenRect rect = jMacro.matchPic(gameScreen, "城镇_离线收益_L204,734", 0.9);
|
|
|
|
|
{// 定位离线收益
|
|
|
|
|
jMacro.delay();
|
|
|
|
|
ScreenRect rect = jMacro.matchPic(screenRect, "城镇_离线收益_L204,734", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
jMacro.mouseLeftClick(rect);
|
|
|
|
|
Logger.info("检测到离线收益弹框,关闭弹框");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
jMacro.delay();
|
|
|
|
|
// 定位主程序
|
|
|
|
|
ScreenRect rect = jMacro.matchPic(gameScreen, "野外_L444,888", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
Logger.info("程序主界面已就绪");
|
|
|
|
|
return rect;
|
|
|
|
|
{// 定位野外
|
|
|
|
|
jMacro.delay();
|
|
|
|
|
ScreenRect rect = jMacro.matchPic(screenRect, "野外_L444,888", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
Logger.info("当前区域【城镇】");
|
|
|
|
|
return rect;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 定位城镇
|
|
|
|
|
{
|
|
|
|
|
jMacro.delay();
|
|
|
|
|
ScreenRect rect = jMacro.matchPic(screenRect, "城镇_L456,887", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
Logger.info("当前区域【野外】");
|
|
|
|
|
Logger.info("返回区域【城镇】");
|
|
|
|
|
jMacro.mouseLeftClick(rect);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}, 30, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
|
|
if (城镇 == null) {
|
|
|
|
|
if (城镇 == null && schedule != null) {
|
|
|
|
|
schedule.cancel(true);
|
|
|
|
|
schedule = null;
|
|
|
|
|
Logger.info("未扫描到主界面:退出线程");
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -121,17 +125,21 @@ public class DemoThread extends JMacroThread {
|
|
|
|
|
Logger.info("进入任务线程");
|
|
|
|
|
TaskUtil.timeTask((Runnable) () -> {
|
|
|
|
|
while (true) {
|
|
|
|
|
// 欢迎回来弹框
|
|
|
|
|
jMacro.delayNormal();
|
|
|
|
|
new Task_离线收益(jMacro, screenRect).run();
|
|
|
|
|
|
|
|
|
|
// 矿场攻击检测任务
|
|
|
|
|
jMacro.delayNormal();
|
|
|
|
|
new TaskMineAttack(jMacro, gameScreen).run();
|
|
|
|
|
new Task_采矿被攻击(jMacro, screenRect).run();
|
|
|
|
|
|
|
|
|
|
// 矿场攻击检测任务
|
|
|
|
|
jMacro.delayNormal();
|
|
|
|
|
new TaskRewards(jMacro, gameScreen).run();
|
|
|
|
|
new Task_探险领取(jMacro, screenRect).run();
|
|
|
|
|
|
|
|
|
|
// 自动采矿任务
|
|
|
|
|
jMacro.delayNormal();
|
|
|
|
|
new TaskMining(jMacro, gameScreen).run();
|
|
|
|
|
new Task_自动采矿(jMacro, screenRect).run();
|
|
|
|
|
}
|
|
|
|
|
}, 10, TimeUnit.MINUTES);
|
|
|
|
|
}
|
|
|
|
|