repo/js/YNF-AutoEat: 脚本更新 (#1941)

* 脚本更新

修复了一些bug,添加了一些改动

* YNF-AutoEat又双更新

针对建议进行了进一步的修改
This commit is contained in:
江紫烟owo
2025-09-18 23:07:20 +08:00
committed by GitHub
parent 8c87e9bae8
commit a06d15e54d
4 changed files with 95 additions and 54 deletions

View File

@@ -1,9 +1,14 @@
# 伊涅芙の自助餐
## 食用方法:
1. 将脚本添加至调度器。
2. 右键点击脚本以修改 JS 自定义配置。
3. 选择队伍名称、食物种类数量和运行次数之后点击运行即可
1. 队伍名称:包含伊涅芙的队伍,必填
2. 伊涅芙今天吃什么:需要投喂的食材,不选择的情况下默认是苹果
3. 食材数量单次投喂的数量吃多少个再跳楼默认99个
4. 运行次数想嘎伊涅芙多少次默认1次
3. 完成上述设置后点击运行即可
## 注意事项:
@@ -11,18 +16,28 @@
2. 使用前确保食材充足
## 作者留言:
欢迎使用该脚本毕竟使用的过程也是帮作者发现bug的过程。
那么当你在使用时发现有bug存在请反馈到频道并艾特作者
当然,作者会保证尽力去修但是不一定能修好。(书到用时方恨少了属于是)
希望发现问题积极反馈,来频道尽情蹂虐作者吧!
~~(PS:许愿也行,需求尽管提,没回就是做不到,欸嘿)~~
## 致谢
1. 感谢古又老师的悉心指导,没有古又老师就没有现在的~~伊涅芙灭绝计划~~调味品批量生产计划
2. 感谢氨气老师和秋秋云老师,在审核时提供了宝贵的意见和建议。
##作者留言:
欢迎使用该脚本毕竟使用的过程也是帮作者发现bug的过程
那么当你在使用时发现有bug存在请反馈到频道并艾特作者
当然,作者会保证尽力去修但是不一定能修好(书到用时方恨少了属于是)
希望发现问题积极反馈,来频道尽情蹂虐作者吧!
---------------------------------------------------------------------------------------------------------------------------------
## 更新日志
### 0.12025.09.15
酱酱“伊涅芙の自助餐YNF-AutoEat V0.1”闪亮登场!你还在为徒手喂料理而痛苦吗?你的苹果又没处用了吗?你做菜时的调味品又不够用了吗?快来用伊涅芙の自助餐,包你满意!
### 1.12025.09.17
1. 修复了前往神像切换队伍后无法正常进行后续动作的bug
2. 修复了队伍中没有伊涅芙时会在秘境外吃食物的bug
3. 修复了不填写食物时脚本不会及时报错停止的bug
4. 多处位置添加了判断逻辑,防止假值穿透等风险
5. 将代码结构进行重构,调整了运行顺序,使其更符合逻辑
6. 蹂虐了古又老师的伊涅芙一顿并让她吃了个饱
~~7. 我勒个豆版本号怎么写错了正式版还搁这0开头呢快改~~
### 1.02025.09.15
酱酱“伊涅芙の自助餐YNF-AutoEat V1.0”闪亮登场!你还在为徒手喂料理而痛苦吗?你的苹果又没处用了吗?你做菜时的调味品又不够用了吗?快来用伊涅芙の自助餐,包你满意!

View File

@@ -220,35 +220,47 @@
}
}
// 新增:判断队内角色函数(新知识+1
async function includes(characterName) {
var avatars = getAvatars();
for (let i = 0; i < avatars.length; i++) {
if (avatars[i] === characterName) { return true; }
}
return false;
}
//切换队伍
async function switchPartyIfNeeded(partyName) {
if (!partyName) {
await genshin.returnMainUi();
return;
}
try {
log.info("正在尝试切换至" + partyName);
if (!await genshin.switchParty(partyName)) {
log.info("切换队伍失败,前往七天神像重试");
await genshin.tpToStatueOfTheSeven();
await genshin.switchParty(partyName);
return await genshin.switchParty(partyName);
}
return true;
} catch {
log.error("队伍切换失败,可能处于联机模式或其他不可切换状态");
notification.error(`队伍切换失败,可能处于联机模式或其他不可切换状态`);
await genshin.returnMainUi();
return false;
}
}
// 传送并进入副本
async function fuben() {
await genshin.tp(-887.193359375, 1679.44287109375);
// 先判断一次,队伍里有伊涅芙就直接开始运行,没有的话就切换指定队伍
let ifynf = await includes("伊涅芙");
let ifswitch;
if (!ifynf) {
ifswitch = await switchPartyIfNeeded(party);
if (!ifswitch) { log.error("未识别到指定队伍,请检查队伍名是否正确!"); return false; }//找不到指定队伍就直接报错停止
await switchPartyIfNeeded(party);
let ifynf = await textOCR("伊涅芙", 3, 0, 0, 1670, 200, 120, 400);
if (!ifynf.found) { log.error("未识别到伊涅芙,请在设置中输入包含伊涅芙的队伍!"); return; }
ifynf = await includes("伊涅芙");
if (!ifynf) { log.error("未识别到伊涅芙,请在设置中输入包含伊涅芙的队伍!"); return false; }//切换到指定队伍后再进行判定
}
log.info("已检测到伊涅芙,即将开始后续动作……");
await genshin.tp(-887.193359375, 1679.44287109375);//沉眠之庭
keyDown("w");
await sleep(2500);
keyUp("w");
@@ -261,11 +273,13 @@
leftButtonClick();
await sleep(1500);
log.info("古又老师说让你先die一下");
log.info("古又老师说让你先die一下");//先降低点生命值避免满血弹窗
keyDown("A");
await sleep(3000);
keyUp("A");
await sleep(3000);
return true;
}
// 伊涅芙跳楼机
@@ -276,9 +290,9 @@
//连续点击三次防止过期道具卡背包
await click(970, 760);
await sleep(300);
await sleep(100);
await click(970, 760);
await sleep(300);
await sleep(100);
await click(970, 760);
log.info("猜猜为什么要连续点击这个位置呢~");
@@ -289,36 +303,34 @@
const ifshiwu = await textOCR("食物", 3, 0, 0, 126, 17, 99, 53);
if (!ifshiwu.found) {
await genshin.returnMainUi();
log.warn("未打开'食物'页面");
return;
throw new Error("未打开'食物'页面,请确保背包已正确打开并切换到食物标签页");
}//确认在食物界面
await sleep(500);
const ifpingguo = await imageRecognitionEnhanced(pingguo, 1, 1, 0, 115, 120, 1150, 155);//识别"苹果"图片
if (!ifpingguo.found) {
await genshin.returnMainUi();
log.warn("没有找到指定的食物");
return;
throw new Error("没有找到指定的食物:" + food + "请检查背包中该食材数量是否足够!");
}
await sleep(500);
await textOCR("使用", 5, 1, 0, 1620, 987, 225, 50);
await click(1700, 1020);//点击使用
await sleep(1000);
const ifzjz = await imageRecognitionEnhanced(zjz, 5, 1, 0, 625, 290, 700, 360, true);
await sleep(300);
const ifzjz = await imageRecognitionEnhanced(zjz, 5, 1, 0, 625, 290, 700, 360, true);//点击伊涅芙证件照
await sleep(100);
leftButtonClick();//连续点击确保吃食物的是伊涅芙
await sleep(100);
leftButtonClick();
await sleep(300);
leftButtonClick();
await sleep(300);
await sleep(100);
if (!ifzjz.found) { log.error("未识别到伊涅芙"); return; }
if (!ifzjz.found) { throw new Error("未识别到伊涅芙"); }
for (let i = 0; i < foodCount; i++) {
click(1251, 630);
await sleep(300);
await sleep(150);
}
await textOCR("确认", 5, 1, 0, 1100, 740, 225, 50);
await click(1180, 770);//点击确认
await sleep(500);
await sleep(1000);
@@ -326,31 +338,47 @@
await sleep(1000);
await keyPress("ESCAPE");
await sleep(1000);
if (n == 1) { return; }
log.info("再见了伊涅芙,希望你喜欢这几分钟的戏份");
await sleep(1000);
keyDown("A");
await sleep(3000);
keyUp("A");
await sleep(3000);
}
log.warn("使用前请仔细阅读readme并进行相关设置");
log.warn("请确保食材充足!");
// ===== MAIN EXECUTION =====
// 预处理
const party = settings.n;//设置好要切换的队伍
const food = settings.food;//设置要吃的食物
const foodCount = settings.foodNumber - 1;//点击“+”的次数比食物数量少1
const n = settings.runNumber;//运行次数
const pingguo = `assets/${food}.png`;//食物图片路径
const zjz = `assets/zhengjianzhao.png`;//伊涅芙证件照
// 添加验证
if (!party) { log.error("队伍名为空请仔细阅读readme并进行设置后再使用此脚本"); return; }// 利用队伍是否为空判断用户有没有进行设置
if (foodCount > 98 || foodCount < 0) { log.error("食材数量请填写1-99之间的数字"); return; }//确保食材数量1~99
if (n <= 0) { log.error("不是哥们运行次数还能小于0"); return; }//确保运行次数合法
//设置分辨率和缩放
setGameMetrics(1920, 1080, 1);
await genshin.returnMainUi();
await genshin.returnMainUi();//回到主界面,在秘境中可能会卡几秒
const food = settings.food;
const party = settings.n;
const n = settings.runNumber;
const foodCount = settings.foodNumber - 1;
const pingguo = `assets/${food}.png`;
const zjz = `assets/zhengjianzhao.png`;
log.warn("使用前请仔细阅读readme并进行相关设置");
log.warn("请确保食材充足!");
await fuben();
const iffuben = await fuben(); if (!iffuben) { return; }//前期准备,进入副本并降低一部分血量
// 循环控制运行次数
try {
for (let i = 0; i < n; i++) {
await doit();
@@ -358,9 +386,7 @@
} catch (error) {
log.error(`识别图像时发生异常: ${error.message}`);
}
log.info("运行结束!今天的" + food + "味道不错哦~");
await genshin.tpToStatueOfTheSeven();
})();

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "伊涅芙の自助餐",
"version": "0.1",
"version": "1.1",
"tags": [
"伊涅芙",
"调味品"

View File

@@ -8,7 +8,7 @@
{
"name": "food",
"type": "select",
"label": "伊涅芙今天吃什么",
"label": "伊涅芙今天吃什么(默认苹果)",
"options": [
"苹果",
"日落果",
@@ -18,7 +18,7 @@
"活化的星蕈",
"枯焦的星蕈"
],
"default": ""
"default": "苹果"
},
{
"name": "foodNumber",