From 16e26acf9f392b255910926f25e18d4f9a0b2847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B7=E4=B8=AA=E5=90=8D=E5=AD=97=E5=A5=BD=E9=9A=BE?= =?UTF-8?q?=E7=9A=84=E5=96=B5?= <25520958+MisakaAldrich@users.noreply.github.com> Date: Wed, 2 Apr 2025 18:08:21 +0800 Subject: [PATCH] =?UTF-8?q?JS=E8=84=9A=E6=9C=AC=EF=BC=9Afix=E5=8E=86?= =?UTF-8?q?=E7=BB=83=E7=82=B9=E5=8F=8C=E5=80=8D=E5=A5=BD=E6=84=9F=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E9=98=9F=E4=BC=8D=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E4=B8=83=E5=A4=A9=E7=A5=9E=E5=83=8F=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E9=98=9F=E4=BC=8D=E5=8A=A0=E9=80=9F=E7=89=88?= =?UTF-8?q?=20(#511)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix:历练点双倍好感度切换队伍bug,feat:加入关闭提示,debug输出等选项 * JS脚本:返回七天神像切换指定队伍加速版 bgiVersion >= 0.44.1 --- .../Configure Team Button.png | Bin 0 -> 1211 bytes .../Confirm Deploy Button.png | Bin 0 -> 2010 bytes .../Assets/RecognitionObject/Leave Button.png | Bin 0 -> 2090 bytes .../RecognitionObject/Quick Setup Button.png | Bin 0 -> 2499 bytes .../RecognitionObject/Slider Bottom.png | Bin 0 -> 307 bytes .../Assets/RecognitionObject/Slider Top.png | Bin 0 -> 517 bytes repo/js/AcceleratedEditionSwitchParty/main.js | 146 ++++++++++++++++++ .../manifest.json | 15 ++ .../settings.json | 17 ++ .../main.js | 67 ++++---- .../manifest.json | 2 +- .../settings.json | 12 +- 12 files changed, 231 insertions(+), 28 deletions(-) create mode 100644 repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Configure Team Button.png create mode 100644 repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Confirm Deploy Button.png create mode 100644 repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Leave Button.png create mode 100644 repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Quick Setup Button.png create mode 100644 repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Slider Bottom.png create mode 100644 repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Slider Top.png create mode 100644 repo/js/AcceleratedEditionSwitchParty/main.js create mode 100644 repo/js/AcceleratedEditionSwitchParty/manifest.json create mode 100644 repo/js/AcceleratedEditionSwitchParty/settings.json diff --git a/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Configure Team Button.png b/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Configure Team Button.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bdd02afbf3fa48bafe5e4a6d6440dc4222d41f GIT binary patch literal 1211 zcmV;s1VsCZP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGqB>(^xB>_oNB=7(L1W-vtK~z{ry_jum z6h#=v|Fd^3&^KCo1uaOl7DFHv@Pm;S5+ufe8d@P>RBF{i(E@^RsEHCxRf-9k7B%rD zLSl?j5=;|6nLvCY5U|01K%qb@lC-szCe*g1z1tU`XKuE)dpA(p-toI^_IYM^X8!Zc zv%51Vy4y}VnR$h<%^_G;1dapPjzCKBG%pZ@Ap&q#5W!}+Jb{kKS@6o zq^GB0*Q-^SmY1zcq8LUHqPO!bOY}`u#Zx;|9;NChS7OzQQsqSvLcrjDRx{uq5P?;1Q;3)*RItL zI$_F^MI>Ts#V|)toJRZKUCQ&L%^^4J6JcO*NLh(+`)z-9D$kELhxUE`Jr4i+yDAwQ zO<&c?^Oe2AUdLwWYcoIoTPi#81*+jE_9H7|%Yjf;x_l^}qhBIQ+{g zv|s8%L4GclFIk9Lg$44Oj-&~?>&{uIseBkk^hsb`K|Fn7dg9KvcVOnNA>`&{UiTfR zP3lHU>LWLpN8I?fO{=l2bb++FJ`*u5{P5#(oM=9S3l}?KlF!#?&zz2uc}1vrs0<;M zV_tz;LCp0=;U)fl%d)ZelY?k(X~l3jBFl7e1n16~joN2c`KC}iWfS4C4Run8D|9qi z*r5Y&D=!64S;Kpqm33om-T0`oqD*+oT)g%A2d-lM^Sh<5!)?2sRt0m5Z&y zzVc!S+QDig`3MI6D?@I3J*^tG(2R@Tj#fGGa&yLK8XYI&cTGP_ zf2^>8kLtIM4C>^mvv~Kzucgf_U%Cj}YE~=H19flEc3SlPd(p9J@y&lU$a0mK&`50Bu0*#f$%doEYwR=<6F*oX9Qk()=;-fh Z$N#3c*}3v~00009a7bBm000&x z000&x0ZCFM@Bjb+5p+dZbW?9;ba!ELWdKudX>eh4bY)!^&fNe22X9G4K~z|Uy_ow` z8`l-bzjs$pB!L7%LOhJIK)h^h2MWeE7#y3iYcd%-V~=Orv`N!W|D^uVNyqgx6Wh}y zO@`F2362Xf2FDM~8*IRU5C{pO7f4!Z_x1-V!UA-metm!1IeX68&)z-v-m{kkR_9{j zh$x9*ic%WCh(rX(l5=*}zT#PRuXsYCa4Z(%d0wSb84Ov*979n-enEboR;!8o6GGUT zlaj@Rh(vebh-=>N`1#S(fx!{4&+qg3L*Z~J6cNRkC`ug1$#`C=RH!r5nL4dLE3>Mi ztiJAWS!u~GIRFs1V*HQN)3DIgb*#>=i*}gMv zt^2FWlXf=BIMQeK2ZFb|{@dBrv$*ICMOaruZ}WrcYJx{ z+xz_w*VaS-FT}bTi8FgWtYIpUg~vv>UahiA`cwtn{%lu#(# zbML{A-S^%SM_fZAr1#?1@^TluD8`H8b0B^9MnQvU3qalyaE#FzBFGQl3Lh zL?jB|8gY5C9)TpWDm@m9-GA_?yv%yC^_W5~PtNd-vJHj8ckce=Sah;Ecn+lnsIj8X zhO#2$W)YQz3-?ovQOe#rO^k94r4mUy(s*n?t0p&#~Fyf#UB^F}R>= z8w{>J8W^fMP?={orJ$^@hwk>=XN(6=@Zs?|2f|TwK19zDrWW8_r4a#g88v2+5(|!0 z;&d&H2An@ZM2f%siwd!{IR~DOEVa4JrrdbBBv9t<4yV(_Ksji|#TJsS1Awcy(b0biqv~=3sZ>({nIp;d~Prn!=qYX+M%@)jMxrtSm28DwRl1=E31H28T+4 z3(cg!2tx2xH@$Wz!Ld~?A3FMQy^97z$kgBu=SYTvrD@J0p^z>NdREdvD`x8NOEi3rb&2N@oEq$ zXxas0+b~Hb2idaivz74HXfzBbw;%E4p*U~1d2XAZrNJ6jKh95E5y zgDg)|ZjM4OPeHLUe^|y|U~~r2C@cp2=^XSr)>5I%z(>s}v4A6(oJarI_KQ$lMTPk) zl`;jTW`89EB`o0EUM#JGQhd~m%O_D_+}<-+j}MNLOD)i<5e(tV?H#%W>%P6340Zfk zmZUSAa~a#v<4JtegHO*OQ-j~N!IF)hK};>c=|x0lO#una}B7oVQdzQ9)tua<;c|& zTOkT_sayvCI&Svi@3*KZu}}`yROOj-H+OL|8Grm}eP>rUqh$$%@I@DvylAV%dp1~d zV95ber<4%I;1s$ZW5?D>tJTyUt}z%kWZNt zJ=6*aF|7D8?MOD1lwBeK_E(kL%JwCv4_;nv)oRtrmgA2HhS}|{C}Gl$Stt5OVaSA9 zL1jEd31I==V6x5Lfg?Lxf3%^_VllsL+!z&}=dC5h?PpJ2`Ns`*(@!Z43z%ER-16o- zJ0Qd#DU&tU*Vfh6B)i(UQnm@TTGe!{zP0(-ZZf{I4pdj1Io)E+$=+m7K_P^gO}Xu7 z-#=7S{gyb2_Y}7O`czqI$=2m@^X5qiv6b!n&E@kIHtQSb$TOQRU1&dcq;6Ng?*KTC zJ5*Es=RbaYV1MQAPtw>TgcRiGefG)awo@mzsq(#BIJ^*8)yw0&; zjzMp;SIUPx1A|z zQGBjhQH)BlU;Zc41iphKWa3?ZL8-Lkz`Rb`?$VPRnF)vz;dmLx%LtdYM<=hU-9vM| sgU;b;zbFx2Cg*q=Aq0d~G;dG;1IL+=p{x6i*Z=?k07*qoM6N<$g64q1L;wH) literal 0 HcmV?d00001 diff --git a/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Leave Button.png b/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Leave Button.png new file mode 100644 index 0000000000000000000000000000000000000000..58c150b41d9146dd8aa68756046654be85989f14 GIT binary patch literal 2090 zcmV+_2-WwAP)eh4bY)!^&fNe22fs-~K~z|Uy_ow` z8`l-b&wXfD4m530Tf=wfH8gsYzL2>G?~_&jMJu_=@0p(zjda6Nq*^cI_+ep zld-3@UB42?5FBD--j5gz7;Lb>AoK!(p3Cmu{;;YHSQ7Gset(kgo;{zlckem(?m>(( z00;&A9@kS4(8Sg|?mSswbPRkRLaKc4V5(L5H zU7ehonV5XC@M3v+d1Yh6FKlkAd0wwiD=M_)Tk>kFZRPKk8T5LUiYD>4Rp{yDP?}Di z$T|{<_yfV-{^714d!}cehQpCW6RW%(olaX@ZEHPoq_*0o)oM6SwF`d5KCzV@d&iO_ zxjo*V-l5xfet2$QOyyBxqLfxv>_2<@Wc`6^qrpH3h6D=&xnE4Z`VfIYaQyM~zpmbT zG%+R1@@uhU(rPu$P4(y7+pN}7HP5Gtce*@3J?Oi3<2$Fz^I8l3RS`n0WhEbaO=APD_K zqn%w3*4EbFIa|@P!+HJY_p`HelJs&dNAb_*>~}l69V^Z~Vk??`Hh<&Wjy0ce8{X$z z?;RMKoSuE-97|D>B=rr943CZr!lp7p0l>bv^ssL*vi+^R4A5dDjTe}-DUaWg=ZBI5 zu&tF;wlbeX8otK7af($i82aw+y{3b8N&Up_2#E!4xnoUm4j6HgMw55>{f?aO!@aVWCNw3;5#u#JBUBKBSaDY{rtb}4E3 zEiSGHgaH6BB{gSB^F`p(qU`X7bpP-2%!A}^XJ(%P0NHQdm*mAOk{y$P2{!Koq5=S< z%S0I#*l@A%I?EafPc`rFz@k}XgKYfxWV($EE*s4jK9UY`a4*l5tFWUf+^ ziW8*%6O<8UGxu}(X&(!$MkB~AkJf|Kl$DtQ05~t#yt^$?k;+!m@Jp0oiRPI5xioxL zeDJmW=ne#ZzyJ{7Tq`~H`$ScFhf0bI0RZnSE7_f1{UK?(fQ&iHU*=tqhOSC851Gd< zjop@h{uaW~15&gqmp1O|v!<#70B}iB!7glD8*Taw=}l4g>XJD4Z)vs%gdixnFnU8C zy9Gitfsv_1b>s_NSex8!MY$CKaK0tCth6YJ9c{jdw9ykP^R0;em*gk+V=w?

=WS zia2sTx-TGvG7E{VEs4*Xs!CHYevjDqjXd2A;?9E!6M|Cz zWoh_2Vhk}RGZ}EQB>dn+3&(K?A)KCWXsEBvF`E*Zik)9Eznl3S(!IaP6P+N53G4*% z{y)T?uOZ@R?m21jN+O5FMFq`G^-2o?xnE4VJ>G9FU%PR;<1N2wQW3`Z%Rl_)Tzf0e z^Pn6xO<9>O&5fnSg?rsfK?qg9U(wQhP+>#tpj}yEJ$>r9A;l8(rZQ(|{p!5!6*JrjVtNqLejSY2s5rJNxcB=K*u_K3c zI_=i+ZQGr-tmML{=Kx?}a5NMSzbkfny5Z!p!ylhJW6sXnaf$r-Pk)3h=c=r%42va) zG1=jCzt&M8t}w=VxjF4;PM<%eUmlC^3Wh-3^!9)BT|DZb$dr^MyCgMxN&@%dMx| zjyD~wGaB{ryBp4h$9PMHiortR@Z{8NPwznAz{rZz{aRo`NKv8X@S%q0#sg)gMI6UL zqTbH@^oUl=;{-L*?eRXhzZe`I8yOpaHfP@v;x&c@5j-yE;0D!f%b*IbyV#zUYU!0q_udKM-9&a!d5=DvQR9dYj*PLz6Hd(EuMFkd1 zUT(H2Gc8S*92~{ZP7KMi%yCqs;gt?pTrtKZNeYF+!BAKb1VPx8BuQqBU`z<+IF92~ zTCG;2<}t>pS5LIO_$;u#8tbd7DEWW(bkXLfu)gNHq)$ literal 0 HcmV?d00001 diff --git a/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Quick Setup Button.png b/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Quick Setup Button.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7e37512f40bfd647f38ddab4bee296ab96b2d5 GIT binary patch literal 2499 zcmV;!2|V_RP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGqB>(^xB>_oNB=7(L30O%)K~!i%%~^MI zQ&%26&)r6H?*?~cV=#f376T!HWOjCEw*9yJ&Gw7zPBJ0XNfrVagA49eZn9*{U9x4r zJ?Ba?a(@qIXL82Z^K@T3_jiB&S$&WGWqV5-aHg;tX&E`NZ5ul~TiD&*0brZI-y>4; z%9`LUu0?8ECU&A*91++e%?12kNek9WV9bVPlx-JmwL2PHTie*&3?m$gU~79D z(d{UowacedGFA%G)6+Q8k(HH+?5r$voSK>vf6Ax9T3zzlJ6mC@2T4oH4k5BDE2~%x zh2UQZVs_4tU~mzk&kMh9T;7w=Byt3(3jJMtNxo+Ag-B{mV8q)Yl@{>p@CNOoepaNw5Ml{U@rm2x;4A zX8ri>&0GBUWhW*leOTYvH0t#^NF~Ya>?~AQpT(W8uH(kFtEeb1G3xW##5coX43CWC z$-2uRZ5a0I;{2JypBkJ0(I z8>`gg|0m8+|J$#$;g5g#7OfY~8xM4xmS5_etd-2o$no!)_YP?DaEwd z(D5m|z6aUME57UBKm3e73QW6wob4RxOtEdtKpve0tdLP?E<%rih{4hhu2%r#z*?S@px34(n0tIl`m z?(N6Q>e?Zx?;|ev=JUbBxl_=*Rf6 zM_gfhaA*|cjEeFqu0TO-EK@?8@!v-vOm7-qqYAi;T?r32G2x?&4##InT$0w|M)vDjP7tp*{(~--u&dItTd4y?Gc}unWJup;=kM@ zLW1L6Hr_w9G4x^=Q@yqsI_`dCW3t=E=89}7euGO$umQTrgr4saS23W%;8P*bBK=+Q z+nD}fWAsgIDENftY_KZiMX_r?1xu8+ij+eVmy_RMxOIyRCUFH7z}Z%ynStig0}E{r zQgHcu3tw=w-A}>Adls5*TIL#Eo36yq9{O*n|Xm#D1pi^2O6$hxb_zd zcmA1z_CJvze^)fc{CWY0@|NZf3pf61;r2gx&7UnaT(gj08heIQM96K6_LuPGd&K2- z+~nB`-);9TT>qPedgdp&#W6`H{CUEu=s1mYI+w?L8rm(~{JVu#?t-T<{xAoSyN;^F zJV;z6Q=)8g0_7oDUW-I6>bDq*DNh_X;@9Zf6yB4a$3i-r^A2J7$&e%s{WkvzwGPxq zaEiH6pzo=T*+EwPALGKQP>`Dbz zh=|-`?lk3n$jxM&hA)4WVm_>%gahp zQdD%P(r|*s8RaSQAae|qqbxC(QAOmoNuYLJX-SdMinO#i@r1H#8`M?OmbisN`8?h|cpt_N+GT2Otq(zUKjhvgpq<2+8%byf9p zeHsyUIh+gIaF8&i2?hCi`!r!6aWx~=Mg8J(D+&wp_qN3el>00*Go0$B5z=!=vKpZ| zE@(jK+!>|bT|_UUrf5CYWxBnNB*q*x`H_=GxE6h5DbX__=!J=VifD7PIa9X2| zyYVD?XJca>I&NJGLF$O+SwblTx^3K3I3yuP*u_rJMK6=^qyc@jvR zig<$6Nc#G|^RDLuo;`nITF*O&~c6BAiau$frZl_n`atI&k^Yg=5tt8IFhx zB04tVGtJQMo_^EUQ(H`*2NQLmQ^-TeZoD3k>BL@cYemP+b`v2J_H-)o;4J+YP5vb5 zC7%=7;gKu%WW4J8SCIV z^D$bVMq02!{xREpnB@!i2%dhQS-`~9wD}5WzHu&w5L#Zw+UmObl91@GN)@EPBBmHo zz`#~jS%!wX8so8~7M}tuG(SSR7NeZLb;h^c0dYYKm4syjf#8zqeP}^ybBMSeV?GTs zn0UP+o^Om!$D02fSpLzMc6xRpY;KQ;$E1F|+8ji(8o7ZJbvPct{{R5Wz^L~J0Eqwq N002ovPDHLkV1idH(&YdE literal 0 HcmV?d00001 diff --git a/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Slider Bottom.png b/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Slider Bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..4af2e3cb2cbfae1e2b64dab230b8f1753fab2fbd GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BS!3HE91=ODbDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9E$svykh8Km+7D0srt#W6%9c zvKIZZNAqcu;7g^`mj4Vw7JX~8?b3Hkc5&@bE#7s}sJG)xz|Grt{^-RRa&25V;gP=9Lq-J>PB=pSVaTU~+}n;T;R@gFbLD zu^gPtuOD%;``MHqz7E%YzqDzwJ(ko97giLEGdUCS=E|v1J)oZ$JYD@<);T3K0RVgU Bbaem# literal 0 HcmV?d00001 diff --git a/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Slider Top.png b/repo/js/AcceleratedEditionSwitchParty/Assets/RecognitionObject/Slider Top.png new file mode 100644 index 0000000000000000000000000000000000000000..7334e462d3aaf4a0dcf36f6b50a4da22abfb8fc4 GIT binary patch literal 517 zcmV+g0{Z=lP)#2meK|Hies_SI zLX+l+xgzHDUlXw%yshMd@ZuNJ^SYw00000NkvXX Hu0mjf5ToL$ literal 0 HcmV?d00001 diff --git a/repo/js/AcceleratedEditionSwitchParty/main.js b/repo/js/AcceleratedEditionSwitchParty/main.js new file mode 100644 index 00000000..f9dcc98f --- /dev/null +++ b/repo/js/AcceleratedEditionSwitchParty/main.js @@ -0,0 +1,146 @@ +// Party Setup +const QuickSetupButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Quick Setup Button.png"), 1100, 900, 400, 180); +const ConfigureTeamButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Configure Team Button.png"), 0, 900, 200, 180); +const ConfirmDeployButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Confirm Deploy Button.png"), 0, 900, 1920, 180); +// Slider +const LeftSliderTopRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Slider Top.png"), 650, 50, 100, 100); +const LeftSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Slider Bottom.png"), 650, 100, 100, 900); +const MiddleSliderTopRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Slider Top.png"), 1250, 50, 100, 200); +const MiddleSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Slider Bottom.png"), 1250, 100, 100, 900); +const RightSliderTopRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Slider Top.png"), 1750, 100, 100, 100); +const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/Slider Bottom.png"), 1750, 100, 100, 900); + + +/** + * @returns {Promise} + */ + +(async function() { + // 翻页 + async function pageDown(SliderBottomRo) { + let SliderBottom = captureGameRegion().find(SliderBottomRo); + if (SliderBottom.isExist()) { + log.info("当前页面已识别&点击完毕,向下滑动"); + // log.info("滑块当前位置:({x},{y},{h},{w})", SliderBottom.x, SliderBottom.y, SliderBottom.Width, SliderBottom.Height); + click(Math.ceil(SliderBottom.x + SliderBottom.Width / 2), Math.ceil(SliderBottom.y + SliderBottom.Height * 2)); + await moveMouseTo(0, 0); + await sleep(100); + } + } + + // 滑条顶端 + async function pageTop(SliderTopRo) { + let SliderTop = captureGameRegion().find(SliderTopRo); + if (SliderTop.isExist()) { + log.info("识别到滑条顶端位置:({x},{y},{h},{w})", SliderTop.x, SliderTop.y, SliderTop.Width, SliderTop.Height); + await moveMouseTo(Math.ceil(SliderTop.x + SliderTop.Width / 2), Math.ceil(SliderTop.y + SliderTop.Height * 1)); + leftButtonDown(); + await sleep(1000); + leftButtonUp(); + await moveMouseTo(0, 0); + await sleep(100); + } + } + + // 切换队伍 + async function SwitchParty(partyName) { + let ConfigureStatue = false; + keyPress("VK_L"); + + for (let i = 0; i < 10; i++) { + let QuickSetupButton = captureGameRegion().find(QuickSetupButtonRo); + if (QuickSetupButton.isExist()) { + log.info("已进入队伍配置页面"); + break; + } else { + await sleep(1000); + } + } + // 识别当前队伍 + let captureRegion = captureGameRegion(); + let resList = captureRegion.findMulti(RecognitionObject.ocr(100, 900, 300, 180)); + for (let i = 0; i < resList.count; i++) { + let res = resList[i]; + log.info("当前队伍名称位置:({x},{y},{w},{h}), 识别结果:{text}", res.x, res.y, res.Width, res.Height, res.text); + if (res.text.includes(partyName)) { + log.info("当前队伍即为目标队伍,无需切换"); + keyPress("VK_ESCAPE"); + await sleep(500); + } else { + await sleep(1000); + let ConfigureTeamButton = captureGameRegion().find(ConfigureTeamButtonRo); + if (ConfigureTeamButton.isExist()) { + log.info("识别到配置队伍按钮"); + ConfigureTeamButton.click(); + await sleep(500); + await pageTop(LeftSliderTopRo); + + for (let p = 0; p < 4; p++) { + // 识别当前页 + let captureRegion = captureGameRegion(); + let resList = captureRegion.findMulti(RecognitionObject.ocr(0, 100, 400, 900)); + for (let i = 0; i < resList.count; i++) { + let res = resList[i]; + if (settings.enableDebug) { + log.info("文本位置:({x},{y},{w},{h}), 识别内容:{text}", res.x, res.y, res.Width, res.Height, res.text); + } + if (res.text.includes(partyName)) { + log.info("目标队伍位置:({x},{y},{w},{h}), 识别结果:{text}", res.x, res.y, res.Width, res.Height, res.text); + click(res.x, Math.ceil(res.y + res.Height * 1.35)); + + // 找到目标队伍,点击确定、部署 + await sleep(1500); + let ConfirmButton = captureGameRegion().find(ConfirmDeployButtonRo); + if (ConfirmButton.isExist()) { + log.info("识别到确定按钮:({x},{y},{w},{h})", ConfirmButton.x, ConfirmButton.y, ConfirmButton.Width, ConfirmButton.Height); + ConfirmButton.click(); + } + await sleep(1500); + let DeployButton = captureGameRegion().find(ConfirmDeployButtonRo); + if (DeployButton.isExist()) { + log.info("识别到部署按钮:({x},{y},{w},{h})", DeployButton.x, DeployButton.y, DeployButton.Width, DeployButton.Height); + DeployButton.click(); + ConfigureStatue = true; + break; + } + } + } + if (ConfigureStatue) { + await genshin.returnMainUi(); + break; + } else { + await pageDown(LeftSliderBottomRo); + } + } + if (!ConfigureStatue) { + log.warn("\n\n队伍切换失败,可能是:\n1.处于联机模式 \n2.无法正确识别\n3.JS自定义配置中的队伍名称设置错误,请检查!\n"); + await genshin.returnMainUi(); + break; + } + } + } + } + } + + // Main + if (!!settings.partyName) { + // try { + if (!settings.disableGoStatue) { + log.info("正在传送回七天神像切换队伍"); + await genshin.TpToStatueOfTheSeven(); + log.info("正在尝试切换至" + settings.partyName); + await SwitchParty(settings.partyName); + } else { + await genshin.returnMainUi(); + log.info("正在尝试切换至" + settings.partyName); + await SwitchParty(settings.partyName); + } + // } catch { + // log.warn("队伍切换失败,可能处于联机模式或其他不可切换状态"); + // await genshin.returnMainUi(); + // } + } else { + log.warn("没有设置切换队伍"); + await genshin.returnMainUi(); + } +})(); \ No newline at end of file diff --git a/repo/js/AcceleratedEditionSwitchParty/manifest.json b/repo/js/AcceleratedEditionSwitchParty/manifest.json new file mode 100644 index 00000000..62b73da1 --- /dev/null +++ b/repo/js/AcceleratedEditionSwitchParty/manifest.json @@ -0,0 +1,15 @@ +{ + "manifest_version": 1, + "name": "返回七天神像切换指定队伍加速版", + "version": "1.0", + "BgiVersion": "0.44.1", + "description": "", + "authors": [ + { + "name": "起个名字好难的喵", + "links":"https://github.com/MisakaAldrich" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} \ No newline at end of file diff --git a/repo/js/AcceleratedEditionSwitchParty/settings.json b/repo/js/AcceleratedEditionSwitchParty/settings.json new file mode 100644 index 00000000..e655a17d --- /dev/null +++ b/repo/js/AcceleratedEditionSwitchParty/settings.json @@ -0,0 +1,17 @@ +[ + { + "name": "partyName", + "type": "input-text", + "label": "需要切换的队伍名称" + }, + { + "name": "disableGoStatue", + "type": "checkbox", + "label": "关闭前往七天神像" + }, + { + "name": "enableDebug", + "type": "checkbox", + "label": "开启Debug模式(队伍寻找过程中的识别内容)" + } +] \ No newline at end of file diff --git a/repo/js/DoubleFriendshipEncounterPointsRecognition/main.js b/repo/js/DoubleFriendshipEncounterPointsRecognition/main.js index 01ad50e2..37ce10a6 100644 --- a/repo/js/DoubleFriendshipEncounterPointsRecognition/main.js +++ b/repo/js/DoubleFriendshipEncounterPointsRecognition/main.js @@ -28,15 +28,17 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn */ (async function() { // 切换队伍 - for (let n = 0; n < 10; n++) { - log.warn("提示:队伍中小于等于两人时,才会触发双倍奖励"); + if (!settings.disableNotice) { + for (let n = 0; n < 10; n++) { + log.warn("提示:队伍中小于等于两人时,才会触发双倍奖励"); + } + await sleep(1000); } - await sleep(1000); if (!!settings.partyName) { try { log.info("正在尝试切换至" + settings.partyName); - if (!settings.goStatue) { + if (!settings.disableGoStatue) { log.info("正在传送回七天神像切换队伍"); await genshin.TpToStatueOfTheSeven(); await SwitchParty(settings.partyName); @@ -45,7 +47,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn await SwitchParty(settings.partyName); } } catch { - log.warn("队伍切换失败,可能处于联机模式或其他不可切换状态"); + log.warn("\n\n队伍切换失败,可能是:\n1.处于联机模式 \n2.无法正确识别\n3.JS自定义配置中的队伍名称设置错误,请检查!\n"); await genshin.returnMainUi(); } } else { @@ -86,6 +88,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn // 切换队伍 async function SwitchParty(partyName) { + let ConfigureStatue = false; keyPress("VK_L"); for (let i = 0; i < 10; i++) { @@ -102,10 +105,11 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn let resList = captureRegion.findMulti(RecognitionObject.ocr(100, 900, 300, 180)); for (let i = 0; i < resList.count; i++) { let res = resList[i]; + log.info("当前队伍名称位置:({x},{y},{w},{h}), 识别结果:{text}", res.x, res.y, res.Width, res.Height, res.text); if (res.text.includes(partyName)) { - log.info("当前队伍即为目标队伍,无需切换", res.x, res.y, res.Width, res.Height, res.text); + log.info("当前队伍即为目标队伍,无需切换"); keyPress("VK_ESCAPE"); - await sleep(1000); + await sleep(500); } else { await sleep(1000); let ConfigureTeamButton = captureGameRegion().find(ConfigureTeamButtonRo); @@ -116,36 +120,47 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn await pageTop(LeftSliderTopRo); for (let p = 0; p < 4; p++) { - let ConfigureStatue = false; // 识别当前页 let captureRegion = captureGameRegion(); let resList = captureRegion.findMulti(RecognitionObject.ocr(0, 100, 400, 900)); for (let i = 0; i < resList.count; i++) { let res = resList[i]; - // log.info("文本位置:({x},{y},{w},{h}), 名称:{text}", res.x, res.y, res.Width, res.Height, res.text); + if (settings.enableDebug) { + log.info("文本位置:({x},{y},{w},{h}), 识别内容:{text}", res.x, res.y, res.Width, res.Height, res.text); + } if (res.text.includes(partyName)) { - log.info("目标队伍位置:({x},{y},{w},{h}), 名称:{text}", res.x, res.y, res.Width, res.Height, res.text); - click(res.x, Math.ceil(res.y + res.Height * 1.1)); + log.info("目标队伍位置:({x},{y},{w},{h}), 识别结果:{text}", res.x, res.y, res.Width, res.Height, res.text); + click(res.x, Math.ceil(res.y + res.Height * 1.35)); // 找到目标队伍,点击确定、部署 - for (let c = 0; c < 2; c++) { - await sleep(1000); - let ConfirmDeployButton = captureGameRegion().find(ConfirmDeployButtonRo); - if (ConfirmDeployButton.isExist()) { - log.info("识别到确定按钮"); - ConfirmDeployButton.click(); - } + await sleep(1500); + let ConfirmButton = captureGameRegion().find(ConfirmDeployButtonRo); + if (ConfirmButton.isExist()) { + log.info("识别到确定按钮:({x},{y},{w},{h})", ConfirmButton.x, ConfirmButton.y, ConfirmButton.Width, ConfirmButton.Height); + ConfirmButton.click(); + } + await sleep(1500); + let DeployButton = captureGameRegion().find(ConfirmDeployButtonRo); + if (DeployButton.isExist()) { + log.info("识别到部署按钮:({x},{y},{w},{h})", DeployButton.x, DeployButton.y, DeployButton.Width, DeployButton.Height); + DeployButton.click(); + ConfigureStatue = true; + break; } - ConfigureStatue = true; - keyPress("VK_ESCAPE"); } } if (ConfigureStatue) { + await genshin.returnMainUi(); break; } else { await pageDown(LeftSliderBottomRo); } } + if (!ConfigureStatue) { + log.warn("\n\n队伍切换失败,可能是:\n1.处于联机模式 \n2.无法正确识别\n3.JS自定义配置中的队伍名称设置错误,请检查!\n"); + await genshin.returnMainUi(); + break; + } } } } @@ -164,7 +179,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn FriendsBotton.click(); await sleep(2000); } else { - log.info("未识别到按钮,使用坐标点击"); + log.warn("未识别到按钮,使用坐标点击"); click(680, 550); await sleep(2000); } @@ -176,7 +191,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn for (let i = 0; i < resList.count; i++) { let res = resList[i]; if (res.text.includes(settings.appointFriendName)) { - log.info("指定好友名字位置:({x},{y},{w},{h}), 文本{text}", res.x, res.y, res.Width, res.Height, res.text); + log.info("指定好友名字位置:({x},{y},{w},{h}), 识别内容:{text}", res.x, res.y, res.Width, res.Height, res.text); click(res.x - 100, res.y + 50); await sleep(500); @@ -186,7 +201,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn for (let i = 0; i < resList.count; i++) { let res = resList[i]; if (res.text.includes("申请造访") || res.text.includes("visit Serenitea Pot") || res.text.includes("申請造訪")) { - log.info("申请造访尘歌壶位置:({x},{y},{w},{h}), 文本{text}", res.x, res.y, res.Width, res.Height, res.text); + log.info("申请造访尘歌壶位置:({x},{y},{w},{h}), 识别内容:{text}", res.x, res.y, res.Width, res.Height, res.text); res.click(); } } @@ -242,7 +257,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn FriendsBotton.click(); await sleep(2000); } else { - log.info("未识别到按钮,使用坐标点击"); + log.warn("未识别到按钮,使用坐标点击"); // click(1020,840); click(680, 550); await sleep(2000); @@ -326,7 +341,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn for (let i = 0; i < resList.count; i++) { let res = resList[i]; if (res.text.includes("委托") || res.text.includes("委託") || res.text.includes("Commissions") || res.text.includes("委")) { - log.info("识别到委托选项卡位置:({x},{y},{w},{h}), 文本{text}", res.x, res.y, res.Width, res.Height, res.text); + log.info("识别到委托选项卡位置:({x},{y},{w},{h}), 识别内容:{text}", res.x, res.y, res.Width, res.Height, res.text); res.click(); } else { log.info("未识别到识别到委托选项卡"); @@ -342,7 +357,7 @@ const RightSliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSyn log.info("已领取历练点奖励"); keyPress("VK_ESCAPE"); } else if (EncounterPointsStageRewardsButton.isEmpty()) { - log.info("未识别到历练点领取奖励按钮"); + log.warn("未识别到历练点领取奖励按钮,可能是已领取或未完成"); } await genshin.returnMainUi(); await sleep(2000); diff --git a/repo/js/DoubleFriendshipEncounterPointsRecognition/manifest.json b/repo/js/DoubleFriendshipEncounterPointsRecognition/manifest.json index 36f28139..d4b3b368 100644 --- a/repo/js/DoubleFriendshipEncounterPointsRecognition/manifest.json +++ b/repo/js/DoubleFriendshipEncounterPointsRecognition/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "历练点双倍好感(Recognition Version)", - "version": "2.1", + "version": "2.1.1", "BgiVersion": "0.44.1", "description": "进入好友尘歌壶,用历练点领取双倍好感\n目前支持游戏语言:简体、繁体中文、英文\n!!!此版本基于图像识别&OCR,Build日期早于2025年4月2日的BetterGI无法使用", "authors": [ diff --git a/repo/js/DoubleFriendshipEncounterPointsRecognition/settings.json b/repo/js/DoubleFriendshipEncounterPointsRecognition/settings.json index b7071d2b..1475a48d 100644 --- a/repo/js/DoubleFriendshipEncounterPointsRecognition/settings.json +++ b/repo/js/DoubleFriendshipEncounterPointsRecognition/settings.json @@ -15,8 +15,18 @@ "label": "(选填)申请好友数,需小于等于7,不支持翻页" }, { - "name": "goStatue", + "name": "disableGoStatue", "type": "checkbox", "label": "关闭前往七天神像" + }, + { + "name": "disableNotice", + "type": "checkbox", + "label": "关闭双人队伍提醒" + }, + { + "name": "enableDebug", + "type": "checkbox", + "label": "开启Debug模式(队伍识别输出所有内容)" } ] \ No newline at end of file