Skip to content

Commit a06d15e

Browse files
author
江紫烟owo
authored
repo/js/YNF-AutoEat: 脚本更新 (#1941)
* 脚本更新 修复了一些bug,添加了一些改动 * YNF-AutoEat又双更新 针对建议进行了进一步的修改
1 parent 8c87e9b commit a06d15e

File tree

4 files changed

+96
-55
lines changed

4 files changed

+96
-55
lines changed

repo/js/YNF-AutoEat/README.md

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,43 @@
11
# 伊涅芙の自助餐
22

3+
34
## 食用方法:
45
1. 将脚本添加至调度器。
56
2. 右键点击脚本以修改 JS 自定义配置。
6-
3. 选择队伍名称、食物种类数量和运行次数之后点击运行即可
7+
1. 队伍名称:包含伊涅芙的队伍,必填
8+
2. 伊涅芙今天吃什么:需要投喂的食材,不选择的情况下默认是苹果
9+
3. 食材数量:单次投喂的数量(吃多少个再跳楼),默认99个
10+
4. 运行次数:想嘎伊涅芙多少次,默认1次
11+
3. 完成上述设置后点击运行即可
712

813

914
## 注意事项:
1015
1. 队伍名称有一定长度并且清晰,避免系统识别失败
1116
2. 使用前确保食材充足
1217

1318

19+
## 作者留言:
20+
欢迎使用该脚本,毕竟使用的过程也是帮作者发现bug的过程。
21+
那么当你在使用时发现有bug存在,请反馈到频道并艾特作者!
22+
当然,作者会保证尽力去修但是不一定能修好。(书到用时方恨少了属于是)
23+
希望发现问题积极反馈,来频道尽情蹂虐作者吧!
24+
~~(PS:许愿也行,需求尽管提,没回就是做不到,欸嘿)~~
25+
26+
1427
## 致谢
1528
1. 感谢古又老师的悉心指导,没有古又老师就没有现在的~~伊涅芙灭绝计划~~调味品批量生产计划
1629
2. 感谢氨气老师和秋秋云老师,在审核时提供了宝贵的意见和建议。
17-
18-
19-
##作者留言:
20-
欢迎使用该脚本,毕竟使用的过程也是帮作者发现bug的过程
21-
那么当你在使用时发现有bug存在,请反馈到频道并艾特作者
22-
当然,作者会保证尽力去修但是不一定能修好(书到用时方恨少了属于是)
23-
希望发现问题积极反馈,来频道尽情蹂虐作者吧!
2430
---------------------------------------------------------------------------------------------------------------------------------
2531
## 更新日志
26-
### 0.1(2025.09.15)
27-
酱酱!“伊涅芙の自助餐(YNF-AutoEat) V0.1”闪亮登场!你还在为徒手喂料理而痛苦吗?你的苹果又没处用了吗?你做菜时的调味品又不够用了吗?快来用伊涅芙の自助餐,包你满意!
32+
### 1.1(2025.09.17)
33+
1. 修复了前往神像切换队伍后无法正常进行后续动作的bug
34+
2. 修复了队伍中没有伊涅芙时会在秘境外吃食物的bug
35+
3. 修复了不填写食物时脚本不会及时报错停止的bug
36+
4. 多处位置添加了判断逻辑,防止假值穿透等风险
37+
5. 将代码结构进行重构,调整了运行顺序,使其更符合逻辑
38+
6. 蹂虐了古又老师的伊涅芙一顿并让她吃了个饱
39+
~~7. 我勒个豆版本号怎么写错了,正式版还搁这0开头呢!快改!~~
40+
41+
### 1.0(2025.09.15)
42+
酱酱!“伊涅芙の自助餐(YNF-AutoEat) V1.0”闪亮登场!你还在为徒手喂料理而痛苦吗?你的苹果又没处用了吗?你做菜时的调味品又不够用了吗?快来用伊涅芙の自助餐,包你满意!
2843

repo/js/YNF-AutoEat/main.js

Lines changed: 68 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -220,35 +220,47 @@
220220
}
221221
}
222222

223+
// 新增:判断队内角色函数(新知识+1)
224+
async function includes(characterName) {
225+
var avatars = getAvatars();
226+
for (let i = 0; i < avatars.length; i++) {
227+
if (avatars[i] === characterName) { return true; }
228+
}
229+
return false;
230+
}
231+
223232
//切换队伍
224233
async function switchPartyIfNeeded(partyName) {
225-
if (!partyName) {
226-
await genshin.returnMainUi();
227-
return;
228-
}
229234
try {
230-
log.info("正在尝试切换至" + partyName);
231235
if (!await genshin.switchParty(partyName)) {
232236
log.info("切换队伍失败,前往七天神像重试");
233237
await genshin.tpToStatueOfTheSeven();
234-
await genshin.switchParty(partyName);
238+
return await genshin.switchParty(partyName);
235239
}
240+
return true;
236241
} catch {
237242
log.error("队伍切换失败,可能处于联机模式或其他不可切换状态");
238243
notification.error(`队伍切换失败,可能处于联机模式或其他不可切换状态`);
239244
await genshin.returnMainUi();
245+
return false;
240246
}
241247
}
242248

243249
// 传送并进入副本
244250
async function fuben() {
245-
await genshin.tp(-887.193359375, 1679.44287109375);
246-
247-
await switchPartyIfNeeded(party);
248-
249-
let ifynf = await textOCR("伊涅芙", 3, 0, 0, 1670, 200, 120, 400);
250-
if (!ifynf.found) { log.error("未识别到伊涅芙,请在设置中输入包含伊涅芙的队伍!"); return; }
251+
// 先判断一次,队伍里有伊涅芙就直接开始运行,没有的话就切换指定队伍
252+
let ifynf = await includes("伊涅芙");
253+
let ifswitch;
254+
if (!ifynf) {
255+
ifswitch = await switchPartyIfNeeded(party);
256+
if (!ifswitch) { log.error("未识别到指定队伍,请检查队伍名是否正确!"); return false; }//找不到指定队伍就直接报错停止
257+
258+
ifynf = await includes("伊涅芙");
259+
if (!ifynf) { log.error("未识别到伊涅芙,请在设置中输入包含伊涅芙的队伍!"); return false; }//切换到指定队伍后再进行判定
260+
}
261+
log.info("已检测到伊涅芙,即将开始后续动作……");
251262

263+
await genshin.tp(-887.193359375, 1679.44287109375);//沉眠之庭
252264
keyDown("w");
253265
await sleep(2500);
254266
keyUp("w");
@@ -261,11 +273,13 @@
261273
leftButtonClick();
262274
await sleep(1500);
263275

264-
log.info("古又老师说让你先die一下");
276+
log.info("古又老师说让你先die一下");//先降低点生命值避免满血弹窗
265277
keyDown("A");
266278
await sleep(3000);
267279
keyUp("A");
268280
await sleep(3000);
281+
282+
return true;
269283
}
270284

271285
// 伊涅芙跳楼机
@@ -276,9 +290,9 @@
276290

277291
//连续点击三次防止过期道具卡背包
278292
await click(970, 760);
279-
await sleep(300);
293+
await sleep(100);
280294
await click(970, 760);
281-
await sleep(300);
295+
await sleep(100);
282296
await click(970, 760);
283297

284298
log.info("猜猜为什么要连续点击这个位置呢~");
@@ -289,78 +303,90 @@
289303
const ifshiwu = await textOCR("食物", 3, 0, 0, 126, 17, 99, 53);
290304
if (!ifshiwu.found) {
291305
await genshin.returnMainUi();
292-
log.warn("未打开'食物'页面");
293-
return;
306+
throw new Error("未打开'食物'页面,请确保背包已正确打开并切换到食物标签页");
294307
}//确认在食物界面
295308
await sleep(500);
296309
const ifpingguo = await imageRecognitionEnhanced(pingguo, 1, 1, 0, 115, 120, 1150, 155);//识别"苹果"图片
297310
if (!ifpingguo.found) {
298311
await genshin.returnMainUi();
299-
log.warn("没有找到指定的食物");
300-
return;
312+
throw new Error("没有找到指定的食物:" + food + "请检查背包中该食材数量是否足够!");
301313
}
302314
await sleep(500);
303315

304-
await textOCR("使用", 5, 1, 0, 1620, 987, 225, 50);
316+
await click(1700, 1020);//点击使用
305317
await sleep(1000);
306318

307-
const ifzjz = await imageRecognitionEnhanced(zjz, 5, 1, 0, 625, 290, 700, 360, true);
308-
await sleep(300);
319+
const ifzjz = await imageRecognitionEnhanced(zjz, 5, 1, 0, 625, 290, 700, 360, true);//点击伊涅芙证件照
320+
await sleep(100);
321+
leftButtonClick();//连续点击确保吃食物的是伊涅芙
322+
await sleep(100);
309323
leftButtonClick();
310-
await sleep(300);
311-
leftButtonClick();
312-
await sleep(300);
324+
await sleep(100);
313325

314-
if (!ifzjz.found) { log.error("未识别到伊涅芙"); return; }
326+
if (!ifzjz.found) { throw new Error("未识别到伊涅芙"); }
315327

316328
for (let i = 0; i < foodCount; i++) {
317329
click(1251, 630);
318-
await sleep(300);
330+
await sleep(150);
319331
}
320332

321-
await textOCR("确认", 5, 1, 0, 1100, 740, 225, 50);
333+
await click(1180, 770);//点击确认
322334
await sleep(500);
323335

324336
await sleep(1000);
325337
await keyPress("ESCAPE");
326338
await sleep(1000);
327339
await keyPress("ESCAPE");
328340

341+
await sleep(1000);
342+
343+
if (n == 1) { return; }
344+
329345
log.info("再见了伊涅芙,希望你喜欢这几分钟的戏份");
330346

331-
await sleep(1000);
332347
keyDown("A");
333348
await sleep(3000);
334349
keyUp("A");
335350
await sleep(3000);
336351
}
337352

338-
log.warn("使用前请仔细阅读readme并进行相关设置!");
339-
log.warn("请确保食材充足!");
353+
354+
// ===== MAIN EXECUTION =====
355+
356+
357+
// 预处理
358+
const party = settings.n;//设置好要切换的队伍
359+
const food = settings.food;//设置要吃的食物
360+
const foodCount = settings.foodNumber - 1;//点击“+”的次数,比食物数量少1
361+
const n = settings.runNumber;//运行次数
362+
363+
const pingguo = `assets/${food}.png`;//食物图片路径
364+
const zjz = `assets/zhengjianzhao.png`;//伊涅芙证件照
365+
366+
// 添加验证
367+
if (!party) { log.error("队伍名为空,请仔细阅读readme并进行设置后再使用此脚本!"); return; }// 利用队伍是否为空判断用户有没有进行设置
368+
if (foodCount > 98 || foodCount < 0) { log.error("食材数量请填写1-99之间的数字!"); return; }//确保食材数量1~99
369+
if (n <= 0) { log.error("不是哥们,运行次数还能小于0???"); return; }//确保运行次数合法
370+
340371

341372
//设置分辨率和缩放
342373
setGameMetrics(1920, 1080, 1);
343-
await genshin.returnMainUi();
374+
await genshin.returnMainUi();//回到主界面,在秘境中可能会卡几秒
344375

345-
const food = settings.food;
346-
const party = settings.n;
347-
const n = settings.runNumber;
348-
const foodCount = settings.foodNumber - 1;
349-
const pingguo = `assets/${food}.png`;
350-
const zjz = `assets/zhengjianzhao.png`;
376+
log.warn("使用前请仔细阅读readme并进行相关设置!");
377+
log.warn("请确保食材充足!");
351378

352-
await fuben();
379+
const iffuben = await fuben(); if (!iffuben) { return; }//前期准备,进入副本并降低一部分血量
353380

381+
// 循环控制运行次数
354382
try {
355383
for (let i = 0; i < n; i++) {
356384
await doit();
357385
}
358386
} catch (error) {
359387
log.error(`识别图像时发生异常: ${error.message}`);
360388
}
389+
log.info("运行结束!今天的" + food + "味道不错哦~");
361390

362391
await genshin.tpToStatueOfTheSeven();
363-
364392
})();
365-
366-

repo/js/YNF-AutoEat/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"manifest_version": 1,
33
"name": "伊涅芙の自助餐",
4-
"version": "0.1",
4+
"version": "1.1",
55
"tags": [
66
"伊涅芙",
77
"调味品"

repo/js/YNF-AutoEat/settings.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
{
99
"name": "food",
1010
"type": "select",
11-
"label": "伊涅芙今天吃什么",
11+
"label": "伊涅芙今天吃什么(默认苹果)",
1212
"options": [
1313
"苹果",
1414
"日落果",
@@ -18,7 +18,7 @@
1818
"活化的星蕈",
1919
"枯焦的星蕈"
2020
],
21-
"default": ""
21+
"default": "苹果"
2222
},
2323
{
2424
"name": "foodNumber",

0 commit comments

Comments
 (0)