From 9217fa100294247aad06a5c22f7133b0dae38a09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=A4=E5=8F=88?= <104784428+guyou45@users.noreply.github.com> Date: Sat, 14 Feb 2026 23:19:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=95=B0=E5=AD=97=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E6=96=B9=E5=BC=8F=EF=BC=8C=E5=9B=9E=E9=80=80=E9=BE=99?= =?UTF-8?q?=E8=9B=8B=E4=B8=BA=E6=89=93=E5=BC=80=E8=83=8C=E5=8C=85=E8=AF=86?= =?UTF-8?q?=E5=88=AB=20(#2876)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repo/js/AutoPickLitter/README.md | 10 +- .../assets/backpackNumber/0.png | Bin 0 -> 564 bytes .../assets/backpackNumber/1.png | Bin 0 -> 234 bytes .../assets/backpackNumber/2.png | Bin 0 -> 539 bytes .../assets/backpackNumber/3.png | Bin 0 -> 555 bytes .../assets/backpackNumber/4.png | Bin 0 -> 454 bytes .../assets/backpackNumber/5.png | Bin 0 -> 490 bytes .../assets/backpackNumber/6.png | Bin 0 -> 608 bytes .../assets/backpackNumber/7.png | Bin 0 -> 399 bytes .../assets/backpackNumber/8.png | Bin 0 -> 567 bytes .../assets/backpackNumber/9.png | Bin 0 -> 512 bytes .../js/AutoPickLitter/assets/moraNumber/0.png | Bin 0 -> 616 bytes .../js/AutoPickLitter/assets/moraNumber/1.png | Bin 0 -> 446 bytes .../js/AutoPickLitter/assets/moraNumber/2.png | Bin 0 -> 534 bytes .../js/AutoPickLitter/assets/moraNumber/3.png | Bin 0 -> 523 bytes .../js/AutoPickLitter/assets/moraNumber/4.png | Bin 0 -> 467 bytes .../js/AutoPickLitter/assets/moraNumber/5.png | Bin 0 -> 529 bytes .../js/AutoPickLitter/assets/moraNumber/6.png | Bin 0 -> 579 bytes .../js/AutoPickLitter/assets/moraNumber/7.png | Bin 0 -> 406 bytes .../js/AutoPickLitter/assets/moraNumber/8.png | Bin 0 -> 594 bytes .../js/AutoPickLitter/assets/moraNumber/9.png | Bin 0 -> 526 bytes repo/js/AutoPickLitter/main.js | 192 +++++++++++++----- repo/js/AutoPickLitter/manifest.json | 2 +- .../AutoPickLitter/records/历史更新记录.txt | 11 + repo/js/AutoPickLitter/records/默认账户.txt | 12 +- repo/js/AutoPickLitter/settings.json | 18 +- 26 files changed, 174 insertions(+), 71 deletions(-) create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/0.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/1.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/2.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/3.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/4.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/5.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/6.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/7.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/8.png create mode 100644 repo/js/AutoPickLitter/assets/backpackNumber/9.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/0.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/1.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/2.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/3.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/4.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/5.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/6.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/7.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/8.png create mode 100644 repo/js/AutoPickLitter/assets/moraNumber/9.png diff --git a/repo/js/AutoPickLitter/README.md b/repo/js/AutoPickLitter/README.md index 98f6c8128..ec0cbbf33 100644 --- a/repo/js/AutoPickLitter/README.md +++ b/repo/js/AutoPickLitter/README.md @@ -29,10 +29,6 @@ ## 更新 -### 版本:2.1 -1.龙蛋数目由玩家填写,暂时去掉打开背包自动记录龙蛋功能 -2.修改去纳塔悠悠集市的路线(中转一下) -3.添加糖雕添加雅珂达、哥伦比娅选项,以及后退几步,避免用户BGI开启的自动拾取误触调查点 -4.转盘提供多种选择 -5.去掉圣水中转路线,去掉快速调节时间操作 -6.历史更新记录在records文件夹内 +### 版本:2.1.2 +更换识别方式,让龙蛋数量进行准确识别 +回退为打开背包识别龙蛋 diff --git a/repo/js/AutoPickLitter/assets/backpackNumber/0.png b/repo/js/AutoPickLitter/assets/backpackNumber/0.png new file mode 100644 index 0000000000000000000000000000000000000000..da4d074628bfb4356fb0864da7c10ed2169106ff GIT binary patch literal 564 zcmV-40?Yl0P)JP00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0m(^3K~yMHby90f zVo?-bp8L>SW@ef8(DXwyQq2?$4KqC;3c`>5+&;uWR8$l}Gi4|hcFXiinvX>9F}>}3 z%LoQ#$YpVsHcL3qZ0Gz5~7lzm4Ml>80dBfyL zB-3DeCQnII2m=104{;Y`qdutboULWgrK)({hPz)Awm!q{?r}xZGLtu9wJkv?iVWr; z!=IqYJoWYKwTpHwYF92cWrBK^RZZsMk%hCQ^aNTmdHMB92Z4!NN3I`>6EcQuzhRn|m}G zrVwO}0@8X`SoI9_W9G{gWS3LL>aTC2Wq0=m_KyCcO(nb}xJ=z4OG8y@pOzM95D5h! zme2NRkN)&L3H>22x+O^xwUJ|xrX8COiIwpWd+`PaOv8>}Uv20B0000O>_4AgKKgc*)gmcHf$9 zup#G8Vb8;N&FMVx`|6T^{GZRr@z2Uu7#J8EJMI){IMvLwi^Is!a3NPw(I(>$Ma51mGbJP?fBf7b+4D6-Qsjw> a1Viy8#eRXiPOE@UVeoYIb6Mw<&;$T|_)(|; literal 0 HcmV?d00001 diff --git a/repo/js/AutoPickLitter/assets/backpackNumber/2.png b/repo/js/AutoPickLitter/assets/backpackNumber/2.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4ebe3639035583e45b56a02919df4e768ad5fc GIT binary patch literal 539 zcmV+$0_6RPP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0kBC#K~yMHb&$q2%U#tkmK0ThrJ5V30Vc-I zac6RZuH=Q(v-w<+NI1leYZpnUM$jW+wzl_JTd!g_90IHI;kqu9=}Syy(j1Q-V{hEV zt~=zGO01MN(02crghD|E2l^D?t0x{M9@Eh@4a;tz_4mdYKAq?QzUuOX<21p8E(r!6 zJ;)G}W`_n(D4^A9Q~puI*xaGjZjyn@BIrJVQj z?IH_{-*Kgf^pz3r%PP)FPza%HXm92Ve99L&IJ6lXO)_=wI>|Ew9l*Du6^a!Ot-AU= zmFQLJei^^j{FGDKs3E3jo_Ma?lEn%7dSd8$SZ(m-wLMIEK|Fl?v{S*q002ovPDHLkV1jL>_7eaA literal 0 HcmV?d00001 diff --git a/repo/js/AutoPickLitter/assets/backpackNumber/3.png b/repo/js/AutoPickLitter/assets/backpackNumber/3.png new file mode 100644 index 0000000000000000000000000000000000000000..b37488276c653aa0e9ff5758026bc16b59a9b6b1 GIT binary patch literal 555 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 Y1B-*qBhjc1c>n+a07*qoM6N<$f_wn_Gynhq literal 0 HcmV?d00001 diff --git a/repo/js/AutoPickLitter/assets/moraNumber/3.png b/repo/js/AutoPickLitter/assets/moraNumber/3.png new file mode 100644 index 0000000000000000000000000000000000000000..4857790fe4dedef8f3ee62446e57cd9f214c0abc GIT binary patch literal 523 zcmV+m0`&cfP)33j z;ZNE?7{>2^gheM=QpW(7D51K-OjsA8BnFg}EyFJ)I94OVl1;yC6GYL0$SfW$l(MGC zTAG3Ok67w!SVQvW&0X$y&->hyLvc2(scqAcXX<{`6Y(V-OF9S=4Haw}@|`Y8!qwh> zKC_!Em%dFj$u#79Ll#=~l~4p(n^BK%Uby{X2SGXr(&Y=i-^qZmt_t}=!GeYg&gM8E zpsxfY{mw6#@bmn{f)t5QuxUHAOhr1lVH)y8ld5MWX0wrz)A_`^p>hmR8#{19f3Po#G2Vfsk=yjliG zm0K3{_fNN6`abWWfP3npHj^KwS#)p%jkT_6$YV{ye2v@BXLDTT_%2zNBhmhLQyicZ7C4ox%hjYMTaN#quh>(Sw{ZHSvk=J6rI z9UVn1cwP+5Z=U%tvjhcTTZYGGpC0e31py@z;uHX)5N)(~#Bg9c!L(WsA|VbNf&vVV zQmvg>Sk0ziEBO>Y5aIvO1G?$p{cT2!U0+|8bM*sJp6gO+8SvZE@g?;hV&_*G)>z8cb%f^>Kugh(q9K8b`{7g|;LoMs+#U}_ zGYo6|X=u5-M(etJP`_igR`MzSIS5AChEB9jQr8Lqb(2eJA^MpNuWXvoRkiM~rdFyO zlk{mO{r;3>* zYfl6l=2p%jDRZU6d~rj@l#&KsCCzc4T?7a+x22P~^V9X?9T*(z?UatjCE!KI9yBTr-!&z6@|>!PHgdY z$m0vXi+{LKidyoZ0}t|PV7$AB#pxOC%s4g2dHu~=NkbcIiS9*LW(S{4CN&PXs(`U^ z)|my9ogbqa8y9;Ue<%&kjt>Y%HTjJ521ZfF#zlAUxnWlYg~J@dr~#!wC^E{K?fmD_ zx`{idj2*)`HRtxM)}f@;ZPrSF_XYb`GQp^KDer&%!Y{4OzFgjnL@Oog41&?11I2ur z&Jo>>4|}TiIu>u*ije#D-07ivnY6fltKr{b7PqPo+;v+yEeN5For!0z|33H!porj0 TbS4gi00000NkvXXu0mjfKI-|| literal 0 HcmV?d00001 diff --git a/repo/js/AutoPickLitter/assets/moraNumber/6.png b/repo/js/AutoPickLitter/assets/moraNumber/6.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2dd27ff003235f0349969cbfa0ffe4cccf8914 GIT binary patch literal 579 zcmV-J0=)f+P)2%G zZBN=z6ae7q?h_uMDW5t@?7_j~M8 za7j0A9H3F>Sa2RzC`sfck2@Osj{sDicE)= zLpWj4=rE{2WdM>y{@(?s=4wLM^YgA35M9r!rDiP`3=I&2CB6pMh9t(D%U+o&mQpp7I#Hu7L5w^-2L*70oP&1NM!vt*8ufWZdd*Xfnea2 zse+Ou@?C)j9|u&9YT3C3=ipyy(WzN`JhmaUYyII!uDfiro?BZF4Fs zYfHjl6bJBqM;AeXFcS^SaMMh*O*2UeqM{4kj7mtv+v_5<3ro_>x#@h&Tx>eh+J~t1 zgxVOwdHLh~|K}iz48~7i;*s$}kwJqiA{#pgPBQH9hDOIphWC$8dtzN`SL2BUV!&|C zOw152G7M@(MFvcnHakciWF@HkyBkFY;#)O#88=|K78z}x=y?nl<(Pua70@Eoqz1je zRuma@1U8vY!6yGUnHGHMYzD4r)=GiMrWT>S?TZ|%uuWsYH_%LO4Ymw3BIXSz4 zYdUQ&c&{f~71FRNY(u5W9RTA7OUB_1NSQn29E5TU=%oVL2R_Ku+V>@*5= zejwBrK!n+S$#e>$uE1ro869N7sa);~BBA-Rdl=P0bBilXnTCjGpWOb47NHn!_pG+~ zvLb_?RKLw%Pnumi$l(oj1@1#s#r#rmRQweG2610_;i@8QCIA2c07*qoM6N<$g7rPK A0ssI2 literal 0 HcmV?d00001 diff --git a/repo/js/AutoPickLitter/assets/moraNumber/8.png b/repo/js/AutoPickLitter/assets/moraNumber/8.png new file mode 100644 index 0000000000000000000000000000000000000000..aa4608259abecf985e09775c68b89c075427f7e9 GIT binary patch literal 594 zcmV-Y09+3kI)zsc`@~TomNTHGva@3%$ZBjrJibaYsw!ToHf_DLq_i{yEa$Ks& zhiJ^=)@t%kb{@Z(?92dyq!lXK;q)dG@tTm6y4CApbJ(d0d^YwqYF>2BX!Hb00qvYQ znTSi>>O>ZwO77P~q44t;7VvF5CUvGzI(6WB^KM?h^w#Syahb6MC$e~b)qKCY1_~Ex z)TUBAx7yqUNg=sCzFH}VQm4m1KwZcqCv~*HU~*uNUa;}GQcFz-QmAO5ybpLl5 zU}t0Fvu4&vC@G|QdMTGVz8$qtSAd>NSadkO7(&MS+Q)XI@E_N16dcPdkGK`DzfqoE z3!r0kNdFA~g)l24R&$5Ug?_5{}@ai7d*! zdbd@Q`*l1)2Nr$403ei<)#lkv?6jK&^as>qEJ0Y|V$mpLuq#OVj>FQ;nHi(qWN|VE gyGCbJkTg#H1+X3;IrQ$ETmS$707*qoM6N<$g3V1C&j0`b literal 0 HcmV?d00001 diff --git a/repo/js/AutoPickLitter/assets/moraNumber/9.png b/repo/js/AutoPickLitter/assets/moraNumber/9.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4cac4d71a8203967f7f0b7b230f7131f0e05f6 GIT binary patch literal 526 zcmV+p0`dKcP)4E@ z{ZHCp5Xbv}K0oXUkuluXE@PsQF=q=QT9S!l1|yiv0m^)Zq3k6rDo7bED_yBAir|0} zBK#3cy~d$YlP8zE=RUdn-g6IuFoiH>wL9m7A9COK>$P(4qNcZGRVroo(u|L_Ja!;V z5(rb%GqZg0;IeZv)U{h@&{eaU)C-4)aJm?tJAky_loRp9tH~Lsi`h%>b{Z1gr*^i8 z?X8V&^AE(aPq8P@ra%cEd--kuOaHGj)U{r#Mih^70JR$u?F|3~HWUiiznI zQsq3;{t=F(nK?-)Jj{^@lW*SoMLutGrNU3}M*12M!X)EmCE?iQvY9l99qL*<7QdRq zqQX126s5_fi94 QjsO4v07*qoM6N<$g5-7e82|tP literal 0 HcmV?d00001 diff --git a/repo/js/AutoPickLitter/main.js b/repo/js/AutoPickLitter/main.js index af18d27eb..d5183d71f 100644 --- a/repo/js/AutoPickLitter/main.js +++ b/repo/js/AutoPickLitter/main.js @@ -6,12 +6,12 @@ let recordsNum = 0; // 写入内容次数 let sticksTime = false; // 判定是否可以上香 //六龙蛋位置 const coordinates = [ - [565, 150], - [568, 723], - [1088, 161], - [874, 335], - [468, 574], - [1339, 358] + [565, 150], // 山 + [568, 723], // 飞 + [1088, 161], // 圣 + [874, 335], // 太 + [468, 574], // 献 + [1339, 358] // 菲 ]; // 通用方法区域 @@ -414,7 +414,8 @@ async function chcekDragonEggs() { await keyPress("B"); await checkExpire(); await sleep(1500); - await click(1250,50); + await click(1250,50); + await sleep(50); let DragonEggs = [0, 0, 0, 0, 0, 0]; let judgeEgg = 0; // 判定是不是只有一页 @@ -423,16 +424,18 @@ async function chcekDragonEggs() { for (let index = 0; index < 6; index++) { let DragonEgg = await findImgIcon(`assets/RecognitionObject/DragonEgg${index}.png`, { min: 99, max: 1295 }, { min: 104, max: 967 }, true, 0.95); if (DragonEgg.success) { - let ocrEggNum = await performOcr("", - { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true); - // log.info(`第一次识别到的数字:${ocrEggNum.text}`); - if (ocrEggNum.text == "") { - await sleep(700); - ocrEggNum = await performOcr("", - { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true); - // log.info(`第二次识别到的数字:${ocrEggNum.text}`); - }; - DragonEggs[index] = Number(ocrEggNum.text); + // let ocrEggNum = await performOcr("", + // { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true); + // // log.info(`第一次识别到的数字:${ocrEggNum.text}`); + // if (ocrEggNum.text == "") { + // await sleep(700); + // ocrEggNum = await performOcr("", + // { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true); + // // log.info(`第二次识别到的数字:${ocrEggNum.text}`); + // }; + let eggNum = await numberTemplateMatch('assets/backpackNumber', DragonEgg.coordinates[0]-46, DragonEgg.coordinates[1]+56, 80, 27); + log.info(`识别到的数字:${eggNum}`); + DragonEggs[index] = Number(eggNum); }else{ DragonEggs[index] = 0; }; @@ -443,19 +446,11 @@ async function chcekDragonEggs() { for (let index = 0; index < 6; index++) { let DragonEgg = await findImgIcon(`assets/RecognitionObject/DragonEgg${index}.png`, { min: 99, max: 1295 }, { min: 104, max: 967 }, true, 0.95); if (DragonEgg.success) { - let ocrEggNum = await performOcr("", - { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true); - // log.info(`第一次识别到的数字:${ocrEggNum.text}`); - if (ocrEggNum.text == "") { - await sleep(700); - ocrEggNum = await performOcr("", - { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true); - // log.info(`第二次识别到的数字:${ocrEggNum.text}`); + let eggNum = await numberTemplateMatch('assets/backpackNumber', DragonEgg.coordinates[0]-46, DragonEgg.coordinates[1]+56, 80, 27); + if (eggNum == "") { + eggNum = 1; }; - if (ocrEggNum.text == "") { - ocrEggNum.text = 1; - }; - DragonEggs[index] = ocrEggNum.text; + DragonEggs[index] = eggNum; }else{ DragonEggs[index] = 0; }; @@ -510,10 +505,112 @@ async function checkExpire() { let ocrExpire = await performOcr("",{ min: 870, max: 1040 }, { min: 280, max: 320 }, true); if (ocrExpire.text == "物品过期") { log.info(`处理中=========`); - await click(980, 750); + await click(980, 750); + await sleep(50); }; }; +// 多文本识别数字 +/** + * 在指定区域内,用 0-9 的 PNG 模板做「多阈值 + 非极大抑制」数字识别, + * 最终把检测到的数字按左右顺序拼成一个整数返回。 + * + * @param {string} numberPngFilePath - 存放 0.png ~ 9.png 的文件夹路径(不含文件名) + * @param {number} x - 待识别区域的左上角 x 坐标,默认 0 + * @param {number} y - 待识别区域的左上角 y 坐标,默认 0 + * @param {number} w - 待识别区域的宽度,默认 1920 + * @param {number} h - 待识别区域的高度,默认 1080 + * @param {number} maxThreshold - 模板匹配起始阈值,默认 0.95(最高可信度) + * @param {number} minThreshold - 模板匹配最低阈值,默认 0.8(最低可信度) + * @param {number} splitCount - 在 maxThreshold 与 minThreshold 之间做几次等间隔阈值递减,默认 3 + * @param {number} maxOverlap - 非极大抑制时允许的最大重叠像素,默认 2;只要 x 或 y 方向重叠大于该值即视为重复框 + * + * @returns {number} 识别出的整数;若没有任何有效数字框则返回 -1 + * + * @example + * const mora = await numberTemplateMatch('摩拉数字', 860, 70, 200, 40); + * if (mora >= 0) console.log(`当前摩拉:${mora}`); + */ +async function numberTemplateMatch( + numberPngFilePath, + x = 0, y = 0, w = 1920, h = 1080, + maxThreshold = 0.95, + minThreshold = 0.8, + splitCount = 3, + maxOverlap = 2 +) { + let ros = []; + for (let i = 0; i <= 9; i++) { + ros[i] = RecognitionObject.TemplateMatch( + file.ReadImageMatSync(`${numberPngFilePath}/${i}.png`), x, y, w, h); + }; + + function setThreshold(roArr, newThreshold) { + for (let i = 0; i < roArr.length; i++) { + roArr[i].Threshold = newThreshold; + roArr[i].InitTemplate(); + }; + }; + + const gameRegion = captureGameRegion(); + const allCandidates = []; + + /* 1. splitCount 次等间隔阈值递减 */ + for (let k = 0; k < splitCount; k++) { + const curThr = maxThreshold - (maxThreshold - minThreshold) * k / Math.max(splitCount - 1, 1); + setThreshold(ros, curThr); + + /* 2. 0-9 每个模板跑一遍,所有框都收 */ + for (let digit = 0; digit <= 9; digit++) { + const res = gameRegion.findMulti(ros[digit]); + if (res.count === 0) continue; + + for (let i = 0; i < res.count; i++) { + const box = res[i]; + allCandidates.push({ + digit: digit, + x: box.x, + y: box.y, + w: box.width, + h: box.height, + thr: curThr + }); + }; + }; + + }; + gameRegion.dispose(); + + /* 3. 无结果提前返回 -1 */ + if (allCandidates.length === 0) { + return -1; + }; + + /* 4. 非极大抑制(必须 x、y 两个方向重叠都 > maxOverlap 才视为重复) */ + const adopted = []; + for (const c of allCandidates) { + let overlap = false; + for (const a of adopted) { + const xOverlap = Math.max(0, Math.min(c.x + c.w, a.x + a.w) - Math.max(c.x, a.x)); + const yOverlap = Math.max(0, Math.min(c.y + c.h, a.y + a.h) - Math.max(c.y, a.y)); + if (xOverlap > maxOverlap && yOverlap > maxOverlap) { + overlap = true; + break; + } + } + if (!overlap) { + adopted.push(c); + //log.info(`在 [${c.x},${c.y},${c.w},${c.h}] 找到数字 ${c.digit},匹配阈值=${c.thr}`); + } + } + + /* 5. 按 x 排序,拼整数;仍无有效框时返回 -1 */ + if (adopted.length === 0) return -1; + adopted.sort((a, b) => a.x - b.x); + + return adopted.reduce((num, item) => num * 10 + item.digit, 0); +}; + // 执行区 (async function() { await fakeLog("AutoPickLitter脚本", true, true, 0); @@ -540,6 +637,7 @@ async function checkExpire() { await genshin.returnMainUi(); await pathingScript.runFile("assets/蒙德清泉镇路线.json"); await genshin.setTime(8,0); + await sleep(700); //识别对话位置,并点击 let ocrResults = await performOcr("神奇的", dialogZone.x, dialogZone.y, false); if (ocrResults.success) { @@ -547,17 +645,12 @@ async function checkExpire() { await performOcr("如何才", dialogZone.x, dialogZone.y, false); await sleep(700); let ocrOver = await performOcr("已",{ min: 1482, max: 1630 }, { min: 912, max: 957 }, false); + await sleep(700); if (ocrOver.success) { log.info("已售罄!!!"); } else { - let ocrMora = await performOcr("", { min: 1600, max: 1780 }, { min: 30, max: 60 }, true); - if (ocrMora == "") { - await sleep(700); - ocrMora = await performOcr("", { min: 1600, max: 1780 }, { min: 30, max: 60 }, true); - }; - // 处理得到的数据 - let onlyNumber = ocrMora.text.replace(/[^0-9]/g, ""); - if (BigInt(onlyNumber) >= 300) { + const mora = await numberTemplateMatch('assets/moraNumber', 1600, 30, 180, 30); + if (BigInt(mora) >= 300) { await sleep(800); await click(1636,1019); await sleep(1000); @@ -806,7 +899,7 @@ async function checkExpire() { await fakeLog("枫丹梅洛彼得堡福利餐", false, true, 0) await genshin.returnMainUi(); await pathingScript.runFile("assets/枫丹梅洛彼得堡路线.json"); - await sleep(1000); + await sleep(1500); let ocrResults = await performOcr("布兰", dialogZone.x, dialogZone.y, false); if (ocrResults.success) { await sleep(700); @@ -902,12 +995,11 @@ async function checkExpire() { if(settings.eggs){ await fakeLog("纳塔悠悠集市龙蛋", false, true, 0) // 保留打开背包识别龙蛋信息 - // let nowDragonEggsNum = record.lastDragonEggsNum; - // if (record.lastDragonEggsNum == "【山之血:0,飞澜鲨鲨:0,圣龙君临:0,太阳的轰鸣:0,献给小酒杯:0,菲耶蒂娜:0】" || settings.updateEggs) { - // nowDragonEggsNum = await chcekDragonEggs(); - // settings.updateEggs = "false"; - // }; - let nowDragonEggsNum = settings.dragonEggsNum; + let nowDragonEggsNum = record.lastDragonEggsNum; + log.info(`上次的龙蛋信息:${nowDragonEggsNum}`); + if (record.lastDragonEggsNum == "【山之血:0,飞澜鲨鲨:0,圣龙君临:0,太阳的轰鸣:0,献给小酒杯:0,菲耶蒂娜:0】" || settings.updateEggs) { + nowDragonEggsNum = await chcekDragonEggs(); + }; let nowDragonEggs = nowDragonEggsNum.match(/\d+/g).map(Number); await genshin.returnMainUi(); await pathingScript.runFile("assets/纳塔悠悠集市路线.json"); @@ -951,15 +1043,15 @@ async function checkExpire() { }else { // 平均模式 const now = new Date(); - const weekNumber = now.getDay() + const weekNumber = now.getDay(); if (nowDragonEggs.every(num => num === nowDragonEggs[0])) { // 所有元素相同时,按星期规则处理 - if (weekNumber === 0) { // 周日:随机一个元素+1 + if (weekNumber == 0) { // 周日:随机一个元素+1 figure = Math.floor(Math.random() * 6); nowDragonEggs[figure]++; } else { // 周一到周六:第n个元素 +n(1-6) - const index = weekNumber - 1; // 周一对应索引0,...,周六对应索引5 - nowDragonEggs[index]++; + figure = weekNumber - 1; // 周一对应索引0,...,周六对应索引5 + nowDragonEggs[figure]++; }; } else { // 元素不同时:给低于平均数且最小的元素+1,直到趋于平均 @@ -1239,6 +1331,7 @@ async function checkExpire() { if (ocrResults1.success) { await sleep(800); await click(1012, 765); + await sleep(50); await click(1012, 765); }; }; @@ -1291,6 +1384,7 @@ async function checkExpire() { if (ocrResults1.success) { await sleep(800); await click(1012, 765); + await sleep(50); await click(1012, 765); }; }; diff --git a/repo/js/AutoPickLitter/manifest.json b/repo/js/AutoPickLitter/manifest.json index 2e28c8838..d909b2d12 100644 --- a/repo/js/AutoPickLitter/manifest.json +++ b/repo/js/AutoPickLitter/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "提瓦特杂事(收集)", - "version": "2.1", + "version": "2.1.2", "tags": [ "玄学", "收集", diff --git a/repo/js/AutoPickLitter/records/历史更新记录.txt b/repo/js/AutoPickLitter/records/历史更新记录.txt index 6d4a744e3..f1136f8f4 100644 --- a/repo/js/AutoPickLitter/records/历史更新记录.txt +++ b/repo/js/AutoPickLitter/records/历史更新记录.txt @@ -1,3 +1,14 @@ +### 版本:2.1.1 +修复龙蛋平均模式 + +### 版本:2.1 +1.龙蛋数目由玩家填写,暂时去掉打开背包自动记录龙蛋功能 +2.修改去纳塔悠悠集市的路线(中转一下) +3.添加糖雕添加雅珂达、哥伦比娅选项,以及后退几步,避免用户BGI开启的自动拾取误触调查点 +4.转盘提供多种选择 +5.去掉圣水中转路线,去掉快速调节时间操作 +6.历史更新记录在records文件夹内 + ### 版本:2.0.4 1.修改多处龙蛋对应位置 2.固定缩放 diff --git a/repo/js/AutoPickLitter/records/默认账户.txt b/repo/js/AutoPickLitter/records/默认账户.txt index 7054586b9..1352daeaf 100644 --- a/repo/js/AutoPickLitter/records/默认账户.txt +++ b/repo/js/AutoPickLitter/records/默认账户.txt @@ -1,6 +1,14 @@ -上次运行日期: 2026/01/18 +上次运行日期: 2026/02/14 上次上香时间: 2026-01-18T11:07:47.147Z -背包龙蛋数目: 【山之血:8,飞澜鲨鲨:3,圣龙君临:4,太阳的轰鸣:3,献给小酒杯:8,菲耶蒂娜:4】 +背包龙蛋数目: 【山之血:1,飞澜鲨鲨:1,圣龙君临:3,太阳的轰鸣:3,献给小酒杯:2,菲耶蒂娜:5】 +>>>>>>>>>> 2026年02月14日 +>>>>>>>>>> 2026年02月14日 +>>>>>>>>>> 2026年02月14日 +>>>>>>>>>> 2026年02月14日 +>>>>>>>>>> 2026年02月14日 +>>>>>>>>>> 2026年02月01日 +>>>>>>>>>> 2026年01月31日 +>>>>>>>>>> 2026年01月31日 >>>>>>>>>> 2026年01月18日 >>>>>>>>>> 2026年01月18日 转盘的运势: 「『旭日瞳瞳,驱散迷雾。』就是遇到困难也没关系,一定会得到帮助的意思!」 diff --git a/repo/js/AutoPickLitter/settings.json b/repo/js/AutoPickLitter/settings.json index d4bcb84a1..531e84066 100644 --- a/repo/js/AutoPickLitter/settings.json +++ b/repo/js/AutoPickLitter/settings.json @@ -55,12 +55,6 @@ ], "default": "随机模式" }, - { - "name": "dragonEggsNum", - "type": "input-text", - "label": "平均模式:自行输入自己背包各龙蛋数目\n顺序为【山-飞-圣-太-献-菲 】\n各龙蛋数目用【-】相连", - "default": "0-0-0-0-0-0" - }, { "name": "pickupDragonEgg", "type": "select", @@ -74,12 +68,12 @@ "闪闪礼蛋·飞澜鲨鲨" ] }, - // { - // "name": "updateEggs", - // "type": "checkbox", - // "label": "是否更新背包各龙蛋数目(默认否)", - // "default": "false" - // }, + { + "name": "updateEggs", + "type": "checkbox", + "label": "是否更新背包各龙蛋数目(默认否),勾选上后,下次运行前记得取消", + "default": "false" + }, { "name": "turntable", "type": "checkbox",