JS : 自动购买每天&3天&每周刷新食材 改名 商品& 3.1.0 (#2754)

* Delete repo/js/自动购买每天&3天&每周刷新食材 directory

* JS : 自动购买每天&3天&每周刷新食材 改名 商品& 3.1.0

改名
增加禁用tag功能
修正部份商品名稱
修改說明
璃月-璃月港-老高,支援買完兩種魚
This commit is contained in:
this-Fish
2026-01-21 15:48:34 +08:00
committed by GitHub
parent d3073e20de
commit 921f8c87aa
77 changed files with 239 additions and 167 deletions

View File

@@ -1,10 +1,40 @@
# 自动购买商品 - 使用说明 # 自动购买每天&3天&每周刷新食材 - 使用说明
## 🚀 快速开始 ## 📝 功能说明
### 1. 基本设置 这个脚本可以自动购买原神游戏中各个商人的食材,支持三种刷新周期:
- **每天刷新食材**每天凌晨4点刷新
- **3天刷新食材**每3天刷新一次
- **每周刷新食材**:每周刷新,可指定购买日
- **记录系统**:避免重复购买,只购买刷新后的商品
- **标签系统**:支持按标签批量禁用商人
## ⚡ 快速开始
### 1. 准备工作 & 注意事项
1. **游戏分辨率**1920×1080 解析度**
2. **游戏时间**:脚本会自动调整白天/晚上时间
3. **背包空间**:确保有足够空间购买商品
4. **摩拉**:确保有足够的摩拉
5. **记录系统**:购买记录保存在 `record/账号名/` 目录下
6. **多人模式**:脚本只能在单人模式下运行
7. **刷新时间**基于游戏服务器时间GMT+8每天4点刷新
### 2. 首次使用
1. 打开脚本设置界面
2. 输入要购买的食材
3. 设置每周食材购买模式
4. 设置要禁用的NPC或标签
5. 保存设置
6. 在主界面运行脚本
## ⚙️ 设置说明
1. **账号名**:填写账号名,用于区分不同账号的购买记录 1. **账号名**:填写账号名,用于区分不同账号的购买记录
2. **要购买的商品**:输入商品名称,用空格分隔(支援的商人与商品请查看下方表格) 2. **要购买的商品**:输入商品名称,用空格分隔(支援的商人与商品请查看下方表格)
- 建议直接复制商品名称贴上输入栏
``` ```
示例:盐 胡椒 螃蟹 圣水 松茸 沉玉仙茗 蟹黄 示例:盐 胡椒 螃蟹 圣水 松茸 沉玉仙茗 蟹黄
``` ```
@@ -15,24 +45,27 @@
``` ```
示例:阿扎莱 皮托 示例:阿扎莱 皮托
``` ```
5. **无视购买记录强制购买**:开启后会忽略购买记录,重新购买所有商品 5. **禁用标签功能**:可以输入要禁用的标签(空格分隔),如:
6. **调试模式**:开启后显示详细执行日志 ```
示例:黑心商人 挪德卡莱
```
禁用后脚本会跳过这些NPC或带有指定标签的NPC不会前往购买。
可以使用国家/地区(如"蒙德"、"璃月")或其他标签(如商人信息总览中的标签)
6. **无视购买记录强制购买**:开启后会忽略购买记录,重新购买所有商品
7. **调试模式**:开启后显示详细执行日志
### 2. 智能购买记录系统 ### 购买记录系统说明
脚本会自动记录购买时间,避免重复购买: 脚本会自动记录购买时间,避免重复购买:
- **每天商品**购买后24小时凌晨4点刷新 1. **每天刷新食材** - 每天凌晨4点刷新
- **3天商品**:购买后3天刷新 2. **3天刷新食材** - 每3天刷新一次
- **每周商品**购买后7天刷新可设置购买日 3. **每周刷新食材** - 每周固定週一购买
购买记录保存在:`record/你填的账号名/records.json` 购买记录保存在:`record/你填的账号名/records.json`
- 下次执行时只购买已刷新商品 - 下次执行时只购买已刷新商品
- 可通过"无视购买记录强制购买"选项重置 - 可通过"无视购买记录强制购买"选项重置
### 3. 运行脚本
1. 确保游戏分辨率设置为 **1920×1080**
2. 游戏角色需在单人模式
3. 确保有足够的摩拉和背包空间
4. 运行脚本即可自动购买
## 📋 商人与商品支持表 ## 📋 商人与商品支持表
@@ -41,16 +74,16 @@
- **查看`assets/data/foods.json`**:所有商品的中文名称 - **查看`assets/data/foods.json`**:所有商品的中文名称
### 商人信息总览 ### 商人信息总览
| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 备注 | | 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 标签 |
|--------|--------|-------------|------------|-------------|------| |--------|--------|-------------|------------|-------------|------|
| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 白天出现 | | 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | |
| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | 晚上出现 | | 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | |
| 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - | | 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - |
| 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | | | 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | |
| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | | | 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | |
| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | 白天出现 | | 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | |
| 璃月-璃月港 | 老高 | 鱼肉 | - | - | | | 璃月-璃月港 | 老高 | 鱼肉、鱼肉2 | - | - | |
| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | 晚上出现 | | 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | |
| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | | | 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | |
| 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | | | 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | |
| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | | | 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | |
@@ -64,17 +97,22 @@
| 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | | 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | |
| 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 | | 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 |
| 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 | | 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 |
| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 晚上出现 | | 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 黑心商人 |
| 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | | | 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | |
| 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | | | 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | |
| 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | | | 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | |
| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | | | 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | |
| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | | | 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | 黑心商人 |
| 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | | | 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | |
| 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | | | 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | |
| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | | | 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | |
| 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | | | 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | |
| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | | | 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | 黑心商人 |
- 独立地图:指需要进入独立空间的特殊地图,这些地图部份路径无法使用地图追踪功能
- 黑心商人:指没有折扣的商人,价格较贵的商人
### **标签系统尚未完全添加,欢迎补充标签**
## 🔧 添加新商品 ## 🔧 添加新商品
@@ -125,7 +163,8 @@
"path": "assets/path/地区-位置-新商人名.json", "path": "assets/path/地区-位置-新商人名.json",
"_1d_foods": ["商品1", "商品2"], // 每天刷新 "_1d_foods": ["商品1", "商品2"], // 每天刷新
"_3d_foods": ["商品3"], // 3天刷新 "_3d_foods": ["商品3"], // 3天刷新
"_7d_foods": ["商品4"] // 每周刷新 "_7d_foods": ["商品4"], // 每周刷新
"tags": ["地区", "黑心商人"] // 商人标签
} }
``` ```
@@ -133,8 +172,8 @@
- `page`: 商店的总页数 - `page`: 商店的总页数
- `time`: 商人出现时间 - `time`: 商人出现时间
- `any`: 全天出现 - `any`: 全天出现
- `day`: 白天出现 - `day`:
- `night`: 晚上出现 - `night`:
- `path`: 路径文件位置 - `path`: 路径文件位置
### 4. 更新商人与商品支持表 ### 4. 更新商人与商品支持表
@@ -173,15 +212,6 @@ A: 游戏内的刷新时间是**每天凌晨4点**。脚本会考虑这个时间
- 如果当前时间在4点前视为前一天 - 如果当前时间在4点前视为前一天
- 购买记录基于4点刷新时间计算 - 购买记录基于4点刷新时间计算
## 📝 注意事项
1. **游戏时间**:脚本会自动调整白天/晚上时间
2. **背包空间**:确保有足够空间购买商品
3. **摩拉**:确保有足够的摩拉
4. **记录系统**:购买记录保存在 `record/账号名/` 目录下
5. **多人模式**:脚本只能在单人模式下运行
6. **刷新时间**基于游戏服务器时间GMT+8每天4点刷新
## 🤝 贡献指南 ## 🤝 贡献指南
欢迎提交新的商人和商品配置! 欢迎提交新的商人和商品配置!
@@ -189,9 +219,10 @@ A: 游戏内的刷新时间是**每天凌晨4点**。脚本会考虑这个时间
1. **提交新的商人**:包含路径文件和商人数据 1. **提交新的商人**:包含路径文件和商人数据
2. **提交新的商品**:包含图片和商品数据 2. **提交新的商品**:包含图片和商品数据
3. **更新文档**记得更新本README中的商人信息表 3. **更新文档**记得更新本README中的商人信息表
4. **问题反馈**提供详细的重现步骤和日志 4. **标签补充**欢迎为现有NPC添加合适的标签
5. **问题反馈**:提供详细的重现步骤和日志
--- ---
> 注意:本脚本仅供学习与研究使用,请遵守游戏使用条款。 > 注意:本脚本仅供学习与研究使用,请遵守游戏使用条款。
``` ``

View File

@@ -89,6 +89,11 @@
"name": "鱼肉", "name": "鱼肉",
"file": "assets/images/fish.png" "file": "assets/images/fish.png"
}, },
"fish2": {
"id": "fish",
"name": "鱼肉2",
"file": "assets/images/fish.png"
},
"huMengbu": { "huMengbu": {
"id": "huMengbu", "id": "huMengbu",
"name": "胡萝卜", "name": "胡萝卜",
@@ -139,10 +144,10 @@
"name": "琉璃袋", "name": "琉璃袋",
"file": "assets/images/琉璃袋.png" "file": "assets/images/琉璃袋.png"
}, },
"蟹": { "蟹": {
"id": "蟹", "id": "蟹",
"name": "蟹", "name": "蟹",
"file": "assets/images/蟹.png" "file": "assets/images/蟹.png"
}, },
"crab": { "crab": {
"id": "crab", "id": "crab",

View File

@@ -5,7 +5,8 @@
"page": 2, "page": 2,
"time": "day", "time": "day",
"path": "assets/path/蒙德-清泉镇-神奇的霍普金斯.json", "path": "assets/path/蒙德-清泉镇-神奇的霍普金斯.json",
"_1d_foods": ["圣水"] "_1d_foods": ["圣水"],
"tags": ["蒙德"]
}, },
"Blanche": { "Blanche": {
"name": "布兰琪", "name": "布兰琪",
@@ -13,7 +14,8 @@
"page": 2, "page": 2,
"time": "night", "time": "night",
"path": "assets/path/蒙德-蒙德城-布兰琪.json", "path": "assets/path/蒙德-蒙德城-布兰琪.json",
"_1d_foods": ["盐", "胡椒", "洋葱", "牛奶", "番茄", "卷心菜", "土豆", "小麦"] "_1d_foods": ["盐", "胡椒", "洋葱", "牛奶", "番茄", "卷心菜", "土豆", "小麦"],
"tags": ["蒙德"]
}, },
"莎拉": { "莎拉": {
"name": "莎拉", "name": "莎拉",
@@ -21,7 +23,8 @@
"page": 4, "page": 4,
"time": "night", "time": "night",
"path": "assets/path/蒙德-蒙德城-莎拉.json", "path": "assets/path/蒙德-蒙德城-莎拉.json",
"_7d_foods": ["蟹"] "_7d_foods": ["蟹"],
"tags": ["蒙德"]
}, },
"DongSheng": { "DongSheng": {
"name": "东升", "name": "东升",
@@ -29,7 +32,8 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/璃月-璃月港-东升.json", "path": "assets/path/璃月-璃月港-东升.json",
"_1d_foods": ["洋葱", "牛奶", "卷心菜", "土豆", "小麦", "稻米", "虾仁", "豆腐", "杏仁", "盐", "胡椒", "番茄"] "_1d_foods": ["洋葱", "牛奶", "卷心菜", "土豆", "小麦", "稻米", "虾仁", "豆腐", "杏仁", "盐", "胡椒", "番茄"],
"tags": ["璃月"]
}, },
"ChefMao": { "ChefMao": {
"name": "卯师父", "name": "卯师父",
@@ -38,7 +42,8 @@
"time": "any", "time": "any",
"path": "assets/path/璃月-璃月港-卯师父.json", "path": "assets/path/璃月-璃月港-卯师父.json",
"_1d_foods": ["鱼肉", "螃蟹"], "_1d_foods": ["鱼肉", "螃蟹"],
"_3d_foods": ["胡萝卜", "松茸", "绝云椒椒"] "_3d_foods": ["胡萝卜", "松茸", "绝云椒椒"],
"tags": ["璃月"]
}, },
"UncleSun": { "UncleSun": {
"name": "老孙", "name": "老孙",
@@ -46,7 +51,8 @@
"page": 1, "page": 1,
"time": "day", "time": "day",
"path": "assets/path/璃月-璃月港-老孙.json", "path": "assets/path/璃月-璃月港-老孙.json",
"_1d_foods": ["鱼肉", "螃蟹", "虾仁"] "_1d_foods": ["鱼肉", "螃蟹", "虾仁"],
"tags": ["璃月"]
}, },
"UncleGao": { "UncleGao": {
"name": "老高", "name": "老高",
@@ -54,7 +60,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/璃月-璃月港-老高.json", "path": "assets/path/璃月-璃月港-老高.json",
"_1d_foods": ["鱼肉"] "_1d_foods": ["鱼肉","鱼肉2"],
"tags": ["璃月"]
}, },
"阿桂": { "阿桂": {
"name": "阿桂", "name": "阿桂",
@@ -62,7 +69,8 @@
"page": 2, "page": 2,
"time": "night", "time": "night",
"path": "assets/path/璃月-璃月港-阿桂.json", "path": "assets/path/璃月-璃月港-阿桂.json",
"_3d_foods": ["清心", "琉璃袋"] "_3d_foods": ["清心", "琉璃袋"],
"tags": ["璃月"]
}, },
"菲尔戈黛特": { "菲尔戈黛特": {
"name": "菲尔戈黛特", "name": "菲尔戈黛特",
@@ -70,7 +78,8 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/璃月-望舒客栈-菲尔戈黛特.json", "path": "assets/path/璃月-望舒客栈-菲尔戈黛特.json",
"_3d_foods": ["松茸", "琉璃袋"] "_3d_foods": ["松茸", "琉璃袋"],
"tags": ["璃月"]
}, },
"丰泰": { "丰泰": {
"name": "丰泰", "name": "丰泰",
@@ -79,7 +88,8 @@
"time": "any", "time": "any",
"path": "assets/path/璃月-遗珑埠-丰泰.json", "path": "assets/path/璃月-遗珑埠-丰泰.json",
"_3d_foods": ["沉玉仙茗", "琉璃袋", "绝云椒椒"], "_3d_foods": ["沉玉仙茗", "琉璃袋", "绝云椒椒"],
"_7d_foods": ["蟹"] "_7d_foods": ["蟹"],
"tags": ["璃月"]
}, },
"连芳": { "连芳": {
"name": "连芳", "name": "连芳",
@@ -87,7 +97,8 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/璃月-遗珑埠-连芳.json", "path": "assets/path/璃月-遗珑埠-连芳.json",
"_3d_foods": ["沉玉仙茗"] "_3d_foods": ["沉玉仙茗"],
"tags": ["璃月"]
}, },
"Obata": { "Obata": {
"name": "小畑", "name": "小畑",
@@ -95,7 +106,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/稻妻-离岛-小畑.json", "path": "assets/path/稻妻-离岛-小畑.json",
"_1d_foods": ["螃蟹","鱼肉", "虾仁"] "_1d_foods": ["螃蟹","鱼肉", "虾仁"],
"tags": ["稻妻"]
}, },
"Aoi": { "Aoi": {
"name": "葵", "name": "葵",
@@ -103,7 +115,8 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/稻妻-稻妻城-葵.json", "path": "assets/path/稻妻-稻妻城-葵.json",
"_1d_foods": ["洋葱", "牛奶", "卷心菜", "土豆", "小麦", "稻米", "虾仁", "豆腐", "盐", "胡椒", "番茄"] "_1d_foods": ["洋葱", "牛奶", "卷心菜", "土豆", "小麦", "稻米", "虾仁", "豆腐", "盐", "胡椒", "番茄"],
"tags": ["稻妻"]
}, },
"ShimuraKanbei": { "ShimuraKanbei": {
"name": "志村勘兵卫", "name": "志村勘兵卫",
@@ -112,7 +125,8 @@
"time": "any", "time": "any",
"path": "assets/path/稻妻-稻妻城-志村勘兵卫.json", "path": "assets/path/稻妻-稻妻城-志村勘兵卫.json",
"_1d_foods": ["鱼肉", "螃蟹"], "_1d_foods": ["鱼肉", "螃蟹"],
"_3d_foods": ["堇瓜"] "_3d_foods": ["堇瓜"],
"tags": ["稻妻"]
}, },
"清子": { "清子": {
"name": "清子", "name": "清子",
@@ -120,7 +134,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/稻妻-海祇岛-清子.json", "path": "assets/path/稻妻-海祇岛-清子.json",
"_7d_foods": ["牛奶", "番茄", "土豆", "小麦", "豆腐"] "_7d_foods": ["牛奶", "番茄", "土豆", "小麦", "豆腐"],
"tags": ["稻妻"]
}, },
"Zhute": { "Zhute": {
"name": "朱特", "name": "朱特",
@@ -128,7 +143,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/须弥-须弥城-朱特.json", "path": "assets/path/须弥-须弥城-朱特.json",
"_3d_foods": ["帕蒂沙兰"] "_3d_foods": ["帕蒂沙兰"],
"tags": ["须弥"]
}, },
"Butrus": { "Butrus": {
"name": "布特罗斯", "name": "布特罗斯",
@@ -136,8 +152,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/须弥-奥摩斯港-布特罗斯.json", "path": "assets/path/须弥-奥摩斯港-布特罗斯.json",
"_1d_foods": ["鱼肉", "螃蟹", "虾仁"] "_1d_foods": ["鱼肉", "螃蟹", "虾仁"],
"tags": ["须弥"]
}, },
"Pam": { "Pam": {
"name": "珀姆", "name": "珀姆",
@@ -145,8 +161,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/须弥-须弥城-珀姆.json", "path": "assets/path/须弥-须弥城-珀姆.json",
"_1d_foods": ["鱼肉", "螃蟹", "虾仁"] "_1d_foods": ["鱼肉", "螃蟹", "虾仁"],
"tags": ["须弥"]
}, },
"Hamawi": { "Hamawi": {
"name": "哈马维", "name": "哈马维",
@@ -154,7 +170,8 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/须弥-须弥城-哈马维.json", "path": "assets/path/须弥-须弥城-哈马维.json",
"_1d_foods": ["洋葱", "牛奶", "卷心菜", "土豆", "小麦", "稻米", "虾仁", "豆腐", "盐", "胡椒", "番茄"] "_1d_foods": ["洋葱", "牛奶", "卷心菜", "土豆", "小麦", "稻米", "虾仁", "豆腐", "盐", "胡椒", "番茄"],
"tags": ["须弥"]
}, },
"Lambad": { "Lambad": {
"name": "兰巴德", "name": "兰巴德",
@@ -162,7 +179,8 @@
"page": 3, "page": 3,
"time": "any", "time": "any",
"path": "assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json", "path": "assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json",
"_1d_foods": ["鱼肉", "螃蟹"] "_1d_foods": ["鱼肉", "螃蟹"],
"tags": ["须弥","独立地图"]
}, },
"Enteka": { "Enteka": {
"name": "恩忒卡", "name": "恩忒卡",
@@ -170,16 +188,17 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json", "path": "assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json",
"_1d_foods": ["咖啡豆"] "_1d_foods": ["咖啡豆"],
} "tags": ["须弥","独立地图"]
, },
"Azalai": { "Azalai": {
"name": "阿扎莱", "name": "阿扎莱",
"enable": true, "enable": true,
"page": 2, "page": 2,
"time": "night", "time": "night",
"path": "assets/path/须弥-阿如村-阿扎莱.json", "path": "assets/path/须弥-阿如村-阿扎莱.json",
"_1d_foods": ["鱼肉", "兽肉", "秃秃豆"] "_1d_foods": ["鱼肉", "兽肉", "秃秃豆"],
"tags": ["须弥", "黑心商人"]
}, },
"巴巴克": { "巴巴克": {
"name": "巴巴克", "name": "巴巴克",
@@ -187,7 +206,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/须弥-奥摩斯港-巴巴克.json", "path": "assets/path/须弥-奥摩斯港-巴巴克.json",
"_3d_foods": ["清心", "琉璃袋"] "_3d_foods": ["清心", "琉璃袋"],
"tags": ["须弥"]
}, },
"Boucicaut": { "Boucicaut": {
"name": "布希柯", "name": "布希柯",
@@ -195,7 +215,8 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/枫丹-枫丹廷-布希柯.json", "path": "assets/path/枫丹-枫丹廷-布希柯.json",
"_1d_foods": ["枫达", "洋葱", "牛奶", "卷心菜", "土豆", "小麦", "秃秃豆", "杏仁", "发酵果实汁", "盐", "胡椒", "番茄"] "_1d_foods": ["枫达", "洋葱", "牛奶", "卷心菜", "土豆", "小麦", "秃秃豆", "杏仁", "发酵果实汁", "盐", "胡椒", "番茄"],
"tags": ["枫丹"]
}, },
"Arouet": { "Arouet": {
"name": "阿鲁埃", "name": "阿鲁埃",
@@ -203,7 +224,8 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/枫丹-枫丹廷-阿鲁埃.json", "path": "assets/path/枫丹-枫丹廷-阿鲁埃.json",
"_1d_foods": ["咖啡豆", "枫达"] "_1d_foods": ["咖啡豆", "枫达"],
"tags": ["枫丹"]
}, },
"Antman": { "Antman": {
"name": "安特曼", "name": "安特曼",
@@ -212,7 +234,8 @@
"time": "any", "time": "any",
"path": "assets/path/枫丹-白淞镇-安特曼.json", "path": "assets/path/枫丹-白淞镇-安特曼.json",
"_1d_foods": ["鱼肉", "螃蟹"], "_1d_foods": ["鱼肉", "螃蟹"],
"_3d_foods": ["海露花", "汐藻"] "_3d_foods": ["海露花", "汐藻"],
"tags": ["枫丹"]
}, },
"皮托": { "皮托": {
"name": "皮托", "name": "皮托",
@@ -221,7 +244,8 @@
"time": "any", "time": "any",
"path": "assets/path/枫丹-锈舵酒馆-皮托.json", "path": "assets/path/枫丹-锈舵酒馆-皮托.json",
"_1d_foods": ["牛奶"], "_1d_foods": ["牛奶"],
"_7d_foods": ["培根", "火腿", "香肠", "奶酪"] "_7d_foods": ["培根", "火腿", "香肠", "奶酪"],
"tags": ["枫丹", "黑心商人"]
}, },
"钦特利": { "钦特利": {
"name": "钦特利", "name": "钦特利",
@@ -229,7 +253,8 @@
"page": 1, "page": 1,
"time": "any", "time": "any",
"path": "assets/path/纳塔-圣火竞技场-钦特利.json", "path": "assets/path/纳塔-圣火竞技场-钦特利.json",
"_3d_foods": ["青蜜莓", "苦种"] "_3d_foods": ["青蜜莓", "苦种"],
"tags": ["纳塔"]
}, },
"夏安卡": { "夏安卡": {
"name": "夏安卡", "name": "夏安卡",
@@ -237,7 +262,8 @@
"page": 3, "page": 3,
"time": "any", "time": "any",
"path": "assets/path/纳塔-圣火竞技场-夏安卡.json", "path": "assets/path/纳塔-圣火竞技场-夏安卡.json",
"_7d_foods": ["蟹"] "_7d_foods": ["蟹"],
"tags": ["纳塔"]
}, },
"Bunama": { "Bunama": {
"name": "布纳马", "name": "布纳马",
@@ -245,18 +271,18 @@
"page": 2, "page": 2,
"time": "any", "time": "any",
"path": "assets/path/纳塔-圣火竞技场-布纳马.json", "path": "assets/path/纳塔-圣火竞技场-布纳马.json",
"_1d_foods": ["盐", "胡椒", "小麦", "洋葱", "牛奶", "番茄", "卷心菜", "土豆", "秃秃豆"] "_1d_foods": ["盐", "胡椒", "小麦", "洋葱", "牛奶", "番茄", "卷心菜", "土豆", "秃秃豆"],
} "tags": ["纳塔"]
, },
"采若": { "采若": {
"name": "采若", "name": "采若",
"enable": true, "enable": true,
"page": 3, "page": 3,
"time": "any", "time": "any",
"path": "assets/path/挪德卡莱-那夏镇-采若.json", "path": "assets/path/挪德卡莱-那夏镇-采若.json",
"_1d_foods": ["黑麦", "盐", "胡椒", "洋葱", "牛奶", "番茄", "卷心菜", "土豆", "小麦"] "_1d_foods": ["黑麦", "盐", "胡椒", "洋葱", "牛奶", "番茄", "卷心菜", "土豆", "小麦"],
} "tags": ["挪德卡莱"]
, },
"科菲策": { "科菲策": {
"name": "科菲策", "name": "科菲策",
"enable": true, "enable": true,
@@ -264,8 +290,7 @@
"time": "any", "time": "any",
"path": "assets/path/挪德卡莱-皮拉米达城-科菲策.json", "path": "assets/path/挪德卡莱-皮拉米达城-科菲策.json",
"_1d_foods": ["牛奶", "咖啡豆"], "_1d_foods": ["牛奶", "咖啡豆"],
"_3d_foods": ["微光角菌", "琉鳞石"] "_3d_foods": ["微光角菌", "琉鳞石"],
"tags": ["挪德卡莱"]
} }
} }

View File

@@ -126,10 +126,10 @@ async function loadExternalData() {
foodsData = JSON.parse(foodsContent); foodsData = JSON.parse(foodsContent);
logConditional(`已加载商品数据: ${Object.keys(foodsData).length} 种商品`); logConditional(`已加载商品数据: ${Object.keys(foodsData).length} 种商品`);
// 加载NPC数据 // 加载商人数据
const npcsContent = await file.readText("assets/data/npcs.json"); const npcsContent = await file.readText("assets/data/npcs.json");
npcData = JSON.parse(npcsContent); npcData = JSON.parse(npcsContent);
logConditional(`已加载NPC数据: ${Object.keys(npcData).length}NPC`); logConditional(`已加载商人数据: ${Object.keys(npcData).length}商人`);
// 解析用户要购买的商品列表 // 解析用户要购买的商品列表
const foodsInput = (settings.foodsToBuy || "").trim(); const foodsInput = (settings.foodsToBuy || "").trim();
@@ -234,10 +234,16 @@ let userName = settings.userName || "默认账户";
const ignoreRecords = settings.ignoreRecords || false; const ignoreRecords = settings.ignoreRecords || false;
const recordDebug = settings.recordDebug || false; const recordDebug = settings.recordDebug || false;
// 解析禁用的NPC列表 // 解析禁用的商人列表
const disabledNpcs = (settings.disabledNpcs || "").split(/\s+/).filter(npc => npc.trim() !== ""); const disabledNpcs = (settings.disabledNpcs || "").split(/\s+/).filter(npc => npc.trim() !== "");
if (disabledNpcs.length > 0) { if (disabledNpcs.length > 0) {
log.info(`已禁用NPC: ${disabledNpcs.join(", ")}`); log.info(`已禁用商人: ${disabledNpcs.join(", ")}`);
}
// 解析禁用的标签列表
const disabledTags = (settings.disabledTags || "").split(/\s+/).filter(tag => tag.trim() !== "");
if (disabledTags.length > 0) {
log.info(`已禁用标签: ${disabledTags.join(", ")}`);
} }
// 修改AKF设置处理 // 修改AKF设置处理
@@ -283,7 +289,7 @@ async function ensureAccountDirectory(accountName) {
} }
} }
// ==================== 新增函数:读取NPC记录文件 ==================== // ==================== 新增函数:读取商人记录文件 ====================
async function loadNpcRecords() { async function loadNpcRecords() {
const recordPath = getRecordPath(userName); const recordPath = getRecordPath(userName);
try { try {
@@ -297,7 +303,20 @@ async function loadNpcRecords() {
return []; return [];
} }
// ==================== 保存NPC记录 ==================== // ==================== 辅助函数:从路径中提取显示名称 ====================
function getDisplayNameFromPath(path) {
try {
// 从路径中提取文件名(不带.json扩展名
// 例如assets/path/璃月-璃月港-阿桂.json → 璃月-璃月港-阿桂
const fileName = path.split('/').pop(); // 获取最后一部分
return fileName.replace('.json', ''); // 移除.json扩展名
} catch (error) {
// 如果解析失败,返回原始路径或默认值
return path || "未知位置";
}
}
// ==================== 保存商人记录 ====================
async function saveNpcRecords(records) { async function saveNpcRecords(records) {
const recordPath = getRecordPath(userName); const recordPath = getRecordPath(userName);
try { try {
@@ -309,12 +328,12 @@ async function saveNpcRecords(records) {
} }
} }
// ==================== 获取NPC记录 ==================== // ==================== 获取商人记录 ====================
function getNpcRecord(records, npcName) { function getNpcRecord(records, npcName) {
return records.find(record => record.npcname === npcName); return records.find(record => record.npcname === npcName);
} }
// ==================== 更新NPC记录 ==================== // ==================== 更新商人记录 ====================
function updateNpcRecord(records, npcName, refreshType, purchasedItems) { function updateNpcRecord(records, npcName, refreshType, purchasedItems) {
// 如果没有购买任何商品,不更新记录 // 如果没有购买任何商品,不更新记录
if (!purchasedItems || purchasedItems.length === 0) { if (!purchasedItems || purchasedItems.length === 0) {
@@ -393,7 +412,7 @@ function updateNpcRecord(records, npcName, refreshType, purchasedItems) {
return records; return records;
} }
// ==================== 新增函数:计算基准日周期 ==================== // ==================== 计算3天刷新商品基准日周期 ====================
function getBasePeriod(currentDate) { function getBasePeriod(currentDate) {
// 基准时间2025-08-08 20:00 UTC (对应2025-08-09 04:00 GMT+8) // 基准时间2025-08-08 20:00 UTC (对应2025-08-09 04:00 GMT+8)
const baseTime = Date.UTC(2025, 7, 8, 20, 0, 0); const baseTime = Date.UTC(2025, 7, 8, 20, 0, 0);
@@ -797,19 +816,22 @@ async function spikChat(npcName) {
} }
} }
// 修改后的购买逻辑 // 主要购买逻辑
async function buyFoods(npcName, npcRecords, currentPeriod) { async function buyFoods(npcName, npcRecords, currentPeriod) {
// 设置脚本环境的游戏分辨率和DPI缩放 // 设置脚本环境的游戏分辨率和DPI缩放
setGameMetrics(3840, 2160, 1.5); setGameMetrics(3840, 2160, 1.5);
// 获取NPC数据 // 获取商人数据
const npc = npcData[npcName]; const npc = npcData[npcName];
const npcRecord = getNpcRecord(npcRecords, npc.name); const npcRecord = getNpcRecord(npcRecords, npc.name);
// 获取显示名称
const displayName = getDisplayNameFromPath(npc.path);
if (recordDebug) { if (recordDebug) {
log.info(`[调试] 开始处理NPC: ${npc.name}`); log.info(`[调试] 开始处理: ${displayName}`);
if (npcRecord) { if (npcRecord) {
log.info(`[调试] NPC当前记录: 1d=${npcRecord["1d_time"] || "无"}, 3d=${npcRecord["3d_time"] || "无"}, 7d=${npcRecord["7d_time"] || "无"}`); log.info(`[调试] 当前记录: 1d=${npcRecord["1d_time"] || "无"}, 3d=${npcRecord["3d_time"] || "无"}, 7d=${npcRecord["7d_time"] || "无"}`);
} }
} }
@@ -817,7 +839,7 @@ async function buyFoods(npcName, npcRecords, currentPeriod) {
const foodsToBuy = shouldBuyFoods(npc, npcRecord, currentPeriod, ignoreRecords); const foodsToBuy = shouldBuyFoods(npc, npcRecord, currentPeriod, ignoreRecords);
if (recordDebug) { if (recordDebug) {
log.info(`[调试] ${npc.name} 购买判断结果:`); log.info(`[调试] ${displayName} 购买判断结果:`);
log.info(`[调试] 1天商品: ${foodsToBuy["1d"].join(", ")}`); log.info(`[调试] 1天商品: ${foodsToBuy["1d"].join(", ")}`);
log.info(`[调试] 3天商品: ${foodsToBuy["3d"].join(", ")}`); log.info(`[调试] 3天商品: ${foodsToBuy["3d"].join(", ")}`);
log.info(`[调试] 7天商品: ${foodsToBuy["7d"].join(", ")}`); log.info(`[调试] 7天商品: ${foodsToBuy["7d"].join(", ")}`);
@@ -830,7 +852,7 @@ async function buyFoods(npcName, npcRecords, currentPeriod) {
if (foodsToBuy["7d"]) allFoodsToBuy.push(...foodsToBuy["7d"]); if (foodsToBuy["7d"]) allFoodsToBuy.push(...foodsToBuy["7d"]);
if (allFoodsToBuy.length === 0) { if (allFoodsToBuy.length === 0) {
logConditional(`${npc.name} 没有需要购买的商品`); logConditional(`${displayName} 没有需要购买的商品`);
return { return {
purchased: [], purchased: [],
"1d": [], "1d": [],
@@ -839,7 +861,7 @@ async function buyFoods(npcName, npcRecords, currentPeriod) {
}; };
} }
logConditional(`${npc.name} 购买列表: ${allFoodsToBuy.join(", ")}`); logConditional(`${displayName} 购买列表: ${allFoodsToBuy.join(", ")}`);
let tempFoods = [...allFoodsToBuy]; let tempFoods = [...allFoodsToBuy];
const purchasedFoods = []; const purchasedFoods = [];
@@ -951,9 +973,9 @@ async function buyFoods(npcName, npcRecords, currentPeriod) {
} }
if (purchasedFoods.length > 0) { if (purchasedFoods.length > 0) {
log.info(`${npc.name} 购买完成,成功购买: ${purchasedFoods.join(", ")}`); log.info(`${displayName} 购买完成,成功购买: ${purchasedFoods.join(", ")}`);
} else { } else {
logConditional(`${npc.name} 没有成功购买任何商品`); logConditional(`${displayName} 没有成功购买任何商品`);
} }
// 返回购买结果 // 返回购买结果
@@ -965,16 +987,27 @@ async function buyFoods(npcName, npcRecords, currentPeriod) {
}; };
} }
// 修改后的初始化NPC商品 // 初始化商人商品
async function initNpcData(records) { async function initNpcData(records) {
for (let [key, npc] of Object.entries(npcData)) { for (let [key, npc] of Object.entries(npcData)) {
// 检查是否在禁用列表中 // 检查是否在禁用列表中
if (disabledNpcs.includes(npc.name)) { if (disabledNpcs.includes(npc.name)) {
npc.enable = false; npc.enable = false;
logConditional(`已禁用NPC: ${npc.name}`); const displayName = getDisplayNameFromPath(npc.path);
logConditional(`已禁用: ${displayName}`);
continue; continue;
} }
// 检查是否通过标签禁用
if (npc.tags && Array.isArray(npc.tags)) {
const hasDisabledTag = npc.tags.some(tag => disabledTags.includes(tag));
if (hasDisabledTag) {
npc.enable = false;
logConditional(`按标签禁用NPC: ${npc.name} (标签: ${npc.tags.join(", ")})`);
continue;
}
}
const npcRecord = getNpcRecord(records, npc.name); const npcRecord = getNpcRecord(records, npc.name);
// 判断是否需要强制刷新 // 判断是否需要强制刷新
@@ -993,7 +1026,8 @@ async function initNpcData(records) {
npc.enable = npc.enable && hasFoodsToBuy; npc.enable = npc.enable && hasFoodsToBuy;
if (recordDebug && !npc.enable && hasFoodsToBuy) { if (recordDebug && !npc.enable && hasFoodsToBuy) {
log.info(`${npc.name} 有商品需要购买但NPC被禁用`); const displayName = getDisplayNameFromPath(npc.path);
log.info(`${displayName} 有商品需要购买但商人被禁用`);
} }
} }
} }
@@ -1033,7 +1067,7 @@ async function initRo() {
// ==================== 加载外部数据 ==================== // ==================== 加载外部数据 ====================
if (!await loadExternalData()) { if (!await loadExternalData()) {
log.error("商品或NPC数据加载失败,脚本终止"); log.error("商品或商人数据加载失败,脚本终止");
return; return;
} }
@@ -1042,13 +1076,13 @@ async function initRo() {
logConditional("识别对象初始化完成"); logConditional("识别对象初始化完成");
// ==================== 加载NPC购买记录 ==================== // ==================== 加载商人购买记录 ====================
let npcRecords = await loadNpcRecords(); let npcRecords = await loadNpcRecords();
logConditional(`已加载 ${npcRecords.length}NPC的购买记录`); logConditional(`已加载 ${npcRecords.length}商人的购买记录`);
if (recordDebug && npcRecords.length > 0) { if (recordDebug && npcRecords.length > 0) {
log.info("[调试] 当前NPC记录:"); log.info("[调试] 当前商人记录:");
npcRecords.forEach(record => { npcRecords.forEach(record => {
log.info(`[调试] ${record.npcname}:`); log.info(`[调试] ${record.npcname}:`);
if (record["1d_time"]) log.info(`[调试] 1天刷新: ${record["1d_time"]}`); if (record["1d_time"]) log.info(`[调试] 1天刷新: ${record["1d_time"]}`);
@@ -1057,14 +1091,14 @@ async function initRo() {
}); });
} }
// ==================== 初始化NPC数据 ==================== // ==================== 初始化商人数据 ====================
await initNpcData(npcRecords); await initNpcData(npcRecords);
logConditional("NPC数据初始化完成"); logConditional("商人数据初始化完成");
// 统计启用的NPC数量 // 统计启用的商人数量
const enabledNpcs = Object.values(npcData).filter(npc => npc.enable); const enabledNpcs = Object.values(npcData).filter(npc => npc.enable);
log.info(`本次执行将处理 ${enabledNpcs.length}NPC`); log.info(`本次执行将处理 ${enabledNpcs.length}商人`);
// ==================== 自动购买 ==================== // ==================== 自动购买 ====================
// 获取当前时间和周期 // 获取当前时间和周期
@@ -1080,13 +1114,15 @@ async function initRo() {
for (let [key, npc] of Object.entries(npcData)) { for (let [key, npc] of Object.entries(npcData)) {
if (npc.enable) { if (npc.enable) {
npcIndex++; npcIndex++;
// 获取显示名称(从路径中提取)
const displayName = getDisplayNameFromPath(npc.path);
log.info(`当前进度:${npcIndex}/${enabledNpcs.length}`); log.info(`当前进度:${npcIndex}/${enabledNpcs.length}`);
log.info(`开始前往NPC ${npc.name} 购买`); log.info(`开始前往: ${displayName}`); // 修改这里
await genshin.returnMainUi(); await genshin.returnMainUi();
// 地图追踪开始 // 地图追踪开始
await fakeLog(npc.name, false, true, 0); await fakeLog(displayName, false, true, 0);
// 设置游戏时间 // 设置游戏时间
if (npc.time === "night") { if (npc.time === "night") {
@@ -1104,20 +1140,20 @@ async function initRo() {
// 返回主界面 // 返回主界面
await genshin.returnMainUi(); await genshin.returnMainUi();
log.info(`完成购买NPC: ${npc.name}`); log.info(`完成: ${displayName}`);
// 伪造日志任务结束 // 伪造日志任务结束
await fakeLog(npc.name, false, false, 0); await fakeLog(displayName, false, false, 0);
// NPC之间等待 // 商人之间等待
if (npcIndex < enabledNpcs.length) { if (npcIndex < enabledNpcs.length) {
logConditional("等待2秒后处理下一个NPC"); logConditional("等待1.5秒后处理下一个商人");
await sleep(2000); await sleep(1500);
} }
} }
else { else {
if (recordDebug) { if (recordDebug) {
log.info(`[调试] 跳过未启用的NPC: ${npc.name}`); log.info(`[调试] 跳过未启用的商人: ${npc.name}`);
} }
} }
} }

View File

@@ -1,7 +1,7 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "自动购买每天&3天&每周刷新商品", "name": "自动购买每天&3天&每周刷新商品",
"version": "3.0.0", "version": "3.1.0",
"description": "自动购买每天&3天&每周刷新商品\n每天刷新商品自动购买商品\n3天刷新商品未到刷新日不购买该商品\n每周刷新商品可指定每周购买商品", "description": "自动购买每天&3天&每周刷新商品\n每天刷新商品自动购买商品\n3天刷新商品未到刷新日不购买该商品\n每周刷新商品可指定每周购买商品",
"authors": [ "authors": [
{ {

View File

@@ -8,7 +8,7 @@
{ {
"name": "foodsToBuy", "name": "foodsToBuy",
"type": "input-text", "type": "input-text",
"label": "要购买的商品(多个商品用空格分隔)\n示例\"小麦 黑麦\"\n支援的 商人与商品详细 请前往 README.md 查看", "label": "要购买的商品(多个商品用空格分隔)\n示例\"小麦 黑麦\"\n\n支援的 商人与商品详细 请前往 README.md 查看\n建议直接复制商品名称贴上输入栏",
"default": "小麦 黑麦" "default": "小麦 黑麦"
}, },
{ {
@@ -33,6 +33,12 @@
"label": "要禁用的NPC\n多个NPC用空格分隔\n示例阿扎莱 皮托", "label": "要禁用的NPC\n多个NPC用空格分隔\n示例阿扎莱 皮托",
"default": "阿扎莱 皮托" "default": "阿扎莱 皮托"
}, },
{
"name": "disabledTags",
"type": "input-text",
"label": "禁用标签\n多个标签以空格分隔黑心商人 挪德卡莱)",
"default": ""
},
{ {
"name": "ignoreRecords", "name": "ignoreRecords",
"type": "checkbox", "type": "checkbox",

View File

@@ -5,16 +5,16 @@
- **查看`assets/data/foods.json`**:所有商品的中文名称 - **查看`assets/data/foods.json`**:所有商品的中文名称
### 商人信息总览 ### 商人信息总览
| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 备注 | | 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 标签 |
|--------|--------|-------------|------------|-------------|------| |--------|--------|-------------|------------|-------------|------|
| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 白天出现 | | 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | |
| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | 晚上出现 | | 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | |
| 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - | | 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - |
| 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | | | 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | |
| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | | | 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | |
| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | 白天出现 | | 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | |
| 璃月-璃月港 | 老高 | 鱼肉 | - | - | | | 璃月-璃月港 | 老高 | 鱼肉、鱼肉2 | - | - | |
| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | 晚上出现 | | 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | |
| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | | | 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | |
| 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | | | 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | |
| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | | | 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | |
@@ -28,14 +28,19 @@
| 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | | | 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | |
| 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 | | 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 |
| 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 | | 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 |
| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 晚上出现 | | 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 黑心商人 |
| 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | | | 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | |
| 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | | | 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | |
| 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | | | 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | |
| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | | | 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | |
| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | | | 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | 黑心商人 |
| 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | | | 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | |
| 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | | | 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | |
| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | | | 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | |
| 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | | | 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | |
| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | | | 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | 黑心商人 |
- 独立地图:指需要进入独立空间的特殊地图,这些地图部份路径无法使用地图追踪功能
- 黑心商人:指没有折扣的商人,价格较贵的商人
### **标签系统尚未完全添加,欢迎补充标签**

View File

@@ -1,36 +0,0 @@
商人信息表
| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 备注 |
|--------|--------|-------------|------------|-------------|------|
| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 白天出现 |
| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | 晚上出现 |
| 蒙德-蒙德城 | 莎拉 | - | - | 蟹黄 | - |
| 璃月-璃月港 | 东升 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁、盐、胡椒、番茄 | - | - | |
| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 胡萝卜、松茸、绝云椒椒 | - | |
| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | 白天出现 |
| 璃月-璃月港 | 老高 | 鱼肉 | - | - | |
| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋 | - | 晚上出现 |
| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、琉璃袋 | - | |
| 璃月-遗珑埠 | 丰泰 | - | 沉玉仙茗、琉璃袋、绝云椒椒 | 蟹黄 | |
| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | |
| 稻妻-离岛 | 小畑 | 螃蟹、鱼肉、虾仁 | - | - | |
| 稻妻-稻妻城 | 葵 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | |
| 稻妻-稻妻城 | 志村勘兵卫 | 鱼肉、螃蟹 | 堇瓜 | - | |
| 稻妻-海祇岛 | 清子 | - | - | 牛奶、番茄、土豆、小麦、豆腐 | |
| 须弥-须弥城 | 朱特 | - | 帕蒂沙兰 | - | |
| 须弥-奥摩斯港 | 布特罗斯 | 鱼肉、螃蟹、虾仁 | - | - | |
| 须弥-须弥城 | 珀姆 | 鱼肉、螃蟹、虾仁 | - | - | |
| 须弥-须弥城 | 哈马维 | 洋葱、牛奶、卷心菜、土豆、小麦、稻米、虾仁、豆腐、盐、胡椒、番茄 | - | - | |
| 须弥-须弥城 | 兰巴德 | 鱼肉、螃蟹 | - | - | 独立地图 |
| 须弥-须弥城 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 |
| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | - | - | 晚上出现 |
| 须弥-奥摩斯港 | 巴巴克 | - | 清心、琉璃袋 | - | |
| 枫丹-枫丹廷 | 布希柯 | 枫达、洋葱、牛奶、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁、盐、胡椒、番茄 | - | - | |
| 枫丹-枫丹廷 | 阿鲁埃 | 咖啡豆、枫达 | - | - | |
| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹 | 海露花、汐藻 | - | |
| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | |
| 纳塔-圣火竞技场 | 钦特利 | - | 青蜜莓、苦种 | - | |
| 纳塔-圣火竞技场 | 夏安卡 | - | - | 蟹黄 | |
| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | - | - | |
| 挪德卡莱-那夏镇 | 采若 | 黑麦、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | |
| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | |