From 698126dcb1ae32e44265e54c40d54b01367c10e6 Mon Sep 17 00:00:00 2001 From: wangbing Date: Thu, 12 Sep 2024 23:50:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- legend/仓库_体力罐头领取#L235,690.png | Bin 0 -> 3104 bytes ...库_体力罐头领取关闭#L440,126.png | Bin 0 -> 514 bytes legend/野外_攻击#L249,433.png | Bin 0 -> 1414 bytes legend/野外_攻击出征#L385,872.png | Bin 0 -> 2049 bytes legend/野外_攻击平均配置#L186,914.png | Bin 0 -> 2762 bytes src/main/java/xyz/wbsite/jmacro/JMacro.java | 56 +++- .../wjdr/task/Task_仓库奖励领取.java | 10 +- .../jmacro/wjdr/task/Task_定位城镇.java | 7 + .../jmacro/wjdr/task/Task_自动野怪.java | 317 ++++++++++++++++++ 9 files changed, 377 insertions(+), 13 deletions(-) create mode 100644 legend/仓库_体力罐头领取#L235,690.png create mode 100644 legend/仓库_体力罐头领取关闭#L440,126.png create mode 100644 legend/野外_攻击#L249,433.png create mode 100644 legend/野外_攻击出征#L385,872.png create mode 100644 legend/野外_攻击平均配置#L186,914.png create mode 100644 src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java diff --git a/legend/仓库_体力罐头领取#L235,690.png b/legend/仓库_体力罐头领取#L235,690.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7519d61029e590fb4635f8144fac14ff3d7640 GIT binary patch literal 3104 zcmV+*4BzvKP)=J@*NVp=3;IgGo?yM!{;n zHyS$EV)xrUXxP3MUX`&hdp#DW+oE9jq7P(+PS8oWg-*N*I&lveT}!lr?i_pQmAS!y ztv9IlgzTAzJR?k_f^P0i=#{uYzAgyL{TfW^+!NRnQ(2@upn*xcO6&ZoIm+8G-Yo5L=Rh zj_z#}KO;Tcg9C5&p|N8v9Et*Aym~ei+hbt5;{p303&QR=?iBOB#D4*LAPJ^hB4L^7 zfz6$p@y8#3;Lkt*#3!G8f|SBc=w#Z!uU3PDZydxAKm35-e*5jAcJJOj+_-rIvzocjQ0&Yr>1Q^ydItA_cO7#6fg1WhR-ZwiJg)g65U{XELz z00i*+@4v@^z8)lHrl5LhHM+aIF*rDgk&zL6{PD-q+AqHN0>i_@{9b>5KRP=*5t|Z+ zpqLQUuc*iS@4wI2{rKaL=;`S}V`C#)TU$9mx=#C?KYyP8r85xt$t-(b4$Rx5c&1Jr zG+V6L90}7b7c?|A;?A8r`~biF@(V6qx+DRo>$`XFMn*;kmM>q99XoblXlMwZefF8O z{>+&(*t2I3y1Kg1wxJD~bF*OTXAQkj3wT8NV&A@feC@a2ev9JbVki^}goK3P=+UG6 z`d43l#n;fjQ^_Wxf^VQ7Ok2Vp0rcNIHqLg!!s;?yyMB#tMt1e;RkXFW;n=Zb67XBM zZsEw0BRFy51gtqy# zx>fbi&6){$YZx5z0wvG_j7U-O9s(Vo7!MPL2@V}PB;6w?s9bCySIV)zbv>^Y!g)#u z3z)Qq^L9HqXjbjaSn0P;a>b=9mn6V+SSmUK_^DH;(B9sTFTeb93^0+7$B!T9DNffZ z`j;kDW8txCysMx z&~?f}6Bi{EuSHI=dK2hvF|gCPbB>90Ax^GZwTl0yYm~CRy}hWfujc^Yd+$BIo(@Fm zDb~{e2M-?Pl%QChO3$G1S0430=YCLJ8g{HPRv%#Ums89;NW1mxVZ4&!V%lIZ-;|}15#5{ zQCnNfIZL3Zu;t|BNKWhM=)l5-3%R2t(5ZI+08JcTvSbMy932oJAJ3gBflgCnnwtUU z6wQ;ehSJ$HzzaFKIk!dITs_; zHbk$cms7eEzt^o>hvJfA3G~jLJCU24%Y_K>tGT%uMMXuEf+h-`J$sf%n+hY*L;{_z zhE}X4Z2TQ@;^YabmekbN@byGFu~y}51EV_s302wnpnDQv)EEf!G#8%2^m0+4Mi(ji zO$R05t5>fc13Ei9n@57G_?k6qrUaUd97P3@KnRWs(6T~jXt~QV^5%$ik9xeI75z_H zCihkGcaK-ZCT>|Q#Z7mrp;{ck1;u22k%S2GaJ)#<;Yesq74(FKjDgmxm<6p+GrZKW zT*?A+>S)oFmYxRvWLucNKE4Efs5mj(69;*@7vhsOC@U{VSy`E64Gj&rdGn?e8B$sK z`T1iwU07Jie-rmtu3R}~(A0;i-%~pjeOG|iuk?h@{F(5I^y3kJur(4jtlVv(U*+}C zNo+#U${r1jRtB)q&Jx}rW$Fw zPgP%|(V(E9fYU~RE_${I-iZM)3|B$RN`|hzU7QA^K`&dj3`U`p+DwV{KhBiJ9-=;~ z$adkwK|j;pq?4(t3K2k2Cdp}IZ-dB~NC`BhJBbKdLm5$3RrL?hIx$R00ah8<`#hLzOXx-x%RQM;Fy{Mnl7R#^(V36kwvz?Do$T(;wM~%}RQL?Cnk9p#7^p_?l|M1z+3NvF>)g6j( zTO=kXa={{c=4fe3;7N|IU%wts0d9EORUb7?FY{t0*3laA!GNMo^byk+aXlq91sgVO z;4~WTRPmeML6ca*++^s-*}$}e$(4J`k zS%4XQ<7V@oPQ^v^bBfHsz<{LL>3~#}RyVDIYL+ch^D;0zGR&(rwYjS5DijnJATK`; zrKP3PoK4SAci6abBj@qxd0_3@wR|EI4x&BCkyM8aQtjFBq<-{|2vlKZ&pN@tTZzJ= z1^D#SPbEZzAB%F!Hg)qViJSrf5?Fy@q*OXk>}CT3 z+skxEEIbP%(A(dK+jnkrXEil7aXn5BZCKd=k3di8X{>oY(JiD*G)F>O687%fi+A6B z7cac@0t_Nlye>V~Ct%L+-bBbZgh8KeU=`(rz{F5E$9lrhM~M)1ICApmA|*Qw9-%B! zAuNK$&io?*RZ)3M2z2uuU=`_%nAA8#q(noN>;|J10nDLE|D5u6#leK>gYe`icj4`P7f?~@!AMOV4?_>C~FLZM4`FpikOVp0HVEfoWC&v!5MXoSjGyDGN zNbm1Yf?``VbD}@=N?jopN5T~@i1kZnY4%V4NTg? zV9L@}xi22(4}c*DnC*;Z>309ayxA@_%zG2Y--Eu-K-hTs_?Pt>mZx0000Z;O+gL-PiXp zShZS(98?elxZQ3XpPXWOWfkY=m+<*~$Y!&@w6e~mqJ!e`I6NK?EEWsAUN6$=bW;OF z`Xn`=Ac#n%c;={5sWjCQQ51i6qy()$as$cB%j@^V6q}~zQ0<-^9Ua5zbRrgup)ba@8IF#5ucwC7DT1EG#1r|LLm^1 zwjY|#KIo@raB*>oKp=o(vG^y5bTXL?9FAv@_HSo{!xLCr-@x77J)+U5?907*qoM6N<$ Ef~DB(4FCWD literal 0 HcmV?d00001 diff --git a/legend/野外_攻击#L249,433.png b/legend/野外_攻击#L249,433.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa158d095ef50602997f15f6d12b952356ce286 GIT binary patch literal 1414 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 literal 0 HcmV?d00001 diff --git a/legend/野外_攻击平均配置#L186,914.png b/legend/野外_攻击平均配置#L186,914.png new file mode 100644 index 0000000000000000000000000000000000000000..efc0b76dab54f705840bfa0babc2e68ab2a031c0 GIT binary patch literal 2762 zcmV;*3N`hKP)=*|;pIThKDPfs0>k@5cO7iYFMn`4a7y??Dik3qN@i{@@dfzNHuFruWS5 z>oE6U=g+Wt*|qi3P4q23gPZ1OV-~vZntcEd*UT1d<7=>ut)Y|tUw!ZojIaFw`@}lG z=a}3;_ti(}yz&60&6DsKS3{WELLar_)01hC=GWrV^{*i>X@OUK363Ue;TxNeGRrU~ z)_;VRK9;R@Kw05HW@S4vbuK6ftmCq39F8nRjH&_hVl(PGuh4?Ofopmb!(V=j3uZUc z%WVjVQ6fXrjy!!Qa;u%lt#Tr#vX!3s4r6zIfG8#dJ~A^t`YZ&q_x}zzZL+d?7~0km zOyBz}254=S%|ocNjq!O$SH7pQVd&b%2;@ibsO!9n1Z4#x6&gr#^%%eN29Al1xA)4C zQdozU;oGRRO(G&q53e&?_(_d8AvYjGu0d&IA4X^~#l}9mu7K!t0mKE3JQFjUf5X6y zZ}|W2xhE8l;9h#pGoF}d#^LZ>_@6FBtfGuBx^H0{w$T;Ng8V8wV$&;dFer(DRl_Ht z6h8Fp9an@;d?V35d6zcxX9&Y(@Jy=3N1umaX zzr+wRi~+~S%CIyzH2ygQj9~v3P|z|=)e8~MW!M6 zo~?jyiWNa=R;25CV7|0Wi`~K8!+#P>9zx$fO__3WdiBgdhOTuCxjH*?v=llAvMF;m zS`7P!w8(*fLsU;90QLt-kZ0)S{-QQs85_Ft}#nQDvVb z>MY}Uyb=+~d0fwIF!YQHs!AK7wGLUK5dm@8I3}$k2WK=iz*lC%r<6fyo}SZ}RRizH zOhjdwaY|7QnYtN{sZFByU8HNf5Gd8-kD_xZF%NMUKa)cMknHjdeQ*%~`t~U_^eoT@ z7ikmoT%+!5FAyA;LUMRP`hE>&*v$EvF*BKr5(E6Bl{iAidotaGz%xbAlDRP>eFwlr zlH!%EpUGQRIWUa=OeTyC=j(dlVQ^jH$d@$qa;KcxB>fTc<(5l46Rdn(uneHM!Hp8j z2;>!A5Qu9aOt;}+XclDes({*xqfzvs1#yWT-k~yD;5e1H zhe*h-!~Wwk4nP-GnGRaCrg@YHE5U5D12^~t#UR@u#G1L8hoXx663{`{+)f(~Er`o9!s~Pyyv6l6NQkGGm@vNjh9l1!rh zBB$C#R9xYuP;Knt<%^Zs7-bCspx_?hUV28Rxqvja3DSaku?Ln_JJ#iXqPG zt9{}wRJsntr0by6x=?>{k=*(b+NbWJh|DkaOeSxPm=+___1I4UG6@WmzL{3p`}T>i zcqL)kXLUU!_O}3tGM(6eDhpEGAWl+4mNb~XcL)nf1g$W9ci#Ie(Hmt!ZGWH@or5tgYHGE>$vNCN~ zl7lCb;rYcEQkj(zEpJoTH;WLt4hKS%$ma~$;hkHSrWu*#O~@=WQ(0W*$hfx1)dvxks)aC7O=o}-#OF1kzGn%wo%1+H3}L1Iz!XH0zFBWxYH}kWxf};VRU81;7gV*erpZQ4lZ_gt77oCrw*ZW;ye4D3iJ&;@ zC#Vzjj3qF`k}?0}-zcu{fhXMyqUz)oBBAVV@WzZ)0rn0*)BGxKqJ3hQ0X1audjR-I z8X$_z<^Y)bm*Ge5DkP+T4*(xJ^aM(Dh|VE~Bvrth4mEx$WPa3>`%7yPrn2CK!T_)6 zT!hm>NUCmuxUdnGQ~{V&lo}iS&T4Ro&H@F-0V-#2-X2`GDV|Xm`GmVPyB`uS=Z4JM z)*{+$c9jcRRUJH&i`)O95?zl&1Z1{hkawZXPnZX=c9+TX!!S}Xa2Np0kM;oYO|c;G zteU91jhe1S_$8K-yV`yO01I}X8IUlwmCM9G!+`)g9Wr^aMu`E(*b|g$LMfg0x@b;z z7GSz|(Frdhr{Qg-s6bXtFV*$CD6Hu~a!wVJva~ptSpn9c*r`Q679&R;HC96e9Fs)< z+u$e0h35#2&%x)^3O9{@MLohMv1x~x^Ab+#7o3;3xJ-W?TfD-sXBZp*4|Fn_h!c(2 QYXATM07*qoM6N<$f><>#WB>pF literal 0 HcmV?d00001 diff --git a/src/main/java/xyz/wbsite/jmacro/JMacro.java b/src/main/java/xyz/wbsite/jmacro/JMacro.java index fe6f80d..6863daa 100644 --- a/src/main/java/xyz/wbsite/jmacro/JMacro.java +++ b/src/main/java/xyz/wbsite/jmacro/JMacro.java @@ -638,6 +638,51 @@ public abstract class JMacro { return waitAndFindLegend(getFocusRect(), Legend.inflate(legend), minSimilar, defaultTimeOut); } + /** + * 匹配图例和点击 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 是否成功 + */ + public boolean matchLegendAndClick(String legend, double minSimilar) { + ViewRect matchLegend = matchLegend(legend, minSimilar); + if (matchLegend != null) { + mouseLeftClick(matchLegend); + return true; + } else { + return false; + } + } + + /** + * 匹配图例和点击 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 是否成功 + */ + public boolean matchLegendAndClick(Legend legend, double minSimilar) { + ViewRect matchLegend = matchLegend(legend, minSimilar); + if (matchLegend != null) { + mouseLeftClick(matchLegend); + return true; + } else { + return false; + } + } + + /** + * 匹配图例 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配图片 + */ + public ViewRect matchLegend(String legend, double minSimilar) { + return matchLegend(Legend.inflate(legend), minSimilar); + } + /** * 匹配图例 * @@ -660,17 +705,6 @@ public abstract class JMacro { return findPic(viewRect, image, minSimilar, false); } - /** - * 匹配图例 - * - * @param legend 图例 - * @param minSimilar 最低相似度 - * @return 匹配图片 - */ - public ViewRect matchLegend(String legend, double minSimilar) { - return matchLegend(Legend.inflate(legend), minSimilar); - } - /** * 等待并匹配图例 * 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 141b652..ab54b24 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java @@ -65,14 +65,20 @@ public class Task_仓库奖励领取 extends BaseTask { macro.delay(1000); } - Logger.info("检测体力宝箱/罐头"); - ViewRect 仓库_体力罐头 = macro.matchLegend("仓库_体力罐头", 0.5); + Logger.info("检测体力罐头"); + ViewRect 仓库_体力罐头 = macro.waitAndMatchLegend("仓库_体力罐头", 0.5, 5); if (仓库_体力罐头 == null) { Logger.info("无体力宝箱"); return; } else { Logger.info("领取体力罐头"); macro.mouseLeftClick(仓库_体力罐头); + macro.delay(1000); + + ViewRect 仓库_体力罐头领取 = macro.matchLegend("仓库_体力罐头领取", 0.8); + if (仓库_体力罐头领取 != null) { + macro.mouseLeftClick(仓库_体力罐头领取); + } } macro.delay(1000); } 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 a1f72a5..ca77b3c 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_定位城镇.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_定位城镇.java @@ -21,6 +21,13 @@ public class Task_定位城镇 extends BaseTask { return; } } + {// 仓库_体力罐头领取关闭 + ViewRect rect = macro.matchLegend("仓库_体力罐头领取关闭", 0.9); + if (rect != null) { + macro.mouseLeftClick(rect); + Logger.info("返回城镇"); + } + } {// 探险返回 ViewRect rect = macro.matchLegend("探险_返回", 0.9); if (rect != null) { 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..1042f53 --- /dev/null +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java @@ -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; + } +}