diff --git a/src/main/java/xyz/wbsite/jmacro/JMacro.java b/src/main/java/xyz/wbsite/jmacro/JMacro.java index 662998d..b8a9aad 100644 --- a/src/main/java/xyz/wbsite/jmacro/JMacro.java +++ b/src/main/java/xyz/wbsite/jmacro/JMacro.java @@ -453,7 +453,7 @@ public abstract class JMacro { } } } - if (maxSimilar > 0.5D) { + if (fast) { ImageUtil.show(viewRect); Logger.info("最大相似度{}", NumberUtil.formatPercent(maxSimilar, 0)); } @@ -537,7 +537,7 @@ public abstract class JMacro { * @return 匹配区域 */ public ViewRect findLegend(Legend legend, double minSimilar) { - return findLegend(getFocusRect(), legend, minSimilar); + return findLegend(getFocusRect(), legend, minSimilar, true); } /** @@ -559,8 +559,30 @@ public abstract class JMacro { * @return 匹配区域 */ public ViewRect findLegend(ViewRect rect, Legend legend, double minSimilar) { + return findLegend(rect, legend, minSimilar, false); + } + + /** + * 查找图例 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配区域 + */ + public ViewRect findLegend(ViewRect rect, String legend, double minSimilar, boolean fast) { + return findLegend(rect, Legend.inflate(legend), minSimilar, fast); + } + + /** + * 查找图例 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配区域 + */ + public ViewRect findLegend(ViewRect rect, Legend legend, double minSimilar, boolean fast) { Logger.info("查找图例:{}", legend.getName()); - return findPic(rect, legend.getImage(), minSimilar, true); + return findPic(rect, legend.getImage(), minSimilar, fast); } /** @@ -648,7 +670,9 @@ public abstract class JMacro { public boolean matchLegendAndClick(String legend, double minSimilar) { ViewRect matchLegend = matchLegend(legend, minSimilar); if (matchLegend != null) { + Logger.info("点击【{}】", legend); mouseLeftClick(matchLegend); + delay(500); return true; } else { return false; @@ -665,7 +689,9 @@ public abstract class JMacro { public boolean matchLegendAndClick(Legend legend, double minSimilar) { ViewRect matchLegend = matchLegend(legend, minSimilar); if (matchLegend != null) { + Logger.info("点击【{}】", legend); mouseLeftClick(matchLegend); + delay(500); return true; } else { return false; @@ -882,7 +908,8 @@ public abstract class JMacro { countMap.put(c, countMap.getOrDefault(c, 0) + 1); } - return countMap.getOrDefault(color, 0); + double has = countMap.getOrDefault(color, 0); + return has / colors.size(); } /** @@ -894,7 +921,9 @@ public abstract class JMacro { ViewRect viewRect = of(left, top, right, bottom); boolean hasColor = hasColor(viewRect, color); if (hasColor) { + Logger.info("点击【{}】", viewRect); mouseLeftClick(viewRect); + delay(500); return true; } else { return false; @@ -921,7 +950,9 @@ public abstract class JMacro { public boolean hasColorAndClick(ViewRect rect, String... color) { boolean hasColor = hasColor(rect, color); if (hasColor) { + Logger.info("点击【{}】", rect); mouseLeftClick(rect); + delay(500); return true; } else { return false; diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java b/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java index d8c7396..9ce980b 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java @@ -93,40 +93,16 @@ public class MacroForWJDR extends JMacro { new Task_定位城镇(this, focusRect).run(); // 可按优先级排序以下任务 - { - // 矿场攻击检测任务 - new Task_采矿被攻击(this, focusRect).run(); - - // 避难者 - new Task_收留避难者(this, focusRect).run(); - - // 自动野怪 - new Task_自动野怪(this, focusRect).run(); - - // 自动练兵 - new Task_自动练兵(this, focusRect).run(); - - // 自动采矿任务 - new Task_自动采矿(this, focusRect).run(); - - // 探险领取 - new Task_任务奖励领取(this, focusRect).run(); - - // 探险领取 - new Task_探险奖励领取(this, focusRect).run(); - - // 邮箱礼包领取 - new Task_邮件奖励领取(this, focusRect).run(); - - // 邮箱礼包领取 - new Task_邮件奖励领取(this, focusRect).run(); - - // 仓库奖励领取 - new Task_仓库奖励领取(this, focusRect).run(); - } - - Logger.info("休眠1分钟..."); - delay(60 * 1000); + new Task_采矿被攻击(this, focusRect).run(); + new Task_收留避难者(this, focusRect).run(); + new Task_自动野怪(this, focusRect).run(); + new Task_自动练兵(this, focusRect).run(); + new Task_自动采矿(this, focusRect).run(); + new Task_英雄招募领取(this, focusRect).run(); + new Task_任务奖励领取(this, focusRect).run(); + new Task_探险奖励领取(this, focusRect).run(); + new Task_邮件奖励领取(this, focusRect).run(); + new Task_仓库奖励领取(this, focusRect).run(); } } } diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java index 6cffd58..ed7e53e 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java @@ -39,10 +39,8 @@ public class Task_仓库奖励领取 extends BaseTask { ViewRect 仓库_补给完成 = macro.matchLegend("仓库_补给完成", 0.9); if (仓库_补给完成 == null) { Logger.info("关闭面板"); - ViewRect rect = macro.matchLegend("城镇_关闭面板", 0.6); - if (rect != null) { - macro.mouseLeftClick(rect); - } else { + boolean 城镇_关闭面板 = macro.matchLegendAndClick("城镇_关闭面板", 0.6); + if (!城镇_关闭面板) { Logger.error("关闭面板失败"); } return; @@ -75,7 +73,7 @@ public class Task_仓库奖励领取 extends BaseTask { macro.mouseLeftClick(仓库_体力罐头); macro.delay(1000); - ViewRect 仓库_体力罐头领取 = macro.matchLegend("仓库_体力罐头领取", 0.8); + ViewRect 仓库_体力罐头领取 = macro.matchLegend("仓库_体力罐头领取", 0.6); if (仓库_体力罐头领取 != null) { macro.mouseLeftClick(仓库_体力罐头领取); } diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_任务奖励领取.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_任务奖励领取.java index a7ee7e0..d8a0372 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_任务奖励领取.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_任务奖励领取.java @@ -60,15 +60,21 @@ public class Task_任务奖励领取 extends BaseTask { @Override public void task(JMacro macro, ViewRect viewRect) { Logger.info("检测任务奖励"); - boolean hasColor = macro.hasColor(macro.of(38,751,56,765), numColor); + boolean hasColor = macro.hasColor(macro.of(38, 751, 56, 765), numColor); if (!hasColor) { Logger.info("无任务奖励,跳过"); return; } Logger.info("进入任务页面,领取奖励"); - macro.mouseLeftClick(macro.of(33,779)); + macro.mouseLeftClick(macro.of(38, 751, 56, 765)); macro.delay(1000); + ViewRect legend = macro.matchLegend("任务奖励_关闭", 0.9); + if (legend == null) { + Logger.error("未正确进入任务领取界面"); + return; + } + Logger.info("检测章节任务"); boolean 章节任务 = macro.hasColor(macro.of(158, 849, 171, 857), numColor); if (章节任务) { @@ -87,7 +93,7 @@ public class Task_任务奖励领取 extends BaseTask { macro.mouseLeftClick(底部领取); macro.delay(1000); - ViewRect 任务奖励_点击退出 = macro.waitAndMatchLegend("任务奖励_点击退出", 0.5, 2); + ViewRect 任务奖励_点击退出 = macro.waitAndMatchLegend("任务奖励_点击退出", 0.5, 5); if (任务奖励_点击退出 != null) { macro.mouseLeftClick(任务奖励_点击退出); macro.delay(500); @@ -113,7 +119,7 @@ public class Task_任务奖励领取 extends BaseTask { } Logger.info("检测每日任务"); - boolean 每日任务 = macro.hasColor(macro.of(497, 846, 518, 858), "#e2d4d4", "#a74f52", "#ff3c3c","#ef3435","#e9e1e2","#fb3838","#f7f4f4","#fcfbfb"); + boolean 每日任务 = macro.hasColor(macro.of(497, 846, 518, 858), "#e2d4d4", "#a74f52", "#ff3c3c", "#ef3435", "#e9e1e2", "#fb3838", "#f7f4f4", "#fcfbfb"); if (每日任务) { Logger.info("领取每日任务"); macro.mouseLeftClick(macro.of(499, 847, 517, 858)); @@ -123,7 +129,7 @@ public class Task_任务奖励领取 extends BaseTask { 领取 = macro.matchLegend("任务奖励_领取按钮", 0.9); if (领取 != null) { macro.mouseLeftClick(领取); - ViewRect 任务奖励_点击退出 = macro.waitAndMatchLegend("任务奖励_点击退出", 0.5, 2); + ViewRect 任务奖励_点击退出 = macro.waitAndMatchLegend("任务奖励_点击退出", 0.5, 5); if (任务奖励_点击退出 != null) { macro.mouseLeftClick(任务奖励_点击退出); macro.delay(500); @@ -133,10 +139,10 @@ public class Task_任务奖励领取 extends BaseTask { } Logger.info("检测成长任务2"); - boolean 成长任务2 = macro.hasColor(macro.of(241,845,257,860), numColor); + boolean 成长任务2 = macro.hasColor(macro.of(241, 845, 257, 860), numColor); if (成长任务2) { Logger.info("领取成长任务"); - macro.mouseLeftClick(macro.of(241,845,257,860)); + macro.mouseLeftClick(macro.of(241, 845, 257, 860)); macro.delay(500); ViewRect 领取; do { @@ -149,17 +155,17 @@ public class Task_任务奖励领取 extends BaseTask { } Logger.info("检测每日任务2"); - boolean 每日任务2 = macro.hasColor(macro.of(414,845,430,859), numColor); + boolean 每日任务2 = macro.hasColor(macro.of(414, 845, 430, 859), numColor); if (每日任务2) { Logger.info("领取每日任务"); - macro.mouseLeftClick(macro.of(414,845,430,859)); + macro.mouseLeftClick(macro.of(414, 845, 430, 859)); macro.delay(500); ViewRect 领取; do { 领取 = macro.matchLegend("任务奖励_领取按钮", 0.9); if (领取 != null) { macro.mouseLeftClick(领取); - ViewRect 任务奖励_点击退出 = macro.waitAndMatchLegend("任务奖励_点击退出", 0.5, 2); + ViewRect 任务奖励_点击退出 = macro.waitAndMatchLegend("任务奖励_点击退出", 0.5, 5); if (任务奖励_点击退出 != null) { macro.mouseLeftClick(任务奖励_点击退出); macro.delay(500); @@ -168,10 +174,10 @@ public class Task_任务奖励领取 extends BaseTask { } while (领取 != null); } - ViewRect legend = macro.matchLegend("任务奖励_关闭", 0.9); - if (legend != null) { + ViewRect 任务奖励_关闭 = macro.matchLegend("任务奖励_关闭", 0.9); + if (任务奖励_关闭 != null) { Logger.info("关闭任务奖励面板"); - macro.mouseLeftClick(legend); + macro.mouseLeftClick(任务奖励_关闭); } } } diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java index 530f112..ee07d2c 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java @@ -1,5 +1,6 @@ package xyz.wbsite.jmacro.wjdr.task; +import cn.hutool.core.util.NumberUtil; import cn.hutool.json.JSONUtil; import xyz.wbsite.jmacro.JMacro; import xyz.wbsite.jmacro.base.ViewRect; @@ -20,6 +21,14 @@ public class Task_自动野怪 extends BaseTask { @Override public void task(JMacro macro, ViewRect viewRect) { + Logger.info("读取体力值"); + double color = macro.findColor(macro.of(12, 62, 57, 65), "#26c200"); + Logger.info("体力值" + NumberUtil.formatPercent(color, 0)); + if (color <= 0.1D) { + Logger.info("体力值低于10%,取消自动野怪"); + return; + } + { Logger.info("打开面板,读取行军状态"); ViewRect[] viewRects = macro.matchLegends(macro.of("城镇_打开面板", "城镇_关闭面板"), 0.6); diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_英雄招募领取.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_英雄招募领取.java new file mode 100644 index 0000000..9ebba7d --- /dev/null +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_英雄招募领取.java @@ -0,0 +1,75 @@ +package xyz.wbsite.jmacro.wjdr.task; + +import xyz.wbsite.jmacro.JMacro; +import xyz.wbsite.jmacro.base.ViewRect; +import xyz.wbsite.jmacro.util.Logger; + +public class Task_英雄招募领取 extends BaseTask { + + public Task_英雄招募领取(JMacro macro, ViewRect viewRect) { + super(macro, viewRect); + } + + @Override + public void task(JMacro macro, ViewRect viewRect) { + Logger.info("打开面板"); + boolean 城镇_打开面板 = macro.matchLegendAndClick("城镇_打开面板", 0.6); + if (!城镇_打开面板) { + Logger.error("打开面板失败"); + return; + } + + Logger.info("选中城镇"); + macro.mouseLeftClick(macro.of(85, 200)); + macro.delay(1000); + + Logger.info("滑动到底部"); + macro.mouseLeftDrag(macro.of(158, 626), macro.of(163, 231), true); + macro.delay(1000); + + + ViewRect 英雄招募_免费招募 = macro.findLegend(macro.of(129, 448, 200, 630), "英雄招募_免费招募", 0.5); + if (英雄招募_免费招募 == null) { + Logger.info("未检测到【免费招募】"); + return; + } + + macro.mouseLeftClick(英雄招募_免费招募); + macro.delay(1000); + + { + boolean 英雄招募_高级招募 = macro.matchLegendAndClick("英雄招募_高级招募", 0.9); + if (英雄招募_高级招募) { + macro.delay(500); + macro.mouseLeftClick(macro.getFocusRect()); + macro.delay(1000); + + Logger.info("检测任意位置继续"); + ViewRect 点击任意位置退出 = macro.waitAndMatchLegend("英雄招募_点击任意位置退出", 0.5, 3); + if (点击任意位置退出 != null) { + Logger.info("点击任意位置退出"); + macro.mouseLeftClick(点击任意位置退出); + macro.delay(1500); + } + } + } + { + boolean 英雄招募_史诗招募 = macro.matchLegendAndClick("英雄招募_史诗招募", 0.9); + if (英雄招募_史诗招募) { + macro.delay(500); + macro.mouseLeftClick(macro.getFocusRect()); + macro.delay(1000); + + Logger.info("检测任意位置继续"); + ViewRect 点击任意位置退出 = macro.waitAndMatchLegend("英雄招募_点击任意位置退出", 0.5, 3); + if (点击任意位置退出 != null) { + Logger.info("点击任意位置退出"); + macro.mouseLeftClick(点击任意位置退出); + macro.delay(1500); + } + } + } + + macro.matchLegendAndClick("英雄招募_返回", 0.9); + } +}