|
|
|
@ -1,5 +1,7 @@
|
|
|
|
|
package com.example.jmacro.wjdr.demo;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import com.example.jmacro.wjdr.JMacro;
|
|
|
|
|
import com.example.jmacro.wjdr.JMacroThread;
|
|
|
|
|
import com.example.jmacro.wjdr.base.ViewRect;
|
|
|
|
@ -31,6 +33,11 @@ public class DemoThread extends JMacroThread {
|
|
|
|
|
*/
|
|
|
|
|
private final String workEnd = "24:00:00";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 最大工作时间(ms)
|
|
|
|
|
*/
|
|
|
|
|
private final long workTime = 30 * 60 * 1000;
|
|
|
|
|
|
|
|
|
|
public DemoThread(JMacro macro) {
|
|
|
|
|
super(macro);
|
|
|
|
|
}
|
|
|
|
@ -58,6 +65,9 @@ public class DemoThread extends JMacroThread {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
|
Logger.info("任务线程开始", DateUtil.date(startTime).toString("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
Logger.info("任务线程ID={}", Thread.currentThread().getId());
|
|
|
|
|
// 获取启动图标
|
|
|
|
|
Logger.info("定位启动图标");
|
|
|
|
|
ViewRect launch = macro.waitAndFindPic(viewRect, "启动图标", 0.9, 5, TimeUnit.SECONDS);
|
|
|
|
@ -67,71 +77,70 @@ public class DemoThread extends JMacroThread {
|
|
|
|
|
macro.delay();
|
|
|
|
|
macro.mouseLeftClick(launch);
|
|
|
|
|
} else {
|
|
|
|
|
Logger.info("启动图标失败,继续定位主界面");
|
|
|
|
|
Logger.error("未定位到图标,可能已进入游戏");
|
|
|
|
|
Logger.info("继续定位城镇");
|
|
|
|
|
}
|
|
|
|
|
Logger.info("定位主界面");
|
|
|
|
|
ViewRect 城镇 = TaskUtil.timeTask(() -> {
|
|
|
|
|
while (true) {
|
|
|
|
|
macro.delay();
|
|
|
|
|
{ // 定位弹框,关闭弹框
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "城镇_充值_L448,36", 0.8d);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
macro.mouseLeftClick(rect);
|
|
|
|
|
Logger.info("检测到广告弹框,关闭弹框");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Logger.info("定位城镇");
|
|
|
|
|
// 定位城镇
|
|
|
|
|
Boolean inMain = TaskUtil.retryTask(() -> {
|
|
|
|
|
{ // 定位弹框,关闭弹框
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "城镇_充值_L448,36", 0.8d);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
macro.mouseLeftClick(rect);
|
|
|
|
|
Logger.info("检测到充值广告弹框,关闭弹框");
|
|
|
|
|
}
|
|
|
|
|
{// 定位离线收益
|
|
|
|
|
macro.delay();
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "城镇_离线收益_L204,734", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
macro.mouseLeftClick(rect);
|
|
|
|
|
Logger.info("检测到离线收益弹框,关闭弹框");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
{// 定位离线收益
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "城镇_离线收益_L204,734", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
macro.mouseLeftClick(rect);
|
|
|
|
|
Logger.info("检测到离线收益弹框,关闭弹框");
|
|
|
|
|
}
|
|
|
|
|
{// 定位野外
|
|
|
|
|
macro.delay();
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "野外_L444,888", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
Logger.info("当前区域【城镇】");
|
|
|
|
|
return rect;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 定位城镇
|
|
|
|
|
{
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "城镇_L456,887", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
Logger.info("当前区域【野外】");
|
|
|
|
|
Logger.info("返回区域【城镇】");
|
|
|
|
|
macro.mouseLeftClick(rect);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// 定位城镇
|
|
|
|
|
{
|
|
|
|
|
macro.delay();
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "城镇_L456,887", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
Logger.info("当前区域【野外】");
|
|
|
|
|
Logger.info("返回区域【城镇】");
|
|
|
|
|
macro.mouseLeftClick(rect);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
{// 定位野外
|
|
|
|
|
ViewRect rect = macro.matchPic(viewRect, "野外_L444,888", 0.9);
|
|
|
|
|
if (rect != null) {
|
|
|
|
|
Logger.info("当前区域【城镇】");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}, 30, TimeUnit.SECONDS);
|
|
|
|
|
return false;
|
|
|
|
|
}, 10, 10);
|
|
|
|
|
|
|
|
|
|
if (城镇 == null) {
|
|
|
|
|
Logger.info("未扫描到主界面:退出线程");
|
|
|
|
|
if (!Convert.toBool(inMain, false)) {
|
|
|
|
|
Logger.info("未进入城镇:退出线程");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Logger.info("进入主界面");
|
|
|
|
|
Logger.info("进入城镇成功");
|
|
|
|
|
|
|
|
|
|
Logger.info("进入任务线程");
|
|
|
|
|
while (!Thread.currentThread().isInterrupted()) {
|
|
|
|
|
// 欢迎回来弹框
|
|
|
|
|
macro.delayNormal();
|
|
|
|
|
new Task_离线收益(macro, viewRect).run();
|
|
|
|
|
Logger.info("领取探险奖励");
|
|
|
|
|
macro.delay();
|
|
|
|
|
new Task_离线收益(macro, viewRect).run();
|
|
|
|
|
|
|
|
|
|
Logger.info("启动循环任务");
|
|
|
|
|
while (!Thread.currentThread().isInterrupted()) {
|
|
|
|
|
// 矿场攻击检测任务
|
|
|
|
|
macro.delayNormal();
|
|
|
|
|
macro.delay();
|
|
|
|
|
new Task_采矿被攻击(macro, viewRect).run();
|
|
|
|
|
|
|
|
|
|
// 矿场攻击检测任务
|
|
|
|
|
macro.delayNormal();
|
|
|
|
|
macro.delay();
|
|
|
|
|
new Task_探险领取(macro, viewRect).run();
|
|
|
|
|
|
|
|
|
|
// 自动采矿任务
|
|
|
|
|
macro.delayNormal();
|
|
|
|
|
macro.delay();
|
|
|
|
|
new Task_自动采矿(macro, viewRect).run();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|