|
|
|
@ -0,0 +1,317 @@
|
|
|
|
|
package xyz.wbsite.jmacro.wjdr.task;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
|
import xyz.wbsite.jmacro.JMacro;
|
|
|
|
|
import xyz.wbsite.jmacro.base.ViewRect;
|
|
|
|
|
import xyz.wbsite.jmacro.util.Logger;
|
|
|
|
|
|
|
|
|
|
public class Task_自动野怪 extends BaseTask {
|
|
|
|
|
|
|
|
|
|
public boolean 队列1空闲;
|
|
|
|
|
public boolean 队列2空闲;
|
|
|
|
|
public boolean 队列3空闲;
|
|
|
|
|
public boolean 队列4空闲;
|
|
|
|
|
public boolean 队列5空闲;
|
|
|
|
|
public boolean 队列6空闲;
|
|
|
|
|
|
|
|
|
|
public Task_自动野怪(JMacro macro, ViewRect viewRect) {
|
|
|
|
|
super(macro, viewRect);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void task(JMacro macro, ViewRect viewRect) {
|
|
|
|
|
{
|
|
|
|
|
Logger.info("打开面板,读取行军状态");
|
|
|
|
|
ViewRect[] viewRects = macro.matchLegends(0.6, "城镇_打开面板", "城镇_关闭面板");
|
|
|
|
|
if (viewRects[0] == null && viewRects[1] == null) {
|
|
|
|
|
Logger.error("检测面板状态失败");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (viewRects[0] != null) {
|
|
|
|
|
Logger.info("打开面板");
|
|
|
|
|
macro.mouseLeftClick(viewRects[0]);
|
|
|
|
|
macro.delay(1000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Logger.info("选中野外");
|
|
|
|
|
macro.mouseLeftClick(macro.of(245, 200));
|
|
|
|
|
macro.delay(1000);
|
|
|
|
|
|
|
|
|
|
ViewRect[] viewRects1 = macro.matchLegends(0.6D,
|
|
|
|
|
"城镇_面板_空闲1",
|
|
|
|
|
"城镇_面板_空闲2",
|
|
|
|
|
"城镇_面板_空闲3",
|
|
|
|
|
"城镇_面板_空闲4",
|
|
|
|
|
"城镇_面板_空闲5",
|
|
|
|
|
"城镇_面板_空闲6"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (null != macro.matchLegend("城镇_面板_空闲1", 0.6D)) {
|
|
|
|
|
队列1空闲 = true;
|
|
|
|
|
Logger.info("队列1空闲");
|
|
|
|
|
}
|
|
|
|
|
if (null != macro.matchLegend("城镇_面板_空闲2", 0.6D)) {
|
|
|
|
|
队列2空闲 = true;
|
|
|
|
|
Logger.info("队列2空闲");
|
|
|
|
|
}
|
|
|
|
|
if (null != macro.matchLegend("城镇_面板_空闲3", 0.6D)) {
|
|
|
|
|
队列3空闲 = true;
|
|
|
|
|
Logger.info("队列3空闲");
|
|
|
|
|
}
|
|
|
|
|
if (null != macro.matchLegend("城镇_面板_空闲4", 0.6D)) {
|
|
|
|
|
队列4空闲 = true;
|
|
|
|
|
Logger.info("队列4空闲");
|
|
|
|
|
}
|
|
|
|
|
if (null != macro.matchLegend("城镇_面板_空闲5", 0.6D)) {
|
|
|
|
|
队列5空闲 = true;
|
|
|
|
|
Logger.info("队列5空闲");
|
|
|
|
|
}
|
|
|
|
|
if (null != macro.matchLegend("城镇_面板_空闲6", 0.6D)) {
|
|
|
|
|
队列6空闲 = true;
|
|
|
|
|
Logger.info("队列6空闲");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ViewRect 城镇_关闭面板 = macro.matchLegend("城镇_关闭面板", 0.6);
|
|
|
|
|
if (城镇_关闭面板 == null) {
|
|
|
|
|
Logger.info("关闭面板异常");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Logger.info("关闭面板");
|
|
|
|
|
macro.mouseLeftClick(城镇_关闭面板);
|
|
|
|
|
|
|
|
|
|
Logger.info("定位【野外】");
|
|
|
|
|
ViewRect 野外 = macro.matchLegend("野外", 0.99);
|
|
|
|
|
if (野外 == null) {
|
|
|
|
|
Logger.error("定位【野外】失败,刷怪终止");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Logger.info("定位【野外】成功,{}", 野外.toString());
|
|
|
|
|
|
|
|
|
|
Logger.info("点击【野外】,坐标{}", JSONUtil.toJsonStr(野外.getCenter()));
|
|
|
|
|
macro.mouseLeftClick(野外);
|
|
|
|
|
macro.delayUnstable();
|
|
|
|
|
Logger.info("定位野外按钮成功");
|
|
|
|
|
|
|
|
|
|
if (队列1空闲) {
|
|
|
|
|
Logger.info("队列一派去打野怪");
|
|
|
|
|
boolean success = challenge(15);
|
|
|
|
|
if (!success) { // 中断采集
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (队列2空闲) {
|
|
|
|
|
Logger.info("队列一派去打野怪");
|
|
|
|
|
boolean success = challenge(15);
|
|
|
|
|
if (!success) { // 中断采集
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (队列3空闲) {
|
|
|
|
|
Logger.info("队列一派去打野怪");
|
|
|
|
|
boolean success = challenge(15);
|
|
|
|
|
if (!success) { // 中断采集
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (队列4空闲) {
|
|
|
|
|
Logger.info("队列一派去打野怪");
|
|
|
|
|
boolean success = challenge(15);
|
|
|
|
|
if (!success) { // 中断采集
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (队列5空闲) {
|
|
|
|
|
Logger.info("队列一派去打野怪");
|
|
|
|
|
boolean success = challenge(15);
|
|
|
|
|
if (!success) { // 中断采集
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (队列6空闲) {
|
|
|
|
|
Logger.info("队列一派去打野怪");
|
|
|
|
|
boolean success = challenge(15);
|
|
|
|
|
if (!success) { // 中断采集
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检测是否是搜索界面
|
|
|
|
|
ViewRect 野外_任务2 = macro.matchLegend("野外_任务", 0.9);
|
|
|
|
|
if (野外_任务2 != null) {
|
|
|
|
|
Logger.info("退出资源搜索界面");
|
|
|
|
|
macro.mouseLeftClick(this.viewRect);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ViewRect 城1 = macro.waitAndMatchLegend("城镇", 0.9);
|
|
|
|
|
if (城1 == null) {
|
|
|
|
|
Logger.error("未检测到【城镇】,异常终止");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
macro.mouseLeftClick(城1);
|
|
|
|
|
Logger.info("返回城镇");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param level 等级(0为重置)
|
|
|
|
|
* @return 采集是否结束(满队则返回true,接下来的采集也不需要了)
|
|
|
|
|
*/
|
|
|
|
|
private boolean challenge(int level) {
|
|
|
|
|
Logger.info("查看放大镜搜索");
|
|
|
|
|
ViewRect 野外_放大镜搜索 = macro.waitAndMatchLegend("野外_放大镜搜索", 0.4);
|
|
|
|
|
if (野外_放大镜搜索 == null) {
|
|
|
|
|
Logger.error("未检测到【放大镜搜索】,采矿终止");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Logger.info("点击放大镜搜索按钮");
|
|
|
|
|
macro.mouseLeftClick(野外_放大镜搜索);
|
|
|
|
|
|
|
|
|
|
Logger.info("等待搜索面板");
|
|
|
|
|
ViewRect 野外_搜索面板_搜索按钮 = macro.waitAndMatchLegend("野外_搜索面板_搜索按钮", 0.9);
|
|
|
|
|
if (野外_搜索面板_搜索按钮 == null) {
|
|
|
|
|
Logger.error("未检测到【待搜索面板】,采矿终止");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Logger.info("点击野兽");
|
|
|
|
|
macro.mouseLeftDrag(macro.of(61, 682), macro.of(433, 679), true);
|
|
|
|
|
macro.delay(1000);
|
|
|
|
|
macro.mouseLeftClick(macro.of(60, 677));
|
|
|
|
|
macro.delay(1000);
|
|
|
|
|
|
|
|
|
|
switch (level) {
|
|
|
|
|
case 1:
|
|
|
|
|
macro.mouseLeftClick(macro.of(93, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
macro.mouseLeftClick(macro.of(101, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
macro.mouseLeftClick(macro.of(109, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
macro.mouseLeftClick(macro.of(117, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
macro.mouseLeftClick(macro.of(125, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
macro.mouseLeftClick(macro.of(133, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 7:
|
|
|
|
|
macro.mouseLeftClick(macro.of(141, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 8:
|
|
|
|
|
macro.mouseLeftClick(macro.of(149, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 9:
|
|
|
|
|
macro.mouseLeftClick(macro.of(157, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 10:
|
|
|
|
|
macro.mouseLeftClick(macro.of(165, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 11:
|
|
|
|
|
macro.mouseLeftClick(macro.of(173, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 12:
|
|
|
|
|
macro.mouseLeftClick(macro.of(181, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 13:
|
|
|
|
|
macro.mouseLeftClick(macro.of(189, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 14:
|
|
|
|
|
macro.mouseLeftClick(macro.of(197, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 15:
|
|
|
|
|
macro.mouseLeftClick(macro.of(205, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 16:
|
|
|
|
|
macro.mouseLeftClick(macro.of(213, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 17:
|
|
|
|
|
macro.mouseLeftClick(macro.of(221, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 18:
|
|
|
|
|
macro.mouseLeftClick(macro.of(229, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 19:
|
|
|
|
|
macro.mouseLeftClick(macro.of(237, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 20:
|
|
|
|
|
macro.mouseLeftClick(macro.of(245, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 21:
|
|
|
|
|
macro.mouseLeftClick(macro.of(253, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 22:
|
|
|
|
|
macro.mouseLeftClick(macro.of(261, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 23:
|
|
|
|
|
macro.mouseLeftClick(macro.of(269, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 24:
|
|
|
|
|
macro.mouseLeftClick(macro.of(277, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 25:
|
|
|
|
|
macro.mouseLeftClick(macro.of(285, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 26:
|
|
|
|
|
macro.mouseLeftClick(macro.of(293, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 27:
|
|
|
|
|
macro.mouseLeftClick(macro.of(301, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 28:
|
|
|
|
|
macro.mouseLeftClick(macro.of(309, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 29:
|
|
|
|
|
macro.mouseLeftClick(macro.of(317, 778));
|
|
|
|
|
break;
|
|
|
|
|
case 30:
|
|
|
|
|
macro.mouseLeftClick(macro.of(325, 778));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ViewRect 野外_资源搜索 = macro.matchLegend("野外_资源搜索", 0.9);
|
|
|
|
|
if (野外_资源搜索 == null) {
|
|
|
|
|
Logger.error("定位【野外_资源搜索】失败,挑战终止");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Logger.info("点击搜索{}级野怪", level);
|
|
|
|
|
macro.mouseLeftClick(野外_资源搜索);
|
|
|
|
|
macro.delay(1500);
|
|
|
|
|
|
|
|
|
|
ViewRect 野外_攻击 = macro.waitAndMatchLegend("野外_攻击", 0.9);
|
|
|
|
|
if (野外_攻击 != null) {
|
|
|
|
|
macro.mouseLeftClick(野外_攻击);
|
|
|
|
|
macro.delay(1000);
|
|
|
|
|
|
|
|
|
|
macro.matchLegendAndClick("野外_攻击平均配置", 0.9);
|
|
|
|
|
macro.delay(1000);
|
|
|
|
|
|
|
|
|
|
ViewRect[] viewRects = macro.waitAndMatchLegends(0.9, "野外_攻击出征", "野外_资源无对队列");
|
|
|
|
|
if (viewRects[0] != null) {
|
|
|
|
|
Logger.info("出征");
|
|
|
|
|
macro.mouseLeftClick(viewRects[0]);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (viewRects[1] != null) {
|
|
|
|
|
Logger.info("队列已满,取消采集");
|
|
|
|
|
macro.mouseLeftClick(macro.of(471, 250));
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (viewRects[2] != null) {
|
|
|
|
|
Logger.info("士兵不足,取消采集");
|
|
|
|
|
macro.mouseLeftClick(macro.of(32, 30));
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|