自动采集

wjdr
wangbing 1 year ago
parent c12a85db47
commit d365a1fcf8

@ -3,7 +3,6 @@
<component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources/lib" charset="UTF-8" />
<file url="PROJECT" charset="UTF-8" /> <file url="PROJECT" charset="UTF-8" />
</component> </component>
</project> </project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -51,13 +51,13 @@
</dependency> </dependency>
<!-- 皮肤依赖 --> <!-- 皮肤依赖 -->
<dependency> <!-- <dependency>-->
<groupId>org.jb2011.lnf</groupId> <!-- <groupId>org.jb2011.lnf</groupId>-->
<artifactId>beautyeye</artifactId> <!-- <artifactId>beautyeye</artifactId>-->
<version>1.0.0</version> <!-- <version>1.0.0</version>-->
<scope>system</scope> <!-- <scope>system</scope>-->
<systemPath>${project.basedir}/src/main/resources/lib/beautyeye_lnf.jar</systemPath> <!-- <systemPath>${project.basedir}/src/main/resources/lib/beautyeye_lnf.jar</systemPath>-->
</dependency> <!-- </dependency>-->
</dependencies> </dependencies>
<build> <build>

@ -287,6 +287,9 @@ public class JMacro {
* @return * @return
*/ */
public ScreenRect findPic(ScreenRect screenRect, String legendName, double minSimilar) { public ScreenRect findPic(ScreenRect screenRect, String legendName, double minSimilar) {
if (!legendName.endsWith(".png")) {
legendName = legendName + ".png";
}
return findPic(screenRect, new File(legend, legendName), minSimilar); return findPic(screenRect, new File(legend, legendName), minSimilar);
} }
@ -314,6 +317,7 @@ public class JMacro {
public ScreenRect findPic(ScreenRect screenRect, BufferedImage pic, double minSimilar) { public ScreenRect findPic(ScreenRect screenRect, BufferedImage pic, double minSimilar) {
// 当查找区域比图片还小时,直接返回失败 // 当查找区域比图片还小时,直接返回失败
if (screenRect.getWidth() < pic.getWidth() || screenRect.getHeight() < pic.getHeight()) { if (screenRect.getWidth() < pic.getWidth() || screenRect.getHeight() < pic.getHeight()) {
Logger.error("视口尺寸小于图片");
return null; return null;
} }
@ -352,6 +356,11 @@ public class JMacro {
} }
} }
} }
// try {
// ImgUtil.write(screen,"png", new FileOutputStream("D://1.png"));
// } catch (FileNotFoundException e) {
//
// }
return null; return null;
} }
@ -458,6 +467,55 @@ public class JMacro {
}, time, unit); }, time, unit);
} }
/**
*
*
* @param rect
* @param legendName
* @param minSimilar
* @return
*/
public ScreenRect waitAndMatchPic(ScreenRect rect, String legendName, double minSimilar) {
if (!legendName.endsWith(".png")) {
legendName = legendName + ".png";
}
return waitAndMatchPic(rect, new File(legend, legendName), minSimilar, 10, TimeUnit.SECONDS);
}
/**
*
*
* @param rect
* @param file
* @param minSimilar
* @return
*/
public ScreenRect waitAndMatchPic(ScreenRect rect, File file, double minSimilar) {
return waitAndMatchPic(rect, file, minSimilar, 10, TimeUnit.SECONDS);
}
/**
*
*
* @param rect
* @param file
* @param minSimilar
* @param time
* @param unit
* @return
*/
public ScreenRect waitAndMatchPic(ScreenRect rect, File file, double minSimilar, long time, TimeUnit unit) {
return TaskUtil.timeTask(() -> {
while (true) {
delayTap();
ScreenRect matchPic = matchPic(rect, file, minSimilar);
if (matchPic != null) {
return matchPic;
}
}
}, time, unit);
}
/** /**
* *
* *
@ -467,6 +525,10 @@ public class JMacro {
* @return * @return
*/ */
public ScreenRect matchPic(ScreenRect rect, File file, double minSimilar) { public ScreenRect matchPic(ScreenRect rect, File file, double minSimilar) {
if (!file.exists()) {
Logger.error("file [{}] not exist", file.getAbsolutePath());
return null;
}
String name = file.getName(); String name = file.getName();
int offsetX = 0; int offsetX = 0;
int offsetY = 0; int offsetY = 0;
@ -480,7 +542,6 @@ public class JMacro {
BufferedImage image = Imager.load(file); BufferedImage image = Imager.load(file);
screenRect.setRight(screenRect.getLeft() + image.getWidth()); screenRect.setRight(screenRect.getLeft() + image.getWidth());
screenRect.setBottom(screenRect.getTop() + image.getHeight()); screenRect.setBottom(screenRect.getTop() + image.getHeight());
System.out.println(screenRect.toString());
return findPic(screenRect, image, minSimilar); return findPic(screenRect, image, minSimilar);
} }
@ -493,6 +554,9 @@ public class JMacro {
* @return * @return
*/ */
public ScreenRect matchPic(ScreenRect rect, String legendName, double minSimilar) { public ScreenRect matchPic(ScreenRect rect, String legendName, double minSimilar) {
if (!legendName.endsWith(".png")) {
legendName = legendName + ".png";
}
return matchPic(rect, new File(legend, legendName), minSimilar); return matchPic(rect, new File(legend, legendName), minSimilar);
} }

@ -7,6 +7,7 @@ import cn.hutool.core.util.RandomUtil;
import com.example.jmacro.wjdr.base.ScreenRect; import com.example.jmacro.wjdr.base.ScreenRect;
import com.example.jmacro.wjdr.task.TaskMineAttack; import com.example.jmacro.wjdr.task.TaskMineAttack;
import com.example.jmacro.wjdr.task.TaskMining; import com.example.jmacro.wjdr.task.TaskMining;
import com.example.jmacro.wjdr.task.TaskRewards;
import com.example.jmacro.wjdr.util.Capture; import com.example.jmacro.wjdr.util.Capture;
import com.example.jmacro.wjdr.util.Logger; import com.example.jmacro.wjdr.util.Logger;
import com.example.jmacro.wjdr.util.TaskUtil; import com.example.jmacro.wjdr.util.TaskUtil;
@ -58,11 +59,11 @@ public class MainTask extends JFrame {
public void start() throws AWTException { public void start() throws AWTException {
// 加载主题 // 加载主题
try { // try {
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF(); // org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
} catch (Exception e) { // } catch (Exception e) {
e.printStackTrace(); // e.printStackTrace();
} // }
// 设置标题 // 设置标题
setTitle("无限工具"); setTitle("无限工具");
// 设置图标 // 设置图标
@ -155,6 +156,10 @@ public class MainTask extends JFrame {
public MacroThread(JMacro jMacro) { public MacroThread(JMacro jMacro) {
super(jMacro); super(jMacro);
}
@Override
public void run() {
// 定位mumu bar // 定位mumu bar
Logger.info("定位慕慕窗口"); Logger.info("定位慕慕窗口");
ScreenRect mumu = jMacro.findPic("慕慕_工具栏", 0.95d); ScreenRect mumu = jMacro.findPic("慕慕_工具栏", 0.95d);
@ -170,10 +175,6 @@ public class MainTask extends JFrame {
gameScreen.setBottom(mumu.getBottom() + 951); gameScreen.setBottom(mumu.getBottom() + 951);
Logger.info("应用窗口位置:" + gameScreen.toString()); Logger.info("应用窗口位置:" + gameScreen.toString());
Logger.info("应用窗口大小:{}x{}", gameScreen.getRight() - gameScreen.getLeft(), gameScreen.getBottom() - gameScreen.getTop()); Logger.info("应用窗口大小:{}x{}", gameScreen.getRight() - gameScreen.getLeft(), gameScreen.getBottom() - gameScreen.getTop());
}
@Override
public void run() {
// 获取启动图标 // 获取启动图标
Logger.info("定位启动图标"); Logger.info("定位启动图标");
ScreenRect launch = jMacro.waitAndFindPic(gameScreen, "启动图标", 0.8); ScreenRect launch = jMacro.waitAndFindPic(gameScreen, "启动图标", 0.8);
@ -190,7 +191,7 @@ public class MainTask extends JFrame {
while (true) { while (true) {
jMacro.delay(); jMacro.delay();
{ // 定位弹框,关闭弹框 { // 定位弹框,关闭弹框
ScreenRect rect = jMacro.findPic(gameScreen, "首页_广告关闭按钮", 0.95d); ScreenRect rect = jMacro.matchPic(gameScreen, "L454,41-城镇_充值", 0.1d);
if (rect != null) { if (rect != null) {
jMacro.mouseLeftClick(rect); jMacro.mouseLeftClick(rect);
Logger.info("检测到广告弹框,关闭弹框"); Logger.info("检测到广告弹框,关闭弹框");
@ -199,7 +200,7 @@ public class MainTask extends JFrame {
jMacro.delay(); jMacro.delay();
{ // 定位离线收益弹框,关闭弹框 { // 定位离线收益弹框,关闭弹框
ScreenRect rect = jMacro.matchPic(gameScreen, new File("legend", "L204,734-城镇_离线收益.png"), 0.9); ScreenRect rect = jMacro.matchPic(gameScreen, "L204,734-城镇_离线收益", 0.9);
if (rect != null) { if (rect != null) {
jMacro.mouseLeftClick(rect); jMacro.mouseLeftClick(rect);
Logger.info("检测到离线收益弹框,关闭弹框"); Logger.info("检测到离线收益弹框,关闭弹框");
@ -208,13 +209,13 @@ public class MainTask extends JFrame {
jMacro.delay(); jMacro.delay();
// 定位主程序 // 定位主程序
ScreenRect rect = jMacro.matchPic(gameScreen, new File("legend", "L444,888-野外.png"), 0.9); ScreenRect rect = jMacro.matchPic(gameScreen, "L444,888-野外", 0.9);
if (rect != null) { if (rect != null) {
Logger.info("程序主界面已就绪"); Logger.info("程序主界面已就绪");
return rect; return rect;
} }
} }
}, 30 * 1000, TimeUnit.MILLISECONDS); }, 30, TimeUnit.SECONDS);
if ( == null) { if ( == null) {
schedule.cancel(true); schedule.cancel(true);
@ -234,6 +235,10 @@ public class MainTask extends JFrame {
jMacro.delayNormal(); jMacro.delayNormal();
new TaskMineAttack(jMacro, gameScreen).run(); new TaskMineAttack(jMacro, gameScreen).run();
// 矿场攻击检测任务
jMacro.delayNormal();
new TaskRewards(jMacro, gameScreen).run();
// 自动采矿任务 // 自动采矿任务
jMacro.delayNormal(); jMacro.delayNormal();
new TaskMining(jMacro, gameScreen).run(); new TaskMining(jMacro, gameScreen).run();

@ -18,8 +18,13 @@ public class TaskMining extends BaseTask {
public void run() { public void run() {
Logger.info("》》》自动采矿开始》》》"); Logger.info("》》》自动采矿开始》》》");
Logger.info("判断是否在野外");
ScreenRect = jMacro.waitAndMatchPic(this.screenRect, "L449,887-城镇", 0.9);
if ( != null) {
Logger.info("当前界面【野外】");
} else {
Logger.info("定位【野外】"); Logger.info("定位【野外】");
ScreenRect = jMacro.waitAndFindPic(screenRect, new File("legend", "城镇_野外.png"), 0.99); ScreenRect = jMacro.waitAndMatchPic(this.screenRect, "城镇_野外", 0.99);
if ( == null) { if ( == null) {
Logger.error("定位【野外】失败,采矿终止"); Logger.error("定位【野外】失败,采矿终止");
return; return;
@ -29,9 +34,10 @@ public class TaskMining extends BaseTask {
Logger.info("点击【野外】,坐标{}", JSONUtil.toJsonStr(.getCenter())); Logger.info("点击【野外】,坐标{}", JSONUtil.toJsonStr(.getCenter()));
jMacro.mouseLeftClick(); jMacro.mouseLeftClick();
Logger.info("定位野外按钮成功"); Logger.info("定位野外按钮成功");
}
Logger.info("定位资源搜索按钮"); Logger.info("定位资源搜索按钮");
ScreenRect = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_搜索.png"), 1); ScreenRect = jMacro.waitAndMatchPic(this.screenRect, "L15,632-野外_搜索", 0.8);
if ( == null) { if ( == null) {
Logger.error("未检测到【资源搜索按钮】,采矿终止"); Logger.error("未检测到【资源搜索按钮】,采矿终止");
return; return;
@ -50,18 +56,19 @@ public class TaskMining extends BaseTask {
} }
} }
ScreenRect = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_资源_搜索.png"), 0.98); // 检测是否是搜索界面
ScreenRect = jMacro.waitAndMatchPic(this.screenRect, "L233,881-野外_搜索", 0.98);
if ( != null) { if ( != null) {
Logger.info("退出资源搜索界面"); Logger.info("退出资源搜索界面");
jMacro.mouseLeftClick(screenRect); jMacro.mouseLeftClick(this.screenRect);
} }
ScreenRect = jMacro.waitAndFindPic(screenRect, new File("legend", "城镇.png"), 0.9); ScreenRect 1 = jMacro.waitAndMatchPic(this.screenRect, "L456,887-城镇", 0.9);
if ( == null) { if (1 == null) {
Logger.error("未检测到【城镇】,采矿终止"); Logger.error("未检测到【城镇】,采矿终止");
return; return;
} }
Logger.info("返回城镇");
Logger.info("》》》自动采矿结束,返回城镇》》》"); Logger.info("》》》自动采矿结束,返回城镇》》》");
} }

@ -0,0 +1,64 @@
package com.example.jmacro.wjdr.task;
import com.example.jmacro.wjdr.JMacro;
import com.example.jmacro.wjdr.base.ScreenRect;
import com.example.jmacro.wjdr.util.Logger;
public class TaskRewards extends BaseTask {
public TaskRewards(JMacro jMacro, ScreenRect screenRect) {
super(jMacro, screenRect);
}
@Override
public void run() {
Logger.info("》》》探险奖励领取开始》》》");
Logger.info("定位【探险】按钮");
ScreenRect TAB_ = jMacro.waitAndMatchPic(this.screenRect, "L35,881-TAB_探险", 0.9);
if (TAB_ == null) {
return;
}
Logger.info("点击【探险】按钮");
jMacro.mouseLeftClick(TAB_);
ScreenRect _ = jMacro.waitAndMatchPic(this.screenRect, "L240,854-探险_按钮", 0.9);
if (_ == null) {
Logger.info("进入探险界面失败");
return;
}
Logger.info("进入探险界面成功");
Logger.info("定位领取按钮");
ScreenRect _ = jMacro.waitAndMatchPic(this.screenRect, "L426,667-探险_领取", 0.8);
if (_ == null) {
Logger.error("未检测到【探险_领取】领取终止");
return;
}
Logger.info("定位领取按钮成功,准备领取:{}", _.toString());
jMacro.mouseLeftClick(_);
ScreenRect _2 = jMacro.waitAndMatchPic(this.screenRect, "L230,664-探险_领取2", 0.8);
if (_2 == null) {
Logger.error("任务终止");
return;
}
jMacro.mouseLeftClick(_2);
ScreenRect _ = jMacro.waitAndMatchPic(this.screenRect, "L196,218-探险_获得奖励", 0.8);
if (_ == null) {
Logger.error("任务终止");
return;
}
jMacro.mouseLeftClick(_);
ScreenRect _ = jMacro.waitAndMatchPic(this.screenRect, "L4,4-探险_返回", 0.8);
if (_ == null) {
Logger.error("任务终止");
return;
}
jMacro.mouseLeftClick(_);
Logger.info("》》》探险奖励领取结束,返回城镇》》》");
}
}

@ -174,11 +174,11 @@ public class Capture extends JFrame {
} }
public int getCaptureX() { public int getCaptureX() {
return (int) Math.min(start.getX(), end.getX()) + originX; return (int) Math.min(start.getX(), end.getX());
} }
public int getCaptureY() { public int getCaptureY() {
return (int) Math.min(start.getY(), end.getY()) + originY; return (int) Math.min(start.getY(), end.getY());
} }
public int getCaptureWidth() { public int getCaptureWidth() {
@ -193,10 +193,9 @@ public class Capture extends JFrame {
// 上一次保存目录 // 上一次保存目录
String lastPath = preferences.get(LAST_PATH, ""); String lastPath = preferences.get(LAST_PATH, "");
// 默认文件名 // 默认文件名
String prefix = "L" + getCaptureX() + "," + getCaptureY() + "-"; String prefix = "L" + (getCaptureX() - originX) + "," + (getCaptureY() - originY) + "-";
String filename = prefix + System.currentTimeMillis() + ".png"; String filename = prefix + System.currentTimeMillis() + ".png";
JFileChooser jFileChooser = new JFileChooser(); JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setFileFilter(new FileNameExtensionFilter("png", "png")); jFileChooser.setFileFilter(new FileNameExtensionFilter("png", "png"));
jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

Loading…
Cancel
Save

Powered by TurnKey Linux.