From 2427291982e9704d754fa9e80172dfbed20d2d8c Mon Sep 17 00:00:00 2001 From: this-Fish Date: Wed, 21 Jan 2026 12:02:06 +0800 Subject: [PATCH] =?UTF-8?q?JS=20:=20=E8=87=AA=E5=8A=A8=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E6=AF=8F=E5=A4=A9&3=E5=A4=A9&=E6=AF=8F=E5=91=A8=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E9=A3=9F=E6=9D=90=203.0=20(#2752)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * JS : 自动购买每天&3天&每周刷新食材 2.0.1 補充月之四新NPC * Delete repo/js/自动购买每天&3天&每周刷新食材 directory * 自动购买每天&3天&每周刷新食材 改用input-text輸入要買商品 減少頁面長度 * 調整說明 --- .../自动购买每天&3天&每周刷新食材/README.md | 369 ++++++++---------- .../assets/data/foods.json | 29 +- .../assets/data/npcs.json | 19 +- .../assets/images/微光角菌.png | Bin 0 -> 11857 bytes .../assets/images/琉鳞石.png | Bin 0 -> 10894 bytes .../assets/images/{絶云椒椒.png => 绝云椒椒.png} | Bin .../assets/images/{青蜜梅.png => 青蜜莓.png} | Bin .../assets/path/挪德卡莱-皮拉米达城-科菲策.json | 58 +++ repo/js/自动购买每天&3天&每周刷新食材/main.js | 165 +++++--- .../manifest.json | 8 +- .../settings.json | 228 +---------- .../商人与商品支持表.md | 41 ++ .../商人信息表.md | 36 ++ 13 files changed, 452 insertions(+), 501 deletions(-) create mode 100644 repo/js/自动购买每天&3天&每周刷新食材/assets/images/微光角菌.png create mode 100644 repo/js/自动购买每天&3天&每周刷新食材/assets/images/琉鳞石.png rename repo/js/自动购买每天&3天&每周刷新食材/assets/images/{絶云椒椒.png => 绝云椒椒.png} (100%) rename repo/js/自动购买每天&3天&每周刷新食材/assets/images/{青蜜梅.png => 青蜜莓.png} (100%) create mode 100644 repo/js/自动购买每天&3天&每周刷新食材/assets/path/挪德卡莱-皮拉米达城-科菲策.json create mode 100644 repo/js/自动购买每天&3天&每周刷新食材/商人与商品支持表.md create mode 100644 repo/js/自动购买每天&3天&每周刷新食材/商人信息表.md diff --git a/repo/js/自动购买每天&3天&每周刷新食材/README.md b/repo/js/自动购买每天&3天&每周刷新食材/README.md index 2f4585d2e..496ad5816 100644 --- a/repo/js/自动购买每天&3天&每周刷新食材/README.md +++ b/repo/js/自动购买每天&3天&每周刷新食材/README.md @@ -1,248 +1,197 @@ -# 自动购买每天&3天&每周刷新食材 - 使用说明 +# 自动购买商品 - 使用说明 -## 功能说明 +## 🚀 快速开始 -这个脚本可以自动购买原神游戏中各个商人的食材,支持三种刷新周期: -- **每天刷新食材**:每天凌晨4点刷新 -- **3天刷新食材**:每3天刷新一次 -- **每周刷新食材**:每周刷新,可指定购买日 -- **智能记录系统**:避免重复购买,只购买刷新后的商品 +### 1. 基本设置 +1. **账号名**:填写账号名,用于区分不同账号的购买记录 +2. **要购买的商品**:输入商品名称,用空格分隔(支援的商人与商品请查看下方表格) + ``` + 示例:盐 胡椒 螃蟹 圣水 松茸 沉玉仙茗 蟹黄 + ``` +3. **每周商品购买方式**: + - 0:跟随游戏系统周期自动判断 + - 1-7:指定周几购买(1=周一,7=周日) +4. **要禁用的NPC**:不想购买的NPC,用空格分隔 + ``` + 示例:阿扎莱 皮托 + ``` +5. **无视购买记录强制购买**:开启后会忽略购买记录,重新购买所有商品 +6. **调试模式**:开启后显示详细执行日志 -## 快速开始 +### 2. 智能购买记录系统 +脚本会自动记录购买时间,避免重复购买: +- **每天商品**:购买后24小时(凌晨4点)刷新 +- **3天商品**:购买后3天刷新 +- **每周商品**:购买后7天刷新(可设置购买日) -### 1. 准备工作 -- 游戏分辨率:**1920×1080 解析度** -- 游戏内时间需可调整(非多人模式) -- 准备足够的摩拉购买食材 +购买记录保存在:`record/你填的账号名/records.json` +- 下次执行时只购买已刷新商品 +- 可通过"无视购买记录强制购买"选项重置 -### 2. 首次使用 -1. 打开脚本设置界面 -2. 勾选要购买的食材 -3. 设置每周食材购买日 -4. 保存设置 -5. 在主界面运行脚本 +### 3. 运行脚本 +1. 确保游戏分辨率设置为 **1920×1080** +2. 游戏角色需在单人模式 +3. 确保有足够的摩拉和背包空间 +4. 运行脚本即可自动购买 -## 设置说明 -- **账号名**:区分不同账号的记录 -- **无视记录强制购买**:不推荐开启,会重复购买 -- **记录调试模式**:显示详细日志信息 -- **禁用NPC功能**:可以输入要禁用的NPC名称(空格分隔): - ``` - 布兰琪 东升 莎拉 - ``` +## 📋 商人与商品支持表 - 禁用后,脚本会跳过这些NPC,不会前往购买。 +### 如何查看支持的商品? +- **查看本文件下方表格**:包含所有支持的商人与商品 +- **查看`assets/data/foods.json`**:所有商品的中文名称 -### 食材设置 -食材分为三类,可以单独选择是否购买: -1. **每天刷新食材** - 每天凌晨4点刷新 -2. **3天刷新食材** - 每3天刷新一次 -3. **每周刷新食材** - 每周固定週一购买 +### 商人信息总览 +| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 备注 | +|--------|--------|-------------|------------|-------------|------| +| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 白天出现 | +| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | 晚上出现 | +| 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - | +| 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | | +| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | | +| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | 白天出现 | +| 璃月-璃月港 | 老高 | 鱼肉 | - | - | | +| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | 晚上出现 | +| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | | +| 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | | +| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | | +| 稻妻-离岛 | 小畑 | 螃蟹、鱼肉、虾仁 | - | - | | +| 稻妻-稻妻城 | 葵 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | +| 稻妻-稻妻城 | 志村勘兵卫 | 鱼肉、螃蟹 | 堇瓜 | - | | +| 稻妻-海祇岛 | 清子 | - | - | 牛奶、番茄、土豆、小麦、豆腐 | | +| 须弥-须弥城 | 朱特 | - | 帕蒂沙兰 | - | | +| 须弥-奥摩斯港 | 布特罗斯 | 鱼肉、螃蟹、虾仁 | - | - | | +| 须弥-须弥城 | 珀姆 | 鱼肉、螃蟹、虾仁 | - | - | | +| 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | +| 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 | +| 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 | +| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 晚上出现 | +| 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | | +| 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | | +| 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | | +| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | | +| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | | +| 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | | +| 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | | +| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | | +| 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | | +| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | | -### 购买日设置 -- **0**:跟随游戏系统周期自动判断 -- **1-7**:指定週几购买(1=週一,7=週日) +## 🔧 添加新商品 -## 调试模式 +### 1. 添加商品图片 +1. 截图商品图标,尺寸建议 90×90 像素 +2. 保存为 PNG 格式,放在 `assets/images/` 目录下 +3. 文件名建议使用英文或拼音,如:`new_food.png` -开启`记录调试模式`后,会显示详细执行信息: - -``` -[调试] 开始处理NPC: 布兰琪 -[调试] NPC当前记录: {npcname: "布兰琪", 1d_time: "2024-12-10T04:00:00+08:00"} -[调试] 购买判断结果: -[调试] 1天商品: 盐, 胡椒, 洋葱 -[调试] 开始购买第 1 页 -[调试] 尝试购买: 盐 -[调试] 找到物品: 盐 位置(100,200,90,90) -购买成功: 盐 -交互或拾取:"盐" -``` - -```json -## 数据文件说明 - -脚本使用外部数据文件,方便维护: - -### 食材数据 (assets/data/foods.json) -```json -{ - "盐": { - "id": "盐", - "name": "盐", - "file": "assets/images/salt.png" - } -} -``` - -### NPC数据 (assets/data/npcs.json) -```json -{ - "布兰琪": { - "name": "布兰琪", - "enable": true, - "page": 2, - "time": "night", - "path": "assets/path/蒙德-蒙德城-布兰琪.json", - "_1d_foods": ["盐", "胡椒", "洋葱"] - } -} -``` - -### 图片要求 -- 尺寸:90×90像素 -- 格式:PNG -- 路径:assets/images/ - -### 路径文件 -- 格式:JSON -- 路径:assets/path/ - -## 添加新食材 - -### 1. 添加食材图片 -将食材截图保存为`assets/images/新食材.png` -- 食材图片:85×85像素PNG格式 - -### 2. 添加食材设置 -在`settings.json`中添加: -```json -{ - "name": "新食材", - "type": "checkbox", - "label": "新食材", - "default": false -} -``` - -### 3. 添加食材数据 -在`assets/data/foods.json`中添加: -```json -"新食材": { - "id": "新食材", - "name": "新食材", - "file": "assets/images/新食材.png" -} -``` - -### 4. 添加NPC数据 -在`assets/data/npcs.json`中为对应的NPC添加: -```json -"_1d_foods": ["新食材"] // 根据刷新周期选择 -``` - -## 如何添加新的NPC商人 -### 准备工作 -1. 路径文件:錄製前往NPC的路径JSON文件 -2. 命名规则:`国家-地区-NPC名称.json` -### 添加步骤 - -#### 1. 添加食材数据(如未添加) +### 2. 添加商品数据 在 `assets/data/foods.json` 中添加: + ```json -"新食材": { - "id": "新食材", - "name": "新食材", - "file": "assets/images/新食材.png" +"new_food": { + "id": "new_food", + "name": "新商品", + "file": "assets/images/new_food.png" } ``` -在 `settings.json` 对应区域添加食材选项。 +### 3. 添加到商人 +在 `assets/data/npcs.json` 中找到对应商人,添加到相应的商品列表中: -#### 2. 添加NPC数据 +```json +"_1d_foods": ["新商品"] // 每天刷新商品 +"_3d_foods": ["新商品"] // 3天刷新商品 +"_7d_foods": ["新商品"] // 每周刷新商品 +``` + +### 4. 更新商人与商品支持表 +将新商品添加到本文件的商人与商品支持表中,方便其他用户查看。 + +## 🆕 添加新商人 + +### 1. 录制路径 +1. 使用路径录制工具录制前往商人的路径 +2. 保存为 JSON 文件,命名格式:`地区-位置-商人名.json` +3. 放在 `assets/path/` 目录下 + +### 2. 添加商人数据 在 `assets/data/npcs.json` 中添加: + ```json -"新NPC名称": { - "name": "新NPC名称", - "enable": true, - "page": 2, - "time": "any", - "path": "assets/path/国家-地区-新NPC名称.json", - "_1d_foods": ["食材1", "食材2"], - "_3d_foods": ["食材3"], - "_7d_foods": ["食材4"] +"new_npc": { + "name": "新商人名", + "enable": true, + "page": 2, // 商店总页数 + "time": "any", // any/day/night + "path": "assets/path/地区-位置-新商人名.json", + "_1d_foods": ["商品1", "商品2"], // 每天刷新 + "_3d_foods": ["商品3"], // 3天刷新 + "_7d_foods": ["商品4"] // 每周刷新 } ``` -**参数说明**: -- `page`:商店总页数 -- `time`:`any`(任何时间)/`day`(白天)/`night`(晚上) -- `_1d_foods`:每天刷新食材列表 -- `_3d_foods`:3天刷新食材列表 -- `_7d_foods`:每周刷新食材列表 +### 3. 参数说明 +- `page`: 商店的总页数 +- `time`: 商人出现时间 + - `any`: 全天出现 + - `day`: 白天出现 + - `night`: 晚上出现 +- `path`: 路径文件位置 -#### 3. 放置相关文件 -- 食材图片:`assets/images/新食材.png` -- 路径文件:`assets/path/国家-地区-NPC名称.json` +### 4. 更新商人与商品支持表 +将新商人添加到本文件的商人与商品支持表中。 -#### 4. 测试验证 -1. 重新加载脚本设置 -2. 勾选新食材 -3. 运行脚本测试购买流程 -4. 检查日志确认执行成功 +## ❓ 常见问题 -### 注意事项 -- NPC名称需与路径文件名称对应 -- 食材名称需与foods.json中的name一致 -- 首次添加建议开启调试模式检查 +### Q: 脚本不购买任何商品? +A: 检查: +1. 是否在设置中填写了要购买的商品 +2. 商品名称是否正确(参考上方表格) +3. 游戏分辨率是否为 1920×1080 +4. 角色是否在单人模式 +5. 是否有购买记录导致商品未刷新 +### Q: 如何知道支持哪些商品名称? +A: 查看: +1. 本文件中的"商人与商品支持表" +2. `assets/data/foods.json` 文件中的 `name` 字段 +3. 运行脚本时的日志输出会显示"用户启用了以下食材" -## 常见问题 +### Q: 为什么跳过某些商人? +A: 可能原因: +1. 该商人没有你要购买的商品 +2. 商人在禁用列表中 +3. 购买记录显示商品还未到刷新时间 -### 1. 脚本不购买食材 -- 检查游戏是否在主界面 -- 确认解析度设定正确(1920×1080) -- 检查NPC是否在正确时间出现(白天/晚上) -- 查看是否有足够的摩拉 +### Q: 如何重置购买记录? +A: 有几种方法: +1. 启用"无视购买记录强制购买"选项 +2. 删除 `record/你的账号名/records.json` 文件 +3. 等待商品自然刷新 -### 2. 记录不更新 -- 检查`record/账号名/records.json`文件权限 -- 开启调试模式查看详细日志 +### Q: 每天什么时候刷新? +A: 游戏内的刷新时间是**每天凌晨4点**。脚本会考虑这个时间点: +- 如果当前时间在4点前,视为前一天 +- 购买记录基于4点刷新时间计算 -### 3. 图片识别失败 -- 确认图片尺寸为90×90 -- 检查图片路径是否正确 -- 尝试重新截图 +## 📝 注意事项 -### 4. 路径执行失败 -- 确认路径文件存在 -- 检查NPC是否被障碍物阻挡 -- 尝试重新录制路径 - -## 记录系统 - -脚本会自动记录购买时间,保存在`record/账号名/records.json`: - -```json -[ - { - "npcname": "布兰琪", - "1d": ["盐", "胡椒", "洋葱"], - "1d_time": "2024-12-10T04:00:00+08:00", - "3d": [], - "3d_time": null, - "7d": [], - "7d_time": null - } -] -``` - -## 注意事项 - -1. 脚本运行时不要操作游戏 -2. 确保背包有足够空间 -3. 每个NPC购买完成后会返回主界面 -4. 脚本会自动调整游戏时间(白天/晚上) -5. 每周食材购买日设置后,只在指定日期购买4. 逐一添加食材测试 +1. **游戏时间**:脚本会自动调整白天/晚上时间 +2. **背包空间**:确保有足够空间购买商品 +3. **摩拉**:确保有足够的摩拉 +4. **记录系统**:购买记录保存在 `record/账号名/` 目录下 +5. **多人模式**:脚本只能在单人模式下运行 +6. **刷新时间**:基于游戏服务器时间(GMT+8),每天4点刷新 ## 🤝 贡献指南 -欢迎提交新的食材配置!请遵循以下格式: +欢迎提交新的商人和商品配置! -1. **提交新的NPC**:包含路径文件和图片 -2. **提交新的食材**:包含图片和设定 -3. **问题回报**:提供详细的重现步骤和日志 +1. **提交新的商人**:包含路径文件和商人数据 +2. **提交新的商品**:包含图片和商品数据 +3. **更新文档**:记得更新本README中的商人信息表 +4. **问题反馈**:提供详细的重现步骤和日志 --- -> 注意:本脚本仅供学习与研究使用,请遵守游戏使用条款。 \ No newline at end of file +> 注意:本脚本仅供学习与研究使用,请遵守游戏使用条款。 +``` diff --git a/repo/js/自动购买每天&3天&每周刷新食材/assets/data/foods.json b/repo/js/自动购买每天&3天&每周刷新食材/assets/data/foods.json index f9acbbe9c..790dbfbf3 100644 --- a/repo/js/自动购买每天&3天&每周刷新食材/assets/data/foods.json +++ b/repo/js/自动购买每天&3天&每周刷新食材/assets/data/foods.json @@ -119,10 +119,10 @@ "name": "沉玉仙茗", "file": "assets/images/沉玉仙茗.png" }, - "青蜜梅": { - "id": "青蜜梅", - "name": "青蜜梅", - "file": "assets/images/青蜜梅.png" + "青蜜莓": { + "id": "青蜜莓", + "name": "青蜜莓", + "file": "assets/images/青蜜莓.png" }, "苦种": { "id": "苦种", @@ -163,11 +163,20 @@ "id": "黑麦", "name": "黑麦", "file": "assets/images/黑麦.png" - } - , - "絶云椒椒": { - "id": "絶云椒椒", - "name": "絶云椒椒", - "file": "assets/images/絶云椒椒.png" + }, + "绝云椒椒": { + "id": "绝云椒椒", + "name": "绝云椒椒", + "file": "assets/images/绝云椒椒.png" + }, + "微光角菌": { + "id": "微光角菌", + "name": "微光角菌", + "file": "assets/images/微光角菌.png" + }, + "琉鳞石": { + "id": "琉鳞石", + "name": "琉鳞石", + "file": "assets/images/琉鳞石.png" } } \ No newline at end of file diff --git a/repo/js/自动购买每天&3天&每周刷新食材/assets/data/npcs.json b/repo/js/自动购买每天&3天&每周刷新食材/assets/data/npcs.json index ea0f5f6d7..207d8a504 100644 --- a/repo/js/自动购买每天&3天&每周刷新食材/assets/data/npcs.json +++ b/repo/js/自动购买每天&3天&每周刷新食材/assets/data/npcs.json @@ -38,7 +38,7 @@ "time": "any", "path": "assets/path/璃月-璃月港-卯师父.json", "_1d_foods": ["鱼肉", "螃蟹"], - "_3d_foods": ["胡萝卜", "松茸", "絶云椒椒"] + "_3d_foods": ["胡萝卜", "松茸", "绝云椒椒"] }, "UncleSun": { "name": "老孙", @@ -78,7 +78,7 @@ "page": 2, "time": "any", "path": "assets/path/璃月-遗珑埠-丰泰.json", - "_3d_foods": ["沉玉仙茗", "琉璃袋", "絶云椒椒"], + "_3d_foods": ["沉玉仙茗", "琉璃袋", "绝云椒椒"], "_7d_foods": ["蟹黃"] }, "连芳": { @@ -95,7 +95,7 @@ "page": 1, "time": "any", "path": "assets/path/稻妻-离岛-小畑.json", - "_1d_foods": ["螃蟹"] + "_1d_foods": ["螃蟹","鱼肉", "虾仁"] }, "Aoi": { "name": "葵", @@ -229,7 +229,7 @@ "page": 1, "time": "any", "path": "assets/path/纳塔-圣火竞技场-钦特利.json", - "_3d_foods": ["青蜜梅", "苦种"] + "_3d_foods": ["青蜜莓", "苦种"] }, "夏安卡": { "name": "夏安卡", @@ -256,5 +256,16 @@ "path": "assets/path/挪德卡莱-那夏镇-采若.json", "_1d_foods": ["黑麦", "盐", "胡椒", "洋葱", "牛奶", "番茄", "卷心菜", "土豆", "小麦"] } + , + "科菲策": { + "name": "科菲策", + "enable": true, + "page": 1, + "time": "any", + "path": "assets/path/挪德卡莱-皮拉米达城-科菲策.json", + "_1d_foods": ["牛奶", "咖啡豆"], + "_3d_foods": ["微光角菌", "琉鳞石"] + + } } \ No newline at end of file diff --git a/repo/js/自动购买每天&3天&每周刷新食材/assets/images/微光角菌.png b/repo/js/自动购买每天&3天&每周刷新食材/assets/images/微光角菌.png new file mode 100644 index 0000000000000000000000000000000000000000..d319f180afff05f93656ef2e03336cafdee4e595 GIT binary patch literal 11857 zcmV-XF0RpuP)PyA07*naRCr#soe7vEXL;X$b@n;k)7^8=?9S|cXjcbD90DXT#=(GN#|9e{5dks? z8F2}4j8DLRY~t9EJjRZV9s7xmLt>5qejvsmndQ)dwJW4u9lNvV?Cj2c^z`&uSMq&z zbahY9N+Qlki+X#ytG@bw@9}^C?^}iPraRv50Vv{snMC%FH6fHeG@wSH#&L+++{`5Xah=sodMSg0VKbh(E8+J#6R-fv4w8g$-qvOz+0q&dD3%w+j(eXJsl)^v%?GI1_zkNuCIq> z1aAeNc>5jih&Cn!al6y{R^)qnWXQ3<_zSw$C56`EyJ8#XwmHZsB7dg_;Ktmx+hZh% zt{-`NY+6TXihuVS8ysH47Ds6BauD)j*BM%8CzuL~D(ouot?w2i-b3xn`uOrkI|G4tp;$Qj4^+ z;(0uVOD~YF-wC;L`&;hnfY>*#PB7v?wk35CE0 z!LRMouE4Xs&L~90Ha-NYm#2o2q}vOl)%3cq(DTCB-wqP~@@{|2JH0l*fkj4{D;AKY zUv3)!+P?^_M_y+T$Ktyx!Q19IuCTJ01^HmAsHz%xg(5A&bzQ_~;~U`{dfSS{>yC`y zy|LlnqveDf@FRji2o&S#@C3g?L-r^qc^`T z1T(%PZHo-g(-X|DHOtS)@Z@1THakmZdI!b9DV{p_1W#T54E@DCs_FyUeXMqTYdcs-sk;Gg$M7KWL>CaOCA8GY zGp}u_onUr3crWYRf}|f(lsoRcJ1S|~%*MZr?oDkckO16{_}5;r>)I^Mt?_fWeH0^; zp<4Gi{@9neG@KxPaq0EM3{)=YRY+$Ye7tmz!utim%=GNwNbKbi#*bu;%3OWdOGG7AlsjcgW8?AdV#Ej>+u0;hnWz}7(r?OvYSW6C{5`5 z-9U;j+qTWh)dp|)SHD7kE=PH@!Dih?)eXLO-|teIFwrz^3peZ?o&0xw?i&jMah?}~ z8D3iqIAN6?6lzP+v0Y5uuJ{N`RI#Q`W}>|H?e7Y`f*;8e4lhiVX51Vw}gxyF>vc!u>zrI zQi7gf%DB;GpuRzd3+#-M?T?1FyGN_lqC9W%>X*KYLN3c@qeb0zv0V>c^-!HU|M1`+ zFtVdxX84ep$6|~RM&RTjWAHCBv`gRh!}kcyB4Qt1F)dzgbzfmmK)1U3ww5U@`)zN( zCsqN)5cFwh$4^vKw{v|A$F`e^`nqK`88TnSk$o>Ap&Qg&7InwPa%CMz($MHrD*WBC zPcSr*N7MC=gcSFdD4ewEh7WP%=|PeT)uVt@`3Xq@LHxVQuAbTZ834Uz!hEh^`tdgA zKCvt677kXIS9#&#_b@p!j@@u+I-&&hm>6IeQZQA8tkL2#U;ob(#|`Q7QR&z= z%WH_T?HKB7Gogyqr7gr0MTe2Z6WTVpqRYN~zlhsVu5I%hi?mNv~Xpe*Sz!tjFm>IRc-0s;(Iqvwb(gkv*;vv>~R&(^~fdRbN}>TansAB z)9Dzo55h^8MaECxP3VPjiJ0xL+e4I|p++FWNoeI!XowxGEemwoargDb;!pdfh}FM% z*So!*f&(bVc}9tXdIl{B$a59%mnTyR-Q9>YC6UGqKeQ$ z7M54}`v?D;WU($QsJMjZhtjw-7>k>+XeNMlMJ2Yd#P5CNjf@SsG|Fo{{GBWOmoGlb zz{r49qkM^PYxAzBcF+|N{mqL}rtK^5G&GefJcW)Cp#Ib)DH+fH{9|G=iIf{A;%XY~p750p8k_o}oEwr@TZqkWB>L{SA zT)CR!+!>#HCQ|Uoljr&Fn`qTxUUBQ~=xUnDTt8OJA!WkU$R^ob12gTR7!HQ;=d=x40EnK% z#Q+zYmd5#Mjiot-WK!YMLWS=?agxgm-(qw!CDo_J`DJLS*seu7pQKR8N913Cxi-Jb zpMC00Xj&5w(eZR?RjbTC{uuW?tZ`v+k@?LQ=}a0;Dp`JKR0fi;2h~+M3BDZms=`7> zg8ufq-`h!zA{Nr_z(v_DfK>9hC_J@Om3V)Bb&ZUY;zwV45S1UJT1#_uq(rL)hUPLg zQYD+KVP-v4!$UJ%%%@9u;|-W{Kr_Ke;yI4*a+=PSa~2m)i4(e9S*^0sXmR4?H>s(o z>C+SZ_OHB<%377vPcQI|hv%7HZZJGP=v!^g;uD|vNo>o*Ma5KG(xWata)LxAOJTIc zfBeKl%xu~u5+Q90Gkj;h@Szcw>0{&T0AcM4$~*3UpC1WiS5Rz=56*VYC@E=mHT=c# zWWcu_k}Z$d{p3Mh2UafM#A7^;P$cr2Vgik|v&Q;W;g8 z8w#h7Ct2Tgm?_t|aaWE{fBv)V-*0f&-ABXz zDK@(5U@8r&OUop(Su{gu=J;`r9k==3nMIO8CmpnNrA@4LiV1dgY(s{}UOs}IS5>GH)3itZjI$ldBnbSz6Q<7Q;z}K&C@W!7y z%*3udhOYA6Z#hhk+`@$gjUxm7Pa4c_G`M~;%Qqf)im@L}@ZzHe8MQ`2Y2h>*tS*;v$8MzI zrVw3rPw-bop--TX2`iE%aJO6 zjF-MsfEiNINW$v0#Ha^@PlN{)mG``PlHdOGvseiYUF;+t8;ccQ|C+<>-k+D5@%RG? zEPEe%s-J|bOY78ihmqk8(s`TIur6aJH5=`T5{j-s+QBO}Q06lMpbD7a4K{IyH}Py2 z&sLb3Hn=jY;^5JrRQbnCCwb)?b~2o7lB7veZL;PTSa)+co`$YCSe}Wgx+GMKA#;JW zTA{kK%7yPAXK>$M6f;kwrSjOL^L+i-6I5N7d?D9G>H`Ma)&<+N?49=rFx$j5nkWmo zXB2S#Bvq?cdF6pIUi-QoRGKFDe(al!>@3M6tj(|S#@8KTYHtq1Pnhg|6zESTC=FJ~6`Q061egv=1N5^+5MZVpyu(XSGhj9c4I{EtZ}%o%vW467uo`gb zl);&KhZ`nSeCeUn?EdLtb`83iDj15*s++_0G6k7YSoD*Th@ZL#D;ZeM%D;QX8eXO@ z!E{=%auJ@qpfK8>X=IhnYMskHd#>UB7t$@ST3#*77Kn!E56jgq#2 zgU-5Bpy?VYjz#k7_t>0ynnzEy_{#AG2F3?4g4VQewQX@+SfvCq7&24te$NNw7Z>neB@*Q#95im50NV*NoSHg@}P;UznFvl z8jk1j#G;GhdfYftWTa$M9ITNlIB2GaK0EAlOU;A5OQ5+vm;zw&UL}dQoRhD;p$$+R zoI2FjJf42qWuPy^=f3weuf21Mw6Q^jECc!)$0|3WD=l%H=lT73Fbk8<60X$D79Xu8Q0k3*&Y62{Xe zQ~efKHgrxc*o@sy3U1@EmSwbcTO$C3p4!0fpsiJ<$LuT@LUx`@kpp1X|2WX#3iy?jjOFO`qee^ z$_mxR%PgIIl2cD@^5qj{`p5c6m?E2RZS+Mz#^gJJrfe0zD+DuSq~R6>&3YL-gXvt) zbz}m%^~g?M^#YT=!9nsn#&IxMZVj_p+2qtWA7FS)r7)1@>MYD$elb}s!M=h=!f-gZ zVsdu5#lcdR-9rXL;~OONE{2;zs|J=gP(cw?NPuYsWKOudSn+ZnSUL;}p6Fn0XlyLF zoIR~juGIN?lnq&-EpfLZ*ePXq;YDm|b@`Fp%fK zREz%M24+UVsFb9ud#NTA%aU^{x`tOxL1EM9bt0h86<}Z!#jvq96r7gE55DJMY960k zU*?6k46Ao zj8U;o#>_dM{N6Nu+AL2#F@T%Aj)`=VU3o|+T@+7adP!ks&0%jT!;wQR`bsTKErr_3 z;^{74aRpUmaABRb46OE{PA%bS4pb5{J1f~bPD96S=$t=cf#dO)XJ;9H(O!zBVGKNJ z*qS0bp?*z1pe}LM9_G;O-*D;p2~M3=cxbM{)Lzf#Su2bj?Qfdo+WRek5U1*s- zntaN;-}lSDblg@s+l~L&^sVTHi|MvTqsiV}lAn8Zo=l-Y|Kud9W>BHTLTiMaxaZ`gme|M zHJ`|fKPRV9bQh);A=SjIBvJA;JXgo5YAl_#sjqqb<&*RD-!jSIzzC-2VQ9Vu39GbR zk$Ejf=f6q$`(NkmWrzEwZFcP+ks`62=MNNm$La!8SY)7kMjEfL7`KHF31*}sg=s&Q zyMo{Oyi*Jpv}mqW`2BmY!!r{UcI`${G%9XCORZrB^;wzy?_0eIcVh{+UZwWXDw|G@ zp>&F!8I_TuE3HLUJxS(I&%;PT=lRz=a>1J56hDj-#WVJQ^Vf|K|+B%K;2A3baz?3%3V#Q@gGRat0W3=R8 zCR}vQVWq5d@`^@ZLg(fi9rEKgx{*X_CLvn~vjrDNQLF^04rH1zw&K$yVH~zeV?$x~ z2X(%1Y7ygQI~gsFU`Uq?=HNVs{?!xkz<+0D&EwcUZd&VAe(laZB(fQX4(yfVb!BIe z4Xd9C^9+yHjxc8pvAMcHv(=*d?O77W5an8nk%Y-qPG@w$Ba^lzpuz^8m@(PdGUf>Y}XVQR+!)o!;c4|Guo&Oq{05xd&=|<>UhDt&@xo4ExqE{@{?P zT_yFcKjQrC0JG(NOjo|a#H5ImhL259s6=22K~^T7fRxM0THomWE$p04lsE~?^p%jn zqWydy(SmL;#mU5w!P1o_e&^2JH0li|Za6|_aDbMZVA0w^pSFTYjR&hYQ@0eBm***8 zS;Ksyf|3}ZTz42Sbf)qNMvESWoI@sSq3H@2=5)?oPH_D}mB|Aw)Rc#2iiHcSP*66r zD77TsKpFZP_;sd+W2>D1ZjG;=TEKhBBx9vvRH25e3cBXe_t2j*{is7#xrIljKg*5- zeUbu+I4E{9yn`d;)B>=mryc{+$9)?x-*fLT`xQ`_ouc`X-ZxVDBPSk}jSYU{=nyv@ zQYE-!Hynk`5M{fBgUYaenRAUjEZHSinkKVz^Q>N2VCX8eygVCqi@c#rLO)SZ869@W ziR5H@tZl%_GbZDMN%kJHNERGaAry}dnd$#D2Oo4!$Bd6(Qy*HCLY zyu!Lrl0iw}c{(!>m-+nn=SkkSm*H$)io{mAOye70X0CjIhG+2Pxi7Nka3*kX!CU=- zGHH?Gk5E1(4Qfkmk)y^kchtIQ4=4#Y|B&Z5;zO9WW^~y;6}uL+cYQHfBqNLZYMGC| z?|GP}f}-gpibHG~6IhPPfHBXaJ;-$9fCQmwyIfdUW_f9i^mL7)H^6GuAA%L24yAN< z7j$-xD-4XqG%xq2yy=Vn>0)mW;2fw74Zc^i!cF`QwFRXe_b5w}M_PPR4j-nSEUfEhO5 z;}#i`q`2TA39PC}_Yld*tycN<_rHL~@)Cmw_TU*=Y7}X@DY9Bw&|uED_Ojv(i0H=L z+6GtGHrPD9M1D>qn;c}bWl?LjWNAK_GMFmpOpZGY4cjcOXe=&g*}qGrf3k(vCp<X1B|TEqESFEL@K@iSrF7eVhErL}=jW(>|0Lzc04ptr)#Yi5!_%_QBO-=ae>=(g z;gJM` z2lrxR^3=V&ba|nA3o&-l9%9bgLCwvg;xf0s$)OO!9xNC>h=VD1 zu}znnjNn6*Y*(Y+YEZ7#xcJB= z)~4%NYZ|FkPG(wNg@Js6Ba<5YCR`Sla!ieCWG7toQ30svb&E`&V)~&~{`kT3?0wmO zvKvh<{KGjsEya4P#oA_z+REQDwP!?v8HyB9D>v3n+|qsRZhf~KJ)K&}J@5UX=a24% z^n7c~jDsl+SQR>6a34?5Gq+kTE?-#WO)nee@T4uPB2nvl;@GBvo5!kobD`t^@KJD+agB z5_HcG2r&IpDL8OMlLDq6_JV>sR1#S&E{ggbZGLu+SKKhfzWsZ+aAuZb+T*$@kAx|B zV4$u9H`#lxg6pX?U5#o}WwWlcQ8THvbll*MjD+ElNqOY^bn>MPnZBG%aI>?pyqrR7 zjPWB!a-@eHj9mpuXP$g$oll%N&rL5n%)*yXp{xDWtQL#w6=TO;17Btev_@nF5Tu$Z#l|Z z)n<8pgJV~Zu(4Ffs8`UdO(}yJi9B^%rC}S`q@?u;zM~uBk0x8IqTeoCtRg{(&?5Ui zb=gTADK^+KV6%6JxCocp(g4N2QS$p!m}5mwKDfs3pE%3SM|N@b%jZbsN;GVT`PF5t zjTweUo+6XU_{ZPUTj&j1ugR8n3~hrc`Kd@i-5^Fi4S5SoFc%(Jy_EO^FoiY98OZrX z-um)E4&Qbo=cdn7w>2Jaybw#?UExt}D%4kNG?!}_4FkQIB$>{knh80ODkgk|AR&Pi z6^pK8ni{65V;Z8Btoe5eyW;LQi)LksT|=APw7V)N>vUxYr9Oe>g#Z8z|4BqaR2!x^ z@pzMu|KJ=qj}KBlwu0VYlBMjGl?A-Yc}6E@NF|fLWp@39VX%Yr$T!1rp{^VfkZzx zNf)4tbyh2@O!O^s^S&CH(hw(B$N7`T&v7uHhetO_7Di|^>s(n`#alni_|!#G$<&s? zf{;K4tTXcTINougIGQ7fIuJhbS40IAjedml-7#rC2nazL6o47%dSXYeUY_GEx0N{b z;_J}UX{Jw4%g@eOJ2>0iDY;y&B|vqtZBLFCdgTVKE9-a_o1~|cNTyMQ3}&X$%%oI| zbWPmKV#ubI=UKQ;1KX})Sr(e6(3daJS16K5=-A~M_LQ!OyA1gBWyqT;ici{P1}11U zYb=P#*~&$RCeD%)DpB`MV?D+rw^*)J-`m_MB=Pb=0s)~{-h1!AZ_gEnaWU2p?renk zr;xl<^<8}7{5&7LeT>0<2hkD<&Q70|fEgOhS;Jgyl~}h^)S3#_i)ETK6||;Ff3}EX zns}Oyql&DbMA!Y1KL3t2k#WVj#GrzSCMJ9}!*_YtVzWF?ZF5<&g8qRaJjZ4#cL4@< zzIY|Yz!Nn}I}g!n)>ta9L4BTL=`k5Ix7-aExNOX+JFpC`vJG4?^pJ`mSeNNv4&!Ak}&V5zaSnU(Ca}OfdCO)Xc#*qAfw0r1V9GD zvBWDR{sPPpC_moD(soc%iQE^d@rvRP)ocFUyBn95dC$Kcr69me3c*1^40f$9uSgeP zzT)uc;{_~rlDaC!3Pn;v-ee_*9fH$|zl&t$(+q!s!U~037IS^%`ua$wGnl$bLJS3n zG3?m7M7_Q=H^air874B9sI)R{YKKW?Q><6k5!0c~+W%l|eB_#z*~TJx@KiJ@?ROe{ z&h1Cn@cjON6{KZ`nq@c<>th<^C6R1mw~B^yO}#IIG$)xb$>(zviaGLq84`xSA-XOoR03T!upNh{ zZE@-8n=KSG;0`%;SwZ-5=+dnn4Ozr zy}W^$Oi<|0GdS2!Hk%@8nwW-2Pze%xN`?AFXzd~Ra2LX1__$>X@SDvh%NJL8@4v~=zhftr)pbst zoM(P5!+i4)Ggls`Z_p*3Nl6QmJXK7ji3=AQyW{RK!9{J(pRw3+=odIWeVk^qf#bAf zn^}B$Y-BgNz8x&CuCh@s`!RK($UreqUoI)*sYq0&Cg_z(rQV=guW{+rBeZOr)k~k_ z=q*5(;K))L9&F z`l&KEyy#w*R+p%XR&l*Xy;h;#Xkb}YJg3R<;4TvBK^7Mm7)Qt zBWa{DjTG|>S7_J@Pd@xrs;fWXrWX&$yNBg^Viiu5T)M~3W0NgDqi;{b#c%LZJ`jKz zCh`!-coOoz?_001Bp(RBQj#Mxw#CfZd4A@3dG33xOg(8ZGCCjwy@+LkH@0`%zbQ$R zf^N`4l@glo0|Lwo)2r+~cn9^(bz1eRbWzR7qUkBho9nEtFS1^%NDChy-N$ClVr6xO zY&Ju&(9huiy&WZ!NlHMqL>g*UPCfJ$`gXsJr;q(92X4?L_+ot_ZsAkBWF^yeU%gnD z>{?2(pgph=w@itV0MnQ512d1fL8mk?zZj5t0YnIN!%}UkZ2u+n4x?ZbOty;92d9r;sV`N5IDKD~FS*K7O zBVp#5UzkT#T}nB@No~wjALF|ZVVY?k`|2OD*{G5keLjoRU*h0R0~Cq{KM}<&QF89s zh_%0X-vA;o1M7^m&;T>#-Vc4)lfzJ5WVKu33%?jyW>CY2I&-ukArFl`RxCPp(Eanl zY(Ig}kH?u-(=dn?%psbxEo5{1bbXHb9&H6Hl z(sjJx)o+!<{%5}R->9w4&~jBU3$!+;*>imxP+uwQydgDeBK86^&~+nY5u0%DFMrtc zoX%cGB*TYR73@}+d8K7WV0J#OC5(U3?!;cSf%2a)=yyuOXJvMNqnAV$#x%(%ZCg^H znM?Cn%_&@E6tDa=s#mApv}uZIZu?6nvKXd;nXj_% z;FNsupP!xE(=FYU=vtO3E&69~e^>8TTgSBpMP^h8bv_C*oEGT?;C7&Pzu&7>&>kl1 zedH((i!jiza9X~#x5rxi;y@Pyif&R}zY@Fi&es405l`n#5(yz<_guv_9~~KAneuu8 zX4}WN9xrx#b-PXSF9c>hYsPvo&vsMV;oT?Hm5sW*Pe_a(Yk^P_j{FEKmI7`E?e>i% znbt|AlO0gDYwVb<#gb2W?%41PonUTv6_NVUK12tw@gqM=Bs$dUEoRzjA@aGx!K8(_ zw^3-Q{#|74&q?vvwrSLwIAU;46a=EImCsQUqKqwJG;~cS64&)hLjk6dP|0M)&0%4( z?1)VrO|uS5?6_`4fZ6NmG2JnAt5fy_Q)anmji$fIZWa-I-B+=E5IxV4>|jvv$XuQ? z=gy-@u>7PECay51Hd_|97()_@lz4`*OfI1^CK!XbC0h(^35ymJcPiOjDtb0u{OWtP zEjlr5U$6u-J_6%^@c#kK=KyHjI=e4G%+Cujg{nSK$a7%-9$xv1TP2tL=la{|LhN8dBS=HIn(qku2V(PGT=2xXLY{?+;#QO8O%`0YB$$= z8gu7qqVbWgy!&h|GqB1K#Q35Gh=N%S50yB$e>bnV^%f2t+%GNX(#&Ok<0BuZ)^wzR zyyYhlY^s|zYE_`S zq3?HH-)|?IZm^>QKknPl1@` zVyH{4+Q4dw&Z;2h{z#7q8H$m^Or~(Hh71F#Y>~$19N9iWjoN(onShL(umjAFZ*31| z_Y_77?n%Xx8M3&hBX7A*)1Y*HMBISmKitIszjP42lua^O zU$bquZ+f^~yp|8DI0?ZU-h5AR9qlS7;4HpNJWH$V1^6?8+B0)@5qYcCVAsyktzfp? zjsz43GKytAtTZfXYc&T&D+b!FU*4+TDw&MmA>H<;hddW0pl&cbjkqSgFED@OqaUYX2{1b=pdaSE*D4pEYpD7^+9Jx&u+IR400000 LNkvXXu0mjfj|49j literal 0 HcmV?d00001 diff --git a/repo/js/自动购买每天&3天&每周刷新食材/assets/images/琉鳞石.png b/repo/js/自动购买每天&3天&每周刷新食材/assets/images/琉鳞石.png new file mode 100644 index 0000000000000000000000000000000000000000..ad12872971163b761a96a0a9e39ca5efabebd936 GIT binary patch literal 10894 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 food.name === foodName || food.id === foodName + ); + if (foodEntry) { + userFoodsToBuy.add(foodEntry.id); + enabledFoodsList.push(foodEntry.name); // 保存商品名称用于显示 + } else { + log.warn(`未找到商品: ${foodName}`); + } + } + // 输出用户启用的商品列表 + if (enabledFoodsList.length > 0) { + log.info(`用户启用了下列商品:${enabledFoodsList.join(", ")}`); + } else { + log.warn("用户未启用任何商品"); + } + } else { + log.warn("用户未指定要购买的商品"); + } + return true; } catch (error) { log.error(`加载外部数据失败: ${error.message}`); @@ -135,6 +165,34 @@ async function loadExternalData() { } } +// ==================== 辅助函数:过滤用户要购买的商品 ==================== +function filterUserFoods(foodList) { + if (!foodList || !Array.isArray(foodList)) { + return []; + } + + return foodList.filter(food => { + // 查找商品对应的ID + const foodEntry = Object.values(foodsData).find( + f => f.name === food || f.id === food + ); + + if (!foodEntry) { + if (recordDebug) { + log.info(`[调试] 商品列表中未找到: ${food}`); + } + return false; + } + + // 检查是否在用户要购买的商品集合中 + const shouldBuy = userFoodsToBuy.has(foodEntry.id); + if (recordDebug && shouldBuy) { + log.info(`[调试] 用户选择购买: ${foodEntry.name} (ID: ${foodEntry.id})`); + } + return shouldBuy; + }); +} + // ==================== 辅助函数:获取调整后的星期几(1-7,周一为1) ==================== function getAdjustedDayOfWeek() { const now = new Date(); @@ -190,10 +248,10 @@ let followSystem = false; if (AKFValue === 0) { // 0 表示跟随系统判定 followSystem = true; - log.info("7天食材购买: 跟随系统判定"); + log.info("7天商品购买: 跟随系统判定"); } else { AFKDay = AKFValue === 7 ? 0 : AKFValue; - log.info(`7天食材购买: 每周${AFKDay === 0 ? "日" : AFKDay}购买`); + log.info(`7天商品购买: 每周${AFKDay === 0 ? "日" : AFKDay}购买`); } // 获取账号记录路径 @@ -294,26 +352,26 @@ function updateNpcRecord(records, npcName, refreshType, purchasedItems) { // 3天商品:基于基准日的3天周期计算 // 基准时间:2025-08-09 04:00 GMT+8 (转换为本地时间) const baseTime = new Date(2025, 7, 9, 4, 0, 0); // 2025-08-09 04:00 - + // 调整当前时间到4点基准 const adjustedNow = new Date(now); if (adjustedNow.getHours() < 4) { adjustedNow.setDate(adjustedNow.getDate() - 1); } adjustedNow.setHours(4, 0, 0, 0); - + // 计算距离基准日的天数 const timeDiff = adjustedNow.getTime() - baseTime.getTime(); const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); - + // 计算当前3天周期 const currentPeriod = Math.floor(daysDiff / 3); - + // 下一个3天周期的开始时间 const nextPeriod = currentPeriod + 1; refreshTime = new Date(baseTime); refreshTime.setDate(baseTime.getDate() + (nextPeriod * 3)); - + // 确保刷新时间是04:00 refreshTime.setHours(4, 0, 0, 0); } else if (refreshType === "7d") { @@ -372,15 +430,15 @@ function shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh = false) { if (forceRefresh) { // 强制刷新,但只购买已启用的商品 - if (npc._1d_foods) foodsToBuy["1d"] = filterEnabledFoods(npc._1d_foods); - if (npc._3d_foods) foodsToBuy["3d"] = filterEnabledFoods(npc._3d_foods); - if (npc._7d_foods) foodsToBuy["7d"] = filterEnabledFoods(npc._7d_foods); + if (npc._1d_foods) foodsToBuy["1d"] = filterUserFoods(npc._1d_foods); + if (npc._3d_foods) foodsToBuy["3d"] = filterUserFoods(npc._3d_foods); + if (npc._7d_foods) foodsToBuy["7d"] = filterUserFoods(npc._7d_foods); return foodsToBuy; } // 1天商品逻辑 if (npc._1d_foods) { - const enabledFoods = filterEnabledFoods(npc._1d_foods); + const enabledFoods = filterUserFoods(npc._1d_foods); if (enabledFoods.length > 0) { if (!npcRecord || !npcRecord["1d_time"]) { // 没有记录,需要购买已启用的商品 @@ -401,7 +459,7 @@ function shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh = false) { // 3天商品逻辑 if (npc._3d_foods) { - const enabledFoods = filterEnabledFoods(npc._3d_foods); + const enabledFoods = filterUserFoods(npc._3d_foods); if (enabledFoods.length > 0) { if (!npcRecord || !npcRecord["3d_time"]) { // 没有记录,直接购买 @@ -428,7 +486,7 @@ function shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh = false) { // 7天商品逻辑 if (npc._7d_foods) { - const enabledFoods = filterEnabledFoods(npc._7d_foods); + const enabledFoods = filterUserFoods(npc._7d_foods); if (enabledFoods.length > 0) { if (!npcRecord || !npcRecord["7d_time"]) { // 没有记录,直接购买 @@ -472,22 +530,6 @@ function shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh = false) { return foodsToBuy; } -// ==================== 新增函数:过滤已启用的食材 ==================== -function filterEnabledFoods(foodList) { - if (!foodList || !Array.isArray(foodList)) { - return []; - } - - return foodList.filter(food => { - // 检查食材是否在 settings 中被启用 - const foodId = translationList[food] || food; - return settings[foodId] === true; - }); -} - -const translationList = {}; -const enableFoods = new Set([]); - const othrtRo = { "buy": { "name": "购买按钮", @@ -831,27 +873,27 @@ async function buyFoods(npcName, npcRecords, currentPeriod) { if (recordDebug) { log.info(`[调试] 尝试购买: ${item}`); } - - // 将中文食材名转换为对应的英文ID + + // 查找商品对应的ID(支持中文名和英文ID) let foodId = null; - - // 首先在translationList中查找(中文名->英文ID) - if (translationList[item]) { - foodId = translationList[item]; - } else { - // 如果没有找到,直接在foodsData中查找是否有中文键 - foodId = Object.keys(foodsData).find(key => - foodsData[key].name === item || foodsData[key].id === item - ); + let foodName = item; + + // 直接在foodsData中查找 + for (const [id, food] of Object.entries(foodsData)) { + if (food.name === item || food.id === item) { + foodId = id; + foodName = food.name; + break; + } } - + if (!foodId) { - log.warn(`未找到食材 "${item}" 的识别数据,跳过`); + log.warn(`未找到商品 "${item}" 的识别数据,跳过`); continue; } - + if (!foodsData[foodId] || !foodsData[foodId].ro) { - log.warn(`食材 "${item}" (ID: ${foodId}) 未启用或没有识别对象,跳过`); + log.warn(`商品 "${foodName}" (ID: ${foodId}) 未启用或没有识别对象,跳过`); continue; } @@ -907,7 +949,7 @@ async function buyFoods(npcName, npcRecords, currentPeriod) { } } } - + if (purchasedFoods.length > 0) { log.info(`${npc.name} 购买完成,成功购买: ${purchasedFoods.join(", ")}`); } else { @@ -959,17 +1001,14 @@ async function initNpcData(records) { // 加载识别对象 async function initRo() { try { - // 加载识别对象 + // 加载识别对象 - 只加载用户选择的商品 for (let [key, item] of Object.entries(foodsData)) { - // 填充中英文对照表 - translationList[item.name] = item.id; - // 判断启动商品、加载识别对象 - if (settings[item.id]) { - enableFoods.add(item.id); + // 判断是否在用户选择的商品中 + if (userFoodsToBuy.has(item.id)) { item.ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync(item.file)); item.ro.Threshold = 0.75; item.ro.Use3Channels = true; - logConditional(`已启用食材: ${item.name} (${item.id})`); + logConditional(`已启用商品: ${item.name} (${item.id})`); } } // 加载其他识别对象 @@ -978,7 +1017,7 @@ async function initRo() { item.ro.Threshold = 0.85; } - logConditional(`总共启用了 ${enableFoods.size} 种食材`); + logConditional(`总共启用了 ${userFoodsToBuy.size} 种商品`); return true; } catch (error) { @@ -992,22 +1031,22 @@ async function initRo() { // ==================== 初始化账号 ==================== log.info(`当前账户: ${userName}`); - // ==================== 加载外部数据 ==================== + // ==================== 加载外部数据 ==================== if (!await loadExternalData()) { - log.error("食材或NPC数据加载失败,脚本终止"); + log.error("商品或NPC数据加载失败,脚本终止"); return; } // ==================== 初始化识别对象 ==================== await initRo(); - + logConditional("识别对象初始化完成"); // ==================== 加载NPC购买记录 ==================== let npcRecords = await loadNpcRecords(); - + logConditional(`已加载 ${npcRecords.length} 个NPC的购买记录`); - + if (recordDebug && npcRecords.length > 0) { log.info("[调试] 当前NPC记录:"); npcRecords.forEach(record => { @@ -1083,7 +1122,7 @@ async function initRo() { } } - log.info("=== 食材购买脚本执行完成 ==="); + log.info("=== 商品购买脚本执行完成 ==="); } catch (error) { log.error(`执行时发生错误: ${error.message}`); diff --git a/repo/js/自动购买每天&3天&每周刷新食材/manifest.json b/repo/js/自动购买每天&3天&每周刷新食材/manifest.json index 5189b8808..ad1f8c5df 100644 --- a/repo/js/自动购买每天&3天&每周刷新食材/manifest.json +++ b/repo/js/自动购买每天&3天&每周刷新食材/manifest.json @@ -1,8 +1,8 @@ { "manifest_version": 1, - "name": "自动购买每天&3天&每周刷新食材", - "version": "2.0.0", - "description": "自动购买每天&3天&每周刷新食材\n每天刷新食材:自动购买食材\n3天刷新食材:未到刷新日不购买该食材\n每周刷新食材:可指定每周购买食材", + "name": "自动购买每天&3天&每周刷新商品", + "version": "3.0.0", + "description": "自动购买每天&3天&每周刷新商品\n每天刷新商品:自动购买商品\n3天刷新商品:未到刷新日不购买该商品\n每周刷新商品:可指定每周购买商品", "authors": [ { "name": "蜜柑魚", @@ -10,7 +10,7 @@ } ], "tags": [ - "购买食材", + "购买商品", "模拟点击" ], "saved_files": [ diff --git a/repo/js/自动购买每天&3天&每周刷新食材/settings.json b/repo/js/自动购买每天&3天&每周刷新食材/settings.json index ff04c0f50..e7831620d 100644 --- a/repo/js/自动购买每天&3天&每周刷新食材/settings.json +++ b/repo/js/自动购买每天&3天&每周刷新食材/settings.json @@ -6,219 +6,15 @@ "default": "默认账户" }, { - "name": "ignoreRecords", - "type": "checkbox", - "label": "-----------------\n无视记录强制购买(不推荐)", - "default": false - }, - { - "name": "recordDebug", - "type": "checkbox", - "label": "记录调试模式(显示详细日志)", - "default": false - }, - { - "name": "disabledNpcs", + "name": "foodsToBuy", "type": "input-text", - "label": "禁用 NPC\n(多個NPC以空格隔)", - "default": "阿扎莱 皮托" - }, - { - "name": "圣水", - "type": "checkbox", - "label": "每天刷新食材\n\n圣水", - "default": false - }, - { - "name": "crab", - "type": "checkbox", - "label": "螃蟹", - "default": false - }, - { - "name": "salt", - "type": "checkbox", - "label": "盐", - "default": false - }, - { - "name": "pepper", - "type": "checkbox", - "label": "胡椒", - "default": false - }, - { - "name": "onion", - "type": "checkbox", - "label": "洋葱", - "default": false - }, - { - "name": "milk", - "type": "checkbox", - "label": "牛奶", - "default": false - }, - { - "name": "tomato", - "type": "checkbox", - "label": "番茄", - "default": false - }, - { - "name": "potato", - "type": "checkbox", - "label": "土豆", - "default": false - }, - { - "name": "wheat", - "type": "checkbox", - "label": "小麦", - "default": false - }, - { - "name": "rice", - "type": "checkbox", - "label": "稻米", - "default": false - }, - { - "name": "shrimp", - "type": "checkbox", - "label": "虾仁", - "default": false - }, - { - "name": "almond", - "type": "checkbox", - "label": "杏仁", - "default": false - }, - { - "name": "cabbage", - "type": "checkbox", - "label": "卷心菜", - "default": false - }, - { - "name": "tofu", - "type": "checkbox", - "label": "豆腐", - "default": false - }, - { - "name": "fish", - "type": "checkbox", - "label": "鱼肉", - "default": false - }, - { - "name": "coffeeBeans", - "type": "checkbox", - "label": "咖啡豆", - "default": false - }, - { - "name": "glabrousBeans", - "type": "checkbox", - "label": "秃秃豆", - "default": false - }, - { - "name": "rawMeat", - "type": "checkbox", - "label": "兽肉", - "default": false - }, - { - "name": "fermentedJuice", - "type": "checkbox", - "label": "发酵果实汁", - "default": false - }, - { - "name": "黑麦", - "type": "checkbox", - "label": "黑麦", - "default": false - }, - { - "name": "松茸", - "type": "checkbox", - "label": "-----------------\n3天刷新食材\n\n松茸", - "default": false - }, - { - "name": "huMengbu", - "type": "checkbox", - "label": "胡萝卜", - "default": false - }, - { - "name": "沉玉仙茗", - "type": "checkbox", - "label": "沉玉仙茗", - "default": false - }, - { - "name": "清心", - "type": "checkbox", - "label": "清心", - "default": false - }, - { - "name": "琉璃袋", - "type": "checkbox", - "label": "琉璃袋", - "default": false - }, - { - "name": "viola", - "type": "checkbox", - "label": "堇瓜", - "default": false - }, - { - "name": "Padisarah", - "type": "checkbox", - "label": "帕蒂沙兰", - "default": false - }, - { - "name": "romaritimeFlower", - "type": "checkbox", - "label": "海露花", - "default": false - }, - { - "name": "tidalga", - "type": "checkbox", - "label": "汐藻", - "default": false - }, - { - "name": "苦种", - "type": "checkbox", - "label": "苦种", - "default": false - }, - { - "name": "青蜜梅", - "type": "checkbox", - "label": "青蜜梅", - "default": false - }, - { - "name": "絶云椒椒", - "type": "checkbox", - "label": "絶云椒椒", - "default": false + "label": "要购买的商品(多个商品用空格分隔)\n示例:\"小麦 黑麦\"\n支援的 商人与商品详细 请前往 README.md 查看", + "default": "小麦 黑麦" }, { "name": "AKF", "type": "select", - "label": "-----------------\n每周刷新食材\n\n可选购买方式:\n0=跟随系统周期自动判定\n1-7=指定星期几购买(1=周一,7=周日)", + "label": "每周商品购买方式\n0=跟随系统周期自动判定\n1-7=指定星期几购买(1=周一,7=周日)", "options": [ "0", "1", @@ -232,9 +28,21 @@ "default": "0" }, { - "name": "蟹黃", + "name": "disabledNpcs", + "type": "input-text", + "label": "要禁用的NPC\n(多个NPC用空格分隔)\n示例:阿扎莱 皮托", + "default": "阿扎莱 皮托" + }, + { + "name": "ignoreRecords", "type": "checkbox", - "label": "蟹黃", + "label": "-----------------\n无视记录强制购买(不推荐)", + "default": false + }, + { + "name": "recordDebug", + "type": "checkbox", + "label": "记录调试模式(显示详细日志)", "default": false } ] \ No newline at end of file diff --git a/repo/js/自动购买每天&3天&每周刷新食材/商人与商品支持表.md b/repo/js/自动购买每天&3天&每周刷新食材/商人与商品支持表.md new file mode 100644 index 000000000..ca7b037c7 --- /dev/null +++ b/repo/js/自动购买每天&3天&每周刷新食材/商人与商品支持表.md @@ -0,0 +1,41 @@ +## 📋 商人与商品支持表 + +### 如何查看支持的商品? +- **查看本文件下方表格**:包含所有支持的商人与商品 +- **查看`assets/data/foods.json`**:所有商品的中文名称 + +### 商人信息总览 +| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 备注 | +|--------|--------|-------------|------------|-------------|------| +| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 白天出现 | +| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | 晚上出现 | +| 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - | +| 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | | +| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | | +| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | 白天出现 | +| 璃月-璃月港 | 老高 | 鱼肉 | - | - | | +| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | 晚上出现 | +| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | | +| 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | | +| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | | +| 稻妻-离岛 | 小畑 | 螃蟹、鱼肉、虾仁 | - | - | | +| 稻妻-稻妻城 | 葵 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | +| 稻妻-稻妻城 | 志村勘兵卫 | 鱼肉、螃蟹 | 堇瓜 | - | | +| 稻妻-海祇岛 | 清子 | - | - | 牛奶、番茄、土豆、小麦、豆腐 | | +| 须弥-须弥城 | 朱特 | - | 帕蒂沙兰 | - | | +| 须弥-奥摩斯港 | 布特罗斯 | 鱼肉、螃蟹、虾仁 | - | - | | +| 须弥-须弥城 | 珀姆 | 鱼肉、螃蟹、虾仁 | - | - | | +| 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | +| 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 | +| 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 | +| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 晚上出现 | +| 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | | +| 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | | +| 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | | +| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | | +| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | | +| 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | | +| 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | | +| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | | +| 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | | +| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | | diff --git a/repo/js/自动购买每天&3天&每周刷新食材/商人信息表.md b/repo/js/自动购买每天&3天&每周刷新食材/商人信息表.md new file mode 100644 index 000000000..aab43d462 --- /dev/null +++ b/repo/js/自动购买每天&3天&每周刷新食材/商人信息表.md @@ -0,0 +1,36 @@ + 商人信息表 + +| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 备注 | +|--------|--------|-------------|------------|-------------|------| +| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 白天出现 | +| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | 晚上出现 | +| 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - | +| 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | | +| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | | +| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | 白天出现 | +| 璃月-璃月港 | 老高 | 鱼肉 | - | - | | +| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | 晚上出现 | +| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | | +| 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | | +| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | | +| 稻妻-离岛 | 小畑 | 螃蟹、鱼肉、虾仁 | - | - | | +| 稻妻-稻妻城 | 葵 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | +| 稻妻-稻妻城 | 志村勘兵卫 | 鱼肉、螃蟹 | 堇瓜 | - | | +| 稻妻-海祇岛 | 清子 | - | - | 牛奶、番茄、土豆、小麦、豆腐 | | +| 须弥-须弥城 | 朱特 | - | 帕蒂沙兰 | - | | +| 须弥-奥摩斯港 | 布特罗斯 | 鱼肉、螃蟹、虾仁 | - | - | | +| 须弥-须弥城 | 珀姆 | 鱼肉、螃蟹、虾仁 | - | - | | +| 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | +| 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 | +| 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 | +| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 晚上出现 | +| 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | | +| 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | | +| 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | | +| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | | +| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | | +| 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | | +| 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | | +| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | | +| 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | | +| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | | \ No newline at end of file