From 2554a8fbcfff4f1f170024f0ead7efe476b0a1a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=91=B1=E5=91=B1z?=
<131586533+jidingcai@users.noreply.github.com>
Date: Thu, 3 Jul 2025 20:48:34 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E3=80=90=E6=96=99=E7=90=86?=
=?UTF-8?q?=E5=88=B6=E4=BD=9C=E5=8F=8A=E9=A3=9F=E6=9D=90=E5=8A=A0=E5=B7=A5?=
=?UTF-8?q?=E3=80=91js=E8=84=9A=E6=9C=AC=20(#1265)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* 新增标签
---
repo/js/料理制作及食材加工/assets/Cooking.png | Bin 0 -> 3733 bytes
.../料理制作及食材加工/assets/E_Dialogue.png | Bin 0 -> 547 bytes
.../料理制作及食材加工/assets/F_Dialogue.png | Bin 0 -> 515 bytes
.../料理制作及食材加工/assets/pageScroll.json | 22 +
.../assets/pageScroll2.json | 22 +
.../料理制作及食材加工/assets/滚轮下翻.json | 3 +
.../assets/璃月杂货商东升旁灶台.json | 29 +
repo/js/料理制作及食材加工/main.js | 601 +++++++++++-------
repo/js/料理制作及食材加工/manifest.json | 29 +-
repo/js/料理制作及食材加工/readme.md | 55 ++
10 files changed, 533 insertions(+), 228 deletions(-)
create mode 100644 repo/js/料理制作及食材加工/assets/Cooking.png
create mode 100644 repo/js/料理制作及食材加工/assets/E_Dialogue.png
create mode 100644 repo/js/料理制作及食材加工/assets/F_Dialogue.png
create mode 100644 repo/js/料理制作及食材加工/assets/pageScroll.json
create mode 100644 repo/js/料理制作及食材加工/assets/pageScroll2.json
create mode 100644 repo/js/料理制作及食材加工/assets/滚轮下翻.json
create mode 100644 repo/js/料理制作及食材加工/assets/璃月杂货商东升旁灶台.json
create mode 100644 repo/js/料理制作及食材加工/readme.md
diff --git a/repo/js/料理制作及食材加工/assets/Cooking.png b/repo/js/料理制作及食材加工/assets/Cooking.png
new file mode 100644
index 0000000000000000000000000000000000000000..94bf83d15dd289fff097155a9e0081b3deb4b792
GIT binary patch
literal 3733
zcmV;G4r=j
KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA
z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e
zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5
z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7}
zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf
zVxhe-O!X
z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4
ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR
z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N
z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd
zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS=
zB9o|3v?Y2H`NVi)In3rTB8+ej^>
zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv
zrJpiFnV_ms&8eQ$2WpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^
zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN
zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS
zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^#
z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q
z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6
zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a
zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT
zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8
zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|=
zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^=
zgB=w+-tUy`ytONMS8KgRef4hA?t0j
zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3?
zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7
zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W
z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU
zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R
za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)}
z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C
z1Hwr}K~#9!+*M6XTvZf4=id9~F>g|a1_ldE(NZ=2QKT&mR7g{6TcJjbiPeQ0S0-xW
z!c-GY?9PRaiHQrNNj0((ccKv@q>wi0pTVFIOD!U$6bR*i2*bSh?mfrFE3eb(m=I;<
zx4Q4%?|k>>obQ~6dm4@#Fu=@=#Ee9YNJNIn7$PzZfB-_Elu}6n06+kU0BcJCrC9?5
z^Bn~#!DvdmnOM}RC{Gl{3zd}Gn8l^k)bz~qO4=!~g%m_|M+Sfa6l-E+W+Wm+a$U}7
zQ@`(tmZl>$kMFA7T46^buIJqxpXeX_{fEx8mwp+DT2ctXa2K+;qKYVZ8W=JepH8$q
z^Zwg!G#=Q$<$;84N0gGb9VtzeJht=E{d=odR#twyIxG+n5dfH(nPp*d($m`aiHSVl
z)YaB}_`%6!`4%Ar+zTN@QM|CWrh4$|wHsr%06}Zx8N-I;vn?-d-&QGvaJBXfes=oQ
z_H7R#BIE-iI!?6e!DQR_-7zPcEHB$zy)#)>21Ggeu`7jAm8ZeL&jz});|
z^U*^^@xuHnhseSc_p#F8Qzvj_k9b9Qba60v4x=fXrzOideO6#3@d#mmDZ
zH;gd^>}LGtV+R}RYMTx>p8m4!kYE*1y{oI4yqw&T6YHx^Zfkck6k^>%V{NnyLv9&
znw%~!iZddt@o>$TkhRE`1mL;FrNNb
literal 0
HcmV?d00001
diff --git a/repo/js/料理制作及食材加工/assets/E_Dialogue.png b/repo/js/料理制作及食材加工/assets/E_Dialogue.png
new file mode 100644
index 0000000000000000000000000000000000000000..9114ff5bf4a3e232f971a679f78dd28e564ee5c1
GIT binary patch
literal 547
zcmV+;0^I$HP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0k}y-K~z{r?Up;L
z!ax*;|M-5OC&Ksto$^%|SaMkpH5XcWOe
z8lhUP;&?oAok%25uh$U@g}8peUbkAUFc=KbXfzOy$Hg6O$Oa~p2`ZHew%aY&*=!b_
zP6v@lgzH!K`#ro~FPu)Nh-mY*EC>VwhLbbwI$-(?#9}d&%VoaQugJ2DVzJ0G#R$^|
zK2azX&}y|vg~;?4csw2?lS!o0>9>(erQmkE#gm`;S{hQZv*7<4xLhu{-|s@{W7@#=
zdgV=Lxm-St#bSZ!bjs6^eKvxe1;gPG&1Ms)(}`{-41JvVm`5
l*8$src)=
literal 0
HcmV?d00001
diff --git a/repo/js/料理制作及食材加工/assets/F_Dialogue.png b/repo/js/料理制作及食材加工/assets/F_Dialogue.png
new file mode 100644
index 0000000000000000000000000000000000000000..314a85f134cbc0dd620dea029b010905c6415165
GIT binary patch
literal 515
zcmV+e0{s1nP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0hmcdK~z{r?UucY
z!ax*8_nG_y!6GkUsR)W-uOLPcyMQlXXKN>^f>w5dT8JnqM6eOGuuw!yAt-M0$%KpS
zZXh$p6<5{+A0gb_$sxHU^MNN~TAz5T0OKw2_XSMTgkcz1E|*v=7TmDww%aXr^Wh2{
z4hM8P9Tba2WV2ara=9F;)hafd4Xxk~SKxFyVKSMZR4T#e^9d!HOhVUnTEQKm88{w~
zXti4K`~CI}*fAcDLsivpX*3$B)oQ3zDrmRc)a{P&5O%v=1cSk=Kt7+hpU&4X(cNx`
z*=&aSd`_M22n+OjJ%mD`t3aVppo$aAvh3j%;UNOI@VWx2RLUN-pXvAeSg+UA#mAEX
zOC%COEEaQw4d-Ampe{b11tdvAI-Pc;TrOiY8c`P?p$zVJlJ2IV4vET2hi_hy0
z;r|v01Okv{nJV|;Ngx~!Ls1l}+=nNDXfz5<)2MPE!UF6I$38xZL<04CU3kO6Ls($7
zTA|r&VmKV$wB_OxB$fb_r!DV!r%Y^002ovPDHLk
FV1jS-*o^=H
literal 0
HcmV?d00001
diff --git a/repo/js/料理制作及食材加工/assets/pageScroll.json b/repo/js/料理制作及食材加工/assets/pageScroll.json
new file mode 100644
index 00000000..ae044778
--- /dev/null
+++ b/repo/js/料理制作及食材加工/assets/pageScroll.json
@@ -0,0 +1,22 @@
+{
+ "macroEvents": [
+ {"type": 2, "mouseX": 1200, "mouseY": 901, "time": 0},
+ {"type": 2, "mouseX": 1200, "mouseY": 801, "time": 50},
+ {"type": 2, "mouseX": 1200, "mouseY": 701, "time": 100},
+ {"type": 2, "mouseX": 1200, "mouseY": 601, "time": 150},
+ {"type": 2, "mouseX": 1200, "mouseY": 501, "time": 200},
+ {"type": 2, "mouseX": 1200, "mouseY": 401, "time": 250},
+ {"type": 2, "mouseX": 1200, "mouseY": 301, "time": 300},
+ {"type": 2, "mouseX": 1200, "mouseY": 201, "time": 350},
+ {"type": 2, "mouseX": 1200, "mouseY": 200, "mouseButton": "Left", "time": 400}
+ ],
+ "info": {
+ "name": "",
+ "description": "",
+ "x": 0,
+ "y": 0,
+ "width": 1920,
+ "height": 1080,
+ "recordDpi": 1
+ }
+}
diff --git a/repo/js/料理制作及食材加工/assets/pageScroll2.json b/repo/js/料理制作及食材加工/assets/pageScroll2.json
new file mode 100644
index 00000000..8ac7db36
--- /dev/null
+++ b/repo/js/料理制作及食材加工/assets/pageScroll2.json
@@ -0,0 +1,22 @@
+{
+ "macroEvents": [
+ {"type": 2, "mouseX": 1200, "mouseY": 901, "time": 0},
+ {"type": 2, "mouseX": 1200, "mouseY": 801, "time": 50},
+ {"type": 2, "mouseX": 1200, "mouseY": 701, "time": 100},
+ {"type": 2, "mouseX": 1200, "mouseY": 601, "time": 150},
+ {"type": 2, "mouseX": 1200, "mouseY": 501, "time": 200},
+ {"type": 2, "mouseX": 1200, "mouseY": 401, "time": 250},
+ {"type": 2, "mouseX": 1200, "mouseY": 301, "time": 300},
+ {"type": 2, "mouseX": 1200, "mouseY": 205, "time": 350},
+ {"type": 2, "mouseX": 1200, "mouseY": 204, "mouseButton": "Left", "time": 400}
+ ],
+ "info": {
+ "name": "",
+ "description": "",
+ "x": 0,
+ "y": 0,
+ "width": 1920,
+ "height": 1080,
+ "recordDpi": 1
+ }
+}
diff --git a/repo/js/料理制作及食材加工/assets/滚轮下翻.json b/repo/js/料理制作及食材加工/assets/滚轮下翻.json
new file mode 100644
index 00000000..cd0e99ac
--- /dev/null
+++ b/repo/js/料理制作及食材加工/assets/滚轮下翻.json
@@ -0,0 +1,3 @@
+{"macroEvents":[{"type":6,"mouseX":0,"mouseY":-120,"time":0},
+{"type":6,"mouseX":0,"mouseY":0,"time":100}],
+"info":{"name":"","description":"","x":0,"y":0,"width":1920,"height":1080,"recordDpi":1}}
\ No newline at end of file
diff --git a/repo/js/料理制作及食材加工/assets/璃月杂货商东升旁灶台.json b/repo/js/料理制作及食材加工/assets/璃月杂货商东升旁灶台.json
new file mode 100644
index 00000000..50e424da
--- /dev/null
+++ b/repo/js/料理制作及食材加工/assets/璃月杂货商东升旁灶台.json
@@ -0,0 +1,29 @@
+{
+ "info": {
+ "name": "璃月杂货商东升旁灶台",
+ "type": "collect",
+ "author": "吉吉喵",
+ "version": "1.0",
+ "description": "",
+ "bgi_version": "0.42.3"
+ },
+ "positions": [
+ {
+ "id": 1,
+ "x": 267.92,
+ "y": -665.01,
+ "action": "force_tp",
+ "move_mode": "walk",
+ "type": "teleport"
+ },
+ {
+ "id": 2,
+ "x": 255.099609375,
+ "y": -680.1826171875,
+ "type": "target",
+ "move_mode": "walk",
+ "action": "",
+ "action_params": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/repo/js/料理制作及食材加工/main.js b/repo/js/料理制作及食材加工/main.js
index 409181f3..a942f44e 100644
--- a/repo/js/料理制作及食材加工/main.js
+++ b/repo/js/料理制作及食材加工/main.js
@@ -16,231 +16,400 @@
let sausageNum = settings.sausageNum ?? 0;
await sleep(1000);
- await pathingScript.runFile("assets/前往蒙德灶台.json");
- keyPress("F");
- await sleep(1000);
+ await pathingScript.runFile("assets/璃月杂货商东升旁灶台.json");
- //制作料理
- if (foodName) {
- click(910, 51);//选择料理
+
+ /**
+ F交互区
+ **/
+ // 定义一个函数用于模拟按键操作
+ async function simulateKeyOperations(key, duration) {
+ keyDown(key);
+ await sleep(duration);
+ keyUp(key);
+ await sleep(500); // 释放按键后等待 500 毫秒
+ }
+
+ // 识别 F 图标
+ async function recognizeFIcon() {
+ const fDialogueRo = RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/F_Dialogue.png"),
+ 1101,
+ 400,
+ 36,
+ 400
+ );
+
+ let ra = captureGameRegion();
+ let fRes = ra.find(fDialogueRo);
+
+ if (!fRes.isExist()) {
+ let f_attempts = 0; // 初始化尝试次数
+ while (f_attempts < 3) { // 最多尝试 3 次
+ f_attempts++;
+ log.info(`当前尝试次数:${f_attempts}`);
+
+ if (f_attempts === 1 || f_attempts === 2) {
+ // 第一次未找到 F 图标
+ await simulateKeyOperations("S", 200); // 后退 200 毫秒
+ log.info("执行后退操作");
+ await sleep(200);
+ await simulateKeyOperations("W", 600); // 前进 600 毫秒
+ log.info("执行前进操作");
+ } else if (f_attempts === 3) {
+ // 第二次未找到 F 图标
+ log.info("重新加载路径文件");
+ const filePath = `assets/璃月杂货商东升旁灶台.json`;
+ log.info(`加载路径文件:${filePath}`);
+ await pathingScript.runFile(filePath);
+ await sleep(500);
+ }
+
+ // 重新获取游戏区域截图
+ ra = captureGameRegion();
+ fRes = ra.find(fDialogueRo);
+
+ // 打印识别结果
+ log.info(`识别结果:${fRes.isExist()}`);
+
+ // 如果识别成功,立即退出循环
+ if (fRes.isExist()) {
+ log.info("识别成功,退出循环");
+ break;
+ }
+
+ await sleep(500);
+ }
+ }
+
+ // 如果尝试次数已达上限,返回 null
+ if (!fRes.isExist()) {
+ log.error("尝试次数已达上限");
+ return null;
+ }
+
+ return fRes;
+ }
+
+ // 识别 Cooking 图标
+ async function recognizeCookingIcon(centerYF) {
+ const cookingRo = RecognitionObject.TemplateMatch(
+ file.ReadImageMatSync("assets/Cooking.png"),
+ 1176,
+ centerYF - 18, // 以 F 图标的中心,向上偏移 18 像素
+ 27, // 宽度范围
+ 36 // 高度范围
+ );
+
+ let ra = captureGameRegion();
+ let cookingRes = ra.find(cookingRo);
+
+ if (cookingRes.isExist()) {
+ log.info("找到 灶台 图标");
+ return cookingRes;
+ } else {
+ log.info("未找到 灶台 图标");
+ return null;
+ }
+ }
+
+ // 主逻辑函数
+ async function main() {
+ // 识别 F 图标
+ let fRes = await recognizeFIcon();
+ if (!fRes) {
+ log.error("未能识别 F 图标,退出任务");
+ return;
+ }
+
+ // 获取 F 图标的中心点 Y 坐标
+ let centerYF = Math.round(fRes.y + fRes.height / 2);
+
+ const maxScrollAttempts = 5; // 最大滚轮操作次数限制
+ let scrollAttempts = 0;
+
+ while (scrollAttempts < maxScrollAttempts) {
+ // 识别 灶台 图标
+ let cookingRes = await recognizeCookingIcon(centerYF);
+ if (cookingRes) {
+ // log.info("找到 灶台 图标");
+ return cookingRes; // 识别成功,返回结果
+ }
+
+ // 如果未找到 Cooking 图标,执行滚轮操作
+ log.info(`未找到 Cooking 图标,执行滚轮操作,当前尝试次数:${scrollAttempts + 1}`);
+ await keyMouseScript.runFile(`assets/滚轮下翻.json`);
+ await sleep(1000);
+
+ // 重新识别 F 图标,获取最新的中心点
+ fRes = await recognizeFIcon();
+ if (!fRes) {
+ log.error("滚轮操作后,未能重新识别 F 图标,退出任务");
+ return;
+ }
+
+ centerYF = Math.round(fRes.y + fRes.height / 2); // 更新 F 图标的中心点 Y 坐标
+
+ // 增加尝试次数
+ scrollAttempts++;
+ }
+
+ // 如果超过最大滚轮操作次数,返回 null
+ log.error(`滚轮操作次数已达上限 ${maxScrollAttempts} 次,未能找到 Cooking 图标`);
+ return null;
+ }
+
+
+ try {
+ // 识别 Cooking 图标
+ const cookingRes = await main();
+ if (!cookingRes) {
+ log.error("未能识别 灶台 图标,退出任务");
+ return;
+ }
+
+ // 按下 F 键
+ keyPress("F");
await sleep(1000);
- click(170, 1020);//筛选
+
+ //制作料理
+ if (foodName) {
+ click(910, 51);//选择料理
+ await sleep(1000);
+ click(170, 1020);//筛选
+ await sleep(1000);
+ click(195, 1020);//重置
+ await sleep(1000);
+ click(110, 110);//输入名字
+ await sleep(1000);
+ inputText(`${foodName}`);
+ await sleep(500);
+ click(490, 1020);//确认筛选
+ await sleep(1000);
+ click(180, 180);//选择第一个食物
+ await sleep(2000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(795, 1015);//自动烹饪
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of foodNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(4000);//等待烹饪
+ click(960, 1045); //点击任意处
+ await sleep(1000);
+ click(960, 1045); //点击任意处
+ await sleep(1000);
+ };
+
+ //食材加工
+
+ click(1010, 50); //选择食材加工
await sleep(1000);
- click(195, 1020);//重置
+ click(255, 1020); //全部领取
await sleep(1000);
- click(110, 110);//输入名字
+ click(960, 1045); //点击任意处
await sleep(1000);
- inputText(`${foodName}`);
- await sleep(500);
- click(490, 1020);//确认筛选
+ click(960, 1045); //点击任意处
await sleep(1000);
- click(180, 180);//选择第一个食物
+ click(960, 1045); //点击任意处
await sleep(2000);
- click(1690, 1015);//制作
+
+
+ if (flourNum) {
+ click(175, 190);//flour
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of flourNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (creamNum) {
+ click(770, 190);//cream
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of creamNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (smokedPoultryNum) {
+ click(920, 190);//smokedPoultry
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of smokedPoultryNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (butterNum) {
+ click(1060, 190);//butter
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of butterNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (hamNum) {
+ click(1210, 190);//ham
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of hamNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (sugarNum) {
+ click(175, 375);//sugar
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of sugarNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (spiceNum) {
+ click(325, 375);//spice
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of spiceNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (crabRoeNum) {
+ click(475, 375);//crabRoe
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of crabRoeNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (jamNum) {
+ click(620, 375);//jam
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of jamNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (cheeseNum) {
+ click(770, 375);//cheese
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of cheeseNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (baconNum) {
+ click(915, 375);//bacon
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of baconNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+
+ if (sausageNum) {
+ click(1060, 375);//sausage
+ await sleep(1000);
+ click(1690, 1015);//制作
+ await sleep(1000);
+ click(965, 455);//输入数量
+ await sleep(1000);
+ for (const char of sausageNum) {
+ keyPress(char);
+ await sleep(500);
+ }
+ click(1190, 755);//确认
+ await sleep(1000);
+ };
+ await genshin.returnMainUi();
await sleep(1000);
- click(795, 1015);//自动烹饪
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of foodNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(4000);//等待烹饪
- keyPress("ESCAPE");
+ keyDown("S");
await sleep(1500);
- keyPress("ESCAPE");
- await sleep(1500);
- };
+ keyUp("S");
+ await sleep(1000);
- //食材加工
+ } catch (error) {
+ log.error(`执行按键或鼠标操作时发生错误:${error.message}`);
+ }
- click(1010, 50);//选择食材加工
- await sleep(1000);
- click(255, 1020);//全部领取
- await sleep(1000);
- keyPress("ESCAPE");//点击任意处
- await sleep(2000);
-
- if (flourNum) {
- click(175, 190);//flour
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of flourNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (creamNum) {
- click(770, 190);//cream
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of creamNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (smokedPoultryNum) {
- click(920, 190);//smokedPoultry
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of smokedPoultryNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (butterNum) {
- click(1060, 190);//butter
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of butterNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (hamNum) {
- click(1210, 190);//ham
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of hamNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (sugarNum) {
- click(175, 375);//sugar
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of sugarNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (spiceNum) {
- click(325, 375);//spice
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of spiceNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (crabRoeNum) {
- click(475, 375);//crabRoe
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of crabRoeNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (jamNum) {
- click(620, 375);//jam
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of jamNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (cheeseNum) {
- click(770, 375);//cheese
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of cheeseNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (baconNum) {
- click(915, 375);//bacon
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of baconNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
-
- if (sausageNum) {
- click(1060, 375);//sausage
- await sleep(1000);
- click(1690, 1015);//制作
- await sleep(1000);
- click(965, 455);//输入数量
- await sleep(1000);
- for (const char of sausageNum) {
- keyPress(char);
- await sleep(500);
- }
- click(1190, 755);//确认
- await sleep(1000);
- };
- await genshin.returnMainUi();
+ // 发送通知
+ notification.send("烹饪脚本结束");
})();
diff --git a/repo/js/料理制作及食材加工/manifest.json b/repo/js/料理制作及食材加工/manifest.json
index 4612b296..4ce6a470 100644
--- a/repo/js/料理制作及食材加工/manifest.json
+++ b/repo/js/料理制作及食材加工/manifest.json
@@ -1,14 +1,19 @@
{
- "manifest_version": 1,
- "name": "料理制作及食材加工",
- "version": "1.2",
- "description": "自动烹饪料理以及加工食材,需要0.44.6及以上版本",
- "authors": [
- {
- "name": "柒叶子",
- "link": "https://github.com/511760049"
- }
- ],
- "settings_ui": "settings.json",
- "main": "main.js"
+ "manifest_version": 1,
+ "name": "料理制作及食材加工",
+ "version": "1.3",
+ "bgi_version": "0.44.6",
+ "tags": ["食材加工", "料理制作"],
+ "description": "自动烹饪料理以及加工食材,需要0.44.6及以上版本",
+ "authors": [
+ {
+ "name": "柒叶子",
+ "link": "https://github.com/511760049"
+ },
+ {
+ "name": "呱呱z"
+ }
+ ],
+ "settings_ui": "settings.json",
+ "main": "main.js"
}
diff --git a/repo/js/料理制作及食材加工/readme.md b/repo/js/料理制作及食材加工/readme.md
new file mode 100644
index 00000000..b5113afa
--- /dev/null
+++ b/repo/js/料理制作及食材加工/readme.md
@@ -0,0 +1,55 @@
+# 料理制作及食材加工脚本
+
+本脚本用于料理的制作和食材加工。可根据配置自动选择料理和各类食材进行批量制作。
+
+## 功能简介
+
+- 自动前往指定灶台
+- 自动筛选并制作指定料理,可自定义数量
+- 自动领取并加工多种食材(如面粉、奶油、火腿等),每种食材数量可单独配置
+- 制作完成后自动返回主界面并发送通知
+
+## 使用方法
+
+1. 通过 BetterGI 脚本设置界面填写各项参数(料理名、数量、各类食材数量等)
+
+## 参数说明
+
+| 参数名 | 说明 | 默认值 |
+| ---------------- | -------------- | ------ |
+| foodName | 料理名称 | 0 |
+| foodNum | 料理制作数量 | 1 |
+| flourNum | 面粉加工数量 | 0 |
+| creamNum | 奶油加工数量 | 0 |
+| smokedPoultryNum | 熏禽肉加工数量 | 0 |
+| butterNum | 黄油加工数量 | 0 |
+| hamNum | 火腿加工数量 | 0 |
+| sugarNum | 糖加工数量 | 0 |
+| spiceNum | 香辛料加工数量 | 0 |
+| crabRoeNum | 蟹黄加工数量 | 0 |
+| jamNum | 果酱加工数量 | 0 |
+| cheeseNum | 奶酪加工数量 | 0 |
+| baconNum | 培根加工数量 | 0 |
+| sausageNum | 香肠加工数量 | 0 |
+
+## 注意事项
+
+- 请确保游戏窗口分辨率为 16:9,否则可能点击异常
+- 脚本运行期间请勿手动干预,以免流程异常
+- 由于是模拟点击,请保证材料的充足,避免造成加工错误的问题
+
+## 结束
+
+脚本执行完毕后会自动返回主界面并发送“烹饪脚本结束”通知。
+
+---
+
+如有问题或建议,欢迎反馈交流!
+
+## 更新日志
+
+### 1.3(20250709)
+
+- 优化灶台路径
+- 优化灶台交互
+- 优化未进入烹饪界面导致的一系列问题