From 669872799c27d33536fb27fb599ba428e1e42041 Mon Sep 17 00:00:00 2001 From: JJMdzh Date: Sat, 13 Sep 2025 18:03:25 +0800 Subject: [PATCH] =?UTF-8?q?js=EF=BC=8C=E9=A3=9F=E6=9D=90=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E9=80=82=E9=85=8D=E9=BB=91=E9=BA=A6=E7=B2=89=E3=80=81=E9=85=B8?= =?UTF-8?q?=E5=A5=B6=E6=B2=B9=EF=BC=8C=E6=AD=A6=E5=99=A8=E5=88=87=E6=8D=A2?= =?UTF-8?q?main=E4=BC=98=E5=8C=96=E4=BF=AE=E5=A4=8D=20(#1888)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add files via upload * Add files via upload * js,食材加工新增黑麦粉和酸奶油 新增黑麦粉和酸奶油 * js,main优化修复 新的武器名单自行到assets下weaponName.json里增加 * Add files via upload --- repo/js/OCR切换武器/assets/combat_avatar.json | 52 ++++- repo/js/OCR切换武器/main.js | 67 ++++-- repo/js/食材加工/assets/Picture/Rye-Flour.png | Bin 0 -> 8974 bytes .../js/食材加工/assets/Picture/Sour-Cream.png | Bin 0 -> 8338 bytes repo/js/食材加工/main.js | 156 +++++++------- repo/js/食材加工/manifest.json | 14 +- repo/js/食材加工/settings.json | 192 +++++++++--------- 7 files changed, 289 insertions(+), 192 deletions(-) create mode 100644 repo/js/食材加工/assets/Picture/Rye-Flour.png create mode 100644 repo/js/食材加工/assets/Picture/Sour-Cream.png diff --git a/repo/js/OCR切换武器/assets/combat_avatar.json b/repo/js/OCR切换武器/assets/combat_avatar.json index b85c26d2c..26610089d 100644 --- a/repo/js/OCR切换武器/assets/combat_avatar.json +++ b/repo/js/OCR切换武器/assets/combat_avatar.json @@ -1874,7 +1874,6 @@ "丝柯克", "Skirk", "丝柯可", - "skk", "斯柯克" ], "burstCD": 15, @@ -1899,5 +1898,56 @@ "nameEn": "Dahlia", "skillCD": 9, "weapon": "1" + }, + { + "alias": [ + "伊涅芙", + "Ineffa", + "机器人", + "机娘" + ], + "burstCD": 15, + "id": "10000116", + "name": "伊涅芙", + "nameEn": "Ineffa", + "skillCD": 16, + "weapon": "13" + }, + { + "alias": [ + "菈乌玛", + "Lauma" + ], + "burstCD": 15, + "id": "10000119", + "name": "菈乌玛", + "nameEn": "Lauma", + "skillCD": 12, + "weapon": "10" + }, + { + "alias": [ + "菲林斯", + "Flins" + ], + "burstCD": 20, + "id": "10000120", + "name": "菲林斯", + "nameEn": "Flins", + "skillCD": 6, + "skillHoldCD": 16, + "weapon": "13" + }, + { + "alias": [ + "爱诺", + "Aino" + ], + "burstCD": 13.5, + "id": "10000121", + "name": "爱诺", + "nameEn": "Aino", + "skillCD": 10, + "weapon": "11" } ] \ No newline at end of file diff --git a/repo/js/OCR切换武器/main.js b/repo/js/OCR切换武器/main.js index e896c6cd5..542949afc 100644 --- a/repo/js/OCR切换武器/main.js +++ b/repo/js/OCR切换武器/main.js @@ -85,16 +85,17 @@ } // OCR识别文本 - async function recognizeText(targetText, ocrRegion, aliasToNameMap, timeout = 10000, retryInterval = 20, maxAttempts = 5) { + async function recognizeText(targetText, ocrRegion, aliasToNameMap, timeout = 100, retryInterval = 20, maxAttempts = 5, captureRegion = null) { let startTime = Date.now(); let retryCount = 0; const targetFormalName = aliasToNameMap ? aliasToNameMap[targetText] || targetText : targetText; + captureRegion?.dispose(); + captureRegion = captureGameRegion(); + const ocrObject = RecognitionObject.Ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height); + ocrObject.threshold = 0.8; while (Date.now() - startTime < timeout && retryCount < maxAttempts) { try { - let captureRegion = captureGameRegion(); - let ocrObject = RecognitionObject.Ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height); - ocrObject.threshold = 0.8; let resList = captureRegion.findMulti(ocrObject); for (let res of resList) { @@ -108,7 +109,7 @@ recognizedFormalName = fuzzyMatch(correctedText, Object.values(aliasToNameMap)) || recognizedFormalName; if (recognizedFormalName === targetFormalName) { - return { success: true, text: recognizedFormalName, x: res.x, y: res.y }; + return { text: recognizedFormalName, x: res.x, y: res.y }; } } } catch (error) { @@ -117,7 +118,8 @@ } await sleep(retryInterval); } - return { success: false }; + captureRegion?.dispose(); + return false; } // 模糊匹配文本 @@ -205,8 +207,8 @@ async function selectCharacter(characterName) { const SwitchingSteps = 99; // 最大切换次数 for (let i = 0; i < SwitchingSteps; i++) { - let result = await recognizeText(characterName, ocrRegion, aliasToNameMap, 200); - if (result.success) { + let result = await recognizeText(characterName, ocrRegion, aliasToNameMap, 100); + if (result) { // log.info(`找到 ${characterName},识别结果: ${result.text},坐标: x=${result.x}, y=${result.y}`); return true; } @@ -240,13 +242,14 @@ } // 识别并组合武器名称 - async function recognizeAndCombineWeaponName(ocrRegion, maxAttempts = 5) { + async function recognizeAndCombineWeaponName(ocrRegion, maxAttempts = 5, captureRegion = null) { const allResults = []; + captureRegion?.dispose(); + captureRegion = captureGameRegion(); + const ocrObject = RecognitionObject.Ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height); + ocrObject.threshold = 0.9; for (let i = 0; i < maxAttempts; i++) { try { - let captureRegion = captureGameRegion(); - let ocrObject = RecognitionObject.Ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height); - ocrObject.threshold = 0.8; let resList = captureRegion.findMulti(ocrObject); for (let res of resList) { let correctedText = res.text; @@ -262,6 +265,7 @@ await sleep(20); } + captureRegion?.dispose(); const combinedResult = combineResults(allResults); // log.info(`组合后的识别结果: ${combinedResult}`); return combinedResult; @@ -310,6 +314,41 @@ const maxColumns = 4; for (let scroll = 0; scroll <= pageScrollCount; scroll++) { + // ====================================== + // 【新增】前置武器识别:行列循环前先识别一次 + // ====================================== + log.info(`第 ${scroll + 1} 页 - 开始前置武器识别`); + const preRecognized = await recognizeAndCombineWeaponName(ocrRegion); + let isPreMatched = false; + + if (preRecognized) { + // 前置识别结果匹配目标武器 + let preWeaponName2 = fuzzyMatch(preRecognized, weaponNames, 1); + if (!preWeaponName2) { + log.warn(`前置识别:未匹配已知武器,使用原始识别结果 ${preRecognized} 匹配`); + preWeaponName2 = preRecognized; + } + + // 计算匹配占比(排除干扰词) + const preMatchRatio = calculateMatchRatio(weaponName1, preWeaponName2); + if (preMatchRatio >= 0.8) { + log.info(`✅ 前置识别成功!目标武器(${weaponName1}) 与 当前武器(${preWeaponName2}) 匹配,占比 ${preMatchRatio.toFixed(2)}`); + // 执行确认逻辑 + await click(1600, 1005); // 点击确认 + await sleep(1000); + await click(1320, 755); // 点击确认 + await sleep(1000); + return true; // 匹配成功,直接返回,跳过后续行列循环 + } else { + log.info(`❌ 前置识别不匹配:目标(${weaponName1}) vs 当前(${preWeaponName2}),占比 ${preMatchRatio.toFixed(2)}`); + } + } else { + log.info(`❌ 前置识别未读取到任何武器名称`); + } + + // ====================================== + // 前置识别失败:执行原有的行列循环(逐个格子检查) + // ====================================== for (let row = 0; row < maxRows; row++) { for (let column = 0; column < maxColumns; column++) { const clickX = Math.round(startX + column * columnWidth); @@ -320,7 +359,7 @@ const combinedWeaponName2 = await recognizeAndCombineWeaponName(ocrRegion); if (!combinedWeaponName2) { - log.warn("OCR 识别失败,未找到任何武器名"); + log.warn(`格子(${row},${column}):未识别到武器名称`); continue; } @@ -336,7 +375,7 @@ // 计算匹配占比,排除干扰词 const matchRatio = calculateMatchRatio(weaponName1, weaponName2); if (matchRatio >= 0.8) { // 如果匹配占比大于等于 80%,则认为匹配成功 - log.info(`成功匹配武器:${weaponName1},匹配占比 ${matchRatio.toFixed(2)}`); + log.info(`✅ 格子(${row},${column}) 匹配成功:目标(${weaponName1}) vs 当前(${weaponName2}),占比 ${matchRatio.toFixed(2)}`); await click(1600, 1005); // 点击确认 await sleep(1000); await click(1320, 755); // 点击确认 diff --git a/repo/js/食材加工/assets/Picture/Rye-Flour.png b/repo/js/食材加工/assets/Picture/Rye-Flour.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a586ebb11f4314ef3d89d2ed1b01457d67095e GIT binary patch literal 8974 zcmV+pBk|mcP)6Gzoh9xkIsB;)VN;K;=b-QG7@QBsX0mJcxayVsvw&2fy z@i9O9-9Dq;Yh1p3iP9-fK>q9h=D)KLBB};>q6wdT{1IP!W0U{#KmR_rUVn$>d`0Lw zv{FO`0YVf1*1li7UTpf}l@jV4i{m->0hiW<@bsZ^2aIQZv0RfAGrGz*|T}8cG zaJGMpD+|Wk+bEza7|MEiMz>th#TH*wc<*T26|4Dk5}xtaCZvRS1qYws;n%E#a=^D1L+(1>i|LKRwzxv^> z{oV(E#2a7#9|9^Y6aw?+g3>rK+4AALGlC!Dx(G>bEQxKaBIu z3o6QLenz`mVVY}`IESGKIg&&iDRhV!W`SriuObDK7%Gw@Hd$U}gV-`ne7|3iwxQ#Z?g8|MY=CL~Ah%hza7LJzG*Q<|K<0 z<$%F##_IHh)V3gs9}O9dXS8Q0$QQr;i7k!}K`h6irvBc~58%b-&2kuu2}Z(skEr&c zCb^EKlv`=86r_}JnmdJv5Mx9y-qW9{3Mu69Pi;bqzOqL{)Uli&)3p(?M2dm+@|a>U zqNqlslp{b>f=a26k2yPdj`zM_Q$i#cRWraT)&+#b=9O#s)1#xjUL;>g%6-mZ_OpG^XL`$IB-)?@Fn2`FwiUC5?P*oKv zIZPB%;$;7bu5KC6MpV-&BK?=UB43I#oEEI+M~HK5UwMY`&~2QVg6PJZJym7n~kGrl`g|zyH^~ z{k0!5d*yX}s8^T>vFlKE42EOGYp$vxF+ZKtG!0@(tu@+Lgkm&cGTS1igqg8gtWbsF za0IG^wxeDzQ0HiuE7~qGF3KE5&S>kJuB}n$>AD6Bfs_5a4B!2L!j+_uP|1DQqhJxU zmOaga+JCXSC%Nkv&Rp(|KU%msv+a89p3rsH&`y$td|RhlMU9Z7WazY z|I_*Y0n^zQ)p!Oe5xbUpx#aBlm=qJvc}x5-l)4-e!cwhSM3ULf3WBCQKtKX40b$*6W&( z4oIm(9V7xx>}U_0oPSO+iYN6&B~tm_3K z1XL5LZa91X7!gIQLqkRY}Vsm^V7IX~cczxaO{j7t9Chd-j}8lFBn!WY6|yn(3F zHZ6nEgf2Wm3x~gY^Cp+BU87z%oa`U+{NXQo_|d;6*;Qs+udsXbEp~3a#`dKv6x9&Q zoZ~S@QtW8gP44X?-~=^DE}}_@sY6jL1x%ILHtZigW^{Iv|6T>bGZ=5;ha*%Jtp;?> zf>mshq&UsppzE59^{a}oUbB4mgmu$$^6VjxKKU)D&wfQw?sEC|Tc{Z8b;JI_395>7 zO4F`M$B_`gl>>ZP($p*D-~3Pi%!Z>O&X;suz)~cp!18Rx>ES*HPw#Se^eI|hrz$rX zZC+;U>TPCwdu(oBrW}pXqCnMAFHTsU>@%Eh;Ra(!k*;nyd3p~pQr9uu+-BqQZQ5p? zQzNqLfqeD*ipD{mrNLW8*x^asuufEM} zdxydoAfC@Z`VCiZ-eg_36y7jVo1txKcQI{shw!e|oau?DUM`c*w9CQ4T9g zDJhGJ>E;GEUVWXE{vmDGvY4N8dVI+9&wj$4pFIX$V*Un`jcd4~q8tpUh844&YwX>; zO*tGx>Zk@IeBm<)@(#0((R2za_E5_(fz%1&DxTf>h=|ax7R-+iXcni;5AI?S#v6O= z?CtW}+u!e@wb6AQT^l$(UeL5Hb=_ep;=RL2G_?@TAV&Nop-!kq6BZ|@_`+o{Qr8`; z`UF2$s$oT0mQ;f(3mj4Kv1BwFaOuhw%-+L95eu|!N4;8cdU(w0?1a;kM?C)cFZsxp zbRnU|9%VJ98gJm8#|WT~YBVLafzUNH%@V95)+_4uK22R*VoDxFBq#|@JF?I|`6EN#_goO76G1PcOQSWh1 zvJgb1ZCmQPMwgyJRZvzX&Q}!GD5E|zx)8A7DF%*WIACLU2k#uxBe@V0>(!FgYDKeJ z61tX@`T{Bj+Tn&uQOqbuR~S?Sv@9vBAx<;(F;QX&bX`Z&Hq1{?>FS22Ni=ms7b7YV zW5PM59F!ThIZp^JzN~txBBU6o7iVnjY-5&TJSpMJQGq2xRY(|O9?^(*o&>~@Sf?7S z#yLe*a8*I!3X00%#p5(DHepx*^9iRg+3-v@rkTkl!1eIdGFmb-u#DF&8BN#Htk(FU~i#a8J;he-xm&Iy5t zSAis%oQUARNM=|F=y1r;dAiV|2_CQ@Pv43a5ocA-j`8fHCV>pw(XhE9?|ybz+{VBZK~(3j4`Vxn!=n0U&npePE|G;iMJP|63Wh-B{aLgg_O zhZ;Tg74mt@1=m(}sOz=9UQjWy{ym&a3YaJ=DgQJ>#d^vtJ>Bm4tO!D`XIPtmre13l zC9PMPmTE56uB`H9^(lg?%bQd1syOe6bwjcj7~dp;f=gK-Rd}&rm-iN9Lc|afu}>`( zMHHM@3SUrok2<9+OMKz+PEk)LK$-zi63eodSdI$GI)U|T%plP+1;?_Ar+tyd5jp>i zgcH!pBPmj9M5RLA1b;66Z^<`T7 zyZ|$o^E??iAtjgdKY>^;y_+E(ilXlZCRk^<(g@M@P`#Jk)cU+Tf2H%9pEbioFPsQT zjA}GNG^0jWjxkC2ycoraVcN$*0x_YpM3GeuEOw~NJC0qz^*5E>w7x|}vOqzu+!^b~ zTrC}FGDMXmiPDrDYj-cHxv7sFRYM${ z>oKaiz6zS7p|=WSUo#?Eq|8_-i!Y)|N z3K?YGrjLvWNK7P4q%K`R;}mnTNIfD|5!5NZG(1W&dGWdC@LoujG_S7aIF{3cQpF zq!fF@B1ge_y8ibQKO)7~&jC z{xY=}euKr_K|(OHJa2@yV}9_Eaxg<;OPy%h?Kql77g3?T zEq+le`jqjK*`uPUg2Qqs#B8C*oJ-Nrm zr5$d)c^hAP?tXrk*I#=JT|Ywp>9=p%_ujunlp)K-f|KWWDSgRgbA#E&CL7yZj3+}x zJWdr?dR$?6^_kd6w$k(^R(Vb@tY7=fuS8!Ad#z8@upq<~di%{V(uH1_i=lwzA}ng8 z5D85nrU>TnWsc6H{b$_2dynO!!TgZWE!o`O;qBl18n3^3o6A>b{O|wU|IOLSoZa0` zKK=M-_?y$nWVS)*0^@3fo$dE%+Q9PUkOyCU%7f24W;@rI&Sq?1y2Q@T7HU45q)}dA zVBZ(Az7rcgM$b+8B9$HawiSoCey+%YIfurWD|-}@2_ikGkaI$n!#>4~zlFrf@jg!< z-D7#SBIyWM4Vmn0Qx(GLspA`e@GXAuqwn(g!4v-auRi7R{m0z8c8RhYacS=j{LRao zl!F0-kx`W;+J|Dgd6}3J>*b2Y=?VLfpYY_~XKd_VW;&a(xw*+?HeoOtWlf)~@tyaXpPb@Ucyjj%7QmGr0!+#+{B&!F@odCsT;Vl4 zx%s9tg|wYboWI5VjaNB2IO1UcnCH(=c=qHuWmPdOg>pP%I-W2XPnk@|6lIlZZlCYb z5+Rap@;(ewo5_)d{5Q!GUF^|e%nUB2M6+J8SS~m|INB%Cka!*S0nszV<#&r7D?7)YK*8p zGpo|ku2&3412*1xg{!x&adL3X>CrJ~i-uKQGe21H{NaAyn?#Dii1B#LbbEuzWI{C> zP*f#l;V(vR49oc55?$L7VxVgS>vhf9$r(-8@bK;v_MhBi>(X_`vl-R+5+mmcAy2Rr z-f{cN9=<4Oo0hIi6snw_obu&we3@^4@IGDBad(YkXC3<>oc6-MYkT(QtG$XK^}bezv3y5iv(F z8?o_4;M}jZ4&RWPZBf z?Btl^qd6-EXf>u7T*hhU8zF>T!9yaEa%=U1HAftt)V%fH9^d%jU53K}^?Hr>1?zP~ z*9Cs}+q+bQf}?{Ix@FDD@tk_u;Js(MIi?GN6eF&5{OCXZ0e3!q#LxcXH{AW=0iS+& zhg-KVQ>^!iS=B4V6r3_BDz4wY$!l-EMpL((ou0Bdo3mavv~@#MXFEMlca&^x zj2Mgx?tbxzt}~|7F{5AK!TXZ0f9oC0jN_wYE?wE-WdDfwe(%dnrXy~>dYxyF_6Z@6 z?_R%og@>Pg0hVZ*hOO;wrjrp}=xF8-vh3z3Sc2Gg*%tuCEK^6*JZPZS&;0fyW+7Te za~YuGNF?hO8<*vBOGXzXQnxI_8R==lNQ_1!M&mJ;Zro%zD2XZ3tk%@4hV^Pq)3k)p zGL4bTmu7TbV0n7N$>Bb$#frt*S(fG1@y=J?;Oyuu)90A@_`^HA{?<*7_D?z3KjOyi zt1Q=n&wl(1n!026${weSHPdPUMOKsq@Rdgr_&l{mHV!Od@dA1FP|l$-Z$v8(A!b2B z1&LYAkR*6jr0^u`h+@67l>LC!V#WOUjM#f}76X@WTp^{%&gESSm&bD~Mv@s#(-2~W zkccT#Hw_`Q#5VHFzx*4zRm*RF`3b7R^MgZnFK^MT13Qsmg+65JRNv65_MG zuBw_bwgXHu#07#G-Z{K4sHzgDU`{DYM=_`fW&~d7_sJqy!uyipWW;bh!TF;1_W~*9 zjkW6~H($BI)mzti`~7!FU7P!%WOpbuF^|0l2wlq7SxkhKk!4B=3o+}50;5sI?VEeN z^4fJq!-`w4U1wu!lLueiV>}&k{pK~w!V^=jah9?)c23{Db3#Z;q3(qY=Fg`20RQ4#RsvyyOQhqeKxPQkg6Kc)Gg!bi1Bnt2w65Wz-vNWBBq2|>M$`v%3&%!p%J(cEnnucDH$e_LL8MB zRPv}gNI&^$c_P!4WVwiSq2b-%{|;aM?zg!4%5_o*48{{;m+%A62S5BnzWbveQjLZn z3Bl#r9`!hpEX@_3;FOq0NqhGvf0xC8neoLZ_mL18js~0^&$<8U14g4EsfwakUL##dy_a?_cD{51B6M9qf?$$0Ks$Ga$pt}0d!;ASVbKhvLL1n< zew{CU``bLe|A5fcJiL34-~UHHWbg77LetRHHAylQHO&X=yvG*>;7G9_lAz&p>Cd!USRx^wAgh@fx$9V?vh#B!zV=8bZuGq>tGPZBkNT zFenix)OF2j*%G@*Q?HrLM!fpg4eGYV^)n?-99;sPZp;{tMi>2DRda}0K*iyGKi@-d zHpC8V+w8YFC82}_Aw*&jLf5c)=@Q=M!3Kb20Sk%2V8|Qqzsuf@Yy9q)AL6|7{eSYu zZ0zjN)E#Zx5fP#}R?9V`QLf&kl-D5IuR<&9eWT!FSRqTck_VG8oGR)Crv>JW zRo!yytvA`bew)R~8Exz^3hsUS3Et(7ar^DJ5vSaG`%Od~!_kntcRuIv;D{8A#bUwE zAA~?jN#yb%#hsf6Zdea8Qt9mph6o zF=pY$mu1O%RWlk@`CAI>-Cl=<)Q_$!rZMMQPk~d6h*MIGy=!d5E(@f`2m4%m?Nv?> zkML#5>B$j`(^EeF<=>#bWMgZ}YwvxD$#~3aamM}6?(*B8|D0+xW9!l`NMdt)mv+@~ zdU{Gxju5X|RH29HX1TufPp^Q{hK||Bgl1iH=hOSdrscuir@Z&IH`&?S!Vd<-F4BgM zXdP+;+@Jixn}2E{;k@Rt{}6FSl??_@_5;PTUf)~(-YJ65#-|8sxo{2!1HS(K?@_NC z&W?|`dh0f$*^Fkn2qdV8@%z>Yb;L|IJ0cvraWPup|=qw3p7r$54gRz zg%*z0vY}qC*txXHwHue%+?w&$+qZe}@CoZSqE2uMz6-{n=*QGzCLBgb4B%Xq=klDR zZH=<*eb;kf;OL+JkUUgr!s+oTqbJWeo6o6ND{g=39j?FjCO`l8|ADKwU!fe1u^4#& zTi@i9U;Ua-fAt};>v(qe5eHA7@Q?r5f5FGU_zlMopRlvD#e>i9)3ps+6dC>Xy;ewB zdr*NOq!fU}lekspB~V4kLl`;>DC4h zKfB9%xx{IKIHekoxc})F+QZ#P9euF3XANJ#UK0ikoVn4AGQOP4V>Ky6{VoD@~ zvy(ZK$q++n)-7hn;$%%(damEP%A-4v^9ZLmwD6wQvd-i~KoLR;#1IH=mz5wjL=sKY z5mM}{K0RT|+?|vkaXEbUjOPy?k-EU)gQq;adylVt`Sf z+vu4UszFEzEa9XeMcCfkWxBh`bYsTB^L(*^ zYrOZo{r;Dj?QGM=77LoKvXn7Ee#$m?9}%Hm*1YlFn_Pe83JK%-^-D}PrYsjr7V`yL o+f&x7h6neaF&dBZFt#fHA8d6Mt6|r`LI3~&07*qoM6N<$f{^8gQ2+n{ literal 0 HcmV?d00001 diff --git a/repo/js/食材加工/assets/Picture/Sour-Cream.png b/repo/js/食材加工/assets/Picture/Sour-Cream.png new file mode 100644 index 0000000000000000000000000000000000000000..8977f8234e1c1a47e41dfafba4672b59f9ecf8f7 GIT binary patch literal 8338 zcmV;DAZ_1?P)0lx;1JaOlZ=wkgZ_2OJLL)ej0kD#8kfrI1L4LncK^0v8D2CSo68Ff*8? zr}w_gIj5@94^{VekDeUvh@R=5?z#6=R_2%A_hprQ z1643HOcZs3nqq1oieWgw6eNL_mr(&j5e&+oi39>9K}h9UKoC+&h#D~%M#5qwiJ&H! z2+o6<0{Kny`y>*A2uL!L0m<^uw5-MDfAbN82oO;mQ9;Wq%^n&wKY0Q~^Fyj)$q?^w znjZ!&|H;y9JrEM+6h%S6tSnE2gdqs?6{}&EgQ8mg%_%WN#A|*8QN#ivCd43gplYCk zSi%w{$$^XsL=q_p$wCfyQV@Ztr~|LFn293+&JxKS&KW7D9BmRrBWd1F6~m&UYDi~@ z6GVlS%0itWPOxN{Q^X*q2+49#l3|vE70df;Nj-Inh~+GC4rR8>U?zx*Nc2?BFpLla zDJ4jGp;FQlM6eWy$973E5`q$mCV0&O zBN`#LNHUt~gvn^i{@wwHdj~Y*35N%VG)<%*BbHJwIE6sKt77I!7*;l7VR1mcxWI66 zz|ztJ%j+xjhXd+ipQ@@zlF(oz=LlVgh(QueDA{Wzsd7oG2!@g*XAS}?4lmxLA~ao-=vP#3_I`pPSTsxwvqT7q7z5KLuy-)#U_9ma{+L_WuXF3Cuk+r{A%|XB zSY2h~+y-l>);V!z1MjQ6V2xNOh)alQt~5&aI6+17S}YMukUW+^bOw7f__!Mg4N!+z zqM1y&ef=gkuDs8!tJgSN2@jv%;Byb2@^cY zh(M`fi%1eg!K+a9`t)kY{bx4l4QhPl@lFsmM&pjjByfFmhby=5@Y8?z8Q=M?LOdC?+96q^AmPK6}Ocz2(j z+gn_H`#sX;9WI?Z!IK}jmrD=b!|C-U5<=4i-g@J8?)}hH?CtNfdF?uQkBXt9Sjrtk zM8Sb$wi`#dkRxuynBkG~r;4De)K2Nuj^%|RD@#M1I>yr}@7~zrXP2+@(mOYJ>EcZQss=0ul(Ux%`E1YV;P*huLz-I=f)kby>pf8Z(rf( z&#m#~qxbW~!}oG#b(Lw?a(nlH{ZUIGv3KizKKaFe#;1Sf%e?WUSNYRF`Y$Z6oFL7z zDj8inq3b#@BZV%v&=~XIBn-{qC`L*NuRWypI8nq`V1`I;jWH&i_bd+ktSv9Hv9^q* z#MPVIy!`sR{O^}vu4wlI8Uc7M4%2w6;!vILz(Sa^OST61$GJZE4$vW<26xcZ=4s=q`%P$WSYj2m}$xqf>KZ^Fj<693{CKgO4yeUfj#{2DL4c7^}>SFdpCsYkf@ z(GRe&vP3Wt0z{8Dz#KSr+ra1#Cm*?=ldFqtZXfdFx31BJi1UtG zJ?a(b99!>SQ;&VS0GL?w#Ab|K2-Xf9nn2{Ly#mLSVSOUcfHleNOM2I|p3f+@;s6 zc=ECP`P@?<;0teG=fxkr&7b_|KjzZ2Pw>doA4V2xBsR!bp8u-tZ|(8wcVA(AYm0yR z*^lyx$M5I#>LTyn+-83?$@rkc>{&%1guwpI8$9{k7x?Ty|1~U*5x+>)J3~s)P7fFk z7jw6;NQ$}j%@=HT^u3j)Wd=5@|J;Q#;}pdAaK45lTzltD-uU4U`1^1DIS0FYEUcYC z)gj_YlAue73SCGT#)J24aNp?-zW>_0{Ka=(;hUGYc1Z3XnqS$7$Z1nJsw62#+n^=JeBM&HUJhA>t7AsH<`HfZJE!2Ov{?v1vd*ERPOG=7Ux@HT^@bw9*-dP}JU`ru` zn?-UP;I3US-yJ2y4Eyi;`B5eySv`n)L~GPl_^QV{Kl?G?|K``Z_1 z@6IM&+fWS_sH&QT;sieY$OEjeF7S=-`~>-%|MmyAJKE>Ut!-lA*Jg=kG9ok$zVe)X z;DfB4I?aP0`WO#9_91%x0ioT&tR;pCvE9P}U#(IP?w#+Lr4CCG)Psfm^^BvLl%k&% zf10yRj`0wbOsP|s136 zL*+1pjkP5{dFf%~kN(r|*xvpau`F=f=^>#R@z6&;&0|kJ!|C%6vbes2uRW?#QX4|I zgVQ0?$#qg}u^4gHkpA+;dB253Xb%8I-5>+jEIY{j-BQG?!z}N#6fSFKm<22)Ts=gq zJ{CJHcJrW_7^*eS^>Uf2U|mBDV^kFpM^*RO+1chtFMfv?zwxK++_}lZ@+rCya87Wa z{LqExXA*cky2JYVIiCBiukwj6{2J%(y`RBi4|PSRrUc@MVMK~kR4Tg3CMhM%0x1US zdIhA;DJ*~qVY)|(ll<7um0c7>qy!~rT?!p3Oz64^F^oyE0gHg*T#aa*5tt09h?Jk_ zt^tBp6{JW?4TutB#8)*JFFnrL`!BM;y~EWvf5P(m1}P-m7eDpH^UgaCc5m>3r=H_i ze&^qD{^5slY9vD0i3ldB)(DQa*+N~PWF6gPJ0o{WITH-3{@Q#OMJo^?w1>p*kQ4)1 z8M~tb5Qn%vuIi)p0={0rRg3s~3Ey8rT^}j>SWr-hx*jTuh~&}|K{PAAoGlHO0;(0F zjuawmCpUQL($5j1@%l^OX1ID1_uS7v{`}tUt33Jaukwq({%=@XTOy?nQp}K)B9>az zEkJp*ZgPjJw@&OPbknWU(In%2H>Ni{RdzO`xoVB7BZLX59bsKlYB~ej90SA<hk-*iDIXOmE?A>FF8K zMQfbzVKETe5tdp)HzsvW7TBtDZE%Ev$H1^4Vu~#(OtI9Vu9p|6F1t_`5!DhfC5BNh zMb%=`DB^llwQ}#pM^Rtn&pmjFPyNboQuQignnDVQR*3dUsU>w|)Gg*Urbs*8LbB~a zG?z^diy0tML@UO7@1bsi#np?%)H3V$sx`gElZdNm$J+=-mqyTya9ZX5UJX#+M|^dc zC1){VaZ2pQITK<>3R9#SB4&j-MnXHn_gBCIA{D6{?C9Xqw`ET z?jabi>XTy2&W)EyVanpk$4H@J&h9M#j;~JR+9g7JKxhuJ6tg{vA)4r7i>SjnkBCRq z&3OtWL_A0QK`@KN*x=GILrPZtq|~D7OIJ!*Y!Mv*4xbk-g`Pifu$K4QR?10U9*R!ys%`3l#bx5CA?o?vU?2+9o2B1y1#}v zKL-o@5-i$>;`7YeKtEFP+I|V?Dt61-fQ0 zx2$8LMnph7-VX?=BObg@Guos#IDsE5qf!;2ReDIuIq0fBt~a0>ra8xeOro6D0HhR& z?TFAEl4661LwyhRebm=j=*ni6`9rblrTBug4{xafsY(P&8k=FUL9|z-aF5~ILnL6b z_Z~4!sfTB%25YER^cPPP+YvE#M`C8?%8Fz}PKvk+5l1uGA#`KB>myYUb#)dvqM$z0 z;Z)QQS8`57q%Xs%nE`eD_6=PEIIUUXN zT*1{yX-n1wklfm|$Zjd0>Ia!0SR|#8$y4a^@42efG=)@k^oFN!z9x1PQk>5Hg}i9b z(P+!%%re7w(>+xCg|g-{5Z@!UW1>xRebx(e@LE3kA+%azv~!u=TR&!b{So|NoqDiF z3Jv3fYefdkoSp0mx_Q#Mywjo}?${{qsEcHfGGZ7XBSsl`#nri7%t)!lVoS0_Z{Z}a zUd-ewOv~DH`H1s{En5Csw1}{TPobr4cIXW@Fq=(hYRm;vHzmdqV7Pi=UK$H4_tG1z zGunNJgY7q|`fKzTPSaaBg(0+)O=6hjNQMe*`tu1Yu`1)s0Syg2WxW?mn`MF z?nZzXhE`H?{>Vz~#*Fu`(M|V2lzOm+`s@(J<{%3n@mcW9Ik}eaHGA|kQFH8-1!X?M z$*`AqEr!fTfT~)g8m^(PBE^mrXPyD2-*<>A>W8R$#Q6e9t!sa0mU7+phNq|p zt8?GZk`cR6t|<#RtwIQZo`YXsZT6B zDP>6NdiZ()UoU}{@%nLN73OI@SE2Ln;*Kr8re z^DE?qdaNGex@nQ76S_Ffh#($uZZ0;Y0HCNN6n2(-dR+kNNauqTMOiXkwaDz*&K*(c z`Etr6%TivrrGSXfykLeYR-7XNi-FiqiQP0?X;mK??Yv`?{p&eR3*e-bk=WNms{RRl ze>r=G^H3D&Q__9jjzXLJb;&3d!6eW4Z3bv_btlCG(0N%L*Z;HNNcs1WGi3YP_pRzJGd_4fkHn9ik;w$eQT5lU1}F0FS+S)= zN+urdNte>TsdPDLkPV&%2$lW2!-8qw*z3^N!8cKiye`VgAb0!?y zwc@zoD2t)Aqhg0kCMTpYCn83KSn8LK6lZNV74>;{kP&iOm8@~TE}cZ@S%e+EuF*|*aJ?mbwSf9MFB*UBy=D&^nGNJ; zW~D$5j;o4(H;@8vY4&xV49~XyCWmf6cXeJNvti0?i%LKwE8TWFqM2;t z5ANJz>BI(14j@eN^+HZfv!lREK5>?_sCmM3l#jMam5p<( zoZ7%#LaPc*HR7|OD0XZo#0t~O=K;HJjD#`L?jx?ky8&ADQ0*NfORi+#Y%!Uu&wRb( zY5f27@sADUGBgRzgwTyhu_bnau4~wS=S{Y5U7?${c#Da_$_lA#xq105riWuz&u%bW zS|VDDrV5dIPFH1y3&m=-IS}T#Ke3?=EwtIGb&>~}QYdMr(Jr$)QIZH2!~grr=JG)1 z6=oc91)~gU!ju@M#Mojn5kp|KbB9~+zRF~8pJa*2xWPBmG0uVd9*fIEru&=Rob0o- zzRuFdN$Qx;D&%R5%s6{76;yMNH$hyuo7$F|i`HOq3f)YNWg6_XE;6+$!pI*vzIUy; zC{!RxVUF`@RUXOBF~u^KPB9R}loTT|1g86Y+`0M=2ivy*p$&`}#Ew_ckF3 z5o6j+IUJ8@n+7%T+oR0e>z*)e@`KftqpJEOi|pUN!FYd%<+Tm^E2|6^7LZis(^pAA zV;)n@4YH%qXV>fklUk(UtH+%>eYQt9|q2@4;T)OUghw;K(FiJ zd!EpAY~8#;y}e02Sftk*;0FVG!y&H9El?HI7qzD|Jun+vm9h6s_!QETS27DsV16uS z{yD4htW#1!^%N5^bi}SDG-JAELNjWZ9vm>*+b6UQs1Q-Q&=Mxb;p6~I5ic-qBbRTC z2+85EUc1A6r%&;t%Xiq^nR4H$1x~K_=(kE+H4IV@oToBqtVh@GGPZ3*9lq{S^?Ovk zKGkr6sv6+x3hzBQLCX}_P@MO<4W>+obuNQTN0_nS4dgzX+~qF zhljM2ju6@cfF+BZr)@jhW=h+%h%AA58eIrGp3`|9UE!i}Al z>zg|)^efJ+FK}X|$Ht1IS1V4HdeEa%!Pgbex%{aWD46$tqp`#m5X(nT08)&AX7$Amoxtla?OWRKAx=83c zV#@TlZ3D9a>!{m z!7WNJ6`F1kJ0o_1P!3QkiByijI{|U7WKtpm?W7^5KnU4^F2}s-QsQuGZ0=6Dv)eIk zQ?53xxpeO`KYjIW{&H)KKljLe>})>HpMB>QzWjx!`P&~~BgI4;1G@)_y@|591&c$^ z@}g&PSg|;$sCy2l4t0XBm0BuX?a(sjR#C(W#FY7cNX59Al)4ry#DWz8^x`|{`UBEn;z_&L6}bHJbd<%@jbvrqE!>o@799l=+4Gor$H*SNXU;x)1`a4ZiU z3%!bAU#TkS_bOBc?`H$agsP&><5h@eXrb1k`MgmIaZZZN93ixXE+3nMt&f?7~B?z?A=@%|xy{^nJl_@!r9KDCZ} z@}EBQyozxCq5JshwL5J7>@7a~^y5rooD-MIS9zy>1**iP95iq+HulDeaVxYPw2jgw zF!jYZ>}AzQ9(U(1?nwzkEUnE|#00Sm#AI`yK`fz?7l~ynYuY86*4S^1t;4|PUgG9K zWM^dTO`wZ{E1k%>Osdr9^T+q!bCTUVoBY{N-{J$$eUdW|-G^bw@4WEu&62}HM+%8o z{`z|iFTcre{F7(d8n^84k7xrpHyd@hVnKmZC0QaABc)P@is2M$ukg$*J>nqoI;<-<8?gJO-nil6B^4tIQ56nrvSTq|+zxKC3VDtOm)jKymxDt zuFLi4{n3oa5(RW9-eLa7RK8CZ^EDy`F)f6q+}Kblo?$jS%k_+WV!d2&5)mXq!1A#K z%}3osSL|=ew?0BD&+Zhpa_>kptGxHr3V-wB4|qKqPyO;|IC1_gi4MVo8t$oI`t??o# zCtoK#dXbO++UHnaU(IKiMVTGg_Ne9CT1j(6L`lIo|LB9Po;t~Q{^Fbb!~gm#o_+EX z_ntY$_Wqc0+XCPn`Jz%`F6t95SvfJHI7c=s%iKU!^Py=;L@}HRCQ4nryp&y56e)6| z!ns6c8AMYOA_)sKKCHRUotu-XrNMyprHb#q{1g7}ovVE8OTWl{PduD&juD8eS+f*| zDZl%|f3$p|DC^98;w+1c6tijZ?oZ$3-B(`ao&Zlg_7Er5SJ*ok5mCfSn=41yM3oc) znI(0$uM?#!m=aSuX5!@ZH#2;h-k^fT>;c8uIY4tniKHMTBnzGt^WxRBxG-S3_FTF8 zK3{+FMIQX@C%EvDM_JlfrE3Ge()>=zBWkGTdyewEFZ>5XH7hVm!FnkpCrBY>km&-i zeg8*X{o!j|s28~O=mj=5HV82??HZ)aEJBP(xe}8XYFIQvN_bz+?3G&|1q;CpRbMis z%XbnH97@7S<-|##co3pk$QL|%3j>@5Zr$4C+uwVM)em3f;!~GcyXO=!W@hPB$>$6V zb6J<@?BM0^z3{bSQt2F=)W971qLF3A7utY&M{_vh-JiU{jemHXrE$v#AHK)~_nk*n zX}dtzwB^DgIPXbaM=Tz`8gdx$S!tfMY&n(%k=re5-5b{WjB<{X1LSe)k%8uH2-( zy+=I?JoL~7&YnKa;>rrua6n~Nz)gydw^Ht9m{EW!h1@@)B|?fEjK>@t9B|{-Ena{9 zb<*m9lNZl({(~1;Ik`%`Fl07LSD(9%qtI~4UWZzy!r6Y$3N)1K%JRD}e9dOJDrW}8 z@x>dE$La<+5Qrh43pC4SM2wNHZHS>`v~$4LwOj1oyu;qD9nz@9MPukImKGNoRy`IM z7U}o;WtyBXGKL6~Fy&zXka0WZU^3!hI>P#%;o355XE!)`;U3n{pT<=c>hlejOt*6< zkaANb*LgV-M_zR*^gJJ~PWc8YiqD5Gvww%n#h=W;fzG;3EXAuWVvL1 zzjWpVOQ$!Gl*LNdwseyzlhK4QX_$;A+#FA6+x<*&Q_4zm;HY~w{R^i#wY13jg#mTH zN8Rh8wJ(R9@&Hvua}b;-Ny6cll2SH3A~iljS1G<+u{HI0O}KtdZ+Xa~I;q5uE@ zI7vi7RFrv|m6j{yo}L}MF_(u@M2G6^ co}}=90fXO0V#s^+^Z)<=07*qoM6N<$f|TShNB{r; literal 0 HcmV?d00001 diff --git a/repo/js/食材加工/main.js b/repo/js/食材加工/main.js index 8863a7d28..27cb7e4d1 100644 --- a/repo/js/食材加工/main.js +++ b/repo/js/食材加工/main.js @@ -13,17 +13,19 @@ "Processing12": "assets/Picture/Raw-Meat.png", "Processing13": "assets/Picture/Fish.png", "Processing14": "assets/Picture/Mysterious-Meat.png", - "Processing15": "assets/Picture/Butter.png", - "Processing16": "assets/Picture/Smoked-Poultry.png", - "Processing17": "assets/Picture/Lard.png", - "Processing18": "assets/Picture/Ham.png", - "Processing21": "assets/Picture/Sugar.png", - "Processing22": "assets/Picture/Spices.png", - "Processing23": "assets/Picture/Crab-Roe.png", - "Processing24": "assets/Picture/Jam.png", - "Processing25": "assets/Picture/Cheese.png", - "Processing26": "assets/Picture/Bacon.png", - "Processing27": "assets/Picture/Sausage.png", + "Processing15": "assets/Picture/Rye-Flour.png", + "Processing16": "assets/Picture/Butter.png", + "Processing17": "assets/Picture/Smoked-Poultry.png", + "Processing18": "assets/Picture/Lard.png", + "Processing21": "assets/Picture/Ham.png", + "Processing22": "assets/Picture/Sugar.png", + "Processing23": "assets/Picture/Spices.png", + "Processing24": "assets/Picture/Sour-Cream.png", + "Processing25": "assets/Picture/Crab-Roe.png", + "Processing26": "assets/Picture/Jam.png", + "Processing27": "assets/Picture/Cheese.png", + "Processing28": "assets/Picture/Bacon.png", + "Processing31": "assets/Picture/Sausage.png", // 添加其他食材的图像映射 }; @@ -33,17 +35,19 @@ const processingKeyChineseMap = { "Processing12": "兽肉", "Processing13": "鱼", "Processing14": "神秘的肉", - "Processing15": "黄油", - "Processing16": "熏禽肉", - "Processing17": "黄油", - "Processing18": "火腿", - "Processing21": "糖", - "Processing22": "辛香料", - "Processing23": "蟹黄", - "Processing24": "果酱", - "Processing25": "奶酪", - "Processing26": "培根", - "Processing27": "香肠", + "Processing15": "黑麦粉", + "Processing16": "奶油", + "Processing17": "熏禽肉", + "Processing18": "黄油", + "Processing21": "火腿", + "Processing22": "糖", + "Processing23": "香辛料", + "Processing24": "酸奶油", + "Processing25": "蟹黄", + "Processing26": "果酱", + "Processing27": "奶酪", + "Processing28": "培根", + "Processing31": "香肠" // 添加其他加工设置的中文映射 }; @@ -78,7 +82,7 @@ const processingKeyChineseMap = { } // 行列数的排列组合 - const rows = [1, 2];// [1, 2, 3, 4];三、四行 暂时用不上 + const rows = [1, 2, 3];// [1, 2, 3, 4];三、四行 暂时用不上 const cols = [1, 2, 3, 4, 5, 6, 7, 8]; const gridCoordinates = []; @@ -99,10 +103,12 @@ const processingKeyChineseMap = { let template = file.ReadImageMatSync(imagePath); let recognitionObject = RecognitionObject.TemplateMatch(template, x, y, searchWidth, searchHeight); // 设置识别阈值和通道 - recognitionObject.threshold = 0.90; // 设置识别阈值为 0.85 + recognitionObject.threshold = 0.9; // 设置识别阈值为 0.9 recognitionObject.Use3Channels = true; // 使用三通道匹配 - let result = captureGameRegion().find(recognitionObject); + ra?.dispose(); + ra = captureGameRegion(); + let result = ra.find(recognitionObject); return result.isExist() ? result : null; } catch (error) { log.error(`图像识别失败,路径: ${imagePath}, 错误: ${error.message}`); @@ -144,9 +150,9 @@ const processingKeyChineseMap = { /**烹饪区**/ // 检查 CookingTimes 是否为正整数 const CookingTimes = Math.max(0, Number(settings.CookingTimes) || 0); - const Cooking = settings.Cooking - const rightOffset = 0; // 右偏移 - const downOffset = 0; // 下偏移 + const pageScrollCount = Math.max(0, Number(settings.pageScrollCount) || 0); // 滑页次数 + const rightOffset = Math.max(0, Number(settings.rightOffset) - 1 || 2); // 右偏移 + const downOffset = Math.max(0, Number(settings.downOffset) - 1 || 0); // 下偏移 if (CookingTimes > 0 && Number.isInteger(CookingTimes)) { CookingClickX = 910; // 设置 CookingClickX @@ -156,23 +162,32 @@ const processingKeyChineseMap = { } // 烹饪操作函数 - async function performCookingOperations(CookingClickX, CookingClickY, rightOffset, downOffset, CookingTimes) { + async function performCookingOperations(CookingClickX, CookingClickY, pageScrollCount, rightOffset, downOffset, CookingTimes) { log.info("执行烹饪操作..."); click(CookingClickX, CookingClickY); await sleep(500); click(CookingClickX, CookingClickY); // 点击菜单 await sleep(500); - click(145, 1015); // 点击筛选 - await sleep(500); - click(79, 1020); // 重置输入框 - await sleep(500); - click(160, 115); // 点击输入框 - await sleep(500); - inputText(`${Cooking}`); // 输入 Cooking 的值 - await sleep(500); - click(375, 1020); // 确认筛选 - await sleep(500); + for (let i = 0; i < pageScrollCount; ++i) { + click(1200, 920); + await sleep(500); + leftButtonDown(); + await sleep(100); + + // 根据条件选择运行的 JSON 文件 + let filePath; + if (pageScrollCount >= 10 && (i + 1) % 10 === 0) { + filePath = `assets/pageScroll2.json`; // 每 10 次运行一次 pageScroll2.json + } else { + filePath = `assets/pageScroll.json`; // 其他情况下运行 pageScroll.json + } + + await keyMouseScript.runFile(filePath); // 平滑移动鼠标 + await sleep(600); + leftButtonUp(); + await sleep(100); + } // 点击动态坐标 const rightClickX = Math.round(178.5 + rightOffset * 147); @@ -223,7 +238,8 @@ async function recognizeFIcon() { 400 ); - let ra = captureGameRegion(); + ra?.dispose(); + ra = captureGameRegion(); let fRes = ra.find(fDialogueRo); if (!fRes.isExist()) { @@ -237,7 +253,7 @@ async function recognizeFIcon() { await simulateKeyOperations("S", 200); // 后退 200 毫秒 log.info("执行后退操作"); await sleep(200); - await simulateKeyOperations("W", 600); // 前进 600 毫秒 + await simulateKeyOperations("W", 800); // 前进 800 毫秒 log.info("执行前进操作"); } else if (f_attempts === 3) { // 第二次未找到 F 图标 @@ -249,6 +265,7 @@ async function recognizeFIcon() { } // 重新获取游戏区域截图 + ra?.dispose(); ra = captureGameRegion(); fRes = ra.find(fDialogueRo); @@ -284,7 +301,8 @@ async function recognizeCookingIcon(centerYF) { 36 // 高度范围 ); - let ra = captureGameRegion(); + ra?.dispose(); + ra = captureGameRegion(); let cookingRes = ra.find(cookingRo); if (cookingRes.isExist()) { @@ -380,6 +398,7 @@ async function AutoPath() { await sleep(1000); click(150, 1020); await sleep(500); click(150, 1020); await sleep(500); + click(960, 1020); await sleep(500); // 如果 PrepCountArray 和 enabledProcessingKeys 的长度不匹配,使用第一个 PrepCount 值 const minLen = Math.min(PrepCountArray.length, enabledProcessingKeys.length); @@ -388,7 +407,7 @@ async function AutoPath() { // 遍历启用的 Processing 设置,进行图像识别 for (const processingKey of enabledProcessingKeys) { // 获取 processingKey 的中文描述 - const chineseDescription = processingKeyChineseMap[processingKey] || "未知食材"; + const chineseDescription = processingKeyChineseMap[processingKey] || "未知食材"; const imagePath = ingredientImageMap[processingKey]; if (!imagePath) { @@ -412,60 +431,45 @@ async function AutoPath() { // log.info(`通过图像识别找到食材: ${chineseDescription} 在坐标 X=${scanX}, Y=${scanY}`); log.info(`通过图像识别找到食材: ${chineseDescription}`); imageResult.click(); + await sleep(300); // 等待1秒以确保点击生效 + imageResult.click(); await sleep(1000); // 等待1秒以确保点击生效 foundIngredient = true; + // 执行额外的点击操作(如果需要) + await performExtraClicks(processingKey); + + // 点击确认按钮 + click(1600, 1020); await sleep(2000); + + // 执行 PrepCount 操作 + const PrepCount = PrepCountArray.length > 0 ? PrepCountArray.shift() : defaultPrepCount; + if (PrepCount > 0) { + await performPrepCountActions(PrepCount); + } + break; // 找到食材后跳出循环 } } + if (!foundIngredient) { - // 图像识别未成功,可能是因为该食材正在被加工,通过OCR识别 - const ocrResult = captureGameRegion().findMulti(RecognitionObject.ocr(112, 118, 1161, 345)); - for (var i = 0; i < ocrResult.count; ++i) { - if (ocrResult[i].text.endsWith("分钟") || ocrResult[i].text.endsWith("秒")) { - // 选中该食材 - click(ocrResult[i].x, ocrResult[i].y); - await sleep(500); - // OCR食材名称 - const ocrResult2 = captureGameRegion().findMulti(RecognitionObject.ocr(1308, 122, 492, 52)); - const ingredientName = ocrResult2.count > 0 ? ocrResult2[0].text : null; - if (ingredientName === chineseDescription) { - log.info(`通过OCR识别找到食材: ${chineseDescription}`); - foundIngredient = true; - break; - } - } - } - } - - if (foundIngredient) { - // 执行额外的点击操作(如果需要) - await performExtraClicks(processingKey); - - // 点击确认按钮 - click(1600, 1020); await sleep(2000); - - // 执行 PrepCount 操作 - const PrepCount = PrepCountArray.length > 0 ? PrepCountArray.shift() : defaultPrepCount; - if (PrepCount > 0) { - await performPrepCountActions(PrepCount); - } - } else { log.error(`未能识别到食材: ${chineseDescription}`); } } // 如果 CookingClickX 被设置,执行烹饪操作 if (CookingClickX === 910) { - await performCookingOperations(CookingClickX, CookingClickY, rightOffset, downOffset, CookingTimes); + await performCookingOperations(CookingClickX, CookingClickY, pageScrollCount, rightOffset, downOffset, CookingTimes); } await genshin.returnMainUi(); keyDown("S"); await sleep(1000); keyUp("S"); await sleep(1000); + ra?.dispose(); } catch (error) { log.error(`执行按键或鼠标操作时发生错误:${error.message}`); } } + let ra = null // 调用 AutoPath 函数 await AutoPath(); })(); diff --git a/repo/js/食材加工/manifest.json b/repo/js/食材加工/manifest.json index be93807b8..20cb78f2c 100644 --- a/repo/js/食材加工/manifest.json +++ b/repo/js/食材加工/manifest.json @@ -1,19 +1,13 @@ { "manifest_version": 1, - "name": "选择加工食材", + "name": "选择加工 食材", "version": "2.2", - "description": "食材加工 识图 复选框。", + "description": "食材加工 识图 复选框。适配黑麦粉、酸奶油", "authors": [ { - "name": "吉吉喵", - "links": "https://github.com/JJMdzh" + "name": "吉吉喵" } ], - "tags": [ - "食材", - "料理", - "模板匹配" - ], "settings_ui": "settings.json", "main": "main.js" -} +} \ No newline at end of file diff --git a/repo/js/食材加工/settings.json b/repo/js/食材加工/settings.json index f71078760..669a3324b 100644 --- a/repo/js/食材加工/settings.json +++ b/repo/js/食材加工/settings.json @@ -1,92 +1,102 @@ -[ - { - "name": "CookingTimes", - "type": "input-text", - "label": "【料理制作】:\n\n烹饪次数(默认0,即跳过)" - }, - { - "name": "Cooking", - "type": "input-text", - "label": "输入料理名" - }, - { - "name": "PrepCount", - "type": "input-text", - "label": "\n====================\n\n【食材加工】:\n\n加工数量(不填默认99)" - }, - { - "name": "Processing11", - "type": "checkbox", - "label": "如勾选:面粉,黄油,糖\n上方填入88,66\n则加工面粉88,黄油66,糖88\n-----------------\n\n1小麦=面粉" - }, - { - "name": "Processing15", - "type": "checkbox", - "label": "-----------------\n\n1牛奶=奶油" - }, - { - "name": "Processing17", - "type": "checkbox", - "label": "-----------------\n\n2牛奶=黄油" - }, - { - "name": "Processing25", - "type": "checkbox", - "label": "-----------------\n\n3牛奶=奶酪" - }, - { - "name": "Processing18", - "type": "checkbox", - "label": "-----------------\n\n2兽肉+1盐=火腿" - }, - { - "name": "Processing27", - "type": "checkbox", - "label": "-----------------\n\n3兽肉=香肠" - }, - { - "name": "Processing16", - "type": "checkbox", - "label": "--------------------\n\n3禽肉+1盐=熏禽肉" - }, - { - "name": "Processing26", - "type": "checkbox", - "label": "-----------------\n\n4兽肉+2盐=培根" - }, - { - "name": "Processing21", - "type": "checkbox", - "label": "-----------------\n\n2甜甜花=糖" - }, - { - "name": "Processing22", - "type": "checkbox", - "label": "-----------------\n\n2香辛果=香辛料" - }, - { - "name": "Processing24", - "type": "checkbox", - "label": "----------------------------\n\n3日落果+2树莓+1糖=果酱" - }, - { - "name": "Processing23", - "type": "checkbox", - "label": "-----------------\n\n4螃蟹=蟹黄" - }, - { - "name": "Processing12", - "type": "checkbox", - "label": "--------------------\n\n冷鲜肉 转化成 兽肉" - }, - { - "name": "Processing14", - "type": "checkbox", - "label": "-----------------------------\n\n神秘的肉 转化成 肉加工产物" - }, - { - "name": "Processing13", - "type": "checkbox", - "label": "--------------------------------\n\n鱼 转化成 鱼肉,排除 红色花鳉" - } +[ + { + "name": "CookingTimes", + "type": "input-text", + "label": "【料理制作】:\n\n烹饪次数(默认0,即跳过)", + }, + { + "name": "Cooking", + "type": "input-text", + "label": "输入料理名", + }, + { + "name": "PrepCount", + "type": "input-text", + "label": "\n====================\n\n【食材加工】:\n\n加工数量(不填默认99)" + }, + { + "name": "Processing11", + "type": "checkbox", + "label": "如勾选:面粉,黄油,糖\n上方填入88,66\n则加工面粉88,黄油66,糖88\n-----------------\n\n1小麦=面粉" + }, + { + "name": "Processing15", + "type": "checkbox", + "label": "-----------------\n\n1黑麦=黑麦粉" + }, + { + "name": "Processing24", + "type": "checkbox", + "label": "-----------------\n\n1牛奶=酸奶油" + }, + { + "name": "Processing16", + "type": "checkbox", + "label": "-----------------\n\n1牛奶=奶油" + }, + { + "name": "Processing18", + "type": "checkbox", + "label": "-----------------\n\n2牛奶=黄油" + }, + { + "name": "Processing27", + "type": "checkbox", + "label": "-----------------\n\n3牛奶=奶酪" + }, + { + "name": "Processing21", + "type": "checkbox", + "label": "-----------------\n\n2兽肉+1盐=火腿" + }, + { + "name": "Processing31", + "type": "checkbox", + "label": "-----------------\n\n3兽肉=香肠" + }, + { + "name": "Processing17", + "type": "checkbox", + "label": "--------------------\n\n3兽肉+1盐=熏禽肉" + }, + { + "name": "Processing28", + "type": "checkbox", + "label": "-----------------\n\n4兽肉+2盐=培根" + }, + { + "name": "Processing22", + "type": "checkbox", + "label": "-----------------\n\n2甜甜花=糖" + }, + { + "name": "Processing23", + "type": "checkbox", + "label": "-----------------\n\n2香辛果=香辛料" + }, + { + "name": "Processing26", + "type": "checkbox", + "label": "----------------------------\n\n3日落果+2树莓+1糖=果酱" + }, + { + "name": "Processing25", + "type": "checkbox", + "label": "-----------------\n\n4螃蟹=蟹黄" + }, + { + "name": "Processing12", + "type": "checkbox", + "label": "--------------------\n\n冷鲜肉 转化成 兽肉" + }, + { + "name": "Processing14", + "type": "checkbox", + "label": "-----------------------------\n\n神秘的肉 转化成 肉加工产物" + }, + { + "name": "Processing13", + "type": "checkbox", + "label": "--------------------------------\n\n鱼 转化成 鱼肉,排除 红色花鳉" + } ] \ No newline at end of file