自动采集

wjdr
wangbing 1 year ago
parent c12a85db47
commit d365a1fcf8

@ -3,7 +3,6 @@
<component name="Encoding" defaultCharsetForPropertiesFiles="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/lib" charset="UTF-8" />
<file url="PROJECT" charset="UTF-8" />
</component>
</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>
<groupId>org.jb2011.lnf</groupId>
<artifactId>beautyeye</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/beautyeye_lnf.jar</systemPath>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.jb2011.lnf</groupId>-->
<!-- <artifactId>beautyeye</artifactId>-->
<!-- <version>1.0.0</version>-->
<!-- <scope>system</scope>-->
<!-- <systemPath>${project.basedir}/src/main/resources/lib/beautyeye_lnf.jar</systemPath>-->
<!-- </dependency>-->
</dependencies>
<build>

@ -287,6 +287,9 @@ public class JMacro {
* @return
*/
public ScreenRect findPic(ScreenRect screenRect, String legendName, double minSimilar) {
if (!legendName.endsWith(".png")) {
legendName = legendName + ".png";
}
return findPic(screenRect, new File(legend, legendName), minSimilar);
}
@ -314,6 +317,7 @@ public class JMacro {
public ScreenRect findPic(ScreenRect screenRect, BufferedImage pic, double minSimilar) {
// 当查找区域比图片还小时,直接返回失败
if (screenRect.getWidth() < pic.getWidth() || screenRect.getHeight() < pic.getHeight()) {
Logger.error("视口尺寸小于图片");
return null;
}
@ -352,6 +356,11 @@ public class JMacro {
}
}
}
// try {
// ImgUtil.write(screen,"png", new FileOutputStream("D://1.png"));
// } catch (FileNotFoundException e) {
//
// }
return null;
}
@ -458,6 +467,55 @@ public class JMacro {
}, 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
*/
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();
int offsetX = 0;
int offsetY = 0;
@ -480,7 +542,6 @@ public class JMacro {
BufferedImage image = Imager.load(file);
screenRect.setRight(screenRect.getLeft() + image.getWidth());
screenRect.setBottom(screenRect.getTop() + image.getHeight());
System.out.println(screenRect.toString());
return findPic(screenRect, image, minSimilar);
}
@ -493,6 +554,9 @@ public class JMacro {
* @return
*/
public ScreenRect matchPic(ScreenRect rect, String legendName, double minSimilar) {
if (!legendName.endsWith(".png")) {
legendName = legendName + ".png";
}
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.task.TaskMineAttack;
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.Logger;
import com.example.jmacro.wjdr.util.TaskUtil;
@ -58,11 +59,11 @@ public class MainTask extends JFrame {
public void start() throws AWTException {
// 加载主题
try {
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
} catch (Exception e) {
e.printStackTrace();
}
// try {
// org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
// } catch (Exception e) {
// e.printStackTrace();
// }
// 设置标题
setTitle("无限工具");
// 设置图标
@ -155,6 +156,10 @@ public class MainTask extends JFrame {
public MacroThread(JMacro jMacro) {
super(jMacro);
}
@Override
public void run() {
// 定位mumu bar
Logger.info("定位慕慕窗口");
ScreenRect mumu = jMacro.findPic("慕慕_工具栏", 0.95d);
@ -170,10 +175,6 @@ public class MainTask extends JFrame {
gameScreen.setBottom(mumu.getBottom() + 951);
Logger.info("应用窗口位置:" + gameScreen.toString());
Logger.info("应用窗口大小:{}x{}", gameScreen.getRight() - gameScreen.getLeft(), gameScreen.getBottom() - gameScreen.getTop());
}
@Override
public void run() {
// 获取启动图标
Logger.info("定位启动图标");
ScreenRect launch = jMacro.waitAndFindPic(gameScreen, "启动图标", 0.8);
@ -190,7 +191,7 @@ public class MainTask extends JFrame {
while (true) {
jMacro.delay();
{ // 定位弹框,关闭弹框
ScreenRect rect = jMacro.findPic(gameScreen, "首页_广告关闭按钮", 0.95d);
ScreenRect rect = jMacro.matchPic(gameScreen, "L454,41-城镇_充值", 0.1d);
if (rect != null) {
jMacro.mouseLeftClick(rect);
Logger.info("检测到广告弹框,关闭弹框");
@ -199,7 +200,7 @@ public class MainTask extends JFrame {
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) {
jMacro.mouseLeftClick(rect);
Logger.info("检测到离线收益弹框,关闭弹框");
@ -208,13 +209,13 @@ public class MainTask extends JFrame {
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) {
Logger.info("程序主界面已就绪");
return rect;
}
}
}, 30 * 1000, TimeUnit.MILLISECONDS);
}, 30, TimeUnit.SECONDS);
if ( == null) {
schedule.cancel(true);
@ -234,6 +235,10 @@ public class MainTask extends JFrame {
jMacro.delayNormal();
new TaskMineAttack(jMacro, gameScreen).run();
// 矿场攻击检测任务
jMacro.delayNormal();
new TaskRewards(jMacro, gameScreen).run();
// 自动采矿任务
jMacro.delayNormal();
new TaskMining(jMacro, gameScreen).run();

@ -18,20 +18,26 @@ public class TaskMining extends BaseTask {
public void run() {
Logger.info("》》》自动采矿开始》》》");
Logger.info("定位【野外】");
ScreenRect = jMacro.waitAndFindPic(screenRect, new File("legend", "城镇_野外.png"), 0.99);
if ( == null) {
Logger.error("定位【野外】失败,采矿终止");
return;
}
Logger.error("定位【野外】成功,{}", .toString());
Logger.info("判断是否在野外");
ScreenRect = jMacro.waitAndMatchPic(this.screenRect, "L449,887-城镇", 0.9);
if ( != null) {
Logger.info("当前界面【野外】");
} else {
Logger.info("定位【野外】");
ScreenRect = jMacro.waitAndMatchPic(this.screenRect, "城镇_野外", 0.99);
if ( == null) {
Logger.error("定位【野外】失败,采矿终止");
return;
}
Logger.error("定位【野外】成功,{}", .toString());
Logger.info("点击【野外】,坐标{}", JSONUtil.toJsonStr(.getCenter()));
jMacro.mouseLeftClick();
Logger.info("定位野外按钮成功");
Logger.info("点击【野外】,坐标{}", JSONUtil.toJsonStr(.getCenter()));
jMacro.mouseLeftClick();
Logger.info("定位野外按钮成功");
}
Logger.info("定位资源搜索按钮");
ScreenRect = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_搜索.png"), 1);
ScreenRect = jMacro.waitAndMatchPic(this.screenRect, "L15,632-野外_搜索", 0.8);
if ( == null) {
Logger.error("未检测到【资源搜索按钮】,采矿终止");
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) {
Logger.info("退出资源搜索界面");
jMacro.mouseLeftClick(screenRect);
jMacro.mouseLeftClick(this.screenRect);
}
ScreenRect = jMacro.waitAndFindPic(screenRect, new File("legend", "城镇.png"), 0.9);
if ( == null) {
ScreenRect 1 = jMacro.waitAndMatchPic(this.screenRect, "L456,887-城镇", 0.9);
if (1 == null) {
Logger.error("未检测到【城镇】,采矿终止");
return;
}
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() {
return (int) Math.min(start.getX(), end.getX()) + originX;
return (int) Math.min(start.getX(), end.getX());
}
public int getCaptureY() {
return (int) Math.min(start.getY(), end.getY()) + originY;
return (int) Math.min(start.getY(), end.getY());
}
public int getCaptureWidth() {
@ -193,10 +193,9 @@ public class Capture extends JFrame {
// 上一次保存目录
String lastPath = preferences.get(LAST_PATH, "");
// 默认文件名
String prefix = "L" + getCaptureX() + "," + getCaptureY() + "-";
String prefix = "L" + (getCaptureX() - originX) + "," + (getCaptureY() - originY) + "-";
String filename = prefix + System.currentTimeMillis() + ".png";
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setFileFilter(new FileNameExtensionFilter("png", "png"));
jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

Loading…
Cancel
Save

Powered by TurnKey Linux.