diff --git a/repo/js/AutoArtifactsPro/README.md b/repo/js/AutoArtifactsPro/README.md index 0516f9a9..ead55df6 100644 --- a/repo/js/AutoArtifactsPro/README.md +++ b/repo/js/AutoArtifactsPro/README.md @@ -1,4 +1,4 @@ -# 自动好感与狗粮脚本 +# 自动好感与全富6A1B狗粮脚本 **重要免责声明:** @@ -20,30 +20,96 @@ --- -## 简介 -1. 本脚本可自动完成好感任务并执行狗粮路线,通过识图和路径追踪实现自动化操作。 +## 一、调查点类型收益 -## 文件结构 +| 类型 | 等效1星圣遗物 | 平均经验值 | 平均摩拉 | 计算公式 | +|------|--------------|------------|----------|----------| +| 穷点 | 1.35个 | 567 EXP | 0 | 65%出1星(420EXP)+35%出2星(840EXP) | +| 富点 | 1.5个 | 630 EXP | 200 | 50%出1个1星(420EXP)+50%出2个1星(840EXP) | + +## 二、路线配置与收益 + +### 1. 主要路线参数 + +| 路线名称 | 总点数 | 富点数量 | 穷点数量 | 总经验值 | 总摩拉 | 运行时间 | +|----------|--------|----------|----------|----------|--------|----------| +| 富A路线 | 162 | 104 | 58 | 98,406 | 20,800 | 68分钟 | +| 富B路线 | 127 | 69 | 58 | 76,356 | 13,800 | 60分钟 | +| ABE A线 | 137 | 33 | 104 | 77,742 | 6,600 | 53分钟 | +| ABE B线 | 138 | 34 | 104 | 77,868 | 6,800 | 53分钟 | + +### 2. 经验值计算公式 + +`总经验 = (富点数×1.5 + 穷点数×1.35) × 420` + +## 三、周循环方案对比 + +### 1. 富6A1B方案 + +- **执行方式**: + - 连续6天跑富A路线(富A与富A间隔≥24H+5min) + - 第7天跑富B路线(与富A间隔≥12H+5min) +- **周总收益**: + - 经验:6×98,406 + 76,356 = 666,792 EXP + - 摩拉:6×20,800 + 13,800 = 138,600 + +### 2. 1A1B方案(ABE基准) + +- **执行方式**: + - 每天交替跑ABE A线和B线(点位不重叠,无要求) +- **周总收益**: + - 经验:3.5×(77,742+77,868) = 544,677 EXP + - 摩拉:3.5×(6,600+6,800) = 46,900 + +### 3. 收益对比表 + +| 指标 | 6A1B方案 | 1A1B方案 | 差值 | 增幅 | +|----------|----------|----------|----------|---------| +| 周经验 | 666,792 | 544,677 | +122,115 | +22.4% | +| 周摩拉 | 138,600 | 46,900 | +91,700 | +195.5% | +| 周耗时 | 7.8小时 | 6.2小时 | +1.6小时 | - | + +## 四、路径结构 + +1. 00激活(少数点位需要提前转变为发光点) +2. 00清怪(部分优质富点有小怪镇守) +3. 01普通(98个调查点路径) +4. 02收尾(超出100以外的调查点) +5. 03额外(不受上限影响消失) + +## 五、队伍配置 + +- **双风阵容**:早柚+枫原万叶/砂糖(提升移动效率) +- **迪希雅**:白天时段提供移速加成 + +## 六、选择建议 + +1. **追求极限收益**:采用6A1B方案,每周可多获得12.2万经验 +2. **时间有限玩家**:使用1A1B方案,保持基础收益 +3. **摩拉需求优先**:富路线摩拉收益是ABE的3倍 + + +## 七、文件结构 1. **main.js**:负责核心业务逻辑,包括好感任务和狗粮路线的执行。 2. **manifest.json**:脚本配置文件,记录基本信息和设置。 3. **settings.json**:用户配置文件,用于设置好感队和狗粮队的名称、任务间隔等参数。 4. **record.txt**:运行记录文件,用于存储运行信息。 -## 使用方法 +## 八、使用方法 1. 将脚本添加至调度器。 2. 右键点击脚本以修改 JS 自定义配置。 3. 在配置文件中设置好感队和狗粮队的名称、任务间隔等参数。 -## 功能特点 +## 九、功能特点 1. 完成好感任务。 2. 执行狗粮路线,自动计算时间并进行路线选择。 3. 可选择在狗粮路线结束后继续完成剩余的好感任务。 -## 使用说明 +## 十、使用说明 1. 确保在配置文件中正确设置好感队和狗粮队的名称。 2. 根据需要调整任务间隔时间和超时设置。 @@ -51,7 +117,7 @@ ## 更新日志 -### 1.0(2025.05.27) +### 1.1(2025.06.05) 1. 初始版本发布,支持自动好感任务和狗粮路线执行。 ## 注意事项 diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00激活/001【激活程序】稻妻大炮.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/001【激活程序】稻妻大炮.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00激活/001【激活程序】稻妻大炮.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/001【激活程序】稻妻大炮.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00激活/002【激活程序】须弥-凡爷屋顶罐子.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/002【激活程序】须弥-凡爷屋顶罐子.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00激活/002【激活程序】须弥-凡爷屋顶罐子.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/002【激活程序】须弥-凡爷屋顶罐子.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00激活/003【激活程序】纳塔-鸡鸡.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/003【激活程序】纳塔-鸡鸡.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00激活/003【激活程序】纳塔-鸡鸡.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/003【激活程序】纳塔-鸡鸡.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00清怪/【清怪】须弥-天臂池西北4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/【清怪】须弥-天臂池西北4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00清怪/【清怪】须弥-天臂池西北4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/【清怪】须弥-天臂池西北4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00清怪/【清怪】须弥-无郁稠林3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/【清怪】须弥-无郁稠林3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/00清怪/【清怪】须弥-无郁稠林3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/00准备/【清怪】须弥-无郁稠林3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/202璃月-渌华池3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/202璃月-渌华池3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/202璃月-渌华池3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/202璃月-渌华池3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/204璃月-天遒谷3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/204璃月-天遒谷3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/204璃月-天遒谷3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/204璃月-天遒谷3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/206璃月-绝云间3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/206璃月-绝云间3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/206璃月-绝云间3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/206璃月-绝云间3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/208璃月-望舒客栈4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/208璃月-望舒客栈4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/208璃月-望舒客栈4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/208璃月-望舒客栈4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/210璃月-地中之盐3(岸边).json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/210璃月-地中之盐3(岸边).json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/210璃月-地中之盐3(岸边).json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/210璃月-地中之盐3(岸边).json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/210璃月-地中之盐3(水面).json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/210璃月-地中之盐3(水面).json new file mode 100644 index 00000000..75443e27 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/210璃月-地中之盐3(水面).json @@ -0,0 +1,72 @@ +{ + "info": { + "name": "璃月-地中之盐3", + "type": "collect", + "author": "汐", + "version": "", + "description": "", + "bgiVersion": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": -164.5927734375, + "y": 1182.50537109375, + "action": "", + "move_mode": "walk", + "type": "teleport" + }, + { + "id": 2, + "x": -156.55859375, + "y": 1191.83740234375, + "action": "combat_script", + "move_mode": "dash", + "action_params": "wait(0.3),keypress(e)", + "type": "path" + }, + { + "id": 3, + "x": -101.333984375, + "y": 1236.02978515625, + "action": "", + "move_mode": "run", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -95.0634765625, + "y": 1238.294921875, + "action": "combat_script", + "move_mode": "dash", + "action_params": "keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),", + "type": "target" + }, + { + "id": 5, + "x": -94.11328125, + "y": 1235.544921875, + "action": "", + "move_mode": "walk", + "type": "target" + }, + { + "id": 6, + "x": -90.9267578125, + "y": 1235.23193359375, + "action": "", + "move_mode": "walk", + "type": "target" + }, + { + "id": 7, + "x": -93.0693359375, + "y": 1238.69384765625, + "action": "combat_script", + "move_mode": "walk", + "action_params": "keypress(f)", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/214璃月-轻策庄3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/214璃月-轻策庄3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/214璃月-轻策庄3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/214璃月-轻策庄3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/216璃月-珉林北4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/216璃月-珉林北4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/216璃月-珉林北4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/216璃月-珉林北4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/218璃月-奥藏山右下2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/218璃月-奥藏山右下2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/218璃月-奥藏山右下2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/218璃月-奥藏山右下2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/219璃月-华光林2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/219璃月-华光林2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/219璃月-华光林2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/219璃月-华光林2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/220璃月-采浇谷4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/220璃月-采浇谷4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/220璃月-采浇谷4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/220璃月-采浇谷4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/222璃月-翘英庄西1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/222璃月-翘英庄西1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/222璃月-翘英庄西1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/222璃月-翘英庄西1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/224璃月-遗珑埠东3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/224璃月-遗珑埠东3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/224璃月-遗珑埠东3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/224璃月-遗珑埠东3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/225璃月-层岩临时主矿道3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/225璃月-层岩临时主矿道3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/225璃月-层岩临时主矿道3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/225璃月-层岩临时主矿道3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/226璃月-层岩主矿区3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/226璃月-层岩主矿区3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/226璃月-层岩主矿区3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/226璃月-层岩主矿区3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/301稻妻-菫色之庭副本4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/301稻妻-菫色之庭副本4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/301稻妻-菫色之庭副本4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/301稻妻-菫色之庭副本4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/302稻妻-九条阵屋2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/302稻妻-九条阵屋2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/302稻妻-九条阵屋2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/302稻妻-九条阵屋2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/401须弥-须弥城4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/401须弥-须弥城4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/401须弥-须弥城4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/401须弥-须弥城4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/404须弥-天臂池七天神像1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/404须弥-天臂池七天神像1.json similarity index 77% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/404须弥-天臂池七天神像1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/404须弥-天臂池七天神像1.json index 230185ae..bb8fa9cb 100644 --- a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/404须弥-天臂池七天神像1.json +++ b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/404须弥-天臂池七天神像1.json @@ -40,19 +40,28 @@ "id": 4, "x": 3239.5126953125, "y": -671.578125, - "type": "path", - "move_mode": "walk", "action": "combat_script", - "action_params": "attack(0.2)" + "move_mode": "walk", + "action_params": "attack(0.2)", + "type": "path" }, { "id": 5, - "x": 3243.728515625, - "y": -669.79833984375, - "type": "target", - "move_mode": "walk", + "x": 3243.59375, + "y": -669.6561946673019, "action": "combat_script", - "action_params": "keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.5)" + "move_mode": "walk", + "action_params": "keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.5)", + "type": "target" + }, + { + "id": 6, + "x": 3243.083984375, + "y": -667.75537109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" } ] } \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/404须弥-天臂池七天神像4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/404须弥-天臂池七天神像4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/404须弥-天臂池七天神像4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/404须弥-天臂池七天神像4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/405须弥-天臂池西北4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/405须弥-天臂池西北4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/405须弥-天臂池西北4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/405须弥-天臂池西北4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/407须弥-无郁稠林3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/407须弥-无郁稠林3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/407须弥-无郁稠林3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/407须弥-无郁稠林3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/412须弥-阿如村3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/412须弥-阿如村3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/412须弥-阿如村3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/412须弥-阿如村3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/414须弥-荼诃落谷营地2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/414须弥-荼诃落谷营地2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/414须弥-荼诃落谷营地2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/414须弥-荼诃落谷营地2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/416须弥-千壑沙地露营地2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/416须弥-千壑沙地露营地2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/416须弥-千壑沙地露营地2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/416须弥-千壑沙地露营地2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/501枫丹-枫丹城廷区2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/501枫丹-枫丹城廷区2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/501枫丹-枫丹城廷区2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/501枫丹-枫丹城廷区2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/502枫丹-黎翡区神像3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/502枫丹-黎翡区神像3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/502枫丹-黎翡区神像3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/502枫丹-黎翡区神像3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/503枫丹-芒索斯山东麓2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/503枫丹-芒索斯山东麓2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/503枫丹-芒索斯山东麓2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/503枫丹-芒索斯山东麓2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/504枫丹-学术会堂1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/504枫丹-学术会堂1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/504枫丹-学术会堂1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/504枫丹-学术会堂1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/505枫丹-科学院左沙滩3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/505枫丹-科学院左沙滩3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/505枫丹-科学院左沙滩3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/505枫丹-科学院左沙滩3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/506枫丹-科学院左沙滩北4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/506枫丹-科学院左沙滩北4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/506枫丹-科学院左沙滩北4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/506枫丹-科学院左沙滩北4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/508枫丹-研究院区西北6.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/508枫丹-研究院区西北6.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/508枫丹-研究院区西北6.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/508枫丹-研究院区西北6.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/512枫丹-歌剧院右下2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/512枫丹-歌剧院右下2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/512枫丹-歌剧院右下2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/512枫丹-歌剧院右下2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/602纳塔-悬木人声望2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/603纳塔-悬木人声望2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/602纳塔-悬木人声望2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/603纳塔-悬木人声望2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/601纳塔-流泉之众4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/605纳塔-流泉之众4.json similarity index 86% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/601纳塔-流泉之众4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/605纳塔-流泉之众4.json index 62496bc3..b50362bf 100644 --- a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/601纳塔-流泉之众4.json +++ b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/605纳塔-流泉之众4.json @@ -85,17 +85,17 @@ }, { "id": 10, - "x": 9053.48828125, - "y": -2797.310546875, - "action": "combat_script", + "x": 9053.2548828125, + "y": -2795.486328125, + "type": "path", "move_mode": "walk", - "action_params": "keypress(f),w(0.2)", - "type": "path" + "action": "", + "action_params": "" }, { "id": 11, - "x": 9054.71875, - "y": -2797.2811172015245, + "x": 9053.812519750414, + "y": -2797.187530315927, "action": "combat_script", "move_mode": "walk", "action_params": "keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),", @@ -103,6 +103,15 @@ }, { "id": 12, + "x": 9055.494140625, + "y": -2799.2548828125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 13, "x": 9060.9853515625, "y": -2791.96484375, "action": "combat_script", @@ -111,7 +120,7 @@ "type": "target" }, { - "id": 13, + "id": 14, "x": 9068.6044921875, "y": -2798.8125, "action": "combat_script", diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/606纳塔-回声之子北山顶1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/606纳塔-回声之子北山顶1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/606纳塔-回声之子北山顶1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/606纳塔-回声之子北山顶1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/603纳塔-花羽会西2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/611纳塔-花羽会西2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/01普通/603纳塔-花羽会西2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/01普通/611纳塔-花羽会西2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/02收尾/305【收尾】稻妻-踏鞴砂①-10.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/02收尾/305【收尾】稻妻-踏鞴砂①-10.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/02收尾/305【收尾】稻妻-踏鞴砂①-10.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/02收尾/305【收尾】稻妻-踏鞴砂①-10.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/02收尾/305【收尾】稻妻-踏鞴砂②-7.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/02收尾/305【收尾】稻妻-踏鞴砂②-7.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/02收尾/305【收尾】稻妻-踏鞴砂②-7.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/02收尾/305【收尾】稻妻-踏鞴砂②-7.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/02收尾/305【收尾】稻妻-踏鞴砂③-8.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/02收尾/305【收尾】稻妻-踏鞴砂③-8.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/02收尾/305【收尾】稻妻-踏鞴砂③-8.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/02收尾/305【收尾】稻妻-踏鞴砂③-8.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/01【额外】稻妻-踏鞴砂大炮点5.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/01【额外】稻妻-踏鞴砂大炮点5.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/01【额外】稻妻-踏鞴砂大炮点5.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/01【额外】稻妻-踏鞴砂大炮点5.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/02【额外】须弥-水天丛林7.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/02【额外】须弥-水天丛林7.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/02【额外】须弥-水天丛林7.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/02【额外】须弥-水天丛林7.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/03【额外】须弥-凡爷屋顶罐子1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/03【额外】须弥-凡爷屋顶罐子1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/03【额外】须弥-凡爷屋顶罐子1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/03【额外】须弥-凡爷屋顶罐子1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/04【额外】枫丹-科学院瓶子3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/04【额外】枫丹-科学院瓶子3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/04【额外】枫丹-科学院瓶子3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/04【额外】枫丹-科学院瓶子3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/05【额外】纳塔-鸡屁股9.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/05【额外】纳塔-鸡屁股9.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/05【额外】纳塔-鸡屁股9.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/05【额外】纳塔-鸡屁股9.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/06【额外】纳塔-灵谜纹13.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/06【额外】纳塔-灵谜纹13.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/06【额外】纳塔-灵谜纹13.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/06【额外】纳塔-灵谜纹13.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/98【额外】璃月-层岩地下1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/98【额外】璃月-层岩地下1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/98【额外】璃月-层岩地下1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/98【额外】璃月-层岩地下1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/99【复位程序】稻妻踏鞴砂大炮点.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/99【复位程序】稻妻踏鞴砂大炮点.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路富线/03额外/99【复位程序】稻妻踏鞴砂大炮点.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/A路线/03额外/99【复位程序】稻妻踏鞴砂大炮点.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/00激活/003【激活程序】纳塔-鸡鸡.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/00准备/003【激活程序】纳塔-鸡鸡.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/00激活/003【激活程序】纳塔-鸡鸡.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/00准备/003【激活程序】纳塔-鸡鸡.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/00清怪/【清怪】须弥-天臂池西北4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/00准备/【清怪】须弥-天臂池西北4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/00清怪/【清怪】须弥-天臂池西北4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/00准备/【清怪】须弥-天臂池西北4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/00清怪/【清怪】须弥-无郁稠林3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/00准备/【清怪】须弥-无郁稠林3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/00清怪/【清怪】须弥-无郁稠林3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/00准备/【清怪】须弥-无郁稠林3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/201璃月-天衡山西1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/201璃月-天衡山西1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/201璃月-天衡山西1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/201璃月-天衡山西1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/203璃月-归离原北1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/203璃月-归离原北1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/203璃月-归离原北1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/203璃月-归离原北1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/204璃月-天遒谷3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/204璃月-天遒谷3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/204璃月-天遒谷3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/204璃月-天遒谷3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/205璃月-绝云间东1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/205璃月-绝云间东1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/205璃月-绝云间东1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/205璃月-绝云间东1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/207璃月-翠玦坡2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/207璃月-翠玦坡2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/207璃月-翠玦坡2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/207璃月-翠玦坡2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/209璃月-明蕴镇神像1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/209璃月-明蕴镇神像1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/209璃月-明蕴镇神像1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/209璃月-明蕴镇神像1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/211璃月-苍白本西1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/211璃月-苍白本西1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/211璃月-苍白本西1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/211璃月-苍白本西1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/212璃月-石门东1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/212璃月-石门东1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/212璃月-石门东1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/212璃月-石门东1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/213璃月-石门1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/213璃月-石门1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/213璃月-石门1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/213璃月-石门1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/215璃月-轻策庄西1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/215璃月-轻策庄西1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/215璃月-轻策庄西1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/215璃月-轻策庄西1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/216璃月-珉林北2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/216璃月-珉林北2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/216璃月-珉林北2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/216璃月-珉林北2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/217璃月-珉林酒窖9.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/217璃月-珉林酒窖9.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/217璃月-珉林酒窖9.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/217璃月-珉林酒窖9.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/220璃月-采浇谷4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/220璃月-采浇谷4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/220璃月-采浇谷4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/220璃月-采浇谷4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/221璃月-沉玉上谷神像东1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/221璃月-沉玉上谷神像东1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/221璃月-沉玉上谷神像东1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/221璃月-沉玉上谷神像东1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/222璃月-翘英庄西1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/222璃月-翘英庄西1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/222璃月-翘英庄西1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/222璃月-翘英庄西1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/223璃月-灵濛山北2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/223璃月-灵濛山北2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/223璃月-灵濛山北2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/223璃月-灵濛山北2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/227璃月-层岩主矿区南2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/227璃月-层岩主矿区南2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/227璃月-层岩主矿区南2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/227璃月-层岩主矿区南2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/311稻妻-越石村8.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/311稻妻-越石村8.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/311稻妻-越石村8.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/311稻妻-越石村8.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/402须弥-化城郭西2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/402须弥-化城郭西2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/402须弥-化城郭西2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/402须弥-化城郭西2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/404须弥-天臂池七天神像1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/404须弥-天臂池七天神像1.json similarity index 77% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/404须弥-天臂池七天神像1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/404须弥-天臂池七天神像1.json index 230185ae..bb8fa9cb 100644 --- a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/404须弥-天臂池七天神像1.json +++ b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/404须弥-天臂池七天神像1.json @@ -40,19 +40,28 @@ "id": 4, "x": 3239.5126953125, "y": -671.578125, - "type": "path", - "move_mode": "walk", "action": "combat_script", - "action_params": "attack(0.2)" + "move_mode": "walk", + "action_params": "attack(0.2)", + "type": "path" }, { "id": 5, - "x": 3243.728515625, - "y": -669.79833984375, - "type": "target", - "move_mode": "walk", + "x": 3243.59375, + "y": -669.6561946673019, "action": "combat_script", - "action_params": "keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.5)" + "move_mode": "walk", + "action_params": "keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.5)", + "type": "target" + }, + { + "id": 6, + "x": 3243.083984375, + "y": -667.75537109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" } ] } \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/405须弥-天臂池西北4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/405须弥-天臂池西北4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/405须弥-天臂池西北4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/405须弥-天臂池西北4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/406须弥-卡萨扎莱宫南2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/406须弥-卡萨扎莱宫南2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/406须弥-卡萨扎莱宫南2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/406须弥-卡萨扎莱宫南2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/407须弥-无郁稠林3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/407须弥-无郁稠林3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/407须弥-无郁稠林3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/407须弥-无郁稠林3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/408须弥-桓那兰那村9.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/408须弥-桓那兰那村9.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/408须弥-桓那兰那村9.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/408须弥-桓那兰那村9.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/412须弥-阿如村3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/412须弥-阿如村3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/412须弥-阿如村3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/412须弥-阿如村3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/413须弥-阿如村西2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/413须弥-阿如村西2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/413须弥-阿如村西2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/413须弥-阿如村西2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/415须弥-圣显厅北3.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/415须弥-圣显厅北3.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/415须弥-圣显厅北3.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/415须弥-圣显厅北3.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/418须弥-甘露花海4.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/418须弥-甘露花海4.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/418须弥-甘露花海4.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/418须弥-甘露花海4.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/509枫丹-中部塔内8.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/509枫丹-中部塔内8.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/509枫丹-中部塔内8.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/509枫丹-中部塔内8.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/514枫丹-莫尔泰神像1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/514枫丹-莫尔泰神像1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/514枫丹-莫尔泰神像1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/514枫丹-莫尔泰神像1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/601纳塔-圣火竞技场东1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/601纳塔-圣火竞技场东1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/601纳塔-圣火竞技场东1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/601纳塔-圣火竞技场东1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/604纳塔-悬木人西神像2.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/604纳塔-悬木人西神像2.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/604纳塔-悬木人西神像2.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/604纳塔-悬木人西神像2.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/606纳塔-回声之子北山顶1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/606纳塔-回声之子北山顶1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/606纳塔-回声之子北山顶1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/606纳塔-回声之子北山顶1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/607纳塔-柴薪之丘1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/607纳塔-柴薪之丘1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/607纳塔-柴薪之丘1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/607纳塔-柴薪之丘1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/610纳塔-安饶之野1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/610纳塔-安饶之野1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/610纳塔-安饶之野1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/610纳塔-安饶之野1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/616纳塔-空梦起始东1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/616纳塔-空梦起始东1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/616纳塔-空梦起始东1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/616纳塔-空梦起始东1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/617纳塔-拖佐兹岛6.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/617纳塔-拖佐兹岛6.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/617纳塔-拖佐兹岛6.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/617纳塔-拖佐兹岛6.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/618纳塔-石火坠陨处1.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/618纳塔-石火坠陨处1.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/01普通/618纳塔-石火坠陨处1.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/01普通/618纳塔-石火坠陨处1.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/02收尾/310【收尾】稻妻-清籁丸20.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/02收尾/310【收尾】稻妻-清籁丸20.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/02收尾/310【收尾】稻妻-清籁丸20.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/02收尾/310【收尾】稻妻-清籁丸20.json diff --git a/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/03额外/05【额外】纳塔-鸡屁股9.json b/repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/03额外/05【额外】纳塔-鸡屁股9.json similarity index 100% rename from repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路富线/03额外/05【额外】纳塔-鸡屁股9.json rename to repo/js/AutoArtifactsPro/assets/ArtifactsPath/B路线/03额外/05【额外】纳塔-鸡屁股9.json diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-准备.json b/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-准备.json new file mode 100644 index 00000000..cafe4e17 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-准备.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "愚人众-准备", + "type": "collect", + "author": "秋云", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1748154261518 + }, + "positions": [ + { + "id": 1, + "x": 4790.77, + "y": -3182.48, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 4771.75, + "y": -3135.45, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-战斗点.json b/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-战斗点.json new file mode 100644 index 00000000..8624fb51 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-战斗点.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "愚人众-战斗点", + "type": "collect", + "author": "秋云", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1748154217767 + }, + "positions": [ + { + "id": 1, + "x": 4840.55, + "y": -3078.01, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-触发点.json b/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-触发点.json new file mode 100644 index 00000000..06c521a5 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/愚人众-触发点.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "愚人众-触发点", + "type": "collect", + "author": "秋云", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1748154261518 + }, + "positions": [ + { + "id": 1, + "x": 4783.79, + "y": -3065.62, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-准备.json b/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-准备.json index 74930bfa..95630cf6 100644 --- a/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-准备.json +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-准备.json @@ -1,38 +1,38 @@ -{ - "info": { - "name": "盗宝团-准备", - "type": "collect", - "author": "HZYgrandma", - "version": "1.0", - "description": "", - "map_name": "Teyvat", - "bgi_version": "0.45.0" - }, - "positions": [ - { - "id": 1, - "x": -2740.6000000000004, - "y": -3410.6900000000005, - "action": "", - "move_mode": "walk", - "type": "teleport" - }, - { - "id": 2, - "x": -2764.4062480249577, - "y": -3465.687530315927, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 3, - "x": -2770.4169921875, - "y": -3450.8349609375, - "type": "path", - "move_mode": "dash", - "action": "fight", - "action_params": "" - } - ] +{ + "info": { + "name": "盗宝团-准备", + "type": "collect", + "author": "HZYgrandma", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -2740.60, + "y": -3410.69, + "action": "", + "move_mode": "walk", + "type": "teleport" + }, + { + "id": 2, + "x": -2764.40, + "y": -3465.68, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 3, + "x": -2770.41, + "y": -3450.83, + "type": "path", + "move_mode": "dash", + "action": "fight", + "action_params": "" + } + ] } \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-战斗点.json b/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-战斗点.json index 14a4a627..92ae4543 100644 --- a/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-战斗点.json +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-战斗点.json @@ -1,31 +1,31 @@ -{ - "info": { - "name": "盗宝团-战斗点", - "type": "collect", - "author": "HZYgrandma", - "version": "1.0", - "description": "", - "map_name": "Teyvat", - "bgi_version": "0.45.0" - }, - "positions": [ - { - "id": 1, - "x": -2741.25, - "y": -3441, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 2, - "x": -2757.28125, - "y": -3468.4376106653963, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - } - ] +{ + "info": { + "name": "盗宝团-战斗点", + "type": "collect", + "author": "HZYgrandma", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -2741.25, + "y": -3441.00, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": -2757.28, + "y": -3468.43, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + } + ] } \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-触发点.json b/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-触发点.json index 2d6ab148..50aad16a 100644 --- a/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-触发点.json +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/盗宝团-触发点.json @@ -1,41 +1,32 @@ -{ - "info": { - "name": "盗宝团-触发点", - "type": "collect", - "author": "HZYgrandma", - "version": "1.0", - "description": "", - "map_name": "Teyvat", - "bgi_version": "0.45.0" - }, - "positions": [ - { - "id": 1, - "x": -2738.38, - "y": -3414.45, - "action": "", - "move_mode": "walk", - "action_params": "", - "type": "teleport" - }, - { - "id": 2, - "x": -2736.6005859375, - "y": -3415.4443359375, - "type": "path", - "move_mode": "walk", - "action": "combat_script", - "action_params": "wait(0.5)", - "locked": false - }, - { - "id": 3, - "x": -2736.6005859375, - "y": -3415.4443359375, - "type": "path", - "move_mode": "walk", - "action": "exit_and_relogin", - "action_params": "" - } - ] +{ + "info": { + "name": "盗宝团-触发点", + "type": "collect", + "author": "HZYgrandma", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -2738.38, + "y": -3414.45, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -2736.60, + "y": -3415.44, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "wait(0.5)", + "locked": false + } + ] } \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-准备.json b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-准备.json new file mode 100644 index 00000000..410ae8a6 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-准备.json @@ -0,0 +1,39 @@ +{ + "info": { + "name": "鳄鱼-准备", + "type": "collect", + "author": "秋云", + "version": "1.0", + "description": "", + "bgi_version": "0.45.1" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 3705.53, + "y": -497.45, + "action_params": "" + }, + { + "id": 2, + "x": 3615.48, + "y": -521.27, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "2500" + }, + { + "id": 3, + "x": 3615.48, + "y": -521.27, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-战斗点.json b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-战斗点.json new file mode 100644 index 00000000..4a1d0633 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-战斗点.json @@ -0,0 +1,30 @@ +{ + "info": { + "name": "鳄鱼-战斗点", + "type": "collect", + "author": "秋云", + "version": "1.0", + "description": "", + "bgi_version": "0.45.1" + }, + "positions": [ + { + "id": 1, + "x": 3614.63, + "y": -521.6, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": 3578.08, + "y": -500.75, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-拾取.json b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-拾取.json new file mode 100644 index 00000000..6da585a2 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-拾取.json @@ -0,0 +1,30 @@ +{ + "info": { + "name": "鳄鱼-拾取", + "type": "collect", + "author": "秋云", + "version": "1.0", + "description": "", + "bgiVersion": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": 3576.7568359375, + "y": -495.845703125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": 3572.375, + "y": -502.4375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-触发点.json b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-触发点.json new file mode 100644 index 00000000..7fcb63f5 --- /dev/null +++ b/repo/js/AutoArtifactsPro/assets/AutoPath/鳄鱼-触发点.json @@ -0,0 +1,30 @@ +{ + "info": { + "name": "鳄鱼-触发点", + "type": "collect", + "author": "秋云", + "version": "1.0", + "description": "", + "bgi_version": "0.45.1" + }, + "positions": [ + { + "id": 1, + "x": 3605.18, + "y": -513.31, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 1, + "x": 3614.63, + "y": -521.6, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/main.js b/repo/js/AutoArtifactsPro/main.js index 1373b238..0f6da3d2 100644 --- a/repo/js/AutoArtifactsPro/main.js +++ b/repo/js/AutoArtifactsPro/main.js @@ -1,709 +1,812 @@ -const DEFAULT_OCR_TIMEOUT_SECONDS = 10; -const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120; - -(async function () { - // 启用自动拾取的实时任务 - dispatcher.addTimer(new RealtimeTimer("AutoPick")); - - //伪造js结束记录 - await fakeLog("自动狗粮重制版", true, true, 0); - - //预处理 - //settings 获取自定义配置 - const minIntervalTime = settings.minIntervalTime; - const waitTimePeriod = settings.waitTimePeriod; - const friendshipPartyName = settings.friendshipPartyName; - const grindPartyName = settings.grindPartyName; - - //处理卡时间信息 - // 异步读取文件内容 - const content = await file.readText("record.txt"); - - // 初始化变量并赋予默认值 - let lastRunDate = "未知"; // 默认值 - let lastEndTime = new Date(); // 默认值为当前时间 - let lastRunRoute = "未知"; // 默认值 - - // 按行分割内容 - const lines = content.split('\n'); - - // 逐行处理 - for (const line of lines) { - // 跳过空行 - if (line.trim() === '') continue; - - // 检查每行的起始部分 - if (line.startsWith("上次运行完成日期:")) { - lastRunDate = line.substring("上次运行完成日期:".length).trim(); - } - - if (line.startsWith("上次结束时间:")) { - const timeString = line.substring("上次结束时间:".length).trim(); - if (timeString) { - lastEndTime = new Date(timeString); - if (isNaN(lastEndTime.getTime())) { - throw new Error(`无效的时间值: ${timeString}`); - } - } - } - - if (line.startsWith("上次运行路线:")) { - lastRunRoute = line.substring("上次运行路线:".length).trim(); - } - } - - // 输出变量值 - log.info(`上次运行完成日期: ${lastRunDate}`); - log.info(`上次狗粮开始时间: ${lastEndTime.toISOString()}`); - log.info(`上次运行路线: ${lastRunRoute}`); - // 拆分 lastRunDate 为年、月、日 - const [year, month, day] = lastRunDate.split('/').map(Number); - - // 生成这个日期凌晨四点的时间 - const lastRunMidnight = new Date(year, month - 1, day, 4, 0, 0); - - // 获取当前时间 - const now = new Date(); - - // 计算当前时间与 lastRunMidnight 之间的时间差(单位:毫秒) - const timeDifference = now - lastRunMidnight; - - // 如果当前时间减去 lastRunMidnight 小于 24 小时(24 * 60 * 60 * 1000 毫秒),则终止程序运行 - if (timeDifference < 24 * 60 * 60 * 1000) { - log.info("今日已经运行完成狗粮路线,终止程序运行"); - return; // 提前退出函数 - } - - // 如果时间差大于或等于 24 小时,程序继续运行 - log.info("今日还没有运行完成狗粮路线,程序继续运行"); - - let endTime = await getEndTime(minIntervalTime, lastEndTime); - - // 解析 waitTimePeriod - const [startTimeStr, endTimeStr] = waitTimePeriod.split('-').map(time => time.trim()); - - // 将时间字符串转换为小时和分钟 - const [startHour, startMinute] = startTimeStr.split(':').map(Number); - const [endHour, endMinute] = endTimeStr.split(':').map(Number); - - // 获取当前日期 - const today = new Date(); - today.setHours(0, 0, 0, 0); // 将时间设置为当天的午夜 - - // 创建等待时间段的开始时间和结束时间的 Date 对象 - const waitStartTime = new Date(today); - waitStartTime.setHours(startHour, startMinute, 0, 0); - - const waitEndTime = new Date(today); - waitEndTime.setHours(endHour, endMinute, 0, 0); - - // 新增变量,初始值为 true,用于标识今天跑的路线 - let runRouteA = true; - - // 获取当前时间 - const timeNow = new Date(); - - // 检查 endTime 是否晚于当天的结束时间 - if (endTime > waitEndTime) { - // 如果 endTime 晚于当天的结束时间,则将其改为当天的开始时间 - endTime = new Date(waitStartTime); - // 同时将 runRouteA 改为 false,今天运行B路线 - runRouteA = false; - } - - // 检查 lastRunRoute 是否为 "B" - if (lastRunRoute === "B") { - // 如果 lastRunRoute 为 "B",则将 endTime 改为当天的开始时间 - endTime = new Date(waitStartTime); - // 同时将 runRouteA 改为 true - runRouteA = true; - } - - // 输出结果 - log.info(`预期开始狗粮时间: ${endTime.toTimeString().slice(0, 8)}`); - - // 获取敌人类型设置,默认为盗宝团 - const enemyType = "盗宝团"; - - // 检查当前时间是否晚于 endTime - if (timeNow > endTime) { - log.warn('无需好感卡时间') - } else { - // 清理丘丘人(仅盗宝团需要) - //切换至好感队 - await switchPartyIfNeeded(friendshipPartyName); - log.info(endTime.toLocaleString()); - log.info(`清理原住民...`); - await AutoPath('盗宝团-准备'); - //好感卡时间 - - // 验证超时设置 - const ocrTimeout = validateTimeoutSetting(settings.ocrTimeout, DEFAULT_OCR_TIMEOUT_SECONDS, "OCR"); - const fightTimeout = validateTimeoutSetting(settings.fightTimeout, DEFAULT_FIGHT_TIMEOUT_SECONDS, "战斗"); - - // 好感循环开始 - await AutoFriendshipDev(50, ocrTimeout, fightTimeout, enemyType, endTime); - } - - // 获取当前时间 - const waitStartNow = new Date(); - - // 计算 endTime 与当前时间的差值(单位:毫秒),以防好感度运行完了还没到时间 - const timeDiff = endTime - waitStartNow; - if (timeDiff > 0) { - log.info(`当前时间与预期时间的差值为 ${timeDiff} 毫秒,等待该时间`); - await sleep(timeDiff); - } else { - log.info("当前时间已晚于预期时间,无需等待"); - } - - //切换至狗粮队 - await switchPartyIfNeeded(grindPartyName); - - //更新运行数据 - { - // 获取当前日期和时间 - const finishDate = new Date(); - - // 格式化当前日期为 "YYYY/MM/DD" 格式 - const currentDateString = `${finishDate.getFullYear()}/${String(finishDate.getMonth() + 1).padStart(2, '0')}/${String(finishDate.getDate()).padStart(2, '0')}`; - - // 根据 runRouteA 的值更新 lastRunRoute - lastRunRoute = runRouteA ? "A" : "B"; - - // 更新 lastRunDate 为当前日期 - lastRunDate = currentDateString; - - // 更新 lastEndTime 为当前时间 - lastEndTime = new Date(); // 使用 new Date() 获取当前时间 - - //按格式输出今日狗粮路线信息 - log.info(`今日运行狗粮路线:${runRouteA ? 'A' : 'B'},开始时间:${lastEndTime.toLocaleString()}`); - } - - // 开始运行狗粮路线 - let runArtifactsResult = true; - runArtifactsResult = await runArtifactsPaths(runRouteA); - - if (runArtifactsResult) { - //修改文件内容 - log.info('尝试修改记录文件'); - await writeRecordFile(lastRunDate, lastEndTime, lastRunRoute); - } - - //完成剩下好感 - if (settings.completeRemainingFriendship) { - //切换至好感队 - await switchPartyIfNeeded(friendshipPartyName); - // 验证超时设置 - const ocrTimeout = validateTimeoutSetting(settings.ocrTimeout, DEFAULT_OCR_TIMEOUT_SECONDS, "OCR"); - const fightTimeout = validateTimeoutSetting(settings.fightTimeout, DEFAULT_FIGHT_TIMEOUT_SECONDS, "战斗"); - // 好感循环开始 - await AutoFriendshipDev(50, ocrTimeout, fightTimeout, enemyType, endTime + 24 * 60 * 60 * 1000); - } - //伪造js开始记录 - await fakeLog("自动狗粮重制版", true, false, 0); -})(); - -// 异步函数,用于将变量内容写回到文件 -async function writeRecordFile(lastRunDate, lastEndTime, lastRunRoute) { - try { - // 构造要写入文件的内容 - const content = [ - `上次运行完成日期: ${lastRunDate}`, - `上次结束时间: ${lastEndTime.toISOString()}`, - `上次运行路线: ${lastRunRoute}` - ].join('\n'); - - // 异步写入文件 - const result = await file.writeText("record.txt", content, false); // 覆盖写入 - if (result) { - log.info("文件写入成功"); - } else { - log.error("文件写入失败"); - } - } catch (error) { - log.error(`写入文件时出错: ${error}`); - } -} - -//运行狗粮路线的逻辑 -async function runArtifactsPaths(runRouteA) { - // 根据 runRouteA 的值给 runningRoute 赋值 - const runningRoute = runRouteA ? "A" : "B"; - - // 定义文件夹路径 - const folderName = `${runningRoute}路线`; - const filePathNormal = `assets/ArtifactsPath/${folderName}/01普通`; - const filePathEnding = `assets/ArtifactsPath/${folderName}/02收尾`; - const filePathExtra = `assets/ArtifactsPath/${folderName}/03额外`; - - // 运行普通路线 - { - // 读取文件夹中的文件名并处理 - const filePaths = file.readPathSync(filePathNormal); - const jsonFileNames = []; - - for (const filePath of filePaths) { - const fileName = basename(filePath); // 提取文件名 - if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 - jsonFileNames.push(fileName); // 存储文件名 - } - } - - let currentTask = 0; // 当前任务计数器 - - // 执行普通路线的地图追踪文件 - for (const fileName of jsonFileNames) { - const fullPath = fileName; - await fakeLog(fileName, false, true, 0); - currentTask += 1; // 更新当前任务计数器 - log.info(`当前进度:普通${folderName}第${currentTask}/${jsonFileNames.length}个`); - await pathingScript.runFile(fullPath); - //捕获任务取消的信息并跳出循环 - try { - await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒 - } catch (error) { - log.error(`发生错误: ${error}`); - return false; // 终止循环 - } - await fakeLog(fileName, false, false, 0); - } - } - - // 运行收尾路线 - { - // 读取文件夹中的文件名并处理 - const filePaths = file.readPathSync(filePathEnding); - const jsonFileNames = []; - - for (const filePath of filePaths) { - const fileName = basename(filePath); // 提取文件名 - if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 - jsonFileNames.push(fileName); // 存储文件名 - } - } - - let currentTask = 0; // 当前任务计数器 - - // 执行收尾路线的地图追踪文件 - for (const fileName of jsonFileNames) { - const fullPath = fileName; - await fakeLog(fileName, false, true, 0); - currentTask += 1; // 更新当前任务计数器 - log.info(`当前进度:收尾${folderName}第${currentTask}/${jsonFileNames.length}个`); - await pathingScript.runFile(fullPath); - //捕获任务取消的信息并跳出循环 - try { - await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒 - } catch (error) { - log.error(`发生错误: ${error}`); - return false; // 终止循环 - } - await fakeLog(fileName, false, false, 0); - } - } - - // 运行额外路线 - { - // 读取文件夹中的文件名并处理 - const filePaths = file.readPathSync(filePathExtra); - const jsonFileNames = []; - - for (const filePath of filePaths) { - const fileName = basename(filePath); // 提取文件名 - if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 - jsonFileNames.push(fileName); // 存储文件名 - } - } - - let currentTask = 0; // 当前任务计数器 - - // 执行额外路线的地图追踪文件 - for (const fileName of jsonFileNames) { - const fullPath = fileName; - await fakeLog(fileName, false, true, 0); - currentTask += 1; // 更新当前任务计数器 - log.info(`当前进度:额外${folderName}第${currentTask}/${jsonFileNames.length}个`); - await pathingScript.runFile(fullPath); - //捕获任务取消的信息并跳出循环 - try { - await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒 - } catch (error) { - log.error(`发生错误: ${error}`); - return false; // 终止循环 - } - await fakeLog(fileName, false, false, 0); - } - } - - return true; -} - -// fakeLog 函数,使用方法:将本函数放在主函数前,调用时请务必使用await,否则可能出现v8白框报错 -//在js开头处伪造该js结束运行的日志信息,如 await fakeLog("js脚本", true, true, 0); -//在js结尾处伪造该js开始运行的日志信息,如 await fakeLog("js脚本", true, false, 2333); -//duration项目仅在伪造结束信息时有效,且无实际作用,可以任意填写,当你需要在日志中输出特定值时才需要,单位为毫秒 -//在调用地图追踪前伪造该地图追踪开始运行的日志信息,如 await fakeLog(`地图追踪.json`, false, true, 0); -//在调用地图追踪后伪造该地图追踪结束运行的日志信息,如 await fakeLog(`地图追踪.json`, false, false, 0); -//如此便可以在js运行过程中伪造地图追踪的日志信息,可以在日志分析等中查看 - -async function fakeLog(name, isJs, isStart, duration) { - await sleep(10); - const currentTime = Date.now(); - // 参数检查 - if (typeof name !== 'string') { - log.error("参数 'name' 必须是字符串类型!"); - return; - } - if (typeof isJs !== 'boolean') { - log.error("参数 'isJs' 必须是布尔型!"); - return; - } - if (typeof isStart !== 'boolean') { - log.error("参数 'isStart' 必须是布尔型!"); - return; - } - if (typeof currentTime !== 'number' || !Number.isInteger(currentTime)) { - log.error("参数 'currentTime' 必须是整数!"); - return; - } - if (typeof duration !== 'number' || !Number.isInteger(duration)) { - log.error("参数 'duration' 必须是整数!"); - return; - } - - // 将 currentTime 转换为 Date 对象并格式化为 HH:mm:ss.sss - const date = new Date(currentTime); - const hours = String(date.getHours()).padStart(2, '0'); - const minutes = String(date.getMinutes()).padStart(2, '0'); - const seconds = String(date.getSeconds()).padStart(2, '0'); - const milliseconds = String(date.getMilliseconds()).padStart(3, '0'); - const formattedTime = `${hours}:${minutes}:${seconds}.${milliseconds}`; - - // 将 duration 转换为分钟和秒,并保留三位小数 - const durationInSeconds = duration / 1000; // 转换为秒 - const durationMinutes = Math.floor(durationInSeconds / 60); - const durationSeconds = (durationInSeconds % 60).toFixed(3); // 保留三位小数 - - // 使用四个独立的 if 语句处理四种情况 - if (isJs && isStart) { - // 处理 isJs = true 且 isStart = true 的情况 - const logMessage = `正在伪造js开始的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 开始执行JS脚本: "${name}"`; - log.info(logMessage); - } - if (isJs && !isStart) { - // 处理 isJs = true 且 isStart = false 的情况 - const logMessage = `正在伪造js结束的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------`; - log.info(logMessage); - } - if (!isJs && isStart) { - // 处理 isJs = false 且 isStart = true 的情况 - const logMessage = `正在伪造地图追踪开始的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 开始执行地图追踪任务: "${name}"`; - log.info(logMessage); - } - if (!isJs && !isStart) { - // 处理 isJs = false 且 isStart = false 的情况 - const logMessage = `正在伪造地图追踪结束的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------`; - log.info(logMessage); - } -} - -// 辅助函数:提取文件名 -function basename(filePath) { - return filePath.split('/').pop(); -} - -//用于获取结束时间 -async function getEndTime(minIntervalTime, lastEndTime) { - const minIntervalTimeInMs = minIntervalTime * 60 * 1000; // 将分钟转换为毫秒 - return new Date(lastEndTime.getTime() + 24 * 60 * 60 * 1000 + minIntervalTimeInMs); -} - -// 执行 好感度的 path 任务 -async function AutoPath(locationName) { - try { - const filePath = `assets/AutoPath/${locationName}.json`; - await pathingScript.runFile(filePath); - } catch (error) { - log.error(`执行 ${locationName} 路径时发生错误: ${error.message}`); - } -} - -//好感度任务的逻辑 -async function AutoFriendshipDev(times, ocrTimeout, fightTimeout, enemyType = "盗宝团", endTime) { - for (let i = 0; i < times; i++) { - - // 获取当前时间 - const now = new Date(); - - // 比较当前时间与 endTime,若晚于 endTime 则跳出循环 - if (now > endTime) { - log.info("当前时间已晚于预期时间,终止好感任务"); - break; - } - - await fakeLog(`第${i + 1}次盗宝团好感`, false, true, 0); - - await AutoPath(`${enemyType}-触发点`); - // 启动路径导航任务 - let pathTaskPromise = AutoPath(`${enemyType}-战斗点`); - - // 根据敌人类型设置不同的OCR检测关键词 - const ocrKeywords = getOcrKeywords(enemyType); - - // OCR检测 - let ocrStatus = false; - let ocrStartTime = Date.now(); - while (Date.now() - ocrStartTime < ocrTimeout * 1000 && !ocrStatus) { - let captureRegion = captureGameRegion(); - let resList = captureRegion.findMulti(RecognitionObject.ocr(0, 200, 300, 300)); - for (let o = 0; o < resList.count; o++) { - let res = resList[o]; - for (let keyword of ocrKeywords) { - if (res.text.includes(keyword)) { - ocrStatus = true; - log.info("检测到突发任务触发"); - break; - } - } - if (ocrStatus) break; - } - if (!ocrStatus) { - await sleep(1000); - } - } - - if (ocrStatus) { - const cts = new CancellationTokenSource(); - try { // 设置最大等待时间为15秒 - const maxWaitTime = 15000; - const waitStartTime = Date.now(); - - // 根据敌人类型设置不同的目标坐标 - const targetCoords = getTargetCoordinates(enemyType); - const maxDistance = 10; // 10米距离判定 - - // 等待角色到达指定位置附近 - let isNearTarget = false; - let pathTaskFinished = false; - - // 简单监控路径任务完成 - pathTaskPromise.then(() => { - pathTaskFinished = true; - log.info("路径任务已完成"); - }).catch(error => { - pathTaskFinished = true; - log.error(`路径任务出错: ${error}`); - }); - // 等待角色到达目标位置或超时 - while (!isNearTarget && !pathTaskFinished && (Date.now() - waitStartTime < maxWaitTime)) { - const pos = genshin.getPositionFromMap(); - if (pos) { - const distance = Math.sqrt(Math.pow(pos.x - targetCoords.x, 2) + Math.pow(pos.y - targetCoords.y, 2)); - if (distance <= maxDistance) { - isNearTarget = true; - log.info(`已到达目标点附近,距离: ${distance.toFixed(2)}米`); - break; - } - } - await sleep(1000); - } log.info("开始战斗..."); - const battleTask = dispatcher.RunTask(new SoloTask("AutoFight"), cts); - const fightResultPromise = waitForBattleResult(fightTimeout * 1000, enemyType, cts); - - // 使用 Promise.all 等待两个任务完成 - const [battleResult, fightResult] = await Promise.all([ - battleTask.catch(error => { - return { success: false, error: error }; - }), - fightResultPromise // 不捕获超时错误,让它直接抛到外层 - ]); - await pathTaskPromise; // 等待路径任务完成 - cts.cancel(); - } catch (error) { - cts.cancel(); - if (error.message && error.message.includes("战斗超时")) { - log.error(`战斗超时,终止整个任务: ${error.message}`); - await genshin.tpToStatueOfTheSeven(); // 超时回到七天神像终止任务 - throw error; // 重新抛出超时错误,终止整个任务 - } - log.error(`执行过程中出错: ${error}`); - } - } else { - notification.send(`未识别到突发任务,${enemyType}好感结束`); - log.info(`未识别到突发任务,${enemyType}好感结束`); - return false; - } - - await fakeLog(`第${i + 1}次盗宝团好感`, false, false, 0); - } - log.info(`${enemyType}好感已完成`); - await genshin.tpToStatueOfTheSeven(); - - return true; -} - -// 验证输入是否是正整数 -function isPositiveInteger(value) { - return Number.isInteger(value) && value > 0; -} - -// 根据敌人类型获取OCR关键词 -function getOcrKeywords(enemyType) { - if (enemyType === "愚人众") { - return ["买卖", "不成", "正义存", "愚人众", "禁止", "危险", "运输", "打倒", "盗宝团"]; - } - else if (enemyType === "盗宝团") { - return ["岛上", "无贼", "消灭", "鬼鬼祟祟", "盗宝团"]; - } -} - -// 根据敌人类型获取目标战斗点坐标 -function getTargetCoordinates(enemyType) { - if (enemyType === "愚人众") { - // 愚人众战斗点坐标(需要根据实际位置调整) - return { x: 4840.55, y: -3078.01 }; // 这里需要替换为实际的愚人众战斗点坐标 - } else { - // 盗宝团战斗点坐标 - return { x: -2757.281, y: -3468.437 }; - } -} - -//切换队伍 -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); - } - } catch { - log.error("队伍切换失败,可能处于联机模式或其他不可切换状态"); - notification.error(`队伍切换失败,可能处于联机模式或其他不可切换状态`); - await genshin.returnMainUi(); - } -} - -//等待战斗结果 -async function waitForBattleResult(timeout = 2 * 60 * 1000, enemyType = "盗宝团", cts = new CancellationTokenSource()) { - let fightStartTime = Date.now(); - const successKeywords = ["事件", "完成"]; - const failureKeywords = ["失败"]; - const eventKeywords = getOcrKeywords(enemyType); - let notFind = 0; - - while (Date.now() - fightStartTime < timeout) { - try { - // 简化OCR检测,只使用一个try-catch块 - let result = captureGameRegion().find(RecognitionObject.ocr(850, 150, 200, 80)); - let result2 = captureGameRegion().find(RecognitionObject.ocr(0, 200, 300, 300)); - let text = result.text; - let text2 = result2.text; - - // 检查成功关键词 - for (let keyword of successKeywords) { - if (text.includes(keyword)) { - log.info("检测到战斗成功关键词: {0}", keyword); - log.info("战斗结果:成功"); - cts.cancel(); // 取消任务 - return true; - } - } - - // 检查失败关键词 - for (let keyword of failureKeywords) { - if (text.includes(keyword)) { - log.warn("检测到战斗失败关键词: {0}", keyword); - log.warn("战斗结果:失败,回到七天神像重试"); - cts.cancel(); // 取消任务 - await genshin.tpToStatueOfTheSeven(); - if (enemyType === "愚人众") { - await AutoPath('愚人众-准备'); - } - return false; - } - } - - // 检查事件关键词 - let find = 0; - for (let keyword of eventKeywords) { - if (text2.includes(keyword)) { - find++; - } - } - - if (find === 0) { - notFind++; - log.info("未检测到任务触发关键词:{0} 次", notFind); - } else { - notFind = 0; - } - - if (notFind > 10) { - log.warn("不在任务触发区域,战斗失败"); - cts.cancel(); // 取消任务 - if (enemyType === "愚人众") { - log.warn("回到愚人众准备点"); - await AutoPath('愚人众-准备'); - } - return false; - - } - } - catch (error) { - log.error("OCR过程中出错: {0}", error); - // 出错后继续循环,不进行额外嵌套处理 - } - - // 统一的检查间隔 - await sleep(1000); - } - - log.warn("在超时时间内未检测到战斗结果"); - cts.cancel(); // 取消任务 - throw new Error("战斗超时,未检测到结果"); -} - -/** - * 验证超时时间设置 - * @param {number|string} value - 用户设置的超时时间(秒) - * @param {number} defaultValue - 默认超时时间(秒) - * @param {string} timeoutType - 超时类型名称 - * @returns {number} - 验证后的超时时间(秒) - */ -function validateTimeoutSetting(value, defaultValue, timeoutType) { - // 转换为数字 - const timeout = Number(value); - - // 检查是否为有效数字且大于0 - if (!isFinite(timeout) || timeout <= 0) { - log.warn(`${timeoutType}超时设置无效,必须是大于0的数字,将使用默认值 ${defaultValue} 秒`); - return defaultValue; - } - - log.info(`${timeoutType}超时设置为 ${timeout} 秒`); - return timeout; -} - +const DEFAULT_OCR_TIMEOUT_SECONDS = 10; +const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120; + +(async function () { + //伪造js结束记录 + await fakeLog("自动狗粮重制版", true, true, 0); + + //预处理 + //settings 获取自定义配置 + const minIntervalTime = settings.minIntervalTime; + const waitTimePeriod = settings.waitTimePeriod; + const friendshipPartyName = settings.friendshipPartyName; + const grindPartyName = settings.grindPartyName; + const operationType = settings.operationType || "盗宝团"; + + //处理操作模式信息 + switch (operationType) { + case "盗宝团好感卡时间": + enemyType = "盗宝团"; + break; + + case "愚人众好感卡时间": + enemyType = "愚人众"; + break; + + case "鳄鱼好感卡时间": + enemyType = "鳄鱼"; + break; + + case "干等卡时间": + // 干等卡时间的逻辑 + break; + + case "不卡时间,ab交替运行": + // 不卡时间,ab交替运行的逻辑 + break; + + default: + // 其他情况的逻辑 + log.error("未知的操作类型: " + operationType); + break; + } + + + //处理卡时间信息 + // 异步读取文件内容 + const content = await file.readText("record.txt"); + + // 初始化变量并赋予默认值 + let lastRunDate = "未知"; // 默认值 + let lastEndTime = new Date(); // 默认值为当前时间 + let lastRunRoute = "未知"; // 默认值 + + // 按行分割内容 + const lines = content.split('\n'); + + // 逐行处理 + for (const line of lines) { + // 跳过空行 + if (line.trim() === '') continue; + + // 检查每行的起始部分 + if (line.startsWith("上次运行完成日期:")) { + lastRunDate = line.substring("上次运行完成日期:".length).trim(); + } + + if (line.startsWith("上次结束时间:")) { + const timeString = line.substring("上次结束时间:".length).trim(); + if (timeString) { + lastEndTime = new Date(timeString); + if (isNaN(lastEndTime.getTime())) { + throw new Error(`无效的时间值: ${timeString}`); + } + } + } + + if (line.startsWith("上次运行路线:")) { + lastRunRoute = line.substring("上次运行路线:".length).trim(); + } + } + + // 输出变量值 + log.info(`上次运行完成日期: ${lastRunDate}`); + log.info(`上次狗粮开始时间: ${lastEndTime.toISOString()}`); + log.info(`上次运行路线: ${lastRunRoute}`); + // 拆分 lastRunDate 为年、月、日 + const [year, month, day] = lastRunDate.split('/').map(Number); + + // 生成这个日期凌晨四点的时间 + const lastRunMidnight = new Date(year, month - 1, day, 4, 0, 0); + + // 获取当前时间 + const now = new Date(); + + // 计算当前时间与 lastRunMidnight 之间的时间差(单位:毫秒) + const timeDifference = now - lastRunMidnight; + + // 如果当前时间减去 lastRunMidnight 小于 24 小时(24 * 60 * 60 * 1000 毫秒),则终止程序运行 + if (timeDifference < 24 * 60 * 60 * 1000) { + log.info("今日已经运行过狗粮路线,终止程序运行"); + return; // 提前退出函数 + } + + // 如果时间差大于或等于 24 小时,程序继续运行 + log.info("今日还没有运行过狗粮路线,程序运行"); + + let endTime = await getEndTime(minIntervalTime, lastEndTime); + + // 解析 waitTimePeriod + const [startTimeStr, endTimeStr] = waitTimePeriod.split('-').map(time => time.trim()); + + // 将时间字符串转换为小时和分钟 + const [startHour, startMinute] = startTimeStr.split(':').map(Number); + const [endHour, endMinute] = endTimeStr.split(':').map(Number); + + // 获取当前日期 + const today = new Date(); + today.setHours(0, 0, 0, 0); // 将时间设置为当天的午夜 + + // 创建等待时间段的开始时间和结束时间的 Date 对象 + const waitStartTime = new Date(today); + waitStartTime.setHours(startHour, startMinute, 0, 0); + + const waitEndTime = new Date(today); + waitEndTime.setHours(endHour, endMinute, 0, 0); + + // 新增变量,初始值为 true,用于标识今天跑的路线 + let runRouteA = true; + + // 获取当前时间 + const timeNow = new Date(); + + // 检查 endTime 是否晚于当天的结束时间 + if (endTime > waitEndTime) { + // 如果 endTime 晚于当天的结束时间,则将其改为当天的开始时间 + endTime = new Date(waitStartTime); + // 同时将 runRouteA 改为 false,今天运行B路线 + runRouteA = false; + } + + // 检查 lastRunRoute 是否为 "B" + if (lastRunRoute === "B" && operationType !== "不卡时间,ab交替运行") { + // 如果 lastRunRoute 为 "B",则将 endTime 改为当天的开始时间 + endTime = new Date(waitStartTime); + // 同时将 runRouteA 改为 true + runRouteA = true; + } + + if (operationType === "不卡时间,ab交替运行" && lastRunRoute === "A") { + runRouteA = false; + } + + // 根据 runRouteA 的值给 runningRoute 赋值 + const runningRoute = runRouteA ? "A" : "B"; + const folderName = `${runningRoute}路线`; + const filePathPreparation = `assets/ArtifactsPath/${folderName}/00准备`; + // 运行准备路线 + { + //切换至好感队 + await switchPartyIfNeeded(friendshipPartyName); + + // 读取文件夹中的文件名并处理 + const filePaths = file.readPathSync(filePathPreparation); + const jsonFileNames = []; + + for (const filePath of filePaths) { + const fileName = basename(filePath); // 提取文件名 + if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 + jsonFileNames.push(fileName); // 存储文件名 + } + } + + let currentTask = 0; // 当前任务计数器 + + // 执行准备路线的地图追踪文件 + for (const fileName of jsonFileNames) { + const fullPath = fileName; + await fakeLog(fileName, false, true, 0); + currentTask += 1; // 更新当前任务计数器 + log.info(`当前进度:准备${folderName}第${currentTask}/${jsonFileNames.length}个`); + await pathingScript.runFile(fullPath); + //捕获任务取消的信息并跳出循环 + try { + await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒 + } catch (error) { + log.error(`发生错误: ${error}`); + return false; // 终止循环 + } + await fakeLog(fileName, false, false, 0); + } + } + + // 启用自动拾取的实时任务 + dispatcher.addTimer(new RealtimeTimer("AutoPick")); + + + if (operationType !== "不卡时间,ab交替运行") { + // 输出结果 + log.info(`预期开始狗粮时间: ${endTime.toTimeString().slice(0, 8)}`); + + // 检查当前时间是否晚于 endTime + if (timeNow > endTime) { + log.warn('无需卡时间') + didPreparation = false; + } else { + if (operationType !== "干等卡时间") { + //准备环节 + if (enemyType === "盗宝团") { + log.info(`清理原住民...`); + await AutoPath('盗宝团-准备'); + } + if (enemyType === "愚人众") { + log.info(`导航到愚人众触发点...`); + await AutoPath('愚人众-准备'); + } + if (enemyType === "鳄鱼") { + log.info(`导航到盗宝团触发点...`); + await AutoPath('鳄鱼-准备'); + } + //好感卡时间 + + // 验证超时设置 + const ocrTimeout = validateTimeoutSetting(settings.ocrTimeout, DEFAULT_OCR_TIMEOUT_SECONDS, "OCR"); + const fightTimeout = validateTimeoutSetting(settings.fightTimeout, DEFAULT_FIGHT_TIMEOUT_SECONDS, "战斗"); + + // 好感循环开始 + await AutoFriendshipDev(50, ocrTimeout, fightTimeout, enemyType, endTime); + } + } + + // 获取当前时间 + const waitStartNow = new Date(); + + // 计算 endTime 与当前时间的差值(单位:毫秒),以防好感度运行完了还没到时间 + const timeDiff = endTime - waitStartNow; + if (timeDiff > 0) { + log.info(`当前时间与预期时间的差值为 ${timeDiff} 毫秒,等待该时间`); + await sleep(timeDiff); + } else { + log.info("当前时间已晚于预期时间,无需等待"); + } + } + //切换至狗粮队 + await switchPartyIfNeeded(grindPartyName); + + //更新运行数据 + { + // 获取当前日期和时间 + const finishDate = new Date(); + + // 格式化当前日期为 "YYYY/MM/DD" 格式 + const currentDateString = `${finishDate.getFullYear()}/${String(finishDate.getMonth() + 1).padStart(2, '0')}/${String(finishDate.getDate()).padStart(2, '0')}`; + + // 根据 runRouteA 的值更新 lastRunRoute + lastRunRoute = runRouteA ? "A" : "B"; + + // 更新 lastRunDate 为当前日期 + lastRunDate = currentDateString; + + // 更新 lastEndTime 为当前时间 + lastEndTime = new Date(); // 使用 new Date() 获取当前时间 + + //按格式输出今日狗粮路线信息 + log.info(`今日运行狗粮路线:${runRouteA ? 'A' : 'B'},开始时间:${lastEndTime.toLocaleString()}`); + } + + // 开始运行狗粮路线 + let runArtifactsResult = true; + runArtifactsResult = await runArtifactsPaths(runRouteA); + + if (runArtifactsResult) { + //修改文件内容 + log.info('尝试修改记录文件'); + await writeRecordFile(lastRunDate, lastEndTime, lastRunRoute); + } + + //完成剩下好感 + + if (settings.completeRemainingFriendship) { + //切换至好感队 + await switchPartyIfNeeded(friendshipPartyName); + // 验证超时设置 + const ocrTimeout = validateTimeoutSetting(settings.ocrTimeout, DEFAULT_OCR_TIMEOUT_SECONDS, "OCR"); + const fightTimeout = validateTimeoutSetting(settings.fightTimeout, DEFAULT_FIGHT_TIMEOUT_SECONDS, "战斗"); + //准备环节 + if (enemyType === "盗宝团") { + log.info(`清理原住民...`); + await AutoPath('盗宝团-准备'); + } + if (enemyType === "愚人众") { + log.info(`导航到愚人众触发点...`); + await AutoPath('愚人众-准备'); + } + if (enemyType === "鳄鱼") { + log.info(`导航到盗宝团触发点...`); + await AutoPath('鳄鱼-准备'); + } + // 好感循环开始 + await AutoFriendshipDev(50, ocrTimeout, fightTimeout, enemyType, endTime + 24 * 60 * 60 * 1000); + } + //伪造js开始记录 + await fakeLog("自动狗粮重制版", true, false, 0); +})(); + +// 异步函数,用于将变量内容写回到文件 +async function writeRecordFile(lastRunDate, lastEndTime, lastRunRoute) { + try { + // 构造要写入文件的内容 + const content = [ + `上次运行完成日期: ${lastRunDate}`, + `上次结束时间: ${lastEndTime.toISOString()}`, + `上次运行路线: ${lastRunRoute}` + ].join('\n'); + + // 异步写入文件 + const result = await file.writeText("record.txt", content, false); // 覆盖写入 + if (result) { + log.info("文件写入成功"); + } else { + log.error("文件写入失败"); + } + } catch (error) { + log.error(`写入文件时出错: ${error}`); + } +} + +//运行狗粮路线的逻辑 +async function runArtifactsPaths(runRouteA) { + // 根据 runRouteA 的值给 runningRoute 赋值 + const runningRoute = runRouteA ? "A" : "B"; + + // 定义文件夹路径 + const folderName = `${runningRoute}路线`; + + const filePathNormal = `assets/ArtifactsPath/${folderName}/01普通`; + const filePathEnding = `assets/ArtifactsPath/${folderName}/02收尾`; + const filePathExtra = `assets/ArtifactsPath/${folderName}/03额外`; + + // 运行普通路线 + { + // 读取文件夹中的文件名并处理 + const filePaths = file.readPathSync(filePathNormal); + const jsonFileNames = []; + + for (const filePath of filePaths) { + const fileName = basename(filePath); // 提取文件名 + if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 + jsonFileNames.push(fileName); // 存储文件名 + } + } + + let currentTask = 0; // 当前任务计数器 + + // 执行普通路线的地图追踪文件 + for (const fileName of jsonFileNames) { + const fullPath = fileName; + await fakeLog(fileName, false, true, 0); + currentTask += 1; // 更新当前任务计数器 + log.info(`当前进度:普通${folderName}第${currentTask}/${jsonFileNames.length}个`); + await pathingScript.runFile(fullPath); + //捕获任务取消的信息并跳出循环 + try { + await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒 + } catch (error) { + log.error(`发生错误: ${error}`); + return false; // 终止循环 + } + await fakeLog(fileName, false, false, 0); + } + } + + // 运行收尾路线 + { + // 读取文件夹中的文件名并处理 + const filePaths = file.readPathSync(filePathEnding); + const jsonFileNames = []; + + for (const filePath of filePaths) { + const fileName = basename(filePath); // 提取文件名 + if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 + jsonFileNames.push(fileName); // 存储文件名 + } + } + + let currentTask = 0; // 当前任务计数器 + + // 执行收尾路线的地图追踪文件 + for (const fileName of jsonFileNames) { + const fullPath = fileName; + await fakeLog(fileName, false, true, 0); + currentTask += 1; // 更新当前任务计数器 + log.info(`当前进度:收尾${folderName}第${currentTask}/${jsonFileNames.length}个`); + await pathingScript.runFile(fullPath); + //捕获任务取消的信息并跳出循环 + try { + await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒 + } catch (error) { + log.error(`发生错误: ${error}`); + return false; // 终止循环 + } + await fakeLog(fileName, false, false, 0); + } + } + + // 运行额外路线 + { + // 读取文件夹中的文件名并处理 + const filePaths = file.readPathSync(filePathExtra); + const jsonFileNames = []; + + for (const filePath of filePaths) { + const fileName = basename(filePath); // 提取文件名 + if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 + jsonFileNames.push(fileName); // 存储文件名 + } + } + + let currentTask = 0; // 当前任务计数器 + + // 执行额外路线的地图追踪文件 + for (const fileName of jsonFileNames) { + const fullPath = fileName; + await fakeLog(fileName, false, true, 0); + currentTask += 1; // 更新当前任务计数器 + log.info(`当前进度:额外${folderName}第${currentTask}/${jsonFileNames.length}个`); + await pathingScript.runFile(fullPath); + //捕获任务取消的信息并跳出循环 + try { + await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒 + } catch (error) { + log.error(`发生错误: ${error}`); + return false; // 终止循环 + } + await fakeLog(fileName, false, false, 0); + } + } + + return true; +} + +// fakeLog 函数,使用方法:将本函数放在主函数前,调用时请务必使用await,否则可能出现v8白框报错 +//在js开头处伪造该js结束运行的日志信息,如 await fakeLog("js脚本", true, true, 0); +//在js结尾处伪造该js开始运行的日志信息,如 await fakeLog("js脚本", true, false, 2333); +//duration项目仅在伪造结束信息时有效,且无实际作用,可以任意填写,当你需要在日志中输出特定值时才需要,单位为毫秒 +//在调用地图追踪前伪造该地图追踪开始运行的日志信息,如 await fakeLog(`地图追踪.json`, false, true, 0); +//在调用地图追踪后伪造该地图追踪结束运行的日志信息,如 await fakeLog(`地图追踪.json`, false, false, 0); +//如此便可以在js运行过程中伪造地图追踪的日志信息,可以在日志分析等中查看 + +async function fakeLog(name, isJs, isStart, duration) { + await sleep(10); + const currentTime = Date.now(); + // 参数检查 + if (typeof name !== 'string') { + log.error("参数 'name' 必须是字符串类型!"); + return; + } + if (typeof isJs !== 'boolean') { + log.error("参数 'isJs' 必须是布尔型!"); + return; + } + if (typeof isStart !== 'boolean') { + log.error("参数 'isStart' 必须是布尔型!"); + return; + } + if (typeof currentTime !== 'number' || !Number.isInteger(currentTime)) { + log.error("参数 'currentTime' 必须是整数!"); + return; + } + if (typeof duration !== 'number' || !Number.isInteger(duration)) { + log.error("参数 'duration' 必须是整数!"); + return; + } + + // 将 currentTime 转换为 Date 对象并格式化为 HH:mm:ss.sss + const date = new Date(currentTime); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + const milliseconds = String(date.getMilliseconds()).padStart(3, '0'); + const formattedTime = `${hours}:${minutes}:${seconds}.${milliseconds}`; + + // 将 duration 转换为分钟和秒,并保留三位小数 + const durationInSeconds = duration / 1000; // 转换为秒 + const durationMinutes = Math.floor(durationInSeconds / 60); + const durationSeconds = (durationInSeconds % 60).toFixed(3); // 保留三位小数 + + // 使用四个独立的 if 语句处理四种情况 + if (isJs && isStart) { + // 处理 isJs = true 且 isStart = true 的情况 + const logMessage = `正在伪造js开始的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 开始执行JS脚本: "${name}"`; + log.info(logMessage); + } + if (isJs && !isStart) { + // 处理 isJs = true 且 isStart = false 的情况 + const logMessage = `正在伪造js结束的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------`; + log.info(logMessage); + } + if (!isJs && isStart) { + // 处理 isJs = false 且 isStart = true 的情况 + const logMessage = `正在伪造地图追踪开始的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 开始执行地图追踪任务: "${name}"`; + log.info(logMessage); + } + if (!isJs && !isStart) { + // 处理 isJs = false 且 isStart = false 的情况 + const logMessage = `正在伪造地图追踪结束的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------`; + log.info(logMessage); + } +} + +// 辅助函数:提取文件名 +function basename(filePath) { + return filePath.split('/').pop(); +} + +//用于获取结束时间 +async function getEndTime(minIntervalTime, lastEndTime) { + const minIntervalTimeInMs = minIntervalTime * 60 * 1000; // 将分钟转换为毫秒 + return new Date(lastEndTime.getTime() + 24 * 60 * 60 * 1000 + minIntervalTimeInMs); +} + +// 执行 好感度的 path 任务 +async function AutoPath(locationName) { + try { + const filePath = `assets/AutoPath/${locationName}.json`; + await pathingScript.runFile(filePath); + } catch (error) { + log.error(`执行 ${locationName} 路径时发生错误: ${error.message}`); + } +} + +//好感度任务的逻辑 +async function AutoFriendshipDev(times, ocrTimeout, fightTimeout, enemyType = "盗宝团", endTime) { + for (let i = 0; i < times; i++) { + + // 获取当前时间 + const now = new Date(); + + // 比较当前时间与 endTime,若晚于 endTime 则跳出循环 + if (now > endTime) { + log.info("当前时间已晚于预期时间,终止好感任务"); + break; + } + + await fakeLog(`第${i + 1}次好感`, false, true, 0); + + await AutoPath(`${enemyType}-触发点`); + // 启动路径导航任务 + let pathTaskPromise = AutoPath(`${enemyType}-战斗点`); + + // 根据敌人类型设置不同的OCR检测关键词 + const ocrKeywords = getOcrKeywords(enemyType); + + // OCR检测 + let ocrStatus = false; + let ocrStartTime = Date.now(); + while (Date.now() - ocrStartTime < ocrTimeout * 1000 && !ocrStatus) { + let captureRegion = captureGameRegion(); + let resList = captureRegion.findMulti(RecognitionObject.ocr(0, 200, 300, 300)); + for (let o = 0; o < resList.count; o++) { + let res = resList[o]; + for (let keyword of ocrKeywords) { + if (res.text.includes(keyword)) { + ocrStatus = true; + log.info("检测到突发任务触发"); + break; + } + } + if (ocrStatus) break; + } + if (!ocrStatus) { + await sleep(1000); + } + } + + if (ocrStatus) { + const cts = new CancellationTokenSource(); + try { // 设置最大等待时间为15秒 + const maxWaitTime = 15000; + const waitStartTime = Date.now(); + + // 根据敌人类型设置不同的目标坐标 + const targetCoords = getTargetCoordinates(enemyType); + const maxDistance = 10; // 10米距离判定 + + // 等待角色到达指定位置附近 + let isNearTarget = false; + let pathTaskFinished = false; + + // 简单监控路径任务完成 + pathTaskPromise.then(() => { + pathTaskFinished = true; + log.info("路径任务已完成"); + }).catch(error => { + pathTaskFinished = true; + log.error(`路径任务出错: ${error}`); + }); + // 等待角色到达目标位置或超时 + while (!isNearTarget && !pathTaskFinished && (Date.now() - waitStartTime < maxWaitTime)) { + const pos = genshin.getPositionFromMap(); + if (pos) { + const distance = Math.sqrt(Math.pow(pos.x - targetCoords.x, 2) + Math.pow(pos.y - targetCoords.y, 2)); + if (distance <= maxDistance) { + isNearTarget = true; + log.info(`已到达目标点附近,距离: ${distance.toFixed(2)}米`); + break; + } + } + await sleep(1000); + } log.info("开始战斗..."); + const battleTask = dispatcher.RunTask(new SoloTask("AutoFight"), cts); + const fightResultPromise = waitForBattleResult(fightTimeout * 1000, enemyType, cts); + + // 使用 Promise.all 等待两个任务完成 + const [battleResult, fightResult] = await Promise.all([ + battleTask.catch(error => { + return { success: false, error: error }; + }), + fightResultPromise // 不捕获超时错误,让它直接抛到外层 + ]); + await pathTaskPromise; // 等待路径任务完成 + cts.cancel(); + } catch (error) { + cts.cancel(); + if (error.message && error.message.includes("战斗超时")) { + log.error(`战斗超时,终止整个任务: ${error.message}`); + await genshin.tpToStatueOfTheSeven(); // 超时回到七天神像终止任务 + throw error; // 重新抛出超时错误,终止整个任务 + } + log.error(`执行过程中出错: ${error}`); + } + } else { + notification.send(`未识别到突发任务,${enemyType}好感结束`); + log.info(`未识别到突发任务,${enemyType}好感结束`); + return false; + } + + // 特殊处理:鳄鱼战斗后需要拾取 + if (enemyType === "鳄鱼") { + await AutoPath('鳄鱼-拾取'); + } + + await fakeLog(`第${i + 1}次好感`, false, false, 0); + } + log.info(`${enemyType}好感已完成`); + await genshin.tpToStatueOfTheSeven(); + + return true; +} + +// 验证输入是否是正整数 +function isPositiveInteger(value) { + return Number.isInteger(value) && value > 0; +} + +// 根据敌人类型获取OCR关键词 +function getOcrKeywords(enemyType) { + if (enemyType === "愚人众") { + return ["买卖", "不成", "正义存", "愚人众", "禁止", "危险", "运输", "打倒", "盗宝团"]; + } + else if (enemyType === "盗宝团") { + return ["岛上", "无贼", "消灭", "鬼鬼祟祟", "盗宝团"]; + } +} + +// 根据敌人类型获取目标战斗点坐标 +function getTargetCoordinates(enemyType) { + if (enemyType === "愚人众") { + // 愚人众战斗点坐标(需要根据实际位置调整) + return { x: 4840.55, y: -3078.01 }; // 这里需要替换为实际的愚人众战斗点坐标 + } else { + // 盗宝团战斗点坐标 + return { x: -2757.281, y: -3468.437 }; + } +} + +//切换队伍 +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); + } + } catch { + log.error("队伍切换失败,可能处于联机模式或其他不可切换状态"); + notification.error(`队伍切换失败,可能处于联机模式或其他不可切换状态`); + await genshin.returnMainUi(); + } +} + +//等待战斗结果 +async function waitForBattleResult(timeout = 2 * 60 * 1000, enemyType = "盗宝团", cts = new CancellationTokenSource()) { + let fightStartTime = Date.now(); + const successKeywords = ["事件", "完成"]; + const failureKeywords = ["失败"]; + const eventKeywords = getOcrKeywords(enemyType); + let notFind = 0; + + while (Date.now() - fightStartTime < timeout) { + try { + // 简化OCR检测,只使用一个try-catch块 + let result = captureGameRegion().find(RecognitionObject.ocr(850, 150, 200, 80)); + let result2 = captureGameRegion().find(RecognitionObject.ocr(0, 200, 300, 300)); + let text = result.text; + let text2 = result2.text; + + // 检查成功关键词 + for (let keyword of successKeywords) { + if (text.includes(keyword)) { + log.info("检测到战斗成功关键词: {0}", keyword); + log.info("战斗结果:成功"); + cts.cancel(); // 取消任务 + return true; + } + } + + // 检查失败关键词 + for (let keyword of failureKeywords) { + if (text.includes(keyword)) { + log.warn("检测到战斗失败关键词: {0}", keyword); + log.warn("战斗结果:失败,回到七天神像重试"); + cts.cancel(); // 取消任务 + await genshin.tpToStatueOfTheSeven(); + if (enemyType === "愚人众") { + await AutoPath('愚人众-准备'); + } + return false; + } + } + + // 检查事件关键词 + let find = 0; + for (let keyword of eventKeywords) { + if (text2.includes(keyword)) { + find++; + } + } + + if (find === 0) { + notFind++; + log.info("未检测到任务触发关键词:{0} 次", notFind); + } else { + notFind = 0; + } + + if (notFind > 10) { + log.warn("不在任务触发区域,战斗失败"); + cts.cancel(); // 取消任务 + if (enemyType === "愚人众") { + log.warn("回到愚人众准备点"); + await AutoPath('愚人众-准备'); + } + return false; + + } + } + catch (error) { + log.error("OCR过程中出错: {0}", error); + // 出错后继续循环,不进行额外嵌套处理 + } + + // 统一的检查间隔 + await sleep(1000); + } + + log.warn("在超时时间内未检测到战斗结果"); + cts.cancel(); // 取消任务 + throw new Error("战斗超时,未检测到结果"); +} + +/** + * 验证超时时间设置 + * @param {number|string} value - 用户设置的超时时间(秒) + * @param {number} defaultValue - 默认超时时间(秒) + * @param {string} timeoutType - 超时类型名称 + * @returns {number} - 验证后的超时时间(秒) + */ +function validateTimeoutSetting(value, defaultValue, timeoutType) { + // 转换为数字 + const timeout = Number(value); + + // 检查是否为有效数字且大于0 + if (!isFinite(timeout) || timeout <= 0) { + log.warn(`${timeoutType}超时设置无效,必须是大于0的数字,将使用默认值 ${defaultValue} 秒`); + return defaultValue; + } + + log.info(`${timeoutType}超时设置为 ${timeout} 秒`); + return timeout; +} + diff --git a/repo/js/AutoArtifactsPro/manifest.json b/repo/js/AutoArtifactsPro/manifest.json index d145424d..5e2d5af9 100644 --- a/repo/js/AutoArtifactsPro/manifest.json +++ b/repo/js/AutoArtifactsPro/manifest.json @@ -1,20 +1,20 @@ -{ - "manifest_version": 1, - "name": "自动狗粮重制版", - "version": "1.0", - "tags": ["好感", "盗宝团", "狗粮"], - "description": "通过突发事件【岛上无贼】卡时间后运行狗粮任务以提高狗粮总收益,需要正确配置好感队伍的战斗策略,并在自定义配置中指定好感和狗粮队伍名称", - "authors": [ - { - "name": "mno" - }, - { - "name": "秋云" - }, - { - "name": "汐" - } - ], - "settings_ui": "settings.json", - "main": "main.js" +{ + "manifest_version": 1, + "name": "自动狗粮重制版", + "version": "1.0", + "tags": ["好感", "盗宝团", "狗粮"], + "description": "通过突发事件【岛上无贼】卡时间后运行狗粮任务以提高狗粮总收益,需要正确配置好感队伍的战斗策略,并在自定义配置中指定好感和狗粮队伍名称", + "authors": [ + { + "name": "mno" + }, + { + "name": "秋云" + }, + { + "name": "汐" + } + ], + "settings_ui": "settings.json", + "main": "main.js" } \ No newline at end of file diff --git a/repo/js/AutoArtifactsPro/settings.json b/repo/js/AutoArtifactsPro/settings.json index f5fb1e4a..11d1bdcd 100644 --- a/repo/js/AutoArtifactsPro/settings.json +++ b/repo/js/AutoArtifactsPro/settings.json @@ -1,42 +1,55 @@ -[ - { - "name": "friendshipPartyName", - "type": "input-text", - "label": "好感队名称\n【请输入好感队的队伍名称】" - }, - { - "name": "grindPartyName", - "type": "input-text", - "label": "狗粮队名称\n【请输入狗粮队的队伍名称】" - }, - { - "name": "minIntervalTime", - "type": "input-text", - "label": "最短间隔时间(分钟)\n【默认值为5分钟】", - "default": "5" - }, - { - "name": "waitTimePeriod", - "type": "input-text", - "label": "卡时间时间段\n【格式参考:4:00-4:40,默认为4:00-4:40】", - "default": "4:00-4:40" - }, - { - "name": "ocrTimeout", - "type": "input-text", - "label": "OCR超时时间(秒)\n【选填,默认为10秒,如果经常提前判定未识别到任务,请适当调大】", - "default": "10" - }, - { - "name": "fightTimeout", - "type": "input-text", - "label": "战斗超时时间(秒)\n【选填,默认为120秒】", - "default": "120" - }, - { - "name": "completeRemainingFriendship", - "type": "checkbox", - "label": "是否在狗粮路线结束后完成剩余盗宝团好感\n【勾选后将在狗粮路线结束后继续完成剩余的好感任务】", - "default": true - } -] +[ + { + "name": "operationType", + "type": "select", + "label": "卡时间模式", + "options": [ + "盗宝团好感卡时间", + "愚人众好感卡时间", + "鳄鱼好感卡时间", + "干等卡时间", + "不卡时间,ab交替运行" + ], + "default": "盗宝团卡时间" + }, + { + "name": "friendshipPartyName", + "type": "input-text", + "label": "好感队名称\n【请输入好感队的队伍名称】" + }, + { + "name": "grindPartyName", + "type": "input-text", + "label": "狗粮队名称\n【请输入狗粮队的队伍名称】" + }, + { + "name": "minIntervalTime", + "type": "input-text", + "label": "最短间隔时间(分钟)\n【默认值为5分钟】", + "default": "5" + }, + { + "name": "waitTimePeriod", + "type": "input-text", + "label": "卡时间时间段\n【格式参考:4:00-4:40,默认为4:00-4:40】", + "default": "4:00-4:40" + }, + { + "name": "ocrTimeout", + "type": "input-text", + "label": "OCR超时时间(秒)\n【选填,默认为10秒,如果经常提前判定未识别到任务,请适当调大】", + "default": "10" + }, + { + "name": "fightTimeout", + "type": "input-text", + "label": "战斗超时时间(秒)\n【选填,默认为120秒】", + "default": "120" + }, + { + "name": "completeRemainingFriendship", + "type": "checkbox", + "label": "是否在狗粮路线结束后完成剩余盗宝团好感\n【勾选后将在狗粮路线结束后继续完成剩余的好感任务】", + "default": true + } +] \ No newline at end of file