From d79fef48057b516cc64c6f3091585e27e35beff0 Mon Sep 17 00:00:00 2001 From: kaedelcb <57870068+kaedelcb@users.noreply.github.com> Date: Tue, 1 Jul 2025 07:44:55 +0800 Subject: [PATCH] =?UTF-8?q?v.3.0=E7=89=88=E6=9C=AC=20=E5=85=A8=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=9E=AB=E4=B8=B9=E5=9C=B0=E8=84=89=E8=8A=B1=20202507?= =?UTF-8?q?01=20(#1250)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * v.2.9版本 全自动枫丹地脉花 20250702 1. 优化战斗失败自动重试2次。 2. 优化当有须臾树脂,脆弱树脂不显示的处理。 3. 优化在地脉已经打过时,直接领取奖励。 * v.2.9版本 全自动枫丹地脉花 20250702 补传文件 * v.3.0版本 全自动枫丹地脉花 20250701 1. 优化战斗失败自动重试2次。 2. 优化当有须臾树脂,脆弱树脂不显示的处理。 3. 优化在地脉已经打过时,直接领取奖励。 --- repo/js/AutoFontaineLeyLine/README.md | 8 +- .../assets/model/fragile_resin_count.png | Bin 3182 -> 1988 bytes .../assets/model/moment_resin_count.png | Bin 0 -> 1974 bytes .../AutoFontaineLeyLine/assets/model/one.png | Bin 0 -> 2854 bytes repo/js/AutoFontaineLeyLine/main.js | 182 +++++++++++------- repo/js/AutoFontaineLeyLine/manifest.json | 2 +- 6 files changed, 122 insertions(+), 70 deletions(-) create mode 100644 repo/js/AutoFontaineLeyLine/assets/model/moment_resin_count.png create mode 100644 repo/js/AutoFontaineLeyLine/assets/model/one.png diff --git a/repo/js/AutoFontaineLeyLine/README.md b/repo/js/AutoFontaineLeyLine/README.md index 1e793ad2..efd29788 100644 --- a/repo/js/AutoFontaineLeyLine/README.md +++ b/repo/js/AutoFontaineLeyLine/README.md @@ -97,4 +97,10 @@ ### v.2.9版本:20250629 -1. 添加树脂数量识别,防止树脂耗尽的时候多跑一次。 \ No newline at end of file +1. 添加树脂数量识别,防止树脂耗尽的时候多跑一次。 + +### v.3.0版本:20250701 + +1. 优化战斗失败自动重试2次。 +2. 优化当有须臾树脂,脆弱树脂不显示的处理。 +3. 优化在地脉已经打过时,直接领取奖励。 \ No newline at end of file diff --git a/repo/js/AutoFontaineLeyLine/assets/model/fragile_resin_count.png b/repo/js/AutoFontaineLeyLine/assets/model/fragile_resin_count.png index 98f9d4f5e43f4ed05745c5a484eb3ea322f4120d..8a000ea84f1484731fd063d97b6a46802b24ece8 100644 GIT binary patch literal 1988 zcmcIleQXnD7(WnD1_+3MOoi+?SPU&*Vi2>X{Ueeri@B4dy z&+qwopFUH$Xx^BD2MZ7c8567sRKa(~zGo=3ik3y~g^_y2qb7oknqdEiATPdLh##R!66J)BpM<)CdZ6BwF-STP?q*LH~3gepP>p)tr)J2mn(w6x~uZ6}1_8L94TT7*skC zLPF2es%AD#FkwWB*9po&+9BnDq0pV7i9{Z4T4igYm#p4f5}V<)4u~pXYITMP%GLta znv!!SiTSg7oe|GODv1P$g9L<`P#BeWrAIYOGo#vV;>d63qtQ9P0eDL@!kQM(6{<4F zg3>T*^x@@-Drre`x~(XC00ejo_%NEJT{y|&3>l_r&P8(!^$6+VNOAxgf_)(I7C$(! zCMj}yFwjtl3#z8Yt0D*nd>9nvP!x#+v`jG~&*C!4x^WNV6mTyfWt^wHg2&~SWSVwn zbiwlhO{}xiXP+NvTS*fkM?OQG$KzsnnUZnF?RMc#kJE_@!0p9Jm&kYohM{SJ&9N;u z6nJy^_|2@gDhV=@Zq_Y&NgfwSkAO>plf?yE066ObZl?%b9;Ym0s3dZ-W+ZsnCrW~k z076$I82XPIzZTbwkS4*LGdHgX{r*Zrla)B!FstU3qQNphOLeMn;SdHUk~h1FY6uizuSG< zXFOE!UO~ge`V&o!GY;c_on1Qf;`-m}n-cdmmYy1MZo}t$pBnk`W_Lx8)%`5lzxCez zBOHxvy@ruyC$@PTKCHR?bw-RD-O3s zF5IA>Ux98qyZGI6>&`SyJKy%n=(h^0TNILR_@z3w_3qw}x>p?<-@HmK-x3~I+BX%L9)r}=x-$eT+v0IeZKJ8jj YbL*?KXSPc49~eP`Ws3s4OIJVnH*(&xI{*Lx literal 3182 zcma);`CC(08pkug&mS;9^-;*4o0WuBt*sV;8njjgt(2uI3M~|=P(;xnFyf#LxPm$$ zg4jY4EUil^dsvgOm9Pd>${Lc8+=LJkn0fEL34%D5JnucvxhMC0&iB0MJ?}Xmi=+Nd z!hfz%(&7049w&JIM*0VoB$B)RfBeN>h&xvY0mp&#^S zQJv`IO>F8WPd3>{#M~&}Rh?wpOg+p^V+rm$$v2xXHu zpPsaTTjklHmW;^WTi>bjC93-u`wLQ}H{#1LhMx}>AKK|IWKj{CGmNmpcIaNq1_cxz zlftBI_U2Rbj(K-pjhK0IO&k|Iyisx?;`5K) z*)(Tx7lD6UH%?_?jzp-Nqy0pk87C*pvULq5df8L7r^YnYW`3<)n0dW8r?#S6+q}VQ z&@N2BG7h%Swp6s-PnCpy=E9_|#=r3i#>O4IIdPw->e>nQulKYykLK!&(e}qiS*fY_ zH}lJGi)I3lHj{p7abd}3U9#D1mIaG?R3oeGdHAnOM-RHN?0ArFXWPLH%BBD>q*)R) zUT|*qMS-q5Z@&4~qC5-CEYH!m6`{Q~i`t1L%lxu+aoJ{Fw%NdztmcJDl}7fw_fh7B z;JqBWGspzztkMnZu}j2gP6`~k9jAVhHCJ=b+;VeKc6CvnX_5Wg&~j5JFEeykp}loW z784G(E?WU_wVCH_X44|7(>;s95Jwbyw{VsgW)Sc!uK84WeVko-LAK z#g*fIxzS@K@w#fsd`tR#>s7rpODnHHM>^EfB2CjzOM39PVRp1%C4Hu>$X7nOKVDUA zeBHlfHvV^c$)cSedU`L&cMC#w#@R52Cx`Ml`t!DnA+pQIdT&Rm3gf4LIj??pZsvKq zMqXhUQRrkvljUdh9WUB`{VDtV@B=$NJ`^Hu9J(iuvD=GxI?%g4FAW{;g!s|+H9ks- z6fg9;ANTd*tmYBa)g}BZ_Tm*vzAaCW_i<&DNRWQSZb;*q!1~0)<28k* zv99^45p+yBHz=J`R+~nf4TIIsGmd(@v0%Mdlh)UX6vSsyw!0ug7L7!LybRwP!C4O~?Lx-sN>ywDctHgl7#{KPqP%ESSn-c^2Zhm9zDYZ;=TC{&^|EQkVO}>`Z z?r`P)-$^y3^HsS z$hRbtkV!5*;oFoLAW!*XvLe;kU555P)ekl5hMONrj&m7U*4dz82Ll`rbZ0ODgADOa zbIuL*ZchHP`NHA;oEV+7V6L?o?I|}7lo!Sx1CRu=k2|O0xPFDiADl$$g z(vQm1!=|2Qseiw%smq!C?b_q$Jus{Hvx!3tN)QU*wQSfFVcWT#$%mCW-?vJR4Bd;H zthn^*;aPb~a6{a_z%5+ZxR@q~y)_ikj)55%cr6=}fCn3v({CU@S&N{0=sJ0@AEct zI`8PGyIdG-niG~)9Q%mRbbzs_SY-~pJsu*aGoNN(ym#Pn>6q>{S(#YcuXk|rgSJ*h z`beYw+7b?Qq=f#F8KumQ=}Zf4Ox*V{(svt|hHnrY4_fgESu+S7&PzU*xkfrZ0T=&FPIRR@_32;BXOkM;5vWxIET7uHAr# zeF<~t)12()&}SD-U>uEa)Z?Q8+s#$vCK3t-0xrVCZs}CGYhr1^vCr1@SdDS$!zQr0 Jov35^FAl2|`3nD4^1aF=|LiynsRhC0(el7 z!c`^OX17J25G7r80a=ehS5`F;8pEnqSi5pw?&%p zfNnzE?Gi|d;k~%W=VAn&=7a?}OEW%-_EHQ-(u_z8qT7S#F9KOJ<#w?p_;}tH`tlPA z+crds%49OG4Cm6#IK}vUh=ZkAmP82B>eOtIB{i$Ezz~F%WGaTO=o;=Yf|#DN{RC1v z>Vj$%X*DY!CKNC#3k-^J(T+<6U?g&HsHzsxmK{nXD|x+lB(|cR2Bcb`rKd~@hSE^8 zD+|VCskqljnaL4PWr>1Gs3Mq!gfT@^MnboBE1}=TkK%IC8$%435ZJmI)%9c{QB4IF zoJC&akF_eAtY@sbj-vbq7z8%-6D-ZTNm?K|I?A%5n->}1eA+A0^e8lf>OclI7#moZ zmG;iDKqC<`tXVeDBp43*2_(v;D6&Wc2}(2zNWe&55(qp;#&|kLLXHIjTHyf{Ms%V5 zL0w8Y;dAznmaVKyh@%)Gk&$9D)cleriv&>kM}vey?AJO#ETrh-lm zNZ!ussFD$*M}Po&c`wPvAVV@d&yqlf94YWnU?HS^07wKbOJcijssPoAqJlW23@uLJ z|ELM*N!^U-GKx8O`+PVMXfpM7C5aZSmijt890~}GPY_7f#W-b;WFU7N6bt3JGk=hl z!l&}1q=JuBrwAnHQ1}VSsRk$$`Dx`2VIG@9qqLa>M5Onql2MqYx7!(D!rC}W$$wTM zbvN-ANZ(uf*ec|Il%5Z(lmJ>Bq7F+Djx&_gi$;?|{X1VHYq#~S0vt6%XISjQ=%d)j zp@yhU)TQTCHj)@Nt|J_*jZWJ-;pk%OzS>8zD}A?4UQWmN?EmWHGiN47KH4>J4&n6< zc)bTrGj04F8YpQ!cVykb52v^~;=%Cb_mqqKe@ee!Rkfz3diC;#T>3zC&u@eKI=(#l zLb~(Hr^^nlxiPitwH-4T^q$*$dhd&C?^n04Y~HuzX*rdBc5Pp7sP&cf(A4@bPFMY5 zub5f0QNJ~4oPUYG^jXiQ@3`G7RxSSZ#B;g+Wqo~Re__Y3!OC4XDo#aSZCiExp&4%; zJ1}p{mePZ7ufF^>J-+=y+pOFk`jKy^Onhf{bKUis69?x_f43(VTl?YRSqm0Tc9$+v z)*mf1P9EtW-%>t{+d*zl2iDQSg-3h9lpkwLH!SMjy|N-iFv(}WPtEvbbL!<2&#y15 zoSWO&I~>|pB^~Mdh8p&)@7}lh^x5MTcz6Gx@1k8Yx3_Wn*<%-ezj|F&Zy7f(J#1BU z91iR(d820g@WDx*#JJBdruwV5_A=-H+_`Q3%?DkAR@P`chaotime*1000){if (x===0 & y===0){log.info(`${chaotime}秒超时退出,"${wenzi}"未找到`);}return result = {found: false };}else{ii=8;if (x !== 840){await keyPress("VK_W");}log.info(`"${wenzi}"识别中……`);} + if (Math.abs(NowTime - startTime)>chaotime*1000){if (x===0 & y===0){log.info(`${chaotime}秒超时退出,·${wenzi}·未找到`);}return result = {found: false };}else{ii=8;if(x !== 840){keyPress("w")}log.info(`·${wenzi}·识别中……`);} await sleep(100); } } @@ -128,6 +120,8 @@ var condensedResin = "assets/model/condensed_resin_count.png"; var originalResin = "assets/model/original_resin_count.png"; var fragileResin = "assets/model/fragile_resin_count.png"; + var momentResin = "assets/model/moment_resin_count.png"; + var oneResin = "assets/model/one.png"; log.debug(`DEBUG:${SHUV}.${color}.${rawTimes}`);//调试LOG if (Rewards){log.warn("结束后领励练点和提交每日!");if(settings.nh === undefined || settings.nh === "") {log.warn("好感队未配置,领奖励时不切换队伍")}} @@ -427,27 +421,38 @@ //寻找地脉溢口,文字识别不到转圈寻找,不管有没找到都执行战斗,最后领取奖励判断是否继续执行 async function VeinEntrance() { for (let i = 0;i < 2;i++) { - let JIECHU = await Textocr("接触地脉溢口",3,2,0,1188,358,200,400); + let JIECHU = await Textocr("接触地脉溢口",1.5,2,0,1188,358,200,400); if (JIECHU.found) { - await keyPress("F");await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));await keyPress("F");break; + await keyPress("F");await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));await keyPress("F");return true; } else{ - if(i == 1) - { - log.warn("没找到地脉花,尝试强制转圈寻找,不管有没找到都执行战斗..."); - dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); - await keyDown("W");await sleep(500);await keyUp("W"); - await keyDown("D");await sleep(500);await keyUp("D"); - dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); - await keyDown("S");await sleep(1000);await keyUp("S"); - dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); - await keyDown("A");await sleep(1000);await keyUp("A"); - dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); - await keyDown("W");await sleep(1500);await keyUp("W"); - dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false })); - break; - } + if(i == 1){ + let SHUN01 = await Textocr("接触地脉之花",1,0,0,1188,358,200,400); + let SHUN02 = await Textocr("地脉之花", 0.5, 0, 0, 840,225, 230, 125); + if (SHUN01.found || SHUN02.found) { + await keyPress("VK_ESCAPE"); + await sleep(1000); + await genshin.returnMainUi(); + log.info("找到地脉之花,开始领取奖励..."); + return false; + } + log.warn("没找到地脉花,尝试强制转圈寻找,不管有没找到都执行战斗..."); + await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); + await keyDown("W");await sleep(500);await keyUp("W"); + await keyDown("D");await sleep(500);await keyUp("D"); + await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); + await keyDown("S");await sleep(1000);await keyUp("S"); + await keyDown("A");await sleep(1000);await keyUp("A"); + await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); + await keyDown("W");await sleep(1500);await keyUp("W"); + await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false })); + await sleep(1000); + await keyPress("VK_ESCAPE"); + await sleep(1000); + await genshin.returnMainUi(); + return true; + } } } } @@ -504,6 +509,10 @@ { shouldExit &= (parseInt(fragileResinCount, 10) <= 1); } + if (resinTypes.includes("4")) + { + shouldExit &= (parseInt(momentResinCount, 10) <= 1); + } await click(SHU.x+550,SHU.y) log.info(` ${resinTypeMap[rewards[i]]} 获取奖励...`); @@ -533,7 +542,8 @@ async function getRemainResinStatus() { var condensedResinCount = 0; // 浓缩树脂 var originalResinCount = 0; // 原粹树脂 - var fragileResinCount = 0; // 脆弱树脂 + var fragileResinCount = 0; // 脆弱树脂 + var momentResinCount = 0; //须臾树脂 // 浓缩树脂 var condensedResinCountRa = await imageRecognition(condensedResin,0, 0, 0,1190,0,400,80); @@ -556,7 +566,7 @@ var originalResinCountRa = await imageRecognition(originalResin,0, 0, 0,1555,0,75,80); if (originalResinCountRa.found) { // await moveMouseTo(originalResinCountRa.x,originalResinCountRa.y); - let countArea = await Textocr("",1, 1, 2,originalResinCountRa.x+originalResinCountRa.w,originalResinCountRa.y,originalResinCountRa.w*3,originalResinCountRa.h);// + let countArea = await Textocr("",1, 0, 2,originalResinCountRa.x+originalResinCountRa.w,originalResinCountRa.y,originalResinCountRa.w*3,originalResinCountRa.h);// if (countArea.found){ log.info("原粹树脂识别数量结果:"+ countArea.text); let match = countArea.text.match(/(\d+)\s*[/1]\s*(2|20|200)/); @@ -578,27 +588,52 @@ log.info("未检测到原粹树脂图标"); } - - var fragileResinCountRa = await imageRecognition(fragileResin,0, 0, 1,1190,0,400,80); - if (fragileResinCountRa.found) { - // await moveMouseTo(fragileResinCountRa.x,fragileResinCountRa.y); - let countArea = await Textocr("",1, 1, 2,fragileResinCountRa.x+fragileResinCountRa.w,fragileResinCountRa.y,fragileResinCountRa.w*2,fragileResinCountRa.h);// + var momentResinCountRa = await imageRecognition(momentResin,0.1, 0, 1,1170,0,350,100); + if (momentResinCountRa.found) { + // await moveMouseTo(momentResinCountRa.x,momentResinCountRa.y); + let countArea = await Textocr("",0.5, 0, 2,momentResinCountRa.x+momentResinCountRa.w+15,momentResinCountRa.y-15,momentResinCountRa.w+50,momentResinCountRa.h+25);// if (countArea.found){ - // log.info("脆弱树脂识别数量结果:"+ countArea.text); - fragileResinCount = countArea.text + //log.info("须臾树脂识别数量结果:"+ countArea.text); + momentResinCount = countArea.text } - else - { - log.info("脆弱树脂识别数量结果::无"); - + else{ + var oneRa = await imageRecognition(oneResin,0.1, 0, 1,momentResinCountRa.x+momentResinCountRa.w+15,momentResinCountRa.y-15,momentResinCountRa.w+50,momentResinCountRa.h+25); + if (oneRa.found){ + momentResinCount = "1"; + }else{ + log.info("须臾树脂强制为 1 "); + momentResinCount = "1"; + } + } + log.info("脆弱树脂强制为 1 ");//须臾树脂出现,脆弱树脂不显示,强制设置为1,情况非常少,大不了打多一次 + fragileResinCount = "1"; + }else + { + var fragileResinCountRa = await imageRecognition(fragileResin,0.1, 0, 1,1170,0,350,100); + if (fragileResinCountRa.found) { + // await moveMouseTo(fragileResinCountRa.x,fragileResinCountRa.y); + let countArea = await Textocr("",0.5, 0, 2,fragileResinCountRa.x+fragileResinCountRa.w+15,fragileResinCountRa.y-15,fragileResinCountRa.w+50,fragileResinCountRa.h+25);// + if (countArea.found){ + // log.info("脆弱树脂识别数量结果:"+ countArea.text); + fragileResinCount = countArea.text + } + else{ + var oneRa = await imageRecognition(oneResin,0.1, 0, 1,fragileResinCountRa.x+fragileResinCountRa.w+15,fragileResinCountRa.y-15,fragileResinCountRa.w+50,fragileResinCountRa.h+25); + if (oneRa.found){ + fragileResinCount = "1"; + }else{ + fragileResinCount = "1"; + log.info("脆弱树脂识别强制为 1 ");//有图标说明至少为1 + } + } + } + else { + log.info("未检测到脆弱树脂图标"); } - - } else { - log.info("未检测到脆弱树脂图标"); } - log.info("树脂状态:浓缩{0} 原粹{1} 脆弱{2} ", condensedResinCount, originalResinCount, fragileResinCount) - return {condensedResinCount,originalResinCount,fragileResinCount} + log.info("树脂状态:浓缩{0} 原粹{1} 脆弱{2} 须臾{3}", condensedResinCount, originalResinCount, fragileResinCount, momentResinCount) + return {condensedResinCount,originalResinCount,fragileResinCount,momentResinCountRa} } async function isOnRewardPage() { @@ -698,7 +733,7 @@ noTextCount++; log.info(`检测到可能离开战斗区域,当前计数: ${noTextCount}`); - if (noTextCount >= 10) { + if (noTextCount >= 15) { log.warn("已离开战斗区域"); resolve(false); return; @@ -724,6 +759,8 @@ }); } + //重新战斗次数 + var retryCount = 0; var executedCount = 0; async function Veinfligt() { // 定义路线常量 @@ -805,25 +842,34 @@ } } - // 寻找地脉溢口,文字识别不到转圈寻找,不管有没找到都执行战斗,最后领取奖励判断是否继续执行 + // 寻找地脉溢口,找到地脉花就领奖,没有找到就直接战斗,再尝试领奖 + if (await VeinEntrance()){ + await sleep(1000); + await dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false})); await keyPress("F"); + log.warn("开始战斗..."); + + if (!Fightquick){ + await dispatcher.runTask(new SoloTask("AutoFight")); //固定执行两次战斗,执行自动战斗,配置器中的设置建议填你的队伍打一次大概得时间 + await sleep(1000); + await dispatcher.runTask(new SoloTask("AutoFight")); + }else + { + if(!await autoFight(Fighttimeout)){ + if (retryCount < 2) { + log.warn("战斗失败,重新重试..."); + i = i-2; + retryCount ++; + continue; + } + //退出执行 + SHUOVER=2; + return false; + } + } + } + shouldContinueChecking = true; checkRewardPage();// 执行自动战斗并同步检测领奖页面 - await VeinEntrance(); - await sleep(1000); - await dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false})); await keyPress("F"); - log.warn("开始战斗..."); - - if (!Fightquick){ - await dispatcher.runTask(new SoloTask("AutoFight")); //固定执行两次战斗,执行自动战斗,配置器中的设置建议填你的队伍打一次大概得时间 - await sleep(2000); - await dispatcher.runTask(new SoloTask("AutoFight")); - }else - { - if(!await autoFight(Fighttimeout)){ - log.warn("战斗失败,尝试寻找地脉花入口"); - } - } - //执行到地脉花地点的寻路脚本 log.info(`开始执行寻找地脉花奖励:${jsonFile2}`); await dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false})); diff --git a/repo/js/AutoFontaineLeyLine/manifest.json b/repo/js/AutoFontaineLeyLine/manifest.json index f42f7c07..23fb91cc 100644 --- a/repo/js/AutoFontaineLeyLine/manifest.json +++ b/repo/js/AutoFontaineLeyLine/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "全自动枫丹地脉花", - "version": "2.9", + "version": "3.0", "bgi_version": "0.44.8", "description": "枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800", "tags":["地脉花"],