From 84d20c4290ebf6d7cc6bd0712dc4cb4420e9329e Mon Sep 17 00:00:00 2001 From: wangbing Date: Wed, 11 Sep 2024 23:06:53 +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 --- ...务奖励_底部领取按钮#L418,733.png | Bin 0 -> 2351 bytes legend/任务奖励_待领取#L40,751.png | Bin 809 -> 0 bytes legend/任务奖励_待领取2#L41,752.png | Bin 533 -> 0 bytes legend/任务奖励_成长任务#L328,846.png | Bin 686 -> 0 bytes legend/任务奖励_每日任务#L500,846.png | Bin 748 -> 0 bytes legend/任务奖励_章节任务#L157,846.png | Bin 686 -> 0 bytes src/main/java/xyz/wbsite/jmacro/JMacro.java | 76 +++++++++++++++--- .../java/xyz/wbsite/jmacro/tool/PickRect.java | 69 +++++++++++++--- .../xyz/wbsite/jmacro/wjdr/MacroForWJDR.java | 20 ++--- .../wjdr/task/Task_任务奖励领取.java | 64 ++++++++++++--- 10 files changed, 188 insertions(+), 41 deletions(-) create mode 100644 legend/任务奖励_底部领取按钮#L418,733.png delete mode 100644 legend/任务奖励_待领取#L40,751.png delete mode 100644 legend/任务奖励_待领取2#L41,752.png delete mode 100644 legend/任务奖励_成长任务#L328,846.png delete mode 100644 legend/任务奖励_每日任务#L500,846.png delete mode 100644 legend/任务奖励_章节任务#L157,846.png diff --git a/legend/任务奖励_底部领取按钮#L418,733.png b/legend/任务奖励_底部领取按钮#L418,733.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9653509e6612a236cd72682c5ef62da2d52e17 GIT binary patch literal 2351 zcmV+~3DEY5P)#d|^Jg2L_H!K~h65d<%a= zmqIU?j_rjGqg-K}{joR*@d*qenm&9}eG`KnyL+K<1xf zU4HhrYYX&3j~>BkA`rhh!Z@}&j1ufVNur&>anrv%VOFb!Mu7hUY^Q(1(Q!f_SoiCJ z`3n}{$&)8|{P;1JE?)}2r~vfp?~Cm_w#)agUcLIR+`fGq^$qo?npB007cb()ix=&# zefsn%cJ11Q%Bo6?EX;$xAg5JI@{m3z6QTNO*yi_zrXjEm*p>*G)oamlusveahT#19 z^LY2}ofH}^A6JgJ&ew;ZEoi<%f-%Hp+-7O5ePBgEME&prN4w zix)4({{8!L<;oRlh~J+-e~wF+F5%?Kli0j@GYSd|FnGvdELpMy_wV1A&Ye4V4r|t| z!SUnAC6H&&o=L~3o1ois=J4UeNXbu!btS=)r%OW6VWcbUL*39YyFsRz3kiZoXpG+T zdHwqJ*tc(=1V=+uO2drev17;3($a#oVQH{;bij!0O!=PR=q$e-IdVk)zjf;tHf`F3 zQ>RWDBFk?pR;-ZOqa(zyckf=rWhB6=!k=IxpqU*Ahv=TDs+ov8ckbZ*`}c;3oj7p< zmoHzIz!*tJoXUn(|qRo8#ivCy1H6Mn|26x z&YU?22naxJZ7uHJy(@7vH8sI6S_e%<-%nsI>w^#&ABr<)&l(gzdh|#>QxQ3P?be|kyd1Vx}5Hf)d-V2anR zTPL3-*m42ZqZKTp#&j=Vz8nV+9+cTpz!nu1NnX+p>801}v2o)@xrc!oUpXFDu`aUs zC0O&i0CWko!SB7LM4nO`AdML3c2?Gz;Zoxum~A333gls z!o$PS+}teJF!i*{Owum*>T`3@Iisf>8lMVGbONK_ZQ!o+lt2lF(Nnm~v@4+47y14A z_3N?_XoQ7DgY28%1KS>F3D!XrVr_k`jJ6UO>ZEPz)JE!Hmg^y>nrvMhYo=wrU>)Kh zn?61NnqyQ%TI|`gM}ob1^QNJ)nMSs$_Q1BwSpoJJyRIlGF2vQVS0z9?q6BAB^(5Ft zx-_8Bs=r?PdP_ z`LZYsVBH1S^iN>9=IGI*l196C@0R-swz9Gkj;@Z-1qaIh+;-T={+gZ&O|szYEFCOY zDrW;yVL>odvGy1=co1gJoQY}ErpXqfv@&`=Wy%z+TD3|Vqda)U_^VOmA97I$Bn?NDguhbr1~K zD5)kr$otaLQmkIR+As*{4BMDCTnE)qN0`qJ5XXUjt!D!s$*jg{QCw0idngT17&*4I zsZc}2N_LQ0W-JyuC2b`iEcJ}cbjI@UzB zprdDuFH|GlU_M9J25fT}EXMjEpq~zl7A=ygP|gMH5CaAdfOS`EWM^l~UdaMzJHeFb zv7IF*CZf2wSb`@2zGurKF!oaFrgK}jZk08l0Hsc@RXP!=H?3|ud=o-oQR3AG?22%x zt9+pHu|`0cP8JuH5(qbuzvK~#uK?xb;<#M9cCCyw4U)$^b)^qW$Ebo)C@(L^=+UDw zG$jT8TCLS3I-d4~G zz??Yb7=cg`H!6LSg~y_bii$!=XoxHj<@?T^J245a8?y&*^+ZBi5{4wiAuJ+H2E;9_7c4?-VUjAYG6in4 z1lqzW)B_&T-slo$57Ru?Z^5>Wuxf%g%mt6l%DiAAE`4SxPS9j}K$YQ)4nnD_rmvt* zkQDVK!S@nRXv)N%a&M?6ic8?)kXD`ICZd|?4bu!qXfoVj7Vikt7(1wkyFgv+DW{aV zX#Q-WW;3-=jq`%~Z}D!t57Z(n=Jnd|gOwrx^G+s3M8#rWpll!J;v7LC5RO23#N=8L zLCw-o89^ycVe)<3%P8l&`COrAu9)`?Vq(^5WflpL>*)~J@rtFPzNSw%T+Qd~{12## VE?|Oyv0?xK002ovPDHLkV1fnfZ%qII literal 0 HcmV?d00001 diff --git a/legend/任务奖励_待领取#L40,751.png b/legend/任务奖励_待领取#L40,751.png deleted file mode 100644 index 1e61f43c609c565f527e2fdec674a707d369b059..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)Bhhu?>wbnbWF_ItoR}24fUxxwI-q0XwNJkB7$i;myf8=RHr}yuTxzY7bJ?>gRmD zmxdEoE`8ES$M$3VWGJRHtBB6bLOQccuzYZm_5(jq|HVy?p0-nX%tr0SDWqm=fTpkS z^P{np%bIk4U$co`<92MhW^N00Z_UFlR{It+za^&AwJL>+>vwam+D7A*1*DD(e{$9Q zF^;YI44TX|>ete`YY&!#hv+Cfgr%&E&VyyNfA|rDK>@w%*7K{moG)u^NL|L= z3>&vGx2G6Sb`Gtk9Sq&+=F#NjYdv(i7`|}bW+qEI z9pf4;tpYIf-zd-K=lOnuRQ$hMhU8=x3I|D{4p%TIJP2KukuoT}%PCw61(Hhu7WI0TgdS_-vAmpT7}KwP6b$ zrxU*@wWZ<+Q_1=e;Avtaj)(}Po&*_hTwExHM_k<5|0&+#VP;)!oV|9uW8$szApR1`N>h$&c0is(^CGcF35NL|B?@(SF8g9Jp0!C;U;Aix8+n@fj3Y|%i&~=yH86yg!6f;*B z){PWFAQVNhDPg-(r?t{8&&Z<8&H3&-QV1&O;=>o7&-eAfBVD>O$>q>VM$I-JTkOn+ z53zJ&khxPy-X%}7aD0$_B+4U;!f0~~XWP1w?x!Cx*&X4{!3fjwI8Q^pjCFJ}YhZAcHjy%eHxK8s;ifG4SoytoZ2C2H; z?E+2;0 zN!9OX#o-{^)QmJcH9;JDUL2*!4HE!(M!@a#WhMHQrZfarGsW5LgGi@@F_8;IU X!r+C4Er^_D00000NkvXXu0mjfR!91t diff --git a/legend/任务奖励_成长任务#L328,846.png b/legend/任务奖励_成长任务#L328,846.png deleted file mode 100644 index 19625170409f7e72514df2c5f82d6cc60fa14eee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W^mP)7>0j;g`h;BD3eakIJ?f`sFSHvjOCb1nrqs{7%ih>5Ljdsq+KXkByG}il}llv zX5*F)G+9Dr5vJBfiVLQbl8{el47&E><6L~_dEf86=aUjjZ;(`aovi!@>QXCc*QYY5 zHZh_yFr?BjqS4`1>ljhT;n7;TZ^`7;fipM?8<7HVPF_6?wo*J+J7bP?d^x#zi%S?N zKZeg;g}3A=lle!O5jByPMwf06XZN|0_7^pA$y!9eaQjhE$W-oO1`CSluDi&>dB zL7_l$rJm%eOv9W~$>uiUO^b!8$VjBjj9TtS8Tl%cu`ZxLLg2SJ+YLtE2zW)ny#n^e zi@@}TEd#$!$5?0tQd0g^+{SErLS@Xz<*bS3h8XKv!1=)==BKCWZEWIQf^93*RT0)? zSQu@>P_mXZlj1y2tu~z(;R>eY3YJ6|JyA-!vhwhruBOA`WL&K1toY|o5xeM&h@sM6 z@ozn?#n*5+&rxN{qczHmH(bte$WHo#LKqC*!ONgvUI&NZ36G{(y_e$xbQIO|7vsa) UU|5#c`v3p{07*qoM6N<$f~>kregFUf diff --git a/legend/任务奖励_每日任务#L500,846.png b/legend/任务奖励_每日任务#L500,846.png deleted file mode 100644 index b5cff1d51314f2ef4fbc01ec7e04ac63f9c63a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmVO;^Y&q4T5yt< z(`RTsUVuIKAT8!y44KXJM8r{{?B;0N8KgUrnY_|P5VH_0?7;$tl z-rLJar-Qb8LfO-K%P1dB;Y{LRQXF`l10cJR$)!l~6FeN?OY6&1xlMPW$}qfuDst*iGA3<{9#b}7!+ zeXO|MJiB_09zzW4vXb2vh zw&*-fVG1kSFgApWxxhfAX@7ry==J;&fGM3qQ@&M%*2(8jpXjN4MC;8`ruzE5fbORa zG#L|dYqa9Op7(x!NF!Uf@kOWOw@@(|6+>5H5%X`~dAC14b(WjiIkercWO-qM4`buB zq^9E%fN$a9jQRQ^*?rZ_2L-V%h?9{~w298Ahu-kT<6*qJn;x;%+1JOadx zUH}$?gL&a2TDYi5=H(VY-m6qhh3RNCr_feX#+=jXt$Fyl4BE>dH%_vYpOFG?%P!JK+MFy!9LJ)yTWEU<^ z6PL}`y>4sNJmM)zQI}+HDw>Br{j|Go>f*V2p3n3BJ_l)NejERE2(L{+xn6^kZ$Uk7 zMlqU1B%m6M45X&x%FD-9c?0*$c0P@NXJ~#4$v+iDePKf_zk;uz5U(B2v^2Qe9aw5>fJ|7W@fW4x&~9z7!``ct*tE1&a%F?#)zu&){sId zItGkJHid(U#6(XqmNh!i>G+kF zMj$T_WflWEV^w!wg1Bjc$13)abd`Q6wNweE;0BxhDG%d)(u{9kZF0_%D`%F!64-ompi z==ALD!XoicSg6iNN8?D(MCz%&!>~xK2+GaEA%zw3Z9fG(6B&uB(bM+q zmALcB93A&+d2h~ULfBsv@AxrRi!HYR@3ouQN-py5n3jM>! colors = new ArrayList<>(); + for (int y = 0; y < capture.getHeight(); y++) { + for (int x = 0; x < capture.getWidth(); x++) { + colors.add("#" + Integer.toHexString(capture.getRGB(x, y) & 0xFFFFFF)); + } + } + Map countMap = new HashMap<>(); + for (String c : colors) { + countMap.put(c, countMap.getOrDefault(c, 0) + 1); + } + + return countMap.getOrDefault(color, 0); + } + + /** + * 查找颜色 + * + * @param color 颜色值例,如:#ffffff + * @return 占比 + */ + public boolean hasColor(int left, int top, int right, int bottom, String... color) { + return hasColor(of(left, top, right, bottom), color); + } + + /** + * 查找颜色值 + * + * @param rect 查找区域 + * @param color 颜色值例,如:#ffffff + * @return 占比 + */ + public boolean hasColor(ViewRect rect, String... color) { + // 获取实时屏幕 + BufferedImage capture = capture(robot, rect); + ImageUtil.show(capture); + for (int y = 0; y < capture.getHeight(); y++) { + for (int x = 0; x < capture.getWidth(); x++) { + String col = "#" + Integer.toHexString(capture.getRGB(x, y) & 0xFFFFFF); + for (String s : color) { + if (col.equals(s)) { + return true; + } + } + } + } + return false; } /** diff --git a/src/main/java/xyz/wbsite/jmacro/tool/PickRect.java b/src/main/java/xyz/wbsite/jmacro/tool/PickRect.java index ca2b59e..e300f1b 100644 --- a/src/main/java/xyz/wbsite/jmacro/tool/PickRect.java +++ b/src/main/java/xyz/wbsite/jmacro/tool/PickRect.java @@ -1,18 +1,18 @@ package xyz.wbsite.jmacro.tool; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.log.StaticLog; import xyz.wbsite.jmacro.util.Logger; import javax.swing.*; import java.awt.*; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionAdapter; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; +import java.awt.event.*; import java.awt.image.BufferedImage; +import java.util.List; +import java.util.*; /** * 采集区域 @@ -120,10 +120,40 @@ public class PickRect extends JFrame { Logger.info("=========================区域采集========================="); Logger.info("屏幕区域:[{},{},{},{}]", left, top, right, bottom); Logger.info("相对区域:[{},{},{},{}]", left - originX, top - originY, right - originX, bottom - originY); - + Logger.info("-------------------"); + Logger.info("色值统计(TOP5):"); + List colors = new ArrayList<>(); + for (int y = top; y < bottom; y++) { + for (int x = left; x < right; x++) { + colors.add("#" + Integer.toHexString(capture.getRGB(x, y) & 0xFFFFFF)); + } + } + Map countMap = new HashMap<>(); + for (String c : colors) { + countMap.put(c, countMap.getOrDefault(c, 0) + 1); + } + LinkedHashMap sim = (LinkedHashMap) MapUtil.sortByValue(countMap, true); + + int topP = 1; + int length = StrUtil.length(colors.size() + ""); + List topColor = new ArrayList<>(); + for (String c : sim.keySet()) { + if (topP > 6) { + break; + } + double v = 1.0D * sim.get(c) / colors.size(); + if (v > 0.01D) { + topP++; + topColor.add(c); + Logger.info("{} {} {}", c, StrUtil.padPre(Convert.toStr(sim.get(c)), length, "0"), NumberUtil.formatPercent(1.0D * sim.get(c) / colors.size(), 0)); + } + } + Logger.info("-------------------"); Logger.info("用法示例:"); - Logger.info("1、区域点击:mouseLeftClick(of({},{},{},{}));", left - originX, top - originY, right - originX, bottom - originY); - Logger.info("2、区域查找:findLegend(of({},{},{},{}), \"按钮\", 0.99);", left - originX, top - originY, right - originX, bottom - originY); + Logger.info("区域点击:macro.mouseLeftClick(macro.of({},{},{},{}));", left - originX, top - originY, right - originX, bottom - originY); + Logger.info("区域查找:macro.findLegend(macro.of({},{},{},{}), \"按钮\", 0.99);", left - originX, top - originY, right - originX, bottom - originY); + Logger.info("区域查色:macro.findColor(macro.of({},{},{},{}), \"{}\");", left - originX, top - originY, right - originX, bottom - originY, topColor.get(0)); + Logger.info("区域找色:macro.hasColor(macro.of({},{},{},{}), \"{}\");", left - originX, top - originY, right - originX, bottom - originY, String.join("\",\"", topColor)); Logger.info("=========================区域采集========================="); close(); @@ -157,6 +187,25 @@ public class PickRect extends JFrame { setVisible(true); } + public static void main(String[] args) { + + List colors = new ArrayList<>(); + colors.add("ffffff"); + colors.add("000000"); + colors.add("111111"); + colors.add("111111"); + colors.add("111111"); + + Map countMap = new LinkedHashMap<>(); + for (String c : colors) { + countMap.put(c, countMap.getOrDefault(c, 0) + 1); + } + Map sim = MapUtil.sortByValue(countMap, true); + for (String s : sim.keySet()) { + System.out.println(s + " ==> " + sim.get(s) + "" + NumberUtil.formatPercent(sim.get(s) / colors.size(), 0)); + } + } + @Override public void doLayout() { super.doLayout(); diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java b/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java index fac9267..6d124b5 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/MacroForWJDR.java @@ -95,16 +95,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(); 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 5f6ea2b..18afa71 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_任务奖励领取.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_任务奖励领取.java @@ -6,6 +6,33 @@ import xyz.wbsite.jmacro.util.Logger; public class Task_任务奖励领取 extends BaseTask { + String[] numColor = new String[]{ + "#f15252", + "#fe3838", + "#e33335", + "#f23335", + "#e12929", + "#f65455", + "#d44446", + "#871829", + "#c22526", + "#e92f2f", + "#d02020", + "#b64046", + "#cb4840", + "#f93a3a", + "#962433", + "#f73132", + "#c82a28", + "#c21b1d", + "#e22424", + "#fd3e3e", + "#ff3939", + "#a42e38", + "#c83532", + "#f83838", + }; + public Task_任务奖励领取(JMacro macro, ViewRect viewRect) { super(macro, viewRect); } @@ -13,34 +40,47 @@ public class Task_任务奖励领取 extends BaseTask { @Override public void task(JMacro macro, ViewRect viewRect) { Logger.info("检测任务奖励"); - ViewRect[] viewRects = macro.matchLegends(0.3, "任务奖励_待领取", "任务奖励_待领取2"); - if (viewRects[0] == null && viewRects[1] == null) { + boolean hasColor = macro.hasColor(macro.of(38, 752, 58, 764), numColor); + if (!hasColor) { Logger.info("无任务奖励,跳过"); return; } Logger.info("进入任务页面,领取奖励"); macro.mouseLeftClick(macro.of(43, 758)); + macro.delay(1000); Logger.info("检测章节任务"); - ViewRect 章节任务 = macro.matchLegend("任务奖励_章节任务", 0.5); - if (章节任务 != null) { + boolean 章节任务 = macro.hasColor(macro.of(158, 849, 171, 857), numColor); + if (章节任务) { Logger.info("领取章节任务"); - macro.mouseLeftClick(章节任务); + macro.mouseLeftClick(macro.of(158, 849, 171, 857)); macro.delay(500); ViewRect 领取; do { - 领取 = macro.matchLegend("任务奖励_章节任务领取按钮", 0.9); + 领取 = macro.matchLegend("任务奖励_底部领取按钮", 0.9); if (领取 != null) { macro.mouseLeftClick(领取); } + ViewRect 底部领取 = macro.matchLegend("任务奖励_底部领取按钮", 0.9); + if (底部领取 != null) { + 领取 = 底部领取; + macro.mouseLeftClick(底部领取); + macro.delay(1000); + + ViewRect 任务奖励_点击退出 = macro.waitAndMatchLegend("任务奖励_点击退出", 0.5, 2); + if (任务奖励_点击退出 != null) { + macro.mouseLeftClick(任务奖励_点击退出); + macro.delay(500); + } + } } while (领取 != null); } Logger.info("检测成长任务"); - ViewRect 成长任务 = macro.matchLegend("任务奖励_成长任务", 0.5); - if (成长任务 != null) { + boolean 成长任务 = macro.hasColor(macro.of(330, 848, 342, 857), numColor); + if (成长任务) { Logger.info("领取成长任务"); - macro.mouseLeftClick(成长任务); + macro.mouseLeftClick(macro.of(330, 848, 342, 857)); macro.delay(500); ViewRect 领取; do { @@ -53,10 +93,10 @@ public class Task_任务奖励领取 extends BaseTask { } Logger.info("检测每日任务"); - ViewRect 每日任务 = macro.matchLegend("任务奖励_每日任务", 0.5); - if (每日任务 != null) { + boolean 每日任务 = macro.hasColor(macro.of(497, 846, 518, 858), "#e2d4d4", "#a74f52", "#ff3c3c","#ef3435","#e9e1e2","#fb3838","#f7f4f4","#fcfbfb"); + if (每日任务) { Logger.info("领取每日任务"); - macro.mouseLeftClick(每日任务); + macro.mouseLeftClick(macro.of(499, 847, 517, 858)); macro.delay(500); ViewRect 领取; do {