From add55d1ef804f741157fbe98a1b7ee5a82e53c83 Mon Sep 17 00:00:00 2001 From: skyflag2022 <107539971+skyflag2022@users.noreply.github.com> Date: Sat, 10 Jan 2026 13:44:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#2649)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 增加延迟 * 修改了一些问题 --- .../assets/RecognitionObject/confirmButton.png | Bin 2048 -> 0 bytes .../assets/RecognitionObject/filterButton.png | Bin 522 -> 0 bytes .../assets/RecognitionObject/research.png | Bin 1367 -> 0 bytes .../assets/RecognitionObject/resetButton.png | Bin 1269 -> 0 bytes repo/js/营养袋吃药统计/assets/搜索.png | Bin 0 -> 3163 bytes repo/js/营养袋吃药统计/assets/确认筛选.png | Bin 0 -> 3851 bytes repo/js/营养袋吃药统计/assets/筛选1.png | Bin 0 -> 941 bytes repo/js/营养袋吃药统计/assets/筛选2.png | Bin 0 -> 892 bytes repo/js/营养袋吃药统计/assets/重置.png | Bin 0 -> 1478 bytes repo/js/营养袋吃药统计/main.js | 278 ++++-------------- repo/js/营养袋吃药统计/manifest.json | 2 +- repo/js/营养袋吃药统计/settings.json | 8 +- 12 files changed, 57 insertions(+), 231 deletions(-) delete mode 100644 repo/js/营养袋吃药统计/assets/RecognitionObject/confirmButton.png delete mode 100644 repo/js/营养袋吃药统计/assets/RecognitionObject/filterButton.png delete mode 100644 repo/js/营养袋吃药统计/assets/RecognitionObject/research.png delete mode 100644 repo/js/营养袋吃药统计/assets/RecognitionObject/resetButton.png create mode 100644 repo/js/营养袋吃药统计/assets/搜索.png create mode 100644 repo/js/营养袋吃药统计/assets/确认筛选.png create mode 100644 repo/js/营养袋吃药统计/assets/筛选1.png create mode 100644 repo/js/营养袋吃药统计/assets/筛选2.png create mode 100644 repo/js/营养袋吃药统计/assets/重置.png diff --git a/repo/js/营养袋吃药统计/assets/RecognitionObject/confirmButton.png b/repo/js/营养袋吃药统计/assets/RecognitionObject/confirmButton.png deleted file mode 100644 index 78d72f2993c10c250154aeb18fe31314adbe5dd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmV+b2>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGqB>(^xB>_oNB=7(L2bD=gK~z{r)mdpw zR96)K?wfJgcN{>$ifdg#+)#qn6^o*^)@W)gu_jGzY|_N0Y5J$8zncE(kG6?vVk?c+ zx~1-|3$^YmZnzpAy5P#Bmu;1<8+W$w&d=6mOU=bZ1pC(4VnR23@R zg-S;=T3T9BU0s91;sN2GbL#AUv$E+-F4EEutl*kFja<4qUl*Lr$;5;n4T?4vM14NJkGGfRyCf zh@TV(FHcW>Z`Uv+%2WK)hTl;7xcr$3b_Np;@b|;~d9#o*e-46!0`)!4a7lFMUk8x( z#||_$HuY$VdkWU`w1ml6ow^)hx)eG?(LdY4gg7C7-?CGZ)Ux=+kz}y`kDWM!A8F6n zPC@EGw6N#_cI`PR!~ZI=ZPz|zT+P(KX^=!&6LnOykNkTQ**W=WZEcl1-GNCF2=o&e z7AY`(7?3bp+a?SL#tagO2odOG7CkEN9L==N+fh+bCAsk?vz`YTS2D3NZ7Xte@9BrT z2LErMFYx97fpJ5Dn8CmsVcKs@soD-yka}(xP>H((+@#AEma3r6>o!t9Sc(-y#zARJPZs6k|qkg6|0S@TXqX3efB1B=pu0LmWqZZeTMst>`){OI zFnzgh?fUH8d>lS{T$&3bFrjE7wrZY0%2a`{V4$%X$S!6Qz!@Txk)`5pk$|lZ@b?A+ zeCV7AUBVuJgW0?pJrjMQMSua~A~#PA_7t^0h<`ZMP;aQx(1X)0WSFC0O{R=q7S zd%S>$1;~8}>^@D~Dd0#3a4J*9r7YlDE^zC7T zYZ~kh9JCyg#pWYGdWI^c!_{C~3|9l~7*}x6owKb}s%$otl~?FLJA=y#Zx$*s@goJI ztdtDRDlXhrk$#zU)S#6Q-a4c0_m)io>s z_7q${AL%OdreySW?Uf~1I(7DXXZO?@Z93!4LEE!H5v}kr_wE`>9}=I%@?>S$9k~6M zRB2-`51O_hZQK)BNIqOk8Fq?pts5HWMDw9#i{jzoAy1*UbZQK+1 z`v}Ai(Z*c#OS>;N?cn8#KP^`jKVKhO%KGU)cMmS)7sy<2_Hs0*kVE2n>MpcmFEDi! z%ZchRb*4Q1#$ADlMuc0T1O@~kG{iXlBvI<)_vsHjNhuS_(#?#cr0_JZg>5Z#$u!Mf zarR%O7R$A@P5<4&OzWvZ(F34_h6YQC%LSZD8(F_oiFI3|6Pl>3=eps?7S!&}|V%d@ujE^0of78%`C_k*45H}VJ z=g*N(*igP)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0iQ`kK~zXf?Ur3j z!eAJNpS_z(LE`)*%a5W|q|8}bh8mJ59e2_{=+{Tkv9aE3%+fKLOHYDs80zyp_jSK> zd&i9Dmsj`g{X^#SPjOvWb}7R!#Ij6L$K||OrsY)Y=$!w#A}?K^Zq`oAbkx<5mgMyJ zps3MfhFLs#gIfDPFl_2ov7zqut=Mi<{mzf5(PM_$umH3+WFdC$X}v5}eQO3qjb7A~ zA~FQAp*VtCR}X5VkZtuJ5=;LfvGg}Wc#VpBmHKrEJ3XP_527XV1q`7z>H{d$C;$Ke M07*qoM6N<$g2&3@`2YX_ diff --git a/repo/js/营养袋吃药统计/assets/RecognitionObject/research.png b/repo/js/营养袋吃药统计/assets/RecognitionObject/research.png deleted file mode 100644 index b998c778c9c4c2e1512b0386c803f41f12e7ee85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1367 zcmV-d1*rOoP)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1nfyfK~zXfwN`0U zQ)d)DAqixIkcB`95Gu&xP%2>6f`E)O(srh`f1n@xKl~@1>6do=;Iy5wj-9qx8%9y; z2r3A&7$ggj5JJKd$kOwidvBU3Oh5I>+_}qp?^&PcywP>_j~3{EMumD77z}!&-43=om?(YuUFpE!C^-3%bc8q5stRMw^ITznJTH$ zXe6hjM#`jN=wh!t(^n`Z-aj~`Z-2N`baHy(RoH86ROfQ=*-BGSU($ECexb?7vtmfY zW^9|*)}xZOqqbVUDeb9b^7*wv>TGXeW3^PJMmTn5fV>T^vWS;gLo~Oz$_DgO9u0x1 zS=!q_pl`muA*Fs7;tr`cagA%Lt;LibcFw@*5GH9D_^6A<$1X`$rRY7^PNRc;Qqq$k z7N=+C>BqYd=+)91vm`4EvvbSzaQZo=_YUM9K(-hA&T+J6^@)P+j#j!n&_gzxx!C+t zh?C_vA$sy`oEyN5O_R8x9{Ai?Zhq> zPLQ@ZIp*jOnF%@3gz^?>C_+=q2dqang_>B?@ehE2L*Xr2SY9i#>0OkGv9sMzElu@g zG#bdwB(QUjtgLLevzB|KC!g0t=X*M+i*-?Lvv2@9sG18s*>gfSPOqnKBWwg3p^_=TTj;+5h=2nnOma3qZvvwg$o?WaW+fI z)Sir`g4&=8Ty${yps>ZPH~?bt9d2-%j*hY-#wKrF@o?6%y48$r7PDl5=gmG3o$)uy zHA=3*0FR;Q7A`Z zgmXw@i4ScuOQCm?DPe*ZeJRkuz|;(98_Pze$jbGH!O>6psI|pQ13aBEdSYY)}1elts zwCLu>_%L0+dWjl&|G~b4i2>DPQfN~{Lzxro7o}7!1q>mZJLH0n8vjA-W#f4H(17Pev3 z_?x|=4IgX6VXu+MkC{~)OyTcu|0;|WC!i=CKqnZIQI00fi#^?KLPJE2QsEl9!XT6( z$t6Ujpe=0Rz^;gW3G2`2m*{|lEB@~S|Dg}uAbkiQ2CxHW`My+arvXk;N{!ACW4=(J Ze*pNJBPP4rU`GG|002ovPDHLkV1njnk*)v$ diff --git a/repo/js/营养袋吃药统计/assets/RecognitionObject/resetButton.png b/repo/js/营养袋吃药统计/assets/RecognitionObject/resetButton.png deleted file mode 100644 index 8a8d9e8e200b3641e143ca919995a5629c5552f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmVP000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1d2&SK~zXfomN?I z6IU2L*N(F|`(k1zCLwGA6+**O1X0wgP!$2mH-8{gb)HD zG%;D6#CGD?iNozVckD26Xyo!qBYS4<{g!jS@7ytigM$`jW{g2F0EDW5>JZS<0K_9e ztPS{k(qdv7ST7V8S76(M$Z2ggP+x1%(G2XR<9$*7c6tHi_@`SIcb@^d_2Q-q%mrcM zXl?Wy?(YKnqQ+(3*#Z}=u^y-j!a4u(rp40-EUh#rjx*k zX0*v5nKo`VuHOOvdbRriYEb3WL7cPBUk^F1Bi8}3EW(@E?`qSRl#C^o&g5K%OC)rh zK@%jtG=Lv7!JJxQg500sZwvkHY4t|J5if13<&CltkqTBaZ5G+WUV(SB9HA8XYphtL zizBtNRKZQO21_lgKp&fvO3c4s{uDrT1e9Igz2KBr8H5$RY+@@lsf0RF`wR59QDFNk zpk5|9%~_TxS&vdC>KW)$OeDv+KTKK567m!~Q&0y4^c!}CCRR8~?AoZvrD?6yv|ijE z>}C^j?v__LoKyp~d_csGy|qYCVI^$+oP24KNc%q~m^5$Num1^Z;hR~ni5w?0eDEjF zh~b-K+)skx@x`EwY!C?EDjO@$x<)JA+>7pY*I&q*9cBlMEW|*5}uOkj^Y_2 z3DG42|0`6u#^MNd>e5-t5`|H`JfZyj{*Vem8VaQ#(%o#%8@>on!Y)=5YcuY&46);c zcWGV}EyM$=jwe0nNKkYVRUCd fovV3vI0Nu6G9uS8C-Fh-00000NkvXXu0mjfWQa$y diff --git a/repo/js/营养袋吃药统计/assets/搜索.png b/repo/js/营养袋吃药统计/assets/搜索.png new file mode 100644 index 0000000000000000000000000000000000000000..257732aa5b5e195112cd87f1850e680c5eda8214 GIT binary patch literal 3163 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 BJevRj literal 0 HcmV?d00001 diff --git a/repo/js/营养袋吃药统计/assets/确认筛选.png b/repo/js/营养袋吃药统计/assets/确认筛选.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc098dd03806a362913e7864aa4ef6b964d7b87 GIT binary patch literal 3851 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 N002ovPDHLkV1n!WdlLWv literal 0 HcmV?d00001 diff --git a/repo/js/营养袋吃药统计/assets/筛选1.png b/repo/js/营养袋吃药统计/assets/筛选1.png new file mode 100644 index 0000000000000000000000000000000000000000..b58f24d71415f4d1963e6b4b48d8cccadfa1c6a4 GIT binary patch literal 941 zcmV;e15*5nP)_R&=l+u8L#?9Y`i%xiBrh(L2{uS1zkZ{kR?)HS zbi|JXbYfBf=b~NSq$-gp1WPj?mPi!xCYAg1$3Fmy0N@*9wa!-8wOx@>B2iS=wOOn) z=-wuYW0?pj0+2WeAMOqf>tLx85(~@{B$mTc<>0U`6x=z9U|hgS1Pul}BVz_w+RDUR zkONCwN5%}nfafHFGU^loQe8yifW)yx1oa{A@rg-Tsw_ylxJ(91mE#kWKE$0!t1~Uc z2Ba{FV{~ohlTL3ehyhELI=yjiUC^?S zNG5@sM@9`_T}$zBfKkr}AaN`j@~^Ktd;15)Rn2)$1|*V;tD1ZJ2iI4f(U70Sv77)V z9L9--{9eS}-rXmvY%1oBLnISbHnn&6c@cLkpRt2FXE1eGbff;Bva&EYq5~uVPDYPdsJHS7o)VIUUTn}!@iJz@3d^r24Jrksm*^D_&&w|RN>R0K3289QWSIX(?IM7Mog zsl0Pma}ASe_0xEej2;!8li?(BKwI_)?6h7Ia2mzVV%T{iNX33EZ+U(JL0`HEjIYOs P00000NkvXXu0mjf6~4K_ literal 0 HcmV?d00001 diff --git a/repo/js/营养袋吃药统计/assets/筛选2.png b/repo/js/营养袋吃药统计/assets/筛选2.png new file mode 100644 index 0000000000000000000000000000000000000000..2a4d5828aef8925d9ff1943cca81ff0b99273536 GIT binary patch literal 892 zcmV-?1B3jDP)RZ%$&-i_>79^ z25l**Mfw1?l=ux6sHv5rD4Xw0Zkp3`d(ZEl|2?<&%2*P8&=w_q937DH4DaE#*)rbJ z-qT>{c=_se#;w87(bC>ywv2n++YE7;K$P^wG1TdwrG@Whn%dmLNy# ztSr;iuGkmCXI??4ON@PS9?~{sD>WGdgn`*g4Ww;w{Q8-UVM!GI?X+6omy}okBPm;{ zDJid>u)c$jb{GP=mJLgy41osyhdsR}P^AYH8R`ZoAW)_6?ls|<`#glC#+-*>%)4jo z9|l!bf&%w4Kvk8oe;D)borhpCgC)_+N@EC=A&^K2K5#k)21h`Z{$7BrJT<7&4-AeR zI31A$Lnt#|H!&tIUE~bjTw68`joym{s`RFz(ap8x$QhiNaXgf;FiF|O`xpWZ2fZ7s zOUAxoC8z`BX^I<=tCgV6*f+efx)ct21x9)dLm(9H*;=#K1|v?8w`tttayn}2TjfRCtdu#))$$^3O?|7&>7a3sG=kW3xi(^#V26WV zm(x+#*q)PLA+3m<{EE89c9+u;4qokcVQi9d8-^uO8uu*B&l#G!atf}IatbO8OqenjXWFXaL?H8?%ZrV`J6;ynjW|PLc#q)^C%2Pjzc1wi_U5}L}x&dasZ<0jv zkUNRS5b-~Bsk+8&89zo`=b@|XWXkA*GfJT`8i~=z=`p-G_QiS2+X?t+=kAPnHVF(z zpUAkdKT7)rzSQ6`et7?2H@+Uy4^n!f2?iI&7%H%H=$0|`$psUPl0Lpk$M6{8Dg8j| z;V2|VBNq{jrB7CN_lzH>WIxt7+3+bx2mT+%$5H4-1dByZ7dN*1K25#(@cA#Z+Z14E S{=o_W0000Za z)G^8UBc`yat{$3}Zc;8aQguGuetrA)J$=u6ecyX@dG35@c=XT+U!FUIoF9hHgLMwp z`Tx4S;nMc8b7OtQy7+O%YMwMrj*gEG4-X9vyzlFM_lH5R*J?XeDvhG4wW_AExU@P~ zBF)GuU~z?s3;~tK35jG34-Nc%vV;7BD+_b7T18=T<*#7m!{F)HPsp%1ZCsr7I(&S&zf$Br*^}VX(QPY*DeKu)MUardlSKD_WFo>JCtAo*q9t-bN;Y zk`Sizt0GLk&3E@uxKWU3`oms4|eRA=T2kqySOAC zi3|YD%*{31<+*cvV=mr7sD_CKxQNh`4Vf+sTM&VQMZR*J9X+Ea_{y|Zm zbZ=`J85XCFi}UovXhO2*4}m`?*t1$DKipeGCUm%KUt6}WF3kCaC{OC1(qteukvlRp z=+kF)VQ$B+nRQspHaoNOUC!klx&CGG8R;eQg=zpAd`4VA{Z zp0lo77g&2&R8r;KUM0j6=}ee2tXTX8R-KWYySloqvr{&U2@B@wvENc(Krg**&OCvn zvbv$Jz6k=r%zP5z?n%O;nI&a4@OV*46(x?1zs@OXFZr4I{Hy{j@LouuhL1!BZkuzf zQnlk)IyrDaC@iiFjdC~1G=OijnBeibnTeznPg(HP8NX`ofHR@wAZHNl@YypVwQZUl zz4*5K^K>5zuA?nxx)2I@+jSKWY zQjJC`CkLu?L@c{nCPzCcmFoA#UcYNtVR5Bg(V}Q-#X^0<8|cjB#@Fqir=P#O_AXqz zSSXR!KnFVUbiRGbg5`GM+Wm3550%2k^r_=cfh&N*ejAqvHC4S<8nod*N*M_3PX4OaCRMSZLZnYmaV^zgB|;i zzdZ8BliAJr_~CqWFTTUbLC(a_mhP}z0lzv}=U|-!7SBC@FsSXIw(q$_15Pif?Vz>; g7SBC@@F8mZU#&7zJU}mQY5)KL07*qoM6N<$g3xW(nE(I) literal 0 HcmV?d00001 diff --git a/repo/js/营养袋吃药统计/main.js b/repo/js/营养袋吃药统计/main.js index d684fa7a0..d9198daaa 100644 --- a/repo/js/营养袋吃药统计/main.js +++ b/repo/js/营养袋吃药统计/main.js @@ -4,15 +4,11 @@ const resurrectionFoodName = settings.resurrectionFoodName || "复活药名字 const ocrRegion = { x: 150, y: 250, - width: 220, - height: 270 + width: 60, + height: 20 }; -const filterButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/filterButton.png"),154, 1003, 27, 27); -const resetButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/resetButton.png"),66, 1006, 27, 27); -const researchRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/research.png"),95, 101, 27, 27); -const confirmButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/confirmButton.png"), 355, 999, 44, 44); -const loadDelay = +settings.loadDelay || 1000; -const stepDelay = +settings.stepDelay || 1000; +const loadDelay = +settings.loadDelay || 800; +const stepDelay = +settings.stepDelay || 500; (async function () { // 检验账户名 async function getUserName() { @@ -25,163 +21,21 @@ const stepDelay = +settings.stepDelay || 1000; return userName; } - /** - * 文字OCR识别封装函数(支持空文本匹配任意文字) - * @param {string} text - 要识别的文字,默认为"空参数",空字符串会匹配任意文字 - * @param {number} timeout - 超时时间,单位为秒,默认为10秒 - * @param {number} afterBehavior - 点击模式,0=不点击,1=点击文字位置,2=按F键,默认为0 - * @param {number} debugmodel - 调试模式,0=无输出,1=基础日志,2=详细输出,3=立即返回,默认为0 - * @param {number} x - OCR识别区域起始X坐标,默认为0 - * @param {number} y - OCR识别区域起始Y坐标,默认为0 - * @param {number} w - OCR识别区域宽度,默认为1920 - * @param {number} h - OCR识别区域高度,默认为1080 - * @param {number} matchMode - 匹配模式,0=包含匹配,1=精确匹配,默认为0 - * @returns {object} 包含识别结果的对象 {text, x, y, found} - */ - async function textOCREnhanced( - text = "空参数", - timeout = 10, - afterBehavior = 0, - debugmodel = 0, - x = 0, - y = 0, - w = 1920, - h = 1080, - matchMode = 0 - ) { - const startTime = Date.now(); - const timeoutMs = timeout * 1000; - let lastResult = null; - let captureRegion = null; // 用于存储截图对象 - - // 只在调试模式1下输出基本信息 - if (debugmodel === 1) { - if (text === "") { - log.info(`OCR: 空文本模式 - 匹配任意文字`); - } else if (text === "空参数") { - log.warn(`OCR: 使用默认参数"空参数"`); - } - } - - while (Date.now() - startTime < timeoutMs) { - try { - // 获取截图并进行OCR识别 - captureRegion = captureGameRegion(); - const resList = captureRegion.findMulti(RecognitionObject.ocr(x, y, w, h)); - - // 遍历识别结果 - for (let i = 0; i < resList.count; i++) { - const res = resList[i]; - - // 检查是否匹配 - let isMatched = false; - if (text === "") { - // 空文本匹配任意文字 - isMatched = true; - } else if (matchMode === 1) { - // 精确匹配 - isMatched = res.text === text; - } else { - // 包含匹配(默认) - isMatched = res.text.includes(text); - } - - if (isMatched) { - // 只在调试模式1下输出匹配成功信息 - if (debugmodel === 1) { - log.info(`OCR成功: "${res.text}" 位置(${res.x},${res.y})`); - } - - // 调试模式3: 立即返回 - if (debugmodel === 3) { - // 释放内存 - if (captureRegion) { - captureRegion.dispose(); - } - return { text: res.text, x: res.x, y: res.y, found: true }; - } - - // 执行后续行为 - switch (afterBehavior) { - case 1: // 点击文字位置 - await sleep(1000); - click(res.x, res.y); - break; - case 2: // 按F键 - await sleep(100); - keyPress("F"); - break; - default: - // 不执行任何操作 - break; - } - - // 记录最后一个匹配结果但不立即返回 - lastResult = { text: res.text, x: res.x, y: res.y, found: true }; - } - } - - // 释放截图对象内存 - if (captureRegion) { - captureRegion.dispose(); - } - - // 如果找到匹配结果,根据调试模式决定是否立即返回 - if (lastResult && debugmodel !== 2) { - return lastResult; - } - - // 短暂延迟后继续下一轮识别 - await sleep(100); - - } catch (error) { - // 发生异常时释放内存 - if (captureRegion) { - captureRegion.dispose(); - } - log.error(`OCR异常: ${error.message}`); - await sleep(100); - } - } - - if (debugmodel === 1) { - // 超时处理 - if (text === "") { - log.info(`OCR超时: ${timeout}秒内未找到任何文字`); - } else { - log.info(`OCR超时: ${timeout}秒内未找到"${text}"`); - } - } - - // 返回最后一个结果或未找到 - return lastResult || { found: false }; - } - - // 处理错误格式记录文件(检测时间格式:YYYY/MM/DD HH:mm:ss) - async function deleteOldFormatRecords(filePath) { - try { - // 尝试读取文件,不存在则直接返回 - const content = await file.readText(filePath); - const lines = content.split('\n').filter(line => line.trim()); - - if (lines.length === 0) return false; // 空文件无需处理 - - // 时间格式正则:匹配 "时间:YYYY/MM/DD HH:mm:ss" 完整格式 - const timeFormatRegex = /时间:\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}/; - - // 检查是否所有行都包含正确的时间格式 - const allHasValidTime = lines.every(line => timeFormatRegex.test(line)); - - if (allHasValidTime) return false; // 所有行都有正确时间格式,无需处理 - - // 存在任意行没有正确时间格式,清空文件 - await file.writeText(filePath, ''); - notification.send(`${settings.userName}: 检测到记录文件缺少有效时间格式,已重置记录文件`); - return true; - } catch (error) { - // 文件不存在或其他错误时不处理 - return false; + async function close_expired_stuff_popup_window() { + const game_region = captureGameRegion(); + const text_x = 850; + const text_y = 273; + const text_w = 225; + const text_h = 51; + const ocr_res = game_region.find(RecognitionObject.ocr(text_x, text_y, text_w, text_h)); + if (ocr_res) { + if (ocr_res.text.includes("物品过期")) { + log.info("检测到物品过期"); + click(1000, 750); + await sleep(1000); + } } + game_region.dispose(); } /** @@ -405,17 +259,6 @@ const stepDelay = +settings.stepDelay || 1000; } } - // 背包过期物品识别,需要在背包界面,并且是1920x1080分辨率下使用 - async function handleExpiredItems() { - const ifGuoqi = await textOCREnhanced("物品过期", 1.5, 0, 3, 870, 280, 170, 40); - if (ifGuoqi.found) { - log.info("检测到过期物品,正在处理..."); - await sleep(500); - await click(980, 750); // 点击确认按钮,关闭提示 - } - else { log.info("未检测到过期物品"); } - } - async function recognizeNumberByOCR(ocrRegion, pattern) { let captureRegion = null; try { @@ -453,41 +296,24 @@ const stepDelay = +settings.stepDelay || 1000; return null; } - async function findAndClick(target, maxAttempts = 50) { + async function findAndClick(target, doClick = true, maxAttempts = 60) { for (let i = 0; i < maxAttempts; i++) { - const result = await recognizeImage(target); - if (result.success) { - click(result.x, result.y); - await sleep(50); - return true; - } else { - log.warn(`未能识别到图标,尝试 ${i + 1}/${maxAttempts}`); - } - await sleep(50); + const rg = captureGameRegion(); + try { + const res = rg.find(target); + if (res.isExist()) { await sleep(50 * 2 + 50); if (doClick) { res.click(); } return true; } + } finally { rg.dispose(); } + if (i < maxAttempts - 1) await sleep(50); } return false; } - - // 定义一个函数用于识别图像 - async function recognizeImage(recognitionObject, timeout = 5000) { - let startTime = Date.now(); - while (Date.now() - startTime < timeout) { - try { - // 尝试识别图像 - const ro = captureGameRegion(); - let imageResult = ro.find(recognitionObject); - ro.dispose(); - if (imageResult && imageResult.x !== 0 && imageResult.y !== 0 && imageResult.width !== 0 && imageResult.height !== 0) { -// log.info(`成功识别图像,坐标: x=${imageResult.x}, y=${imageResult.y}, width=${imageResult.width}, height=${imageResult.height}`); - return { success: true, x: imageResult.x, y: imageResult.y, width: imageResult.width, height: imageResult.height}; - } - } catch (error) { - log.error(`识别图像时发生异常: ${error.message}`); - } - await sleep(10); // 短暂延迟,避免过快循环 - } - log.warn(`经过多次尝试,仍然无法识别图像`); - return { success: false }; + + async function clickPNG(png, maxAttempts = 20) { +// log.info(`调试-点击目标${png},重试次数${maxAttempts}`); + const pngRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/${png}.png`)); + pngRo.Threshold = 0.95; + pngRo.InitTemplate(); + return await findAndClick(pngRo, true, maxAttempts); } async function main() { @@ -495,20 +321,21 @@ const stepDelay = +settings.stepDelay || 1000; setGameMetrics(1920, 1080, 1); await genshin.returnMainUi(); keyPress("B");//打开背包 - await handleExpiredItems(); //处理过期物品弹窗 + await sleep(1000); + await close_expired_stuff_popup_window() await sleep(loadDelay); click(863, 51);//选择食物 await sleep(loadDelay); - await findAndClick(filterButtonRo);//筛选 图标的坐标: x=155, y=1004, width=25, height=25,识图范围推荐: 154, 1003, 27, 27 + await clickPNG('筛选1', 1); + await clickPNG('筛选2', 1); + await clickPNG('重置'); await sleep(stepDelay); - await findAndClick(resetButtonRo);//重置按钮 图标的坐标: x=67, y=1007, width=25, height=25,识图范围推荐: 66, 1006, 27, 27 - await sleep(stepDelay); - await findAndClick(researchRo);//搜索输入框 图标的坐标: x=96, y=102, width=25, height=25,识图范围推荐: 95, 101, 27, 27 + await clickPNG('搜索'); await sleep(loadDelay); + log.info(`搜索${recoveryFoodName}`) inputText(recoveryFoodName); + await clickPNG('确认筛选'); await sleep(stepDelay); - await findAndClick(confirmButtonRo);//确认按钮 图标的坐标: x=356, y=1000, width=42, height=42,识图范围推荐: 355, 999, 44, 44 - await sleep(loadDelay); let recoveryNumber=await recognizeNumberByOCR(ocrRegion,/\d+/) //识别回血药数量 // 处理回血药识别结果 if (recoveryNumber === null) { @@ -518,16 +345,17 @@ const stepDelay = +settings.stepDelay || 1000; click(863, 51);//选择食物 await sleep(1000); } - await findAndClick(filterButtonRo);//筛选 图标的坐标: x=155, y=1004, width=25, height=25,识图范围推荐: 154, 1003, 27, 27 - await sleep(stepDelay); - await findAndClick(resetButtonRo);//重置按钮 - await sleep(stepDelay); - await findAndClick(researchRo);//搜索输入框 await sleep(loadDelay); + await clickPNG('筛选1', 1); + await clickPNG('筛选2', 1); + await clickPNG('重置'); + await sleep(stepDelay); + await clickPNG('搜索'); + await sleep(loadDelay); + log.info(`搜索${resurrectionFoodName}`) inputText(resurrectionFoodName); + await clickPNG('确认筛选'); await sleep(stepDelay); - await findAndClick(confirmButtonRo);//确认按钮 - await sleep(loadDelay); let resurrectionNumber=await recognizeNumberByOCR(ocrRegion,/\d+/) //识别复活药数量 // 处理复活药识别结果 if (resurrectionNumber === null) { @@ -537,11 +365,11 @@ const stepDelay = +settings.stepDelay || 1000; click(863, 51);//选择食物 await sleep(1000); } - await findAndClick(filterButtonRo);//筛选 + await clickPNG('筛选1', 1); + await clickPNG('筛选2', 1); + await clickPNG('重置'); await sleep(stepDelay); - await findAndClick(resetButtonRo);//重置 - await sleep(stepDelay); - await findAndClick(confirmButtonRo);//确认按钮 + await clickPNG('确认筛选'); await genshin.returnMainUi(); return { recoveryNumber, resurrectionNumber }; } @@ -551,8 +379,6 @@ const stepDelay = +settings.stepDelay || 1000; const recordPath = `assets/${userName}.txt`; // 获取当前药物数量 const { recoveryNumber, resurrectionNumber } = await main(); - // 处理旧的记录文件 - await deleteOldFormatRecords(recordPath) // 获取本地保存的数据 const localData = await getLocalData(recordPath); // 确定初始化数据 diff --git a/repo/js/营养袋吃药统计/manifest.json b/repo/js/营养袋吃药统计/manifest.json index 2e7dff75b..4124f335b 100644 --- a/repo/js/营养袋吃药统计/manifest.json +++ b/repo/js/营养袋吃药统计/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "吃药统计", - "version": "1.5", + "version": "1.6", "bgi_version": "0.51", "description": "用于统计指定两个食物的消耗,推荐锄地前后使用", "authors": [ diff --git a/repo/js/营养袋吃药统计/settings.json b/repo/js/营养袋吃药统计/settings.json index abf6041b6..9ecfcf192 100644 --- a/repo/js/营养袋吃药统计/settings.json +++ b/repo/js/营养袋吃药统计/settings.json @@ -26,13 +26,13 @@ { "name": "loadDelay", "type": "input-text", - "label": "加载等待延迟\n用于OCR,界面切换和输入药名前的等待\n默认1000,单位毫秒", - "default": "1000" + "label": "加载等待延迟\n用于界面打开和切换的等待\n默认800,单位毫秒", + "default": "800" }, { "name": "stepDelay", "type": "input-text", - "label": "操作间隔延迟\n用于筛选操作之间的短暂等待\n默认1000,单位毫秒", - "default": "1000" + "label": "操作间隔延迟\n用于OCR前和输入药名前的短暂等待\n默认500,单位毫秒", + "default": "500" } ]