diff --git a/repo/js/AutoEntrust/Data/RecognitionObject/Completed.png b/repo/js/AutoEntrust/Data/RecognitionObject/Completed.png new file mode 100644 index 00000000..f5786f87 Binary files /dev/null and b/repo/js/AutoEntrust/Data/RecognitionObject/Completed.png differ diff --git a/repo/js/AutoEntrust/Data/RecognitionObject/UnCompleted.png b/repo/js/AutoEntrust/Data/RecognitionObject/UnCompleted.png new file mode 100644 index 00000000..3bd30f70 Binary files /dev/null and b/repo/js/AutoEntrust/Data/RecognitionObject/UnCompleted.png differ diff --git a/repo/js/AutoEntrust/Data/RecognitionObject/paimon_menu.png b/repo/js/AutoEntrust/Data/RecognitionObject/paimon_menu.png new file mode 100644 index 00000000..c424325b Binary files /dev/null and b/repo/js/AutoEntrust/Data/RecognitionObject/paimon_menu.png differ diff --git a/repo/js/AutoEntrust/README.md b/repo/js/AutoEntrust/README.md index c25e1e1b..cb71f732 100644 --- a/repo/js/AutoEntrust/README.md +++ b/repo/js/AutoEntrust/README.md @@ -1,7 +1,7 @@ # 原神自动化脚本集合 ## 项目简介 -本项目是一个基于BetterGI的原神自动化脚本集合,主要功能包括自动完成每日委托、自动识别委托内容、自动追踪委托路径等。路径追踪脚本由换苏伟u大佬提供。未来准备支持全国家的每日委托,需要对话的委托来自动刷取成就奖励。目前项目正处于初级阶段急需人手,有意者请加作者QQ好友(会在地图上标点即可)。 +本项目是一个基于BetterGI的原神自动化脚本集合,主要功能包括自动完成每日委托、自动识别委托内容、自动追踪委托路径等。路径追踪脚本由换苏伟u,云闲vsv大佬提供。未来准备支持全国家的每日委托,需要对话的委托来自动刷取成就奖励。目前项目正处于初级阶段急需人手,有意者请加作者QQ好友(会在地图上标点即可)。 ## 主要功能 - 自动识别每日委托内容 @@ -10,7 +10,10 @@ ## 更新日志 -### 当前版本:0.94.1 +### 当前版本:0.95 +- 完成了对话委托 + +### 上一版本:0.94.1 - 修复攀高危险问题 - 完成了更多对话委托 - 修复委托不存在 diff --git a/repo/js/AutoEntrust/assets/process/冒险家安娜/process.json b/repo/js/AutoEntrust/assets/process/冒险家安娜/process.json new file mode 100644 index 00000000..132c095e --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/冒险家安娜/process.json @@ -0,0 +1,6 @@ +冒险家,安娜!-蒙德城-1.json +F +冒险家,安娜!-蒙德城-2.json +F +冒险家,安娜!-蒙德城-3.json +F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-1.json b/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-1.json new file mode 100644 index 00000000..694104aa --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-1.json @@ -0,0 +1,31 @@ +{ + "info": { + "name": "冒险家,安娜!-蒙德城-1", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "冒险家,安娜!-蒙德城-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -867.70703125, + "y": 2281.3701171875, + "action_params": "" + }, + { + "id": 2, + "x": -861.3232421875, + "y": 2302.66552734375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-2.json b/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-2.json new file mode 100644 index 00000000..41fe9186 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-2.json @@ -0,0 +1,49 @@ +{ + "info": { + "name": "冒险家,安娜!-蒙德城-2", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "冒险家,安娜!-蒙德城-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1505.8955078125, + "y": 2296.281982421875, + "action_params": "" + }, + { + "id": 2, + "x": -1498.150390625, + "y": 2301.091796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1346.529296875, + "y": 2287.839111328125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1333.6376953125, + "y": 2283.835205078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-3.json b/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-3.json new file mode 100644 index 00000000..363232f9 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/冒险家安娜/冒险家,安娜!-蒙德城-3.json @@ -0,0 +1,77 @@ +{ + "info": { + "name": "冒险家,安娜!-蒙德城-3", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "冒险家,安娜!-蒙德城-3", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -1334.908203125, + "y": 2285.588134765625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -1364.53125, + "y": 2306.401611328125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1366.7783203125, + "y": 2332.82421875, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 4, + "x": -1367.0439453125, + "y": 2342.846435546875, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "attack,wait(0.52),attack(4.5),", + "locked": false + }, + { + "id": 5, + "x": -1367.0439453125, + "y": 2342.846435546875, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "attack,wait(0.52),attack(4.5)," + }, + { + "id": 6, + "x": -1388.044921875, + "y": 2346.076171875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1388.52734375, + "y": 2352.74365234375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/父亲能做的事/process.json b/repo/js/AutoEntrust/assets/process/父亲能做的事/process.json new file mode 100644 index 00000000..046c8256 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/父亲能做的事/process.json @@ -0,0 +1,6 @@ +父亲能做的事-晨曦酒庄-1.json +F +父亲能做的事-晨曦酒庄-2.json +F +父亲能做的事-晨曦酒庄-3.json +F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-1.json b/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-1.json new file mode 100644 index 00000000..ed410092 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-1.json @@ -0,0 +1,112 @@ +{ + "info": { + "name": "父亲能做的事-晨曦酒庄", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "父亲能做的事-晨曦酒庄-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -578.81640625, + "y": 1853.37255859375, + "action_params": "" + }, + { + "id": 2, + "x": -491.6826171875, + "y": 1825.15087890625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -485.435546875, + "y": 1822.61767578125, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -445.2705078125, + "y": 1805.80078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -439.673828125, + "y": 1793.24267578125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -420.3369140625, + "y": 1789.75439453125, + "type": "path", + "move_mode": "run", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -407.6767578125, + "y": 1793.21533203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -392.833984375, + "y": 1797.24267578125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -380.150390625, + "y": 1801.69287109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -374.2587890625, + "y": 1793.12841796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 11, + "x": -376.1328125, + "y": 1789.58935546875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-2.json b/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-2.json new file mode 100644 index 00000000..a734536c --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-2.json @@ -0,0 +1,67 @@ +{ + "info": { + "name": "父亲能做的事-晨曦酒庄-2", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "父亲能做的事-晨曦酒庄-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -749.4365234375, + "y": 2263.11474609375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -748.0517578125, + "y": 2264.512451171875, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -719.00390625, + "y": 2301.57080078125, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -705.7412109375, + "y": 2353.3037109375, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -697.658203125, + "y": 2357.437255859375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -684.8525390625, + "y": 2355.17578125, + "action": "combat_script", + "move_mode": "walk", + "action_params": "attack,wait(1),walk(w,0.2),wait(2),keypress(f),wait(14),walk(w,1.6),wait(2),walk(a,0.6),wait(1),moveby(286,0),walk(w,6.3),wait(2),walk(d,0.2),wait(2),keypress(s),", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-3.json b/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-3.json new file mode 100644 index 00000000..ed410092 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/父亲能做的事/父亲能做的事-晨曦酒庄-3.json @@ -0,0 +1,112 @@ +{ + "info": { + "name": "父亲能做的事-晨曦酒庄", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "父亲能做的事-晨曦酒庄-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -578.81640625, + "y": 1853.37255859375, + "action_params": "" + }, + { + "id": 2, + "x": -491.6826171875, + "y": 1825.15087890625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -485.435546875, + "y": 1822.61767578125, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -445.2705078125, + "y": 1805.80078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -439.673828125, + "y": 1793.24267578125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -420.3369140625, + "y": 1789.75439453125, + "type": "path", + "move_mode": "run", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -407.6767578125, + "y": 1793.21533203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -392.833984375, + "y": 1797.24267578125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -380.150390625, + "y": 1801.69287109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -374.2587890625, + "y": 1793.12841796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 11, + "x": -376.1328125, + "y": 1789.58935546875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/诗歌交流/process.json b/repo/js/AutoEntrust/assets/process/诗歌交流/process.json new file mode 100644 index 00000000..2955643a --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/诗歌交流/process.json @@ -0,0 +1,6 @@ +诗歌交流-坠星山谷-1.json +F +诗歌交流-坠星山谷-2.json +F +诗歌交流-坠星山谷-3.json +F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-1.json b/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-1.json new file mode 100644 index 00000000..3182bef2 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-1.json @@ -0,0 +1,67 @@ +{ + "info": { + "name": "诗歌交流-坠星山谷-1", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "诗歌交流-坠星山谷-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1536.81640625, + "y": 1978.66552734375, + "action_params": "" + }, + { + "id": 2, + "x": -1536.109375, + "y": 1982.35986328125, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 3, + "x": -1502.8125, + "y": 2070.242431640625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1472.19140625, + "y": 2081.34033203125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1474.841796875, + "y": 2133.108154296875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -1473.66796875, + "y": 2144.080078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-2.json b/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-2.json new file mode 100644 index 00000000..83d305c9 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-2.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "诗歌交流-坠星山谷-2", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "诗歌交流-坠星山谷-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -1473.802734375, + "y": 2143.8759765625, + "action_params": "" + }, + { + "id": 2, + "x": -1455.962890625, + "y": 2159.3115234375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1475.9736328125, + "y": 2191.275634765625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-3.json b/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-3.json new file mode 100644 index 00000000..381ca9ce --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/诗歌交流/诗歌交流-坠星山谷-3.json @@ -0,0 +1,31 @@ +{ + "info": { + "name": "诗歌交流-坠星山谷-3", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "诗歌交流-坠星山谷-3", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -1476.3779296875, + "y": 2190.221923828125, + "action_params": "" + }, + { + "id": 2, + "x": -1473.28125, + "y": 2143.79248046875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-1.json b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-1.json index ba222c3c..29703691 100644 --- a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-1.json +++ b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-1.json @@ -13,14 +13,14 @@ "action": "", "move_mode": "walk", "type": "teleport", - "x": -1558.76, - "y": 2495.61, + "x": -1558.7587890625, + "y": 2495.6064453125, "action_params": "" }, { "id": 2, - "x": -1526.32, - "y": 2498.93, + "x": -1526.3173828125, + "y": 2498.93212890625, "type": "target", "move_mode": "walk", "action": "", diff --git a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-2.json b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-2.json index 6447cf08..e473ed30 100644 --- a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-2.json +++ b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-2.json @@ -10,8 +10,8 @@ "positions": [ { "id": 1, - "x": -1526.94, - "y": 2498.8, + "x": -1526.9365234375, + "y": 2498.802001953125, "type": "path", "move_mode": "walk", "action": "", @@ -19,8 +19,8 @@ }, { "id": 2, - "x": -1527.57, - "y": 2479.59, + "x": -1527.57421875, + "y": 2479.588134765625, "type": "target", "move_mode": "walk", "action": "", diff --git a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-3.json b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-3.json index dbec2884..b80458b6 100644 --- a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-3.json +++ b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-3.json @@ -10,8 +10,8 @@ "positions": [ { "id": 1, - "x": -1527.54, - "y": 2480.11, + "x": -1527.5419921875, + "y": 2480.11181640625, "action": "", "move_mode": "walk", "action_params": "", @@ -19,8 +19,8 @@ }, { "id": 2, - "x": -1513.63, - "y": 2478.95, + "x": -1513.6279296875, + "y": 2478.95361328125, "action": "", "move_mode": "walk", "action_params": "", @@ -28,8 +28,8 @@ }, { "id": 3, - "x": -1514.6, - "y": 2472.05, + "x": -1514.599609375, + "y": 2472.046875, "action": "fight", "move_mode": "walk", "action_params": "", diff --git a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-4.json b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-4.json index f50c56c8..2e3308a2 100644 --- a/repo/js/AutoEntrust/assets/process/语言交流/语言交流-4.json +++ b/repo/js/AutoEntrust/assets/process/语言交流/语言交流-4.json @@ -10,8 +10,8 @@ "positions": [ { "id": 1, - "x": -1514.6, - "y": 2472.05, + "x": -1514.599609375, + "y": 2472.046875, "type": "target", "move_mode": "walk", "action": "", diff --git a/repo/js/AutoEntrust/assets/process/说到做到/process.json b/repo/js/AutoEntrust/assets/process/说到做到/process.json index 3eeee4d3..8e369c2d 100644 --- a/repo/js/AutoEntrust/assets/process/说到做到/process.json +++ b/repo/js/AutoEntrust/assets/process/说到做到/process.json @@ -1,6 +1,5 @@ 说到做到-1.json F -去山底 说到做到-1.json 说到做到-2.json F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/说到做到/说到做到-1.json b/repo/js/AutoEntrust/assets/process/说到做到/说到做到-1.json index b8a45797..bddabe1e 100644 --- a/repo/js/AutoEntrust/assets/process/说到做到/说到做到-1.json +++ b/repo/js/AutoEntrust/assets/process/说到做到/说到做到-1.json @@ -10,8 +10,8 @@ "positions": [ { "id": 1, - "x": -1136.0, - "y": 1589.0, + "x": -1136, + "y": 1589, "action": "", "move_mode": "walk", "action_params": "", @@ -28,7 +28,7 @@ }, { "id": 3, - "x": -1097.0, + "x": -1097, "y": 1647.75, "action": "", "move_mode": "dash", @@ -46,7 +46,7 @@ }, { "id": 5, - "x": -1091.88, + "x": -1091.875, "y": 1767.5, "action": "", "move_mode": "dash", @@ -55,8 +55,8 @@ }, { "id": 6, - "x": -1094.12, - "y": 1775.38, + "x": -1094.125, + "y": 1775.375, "action": "stop_flying", "move_mode": "fly", "action_params": "", @@ -65,8 +65,8 @@ }, { "id": 7, - "x": -1088.52, - "y": 1770.88, + "x": -1088.517578125, + "y": 1770.88134765625, "type": "target", "move_mode": "walk", "action": "", diff --git a/repo/js/AutoEntrust/assets/process/说到做到/说到做到-2.json b/repo/js/AutoEntrust/assets/process/说到做到/说到做到-2.json index f24d3bf9..8559b9b6 100644 --- a/repo/js/AutoEntrust/assets/process/说到做到/说到做到-2.json +++ b/repo/js/AutoEntrust/assets/process/说到做到/说到做到-2.json @@ -10,8 +10,8 @@ "positions": [ { "id": 1, - "x": -1131.67, - "y": 1597.25, + "x": -1131.666015625, + "y": 1597.25390625, "action": "", "move_mode": "dash", "action_params": "", @@ -20,14 +20,14 @@ { "id": 2, "x": -1155.25, - "y": 1628.0, + "y": 1628, "type": "path", "move_mode": "dash" }, { "id": 3, "x": -1186.5, - "y": 1648.0, + "y": 1648, "type": "path", "move_mode": "fly" }, @@ -43,7 +43,7 @@ { "id": 5, "x": -1192.25, - "y": 1645.0, + "y": 1645, "action": "fight", "move_mode": "walk", "action_params": "", diff --git a/repo/js/AutoEntrust/assets/process/那位先生的委托/process.json b/repo/js/AutoEntrust/assets/process/那位先生的委托/process.json new file mode 100644 index 00000000..e8abef41 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/那位先生的委托/process.json @@ -0,0 +1,5 @@ +那位先生的委托-蒙德城-1.json +F +那位先生的委托-蒙德城-2.json +那位先生的委托-蒙德城-3.json +F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-1.json b/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-1.json new file mode 100644 index 00000000..2ceff50e --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-1.json @@ -0,0 +1,49 @@ +{ + "info": { + "name": "那位先生的委托-蒙德城-1", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "那位先生的委托", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -749.439453125, + "y": 2263.041748046875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -748.8779296875, + "y": 2264.105712890625, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -736, + "y": 2289, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -740.5908203125, + "y": 2312.26416015625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-2.json b/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-2.json new file mode 100644 index 00000000..5c16a54c --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-2.json @@ -0,0 +1,76 @@ +{ + "info": { + "name": "那位先生的委托-蒙德城-2", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "那位先生的委托", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1120.9873046875, + "y": 2190.6201171875, + "action_params": "" + }, + { + "id": 2, + "x": -1120.3984375, + "y": 2201.94091796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1124.7353515625, + "y": 2272.84619140625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1126.775390625, + "y": 2287.29638671875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1138.939453125, + "y": 2305.73291015625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -1143.5810546875, + "y": 2333.4033203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1144.2900390625, + "y": 2349.982177734375, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-3.json b/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-3.json new file mode 100644 index 00000000..2ceff50e --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/那位先生的委托/那位先生的委托-蒙德城-3.json @@ -0,0 +1,49 @@ +{ + "info": { + "name": "那位先生的委托-蒙德城-1", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "那位先生的委托", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -749.439453125, + "y": 2263.041748046875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -748.8779296875, + "y": 2264.105712890625, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -736, + "y": 2289, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -740.5908203125, + "y": 2312.26416015625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/process.json b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/process.json new file mode 100644 index 00000000..01daf6ca --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/process.json @@ -0,0 +1,4 @@ +钥匙是易丢物品-晨曦酒庄-1.json +F +钥匙是易丢物品-晨曦酒庄-2.json +F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/钥匙是易丢物品-晨曦酒庄-1.json b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/钥匙是易丢物品-晨曦酒庄-1.json new file mode 100644 index 00000000..2b2b033b --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/钥匙是易丢物品-晨曦酒庄-1.json @@ -0,0 +1,68 @@ +{ + "info": { + "name": "钥匙是易丢物品-晨曦酒庄-1", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "钥匙是易丢物品2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -578.76171875, + "y": 1853.5517578125, + "action_params": "" + }, + { + "id": 2, + "x": -555.89453125, + "y": 1844.61572265625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -495.7841796875, + "y": 1822.93310546875, + "type": "path", + "move_mode": "jump", + "action": "", + "action_params": "", + "locked": false + }, + { + "id": 4, + "x": -488.7841796875, + "y": 1820.93310546875, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -456.9140625, + "y": 1808.41552734375, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "100" + }, + { + "id": 6, + "x": -442.2568359375, + "y": 1790.41357421875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/钥匙是易丢物品-晨曦酒庄-2 .json b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/钥匙是易丢物品-晨曦酒庄-2 .json new file mode 100644 index 00000000..e73ea0be --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/晨曦酒庄/钥匙是易丢物品-晨曦酒庄-2 .json @@ -0,0 +1,193 @@ +{ + "info": { + "name": "钥匙是易丢物品-晨曦酒庄-2", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "钥匙是易丢物品2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -442.783203125, + "y": 1790.21826171875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": -443.55078125, + "y": 1755.0136718749998, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -448.6533203125, + "y": 1721.419921875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -455.9951171875, + "y": 1696.10107421875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -459.19921875, + "y": 1705.77734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -466.1142578125, + "y": 1701.08544921875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 7, + "x": -474.76171875, + "y": 1713.13330078125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": -493.640625, + "y": 1723.76318359375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 9, + "x": -477.82421875, + "y": 1750.01806640625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 10, + "x": -473.2314453125, + "y": 1794.81005859375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 11, + "x": -446.4462890625, + "y": 1804.73046875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 12, + "x": -386.4208984375, + "y": 1820.828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 13, + "x": -385.7529296875, + "y": 1832.931640625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 14, + "x": -375.109375, + "y": 1804.3125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 15, + "x": -365.55078125, + "y": 1788.20068359375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 16, + "x": -362.6923828125, + "y": 1788.6904296875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 17, + "x": -385.783203125, + "y": 1777.36572265625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 18, + "x": -402.17578125, + "y": 1786.65673828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 19, + "x": -418.06738281250006, + "y": 1780.18115234375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 20, + "x": -441.8291015625, + "y": 1790.55078125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/process.json b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/process.json new file mode 100644 index 00000000..408cb6ab --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/process.json @@ -0,0 +1,4 @@ +钥匙是易丢物品-达达乌帕谷-1.json +F +钥匙是易丢物品-达达乌帕谷-2.json +F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/钥匙是易丢物品-达达乌帕谷-1.json b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/钥匙是易丢物品-达达乌帕谷-1.json new file mode 100644 index 00000000..24b5ef0f --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/钥匙是易丢物品-达达乌帕谷-1.json @@ -0,0 +1,58 @@ +{ + "info": { + "name": "钥匙是易丢物品", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "钥匙是易丢物品", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1432.650390625, + "y": 1464.65673828125, + "action_params": "" + }, + { + "id": 2, + "x": -1457.60546875, + "y": 1451.36474609375, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1472.6240234375, + "y": 1444.4580078125, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1500.3818359375, + "y": 1435.9716796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1538.0888671875, + "y": 1415.87646484375, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/钥匙是易丢物品-达达乌帕谷-2.json b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/钥匙是易丢物品-达达乌帕谷-2.json new file mode 100644 index 00000000..78097512 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/钥匙是易丢物品/达达乌帕谷/钥匙是易丢物品-达达乌帕谷-2.json @@ -0,0 +1,178 @@ +{ + "info": { + "name": "钥匙是易丢物品-达达乌帕谷", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "钥匙是易丢物品-达达乌帕谷", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -1537.58984375, + "y": 1415.99169921875, + "action_params": "", + "locked": false + }, + { + "id": 2, + "x": -1531.7080078125, + "y": 1358.65771484375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "", + "locked": false + }, + { + "id": 3, + "x": -1533.7119140625, + "y": 1297.326171875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "", + "locked": false + }, + { + "id": 4, + "x": -1517.5908203125, + "y": 1275.15966796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1497.7314453125, + "y": 1288.021484375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -1485.02734375, + "y": 1267.44921875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1439.3837890625, + "y": 1274.07861328125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -1442.4599609375, + "y": 1249.560546875, + "type": "path", + "move_mode": "climb", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -1445.2509765625, + "y": 1251.44140625, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -1411.1650390625, + "y": 1258.8120117187498, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 11, + "x": -1436.15234375, + "y": 1255.63525390625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 12, + "x": -1467.1767578125, + "y": 1270.5498046875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 13, + "x": -1488.24609375, + "y": 1266.62744140625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 14, + "x": -1496.958984375, + "y": 1282.8486328125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 15, + "x": -1514.9072265625, + "y": 1272.970703125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 16, + "x": -1533.7119140625, + "y": 1297.326171875, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 17, + "x": -1531.7080078125, + "y": 1358.65771484375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 18, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -1537.58984375, + "y": 1415.99169921875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/process.json b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/process.json new file mode 100644 index 00000000..e2ee91b9 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/process.json @@ -0,0 +1,7 @@ +新的风暴尚未出现-1.json +F +新的风暴尚未出现-2.json +新的风暴尚未出现-3.json +F +新的风暴尚未出现-4.json +F \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-1.json b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-1.json new file mode 100644 index 00000000..8f7e8e8e --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-1.json @@ -0,0 +1,84 @@ +{ + "info": { + "name": "新的风暴尚未出现-1", + "type": "collect", + "author": "星野", + "version": "", + "description": "", + "bgi_version": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": -1629.1162109375, + "y": 2833.7861328125, + "action": "", + "move_mode": "dash", + "type": "teleport" + }, + { + "id": 2, + "x": -1708.4482421875, + "y": 2834.314697265625, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 3, + "x": -1759.6064453125, + "y": 2835.28271484375, + "action": "", + "move_mode": "fly", + "type": "path" + }, + { + "id": 4, + "x": -1785.251953125, + "y": 2850.209228515625, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 5, + "x": -1793.935546875, + "y": 2857.962890625, + "action": "", + "move_mode": "walk", + "type": "path" + }, + { + "id": 6, + "x": -1821.6806640625, + "y": 2855.65478515625, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 7, + "x": -1839.416015625, + "y": 2847.714111328125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 8, + "x": -1858.431640625, + "y": 2837.705078125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 9, + "x": -1875.25, + "y": 2829.442626953125, + "action": "", + "move_mode": "walk", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-2.json b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-2.json new file mode 100644 index 00000000..d32ae8fa --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-2.json @@ -0,0 +1,80 @@ +{ + "info": { + "name": "新的风暴尚未出现-2", + "type": "collect", + "author": "星野", + "version": "", + "description": "", + "bgi_version": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": -1880.009765625, + "y": 2826.505126953125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 2, + "x": -1866.2666015625, + "y": 2831.68408203125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 3, + "x": -1854, + "y": 2863.25, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1849.755859375, + "y": 2875.167724609375, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -1845.72265625, + "y": 2885.572265625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 6, + "x": -1841.9111328125, + "y": 2884.369384765625, + "action": "", + "move_mode": "walk", + "type": "target" + }, + { + "id": 7, + "x": -1839.34375, + "y": 2881.49072265625, + "action": "", + "move_mode": "walk", + "type": "target" + }, + { + "id": 8, + "x": -1845.462890625, + "y": 2876.641357421875, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-3.json b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-3.json new file mode 100644 index 00000000..a8e3ed21 --- /dev/null +++ b/repo/js/AutoEntrust/assets/process/(上不了塔)新的风暴尚未出现/新的风暴尚未出现-3.json @@ -0,0 +1,30 @@ +{ + "info": { + "name": "新的风暴尚未出现-3", + "type": "collect", + "author": "星野", + "version": "", + "description": "", + "bgi_version": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": -1850.3857421875, + "y": 2867.314697265625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -1866.6171875, + "y": 2836.91748046875, + "type": "target", + "move_mode": "dash", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/持盾的危机/千风神殿-1.json b/repo/js/AutoEntrust/assets/持盾的危机/千风神殿-1.json new file mode 100644 index 00000000..853c772f --- /dev/null +++ b/repo/js/AutoEntrust/assets/持盾的危机/千风神殿-1.json @@ -0,0 +1,125 @@ +{ + "info": { + "name": "千风神殿-1", + "type": "collect", + "author": "星野", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -1621.75, + "y": 2149.5, + "action": "", + "move_mode": "walk", + "type": "teleport" + }, + { + "id": 2, + "x": -1604, + "y": 2122.5, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 3, + "x": -1568, + "y": 2112, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 4, + "x": -1561.25, + "y": 2130.75, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 5, + "x": -1553.5, + "y": 2171.25, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 6, + "x": -1580.5, + "y": 2181.5, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 7, + "x": -1599.5, + "y": 2192.75, + "action": "", + "move_mode": "run", + "type": "path" + }, + { + "id": 8, + "x": -1602, + "y": 2204.25, + "action": "", + "move_mode": "walk", + "type": "path" + }, + { + "id": 9, + "x": -1610, + "y": 2213.75, + "action": "", + "move_mode": "run", + "type": "path" + }, + { + "id": 10, + "x": -1634, + "y": 2198.75, + "action": "", + "move_mode": "walk", + "type": "path" + }, + { + "id": 11, + "x": -1657, + "y": 2188.5, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 12, + "x": -1686.5, + "y": 2184.5, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 13, + "x": -1712.5, + "y": 2194.5, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 14, + "x": -1737.88, + "y": 2179, + "action": "fight", + "move_mode": "walk", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/assets/邪恶的扩张/摘星崖-1.json b/repo/js/AutoEntrust/assets/邪恶的扩张/摘星崖-1.json new file mode 100644 index 00000000..662cdd2a --- /dev/null +++ b/repo/js/AutoEntrust/assets/邪恶的扩张/摘星崖-1.json @@ -0,0 +1,39 @@ +{ + "info": { + "name": "坠星山谷-1", + "type": "collect", + "author": "1", + "version": "1.0", + "description": "", + "bgi_version": "0.42.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1509.69, + "y": 2294.5, + "action_params": "" + }, + { + "id": 2, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -1495.94, + "y": 2263.25, + "action_params": "" + }, + { + "id": 3, + "action": "fight", + "move_mode": "walk", + "type": "path", + "x": -1463.96, + "y": 2254.75, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/main.js b/repo/js/AutoEntrust/main.js index b6da8ee6..eff0f914 100644 --- a/repo/js/AutoEntrust/main.js +++ b/repo/js/AutoEntrust/main.js @@ -7,15 +7,28 @@ // 修复文件路径问题 - 使用相对路径 - const SUPPORT_LIST_PATH = "name.txt"; + const SUPPORT_LIST_PATH = "name.json"; const OUTPUT_DIR = "Data"; - // 委托详情按钮位置 + // 添加图像识别相关常量 + const COMPLETED_IMAGE_PATH = "Data/RecognitionObject/Completed.png"; + const UNCOMPLETED_IMAGE_PATH = "Data/RecognitionObject/UnCompleted.png"; + + // 委托类型常量 + const COMMISSION_TYPE = { + FIGHT: "fight", + TALK: "talk" + }; + + // 对话委托流程路径 + const TALK_PROCESS_BASE_PATH = "assets/process"; + + // 委托详情按钮位置(扩展检测范围左右+50像素) const COMMISSION_DETAIL_BUTTONS = [ - { id: 1, x: 1550, y: 320 }, // 第一个委托详情按钮 - { id: 2, x: 1550, y: 420 }, // 第二个委托详情按钮 - { id: 3, x: 1550, y: 520 }, // 第三个委托详情按钮 - { id: 4, x: 1550, y: 560 } // 第四个委托详情按钮(滑动后) + { id: 1, x: 1550, y: 320, checkX: 1450, checkWidth: 150 }, // 第一个委托详情按钮 + { id: 2, x: 1550, y: 420, checkX: 1450, checkWidth: 150 }, // 第二个委托详情按钮 + { id: 3, x: 1550, y: 530, checkX: 1500, checkWidth: 100 }, // 第三个委托详情按钮 + { id: 4, x: 1550, y: 560, checkX: 1450, checkWidth: 150 } // 第四个委托详情按钮(滑动后) ]; // 委托地点OCR区域 @@ -36,9 +49,6 @@ const COMMISSION_COMPLETE_OCR_WIDTH = 170; // 1050 - 880 const COMMISSION_COMPLETE_OCR_HEIGHT = 45; // 210 - 165 - // 自动战斗超时时间(毫秒) - const FIGHT_TIMEOUT = 180000; // 3分钟 - // 获取设置 const skipRecognition = settings.skipRecognition || false; const debugMode = settings.debugMode || false; @@ -57,10 +67,98 @@ } } +/** + * 检测委托完成状态(使用图像识别) + * @param {number} buttonIndex - 按钮索引(0-3) + * @returns {Promise} 返回 "completed", "uncompleted", 或 "unknown" + */ +async function detectCommissionStatusByImage(buttonIndex) { + try { + const button = COMMISSION_DETAIL_BUTTONS[buttonIndex]; + if (!button) { + log.error("无效的按钮索引: {index}", buttonIndex); + return "unknown"; + } + + log.info("检测委托{id}的完成状态(图像识别)", button.id); + + // 截图 + let captureRegion = captureGameRegion(); + + // 检测区域:按钮位置左右各扩展更大范围 + const checkRegion = captureRegion.deriveCrop( + button.checkX, + button.y - 30, // 稍微向上扩展检测区域 + button.checkWidth, + 60 // 增加高度以确保捕获状态图标 + ); + + + // 加载完成和未完成的模板图像 + let completedTemplate, uncompletedTemplate; + + try { + completedTemplate = file.readImageMatSync(COMPLETED_IMAGE_PATH); + uncompletedTemplate = file.readImageMatSync(UNCOMPLETED_IMAGE_PATH); + } catch (imageError) { + log.error("加载模板图像失败: {error}", imageError); + return "unknown"; + } + + // 创建识别对象,使用更灵活的参数 + const completedRo = RecognitionObject.TemplateMatch(completedTemplate, 0, 0, button.checkWidth, 60); + const uncompletedRo = RecognitionObject.TemplateMatch(uncompletedTemplate, 0, 0, button.checkWidth, 60); + + // 降低匹配阈值,提高识别灵活性 + completedRo.threshold = 0.65; + uncompletedRo.threshold = 0.65; + + // 检测完成状态 + const completedResult = checkRegion.find(completedRo); + if (!completedResult.isEmpty()) { + log.info("委托{id}已完成", button.id); + return "completed"; + } + + // 检测未完成状态 + const uncompletedResult = checkRegion.find(uncompletedRo); + if (!uncompletedResult.isEmpty()) { + log.info("委托{id}未完成", button.id); + return "uncompleted"; + } + + // 尝试使用更低的阈值再次检测 + log.info("使用更低阈值再次检测委托{id}状态", button.id); + completedRo.threshold = 0.6; + uncompletedRo.threshold = 0.6; + + const completedResult2 = checkRegion.find(completedRo); + if (!completedResult2.isEmpty()) { + log.info("委托{id}已完成(低阈值检测)", button.id); + return "completed"; + } + + const uncompletedResult2 = checkRegion.find(uncompletedRo); + if (!uncompletedResult2.isEmpty()) { + log.info("委托{id}未完成(低阈值检测)", button.id); + return "uncompleted"; + } + + log.warn("委托{id}状态识别失败", button.id); + return "unknown"; + + } catch (error) { + log.error("检测委托完成状态时出错: {error}", error); + return "unknown"; + } +} // 读取支持的委托列表 function loadSupportedCommissions() { - let supportedCommissions = []; + let supportedCommissions = { + fight: [], + talk: [] + }; try { // 使用正确的文件读取方法 @@ -71,10 +169,17 @@ const supportListContent = file.readTextSync(SUPPORT_LIST_PATH); if (supportListContent && supportListContent.trim()) { - supportedCommissions = supportListContent.split('\n') - .map(line => line.trim()) - .filter(line => line.length > 0); - log.info("已加载支持的委托列表,共 {count} 个", supportedCommissions.length); + try { + // 解析JSON格式 + const commissionData = JSON.parse(supportListContent); + supportedCommissions.fight = commissionData.fight || []; + supportedCommissions.talk = commissionData.talk || []; + + log.info("已加载支持的战斗委托列表,共 {count} 个", supportedCommissions.fight.length); + log.info("已加载支持的对话委托列表,共 {count} 个", supportedCommissions.talk.length); + } catch (jsonError) { + log.error("解析委托列表JSON失败: {error}", jsonError); + } } else { log.warn("支持的委托列表为空"); } @@ -84,7 +189,13 @@ // 尝试创建文件 try { - const writeResult = file.writeTextSync(SUPPORT_LIST_PATH, ""); + // 创建默认的JSON结构 + const defaultJson = JSON.stringify({ + fight: [], + talk: [] + }, null, 2); + + const writeResult = file.writeTextSync(SUPPORT_LIST_PATH, defaultJson); if (writeResult) { log.info("已创建空的委托列表文件"); } else { @@ -328,165 +439,208 @@ } } - // 原神每日委托识别主函数 - async function Identification() { - try { - log.info("开始执行原神每日委托识别脚本"); - await genshin.returnMainUi(); - setGameMetrics(1920, 1080, 1); - // 加载支持的委托列表 - const supportedCommissions = loadSupportedCommissions(); - - // 确保所有委托的资源目录存在 - for (const commission of supportedCommissions) { - ensureDirectoryExists(`assets/${commission}`); - } - // 进入委托界面 - const enterSuccess = await enterCommissionScreen(); - if (!enterSuccess) { - log.error("无法进入委托界面,脚本终止"); - return; - } - await sleep(1000); // 增加延迟,确保界面完全加载 - - // 步骤1: 执行第一次OCR识别 - log.info("步骤1: 执行第一次OCR识别"); - const ocrRo = RecognitionObject.Ocr( - OCR_REGION_X, - OCR_REGION_Y, - OCR_REGION_WIDTH, - OCR_REGION_HEIGHT - ); - - await sleep(2000); // 等待界面稳定 - - // 第一次截图识别 - log.info("执行第一次OCR识别 ({x}, {y}) ({width}, {height})", - OCR_REGION_X, OCR_REGION_Y, OCR_REGION_X + OCR_REGION_WIDTH, OCR_REGION_Y + OCR_REGION_HEIGHT); - let captureRegion = captureGameRegion(); - let firstResults = captureRegion.findMulti(ocrRo); - log.info("第一次OCR识别结果数量: {count}", firstResults.count); - - // 处理第一次识别结果 - let firstCommissions = []; - for (let i = 0; i < firstResults.count; i++) { - let result = firstResults[i]; - let text = cleanText(result.text); - if (text && text.length >= minTextLength) { - log.info("第{index}个委托: \"{text}\"", i + 1, text); - firstCommissions.push({ - id: i + 1, - name: text, - supported: supportedCommissions.includes(text), - location: "" - }); - } - } - - // 步骤2: 点击1、2、3号委托详情按钮 - log.info("步骤2: 点击1、2、3号委托详情按钮"); - for (let i = 0; i < Math.min(3, firstCommissions.length); i++) { - const commission = firstCommissions[i]; - log.info("查看第{id}个委托详情: {name}", commission.id, commission.name); - // 点击详情按钮 - const detailButton = COMMISSION_DETAIL_BUTTONS[commission.id - 1]; - log.info("点击委托详情按钮 ({x}, {y})", detailButton.x, detailButton.y); - click(detailButton.x, detailButton.y); - await sleep(2500); // 等待详情页面加载 - - // 检测是否成功进入详情界面 - const detailStatus = await checkDetailPageEntered(); - log.info(`委托详情界面状态: ${detailStatus}`); - - // 根据检测结果处理 - if (detailStatus === "已完成") { - log.info("该委托已完成,跳过地点识别和退出操作"); - commission.location = "已完成"; - continue; // 跳过后续的地点识别和退出操作 - } else if (detailStatus === "未知" || detailStatus === "错误") { - log.warn("无法确认是否进入详情界面,尝试继续执行"); - // 尝试识别委托地点 - const location = recognizeCommissionLocation(); - commission.location = location; - log.info("委托 {name} 的地点: {location}", commission.name, location); - } else { - // 成功进入详情界面,记录地点 - const location = recognizeCommissionLocation(); - commission.location = location; - log.info("委托 {name} 的地点: {location}", commission.name, location); - } - - // 如果不是已完成状态,需要执行退出操作 - if (detailStatus !== "未知") { - // 退出详情页面 - log.info("退出详情页面 - 按ESC"); - keyDown("VK_ESCAPE"); - await sleep(300); - keyUp("VK_ESCAPE"); - await sleep(1200); - - keyDown("VK_ESCAPE"); - await sleep(300); - keyUp("VK_ESCAPE"); - await sleep(1200); - } - } - - // 步骤3: 执行下滑操作 - log.info("步骤3: 执行下滑操作"); - await PageScroll(1); - await sleep(2000); // 等待滑动完成 - - // 步骤4: 执行第二次OCR识别 - log.info("步骤4: 执行第二次OCR识别({x}, {y}) ({width}, {height})", + +/** + * 优化后的委托识别主函数 + */ +async function Identification() { + try { + log.info("开始执行原神每日委托识别脚本"); + await genshin.returnMainUi(); + setGameMetrics(1920, 1080, 1); + + // 加载支持的委托列表 + const supportedCommissions = loadSupportedCommissions(); + + // 确保所有委托的资源目录存在 + for (const commission of supportedCommissions.fight) { + ensureDirectoryExists(`assets/${commission}`); + } + for (const commission of supportedCommissions.talk) { + ensureDirectoryExists(`assets/process/${commission}`); + } + + // 进入委托界面 + const enterSuccess = await enterCommissionScreen(); + if (!enterSuccess) { + log.error("无法进入委托界面,脚本终止"); + return; + } + await sleep(1000); + + // 步骤1: 执行第一次OCR识别 + log.info("步骤1: 执行第一次OCR识别"); + const ocrRo = RecognitionObject.Ocr( + OCR_REGION_X, + OCR_REGION_Y, + OCR_REGION_WIDTH, + OCR_REGION_HEIGHT + ); + + await sleep(2000); + + // 第一次截图识别 + log.info("执行第一次OCR识别 ({x}, {y}) ({width}, {height})", OCR_REGION_X, OCR_REGION_Y, OCR_REGION_X + OCR_REGION_WIDTH, OCR_REGION_Y + OCR_REGION_HEIGHT); - captureRegion = captureGameRegion(); - let secondResults = captureRegion.findMulti(ocrRo); - log.info("第二次OCR识别结果数量: {count}", secondResults.count); - - - // 处理第二次识别结果 - let fourthCommission = null; - for (let i = 0; i < secondResults.count; i++) { - let result = secondResults[i]; - let text = cleanText(result.text); - if (text && text.length >= minTextLength) { - log.info("第4个委托: \"{text}\"", text); - fourthCommission = { - id: 4, - name: text, - supported: supportedCommissions.includes(text), - location: "" - }; - // 移除break,继续循环,取最后一个有效结果 - } + let captureRegion = captureGameRegion(); + let firstResults = captureRegion.findMulti(ocrRo); + log.info("第一次OCR识别结果数量: {count}", firstResults.count); + + // 处理第一次识别结果 + let firstCommissions = []; + for (let i = 0; i < firstResults.count; i++) { + let result = firstResults[i]; + let text = cleanText(result.text); + if (text && text.length >= minTextLength) { + log.info("第{index}个委托: \"{text}\"", i + 1, text); + + // 检查委托类型 + const isFightCommission = supportedCommissions.fight.includes(text); + const isTalkCommission = supportedCommissions.talk.includes(text); + const isSupported = isFightCommission || isTalkCommission; + const commissionType = isFightCommission ? COMMISSION_TYPE.FIGHT : + (isTalkCommission ? COMMISSION_TYPE.TALK : ""); + + firstCommissions.push({ + id: i + 1, + name: text, + supported: isSupported, + type: commissionType, + location: "" + }); } + } + + // 步骤2: 使用图像识别检测前3个委托的完成状态 + log.info("步骤2: 检测前3个委托的完成状态"); + for (let i = 0; i < Math.min(3, firstCommissions.length); i++) { + const commission = firstCommissions[i]; + + // 使用图像识别检测完成状态 + const status = await detectCommissionStatusByImage(i); + + if (status === "completed") { + log.info("委托{id} {name} 已完成,跳过详情查看", commission.id, commission.name); + commission.location = "已完成"; + continue; + } else if (status === "uncompleted") { + log.info("委托{id} {name} 未完成,查看详情", commission.id, commission.name); + } else { + log.warn("委托{id} {name} 状态未知,尝试查看详情", commission.id, commission.name); + } + + // 只有未完成或状态未知的委托才点击查看详情 + log.info("查看第{id}个委托详情: {name}", commission.id, commission.name); + + // 点击详情按钮 + const detailButton = COMMISSION_DETAIL_BUTTONS[commission.id - 1]; + log.info("点击委托详情按钮 ({x}, {y})", detailButton.x, detailButton.y); + click(detailButton.x, detailButton.y); + await sleep(2500); + + // 检测是否成功进入详情界面 + const detailStatus = await checkDetailPageEntered(); + log.info(`委托详情界面状态: ${detailStatus}`); + + // 根据检测结果处理 + if (detailStatus === "已完成") { + log.info("该委托已完成,跳过地点识别和退出操作"); + commission.location = "已完成"; + continue; + } else if (detailStatus === "未知" || detailStatus === "错误") { + log.warn("无法确认是否进入详情界面,尝试继续执行"); + const location = recognizeCommissionLocation(); + commission.location = location; + log.info("委托 {name} 的地点: {location}", commission.name, location); + } else { + const location = recognizeCommissionLocation(); + commission.location = location; + log.info("委托 {name} 的地点: {location}", commission.name, location); + } + + // 退出详情页面 + if (detailStatus !== "未知") { + log.info("退出详情页面 - 按ESC"); + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + } + } + + // 步骤3: 执行下滑操作 + log.info("步骤3: 执行下滑操作"); + await PageScroll(1); + await sleep(2000); + + // 步骤4: 执行第二次OCR识别 + log.info("步骤4: 执行第二次OCR识别({x}, {y}) ({width}, {height})", + OCR_REGION_X, OCR_REGION_Y, OCR_REGION_X + OCR_REGION_WIDTH, OCR_REGION_Y + OCR_REGION_HEIGHT); + captureRegion = captureGameRegion(); + let secondResults = captureRegion.findMulti(ocrRo); + log.info("第二次OCR识别结果数量: {count}", secondResults.count); + + // 处理第二次识别结果 + let fourthCommission = null; + for (let i = 0; i < secondResults.count; i++) { + let result = secondResults[i]; + let text = cleanText(result.text); + if (text && text.length >= minTextLength) { + log.info("第4个委托: \"{text}\"", text); + + // 检查委托类型 + const isFightCommission = supportedCommissions.fight.includes(text); + const isTalkCommission = supportedCommissions.talk.includes(text); + const isSupported = isFightCommission || isTalkCommission; + const commissionType = isFightCommission ? COMMISSION_TYPE.FIGHT : + (isTalkCommission ? COMMISSION_TYPE.TALK : ""); + + fourthCommission = { + id: 4, + name: text, + supported: isSupported, + type: commissionType, + location: "" + }; + } + } - // 步骤5: 点击委托4详情按钮 - if (fourthCommission) { - log.info("步骤5: 点击委托4详情按钮"); - log.info("查看第4个委托详情: {name}", fourthCommission.name); + // 步骤5: 检测第4个委托的完成状态 + if (fourthCommission) { + log.info("步骤5: 检测第4个委托的完成状态"); + + // 使用图像识别检测完成状态 + const status = await detectCommissionStatusByImage(3); // 第4个按钮索引为3 + + if (status === "completed") { + log.info("委托4 {name} 已完成,跳过详情查看", fourthCommission.name); + fourthCommission.location = "已完成"; + } else if (status === "uncompleted" || status === "unknown") { + log.info("委托4 {name} 需要查看详情", fourthCommission.name); // 点击详情按钮 - const detailButton = COMMISSION_DETAIL_BUTTONS[3]; // 第4个按钮 + const detailButton = COMMISSION_DETAIL_BUTTONS[3]; log.info("点击委托详情按钮 ({x}, {y})", detailButton.x, detailButton.y); click(detailButton.x, detailButton.y); - await sleep(2500); // 等待详情页面加载 + await sleep(2500); // 检测是否成功进入详情界面 const detailStatus = await checkDetailPageEntered(); log.info(`委托详情界面状态: ${detailStatus}`); - const commission = firstCommissions[4]; - + // 根据检测结果处理 if (detailStatus === "已完成") { log.info("该委托已完成,跳过地点识别和退出操作"); fourthCommission.location = "已完成"; } else if (detailStatus === "未知" || detailStatus === "错误") { log.warn("无法确认是否进入详情界面,尝试继续执行"); - // 尝试识别委托地点 - location = recognizeCommissionLocation(); + const location = recognizeCommissionLocation(); fourthCommission.location = location; log.info("委托 {name} 的地点: {location}", fourthCommission.name, location); } else { @@ -495,9 +649,8 @@ log.info("委托 {name} 的地点: {location}", fourthCommission.name, location); } - // 如果不是已完成状态,需要执行退出操作 + // 退出详情页面 if (detailStatus !== "未知") { - // 退出详情页面 log.info("退出详情页面 - 按ESC"); keyDown("VK_ESCAPE"); await sleep(300); @@ -509,341 +662,447 @@ keyUp("VK_ESCAPE"); await sleep(1200); } - } - - // 合并所有委托结果 - let allCommissions = [...firstCommissions]; - if (fourthCommission) { - allCommissions.push(fourthCommission); - } - - // 输出完整委托列表 - log.info("完整委托列表:"); - for (const commission of allCommissions) { - const supportStatus = commission.supported ? "✅ 支持" : "❌ 不支持"; - const locationInfo = commission.location ? `(${commission.location})` : ""; - log.info("{id}. {name} {location} - {status}", - commission.id, commission.name, locationInfo, supportStatus); - } - - // 保存委托数据 - saveCommissionsData(allCommissions); - - log.info("原神每日委托识别脚本执行完成"); - } catch (error) { - log.error("脚本执行出错: {error}", error); - } - } - - - - - -/** - * 检测委托是否触发 - * @returns {Promise} 是否触发委托 - */ -async function detectCommissionTrigger() { - try { - log.info("检测委托触发 ({x}, {y}) ({width}, {height})...", - COMMISSION_TRIGGER_OCR_X, COMMISSION_TRIGGER_OCR_Y, - COMMISSION_TRIGGER_OCR_X + COMMISSION_TRIGGER_OCR_WIDTH, - COMMISSION_TRIGGER_OCR_Y + COMMISSION_TRIGGER_OCR_HEIGHT); - - // 创建OCR识别对象 - const triggerOcrRo = RecognitionObject.Ocr( - COMMISSION_TRIGGER_OCR_X, - COMMISSION_TRIGGER_OCR_Y, - COMMISSION_TRIGGER_OCR_WIDTH, - COMMISSION_TRIGGER_OCR_HEIGHT - ); - - // 截图识别 - let captureRegion = captureGameRegion(); - let results = captureRegion.findMulti(triggerOcrRo); - - if (results.count > 0) { - for (let i = 0; i < results.count; i++) { - const text = results[i].text.trim(); - log.info("检测到文本: {text}", text); - - // 检查是否包含委托触发相关文字 - if (text.includes("触发委托")) { - log.info("检测到委托触发"); - return true; - } } } - return false; + // 合并所有委托结果 + let allCommissions = [...firstCommissions]; + if (fourthCommission) { + allCommissions.push(fourthCommission); + } + + // 输出完整委托列表 + log.info("完整委托列表:"); + for (const commission of allCommissions) { + const supportStatus = commission.supported ? "✅ 支持" : "❌ 不支持"; + const locationInfo = commission.location ? `(${commission.location})` : ""; + const typeInfo = commission.type ? `[${commission.type}]` : ""; + log.info("{id}. {name} {location} {type} - {status}", + commission.id, commission.name, locationInfo, typeInfo, supportStatus); + } + + // 保存委托数据 + saveCommissionsData(allCommissions); + + log.info("原神每日委托识别脚本执行完成"); } catch (error) { - log.error("检测委托触发时出错: {error}", error); - return false; + log.error("脚本执行出错: {error}", error); } } /** - * 检测委托是否完成 - * @returns {Promise} 是否完成委托 + * 执行对话委托流程 + * @param {string} commissionName - 委托名称 + * @param {string} location - 委托地点 + * @returns {Promise} - 执行结果 */ -async function detectCommissionComplete() { +async function executeTalkCommission(commissionName, location) { try { - log.info("检测委托完成 ({x}, {y}) ({width}, {height})...", - COMMISSION_COMPLETE_OCR_X, COMMISSION_COMPLETE_OCR_Y, - COMMISSION_COMPLETE_OCR_X + COMMISSION_COMPLETE_OCR_WIDTH, - COMMISSION_COMPLETE_OCR_Y + COMMISSION_COMPLETE_OCR_HEIGHT); + log.info("开始执行对话委托: {name} ({location})", commissionName, location); - // 创建OCR识别对象 - const completeOcrRo = RecognitionObject.Ocr( - COMMISSION_COMPLETE_OCR_X, - COMMISSION_COMPLETE_OCR_Y, - COMMISSION_COMPLETE_OCR_WIDTH, - COMMISSION_COMPLETE_OCR_HEIGHT - ); + // 构建可能的流程文件路径 + const processBasePath = `${TALK_PROCESS_BASE_PATH}/${commissionName}`; + const processFilePaths = [ + `${processBasePath}/process.json`, + `${processBasePath}/${location}/process.json` + ]; - // 截图识别 - let captureRegion = captureGameRegion(); - let results = captureRegion.findMulti(completeOcrRo); + let processFilePath = null; - if (results.count > 0) { - for (let i = 0; i < results.count; i++) { - const text = results[i].text.trim(); - log.info("检测到文本: {text}", text); - - // 检查是否包含委托完成相关文字 - if (text.includes("委托完成")) { - log.info("检测到委托完成"); - return true; - } + // 查找流程文件 + for (const path of processFilePaths) { + try { + await file.readText(path); + processFilePath = path; + log.info("找到对话委托流程文件: {path}", path); + break; + } catch (error) { + log.info("对话委托流程文件不存在: {path}", path); } } - return false; - } catch (error) { - log.error("检测委托完成时出错: {error}", error); - return false; - } -} - - - -/** - * 自动战斗 - * @param {number} timeout - 超时时间 - * @returns {Promise} 战斗是否成功 - */ -async function autoFight(timeout) { - const cts = new CancellationTokenSource(); - try { - log.info("开始战斗"); - dispatcher.RunTask(new SoloTask("AutoFight"), cts); - let fightResult = await detectCommissionComplete(); - log.info(`战斗结束,战斗结果:${fightResult ? "成功" : "失败"}`); - cts.cancel(); - return fightResult; - } catch (error) { - log.error(`执行过程中出错: ${error}`); - cts.cancel(); - return false; - } -} - -/** - * 执行委托追踪脚本 - * @param {Object} commission - 委托信息对象 - * @returns {Promise} 是否成功完成委托 - */ -async function executeTrackingScript(commission) { - log.info("准备执行委托追踪脚本: {name} ({location})", - commission.name, - commission.location || "未知地点"); - - try { - // 检查委托是否已完成 - if (commission.location === "已完成") { - log.info("该委托已完成,跳过执行"); - return true; - } - - // 检查委托名称和地点是否有效 - if (!commission.name || !commission.location || commission.location === "未知地点" || commission.location === "识别失败") { - log.warn("委托信息不完整,无法执行追踪脚本"); + if (!processFilePath) { + log.warn("未找到对话委托 {name} 在 {location} 的流程文件", commissionName, location); return false; } - // 构建可能的路径追踪脚本路径 - const location = commission.location.trim(); - const scriptPaths = [ - `assets/${commission.name}/${location}-1.json`, - `assets/${commission.name}/${location}-2.json` - ]; + // 读取流程文件内容 + const processContent = await file.readText(processFilePath); - let scriptFound = false; - let scriptCompleted = false; + // 判断是简单格式还是JSON格式 + let isJsonFormat = false; + try { + JSON.parse(processContent); + isJsonFormat = true; + } catch (error) { + isJsonFormat = false; + } - // 设置全局超时时间(30分钟) - const GLOBAL_TIMEOUT = 30 * 60 * 1000; - const startTime = Date.now(); + if (isJsonFormat) { + // 处理JSON格式的流程 + return await executeJsonProcess(processContent, commissionName, location); + } else { + // 处理简单格式的流程 + return await executeSimpleProcess(processContent, commissionName, location); + } - // 尝试执行每个可能的脚本路径 - for (const scriptPath of scriptPaths) { - try { - // 检查是否超过全局超时时间 - if (Date.now() - startTime > GLOBAL_TIMEOUT) { - log.warn("委托追踪超过全局超时时间,终止执行"); - return false; - } - - // 检查脚本文件是否存在 - log.info("检查路径追踪脚本: {path}", scriptPath); - + } catch (error) { + log.error("执行对话委托时出错: {error}", error); + return false; + } +} + +/** + * 执行简单格式的对话委托流程 + * @param {string} processContent - 流程内容 + * @param {string} commissionName - 委托名称 + * @param {string} location - 委托地点 + * @returns {Promise} - 执行结果 + */ +async function executeSimpleProcess(processContent, commissionName, location) { + try { + log.info("执行简单格式的对话委托流程: {name}", commissionName); + + // 按行分割流程内容 + const lines = processContent.split('\n').map(line => line.trim()).filter(line => line.length > 0); + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + log.info("执行流程步骤 {step}: {line}", i + 1, line); + + if (line.endsWith(".json")) { + // 地图追踪文件 + const trackingPath = `assets/process/${commissionName}/${line}`; + log.info("执行地图追踪: {path}", trackingPath); try { - // 尝试读取文件内容来检查是否存在 - await file.readText(scriptPath); - log.info("找到路径追踪脚本: {path}", scriptPath); - scriptFound = true; - } catch (readError) { - log.info("路径追踪脚本不存在: {path}", scriptPath); - continue; // 尝试下一个脚本路径 + await pathingScript.runFile(trackingPath); + log.info("地图追踪执行完成"); + } catch (error) { + log.error("执行地图追踪时出错: {error}", error); } + } else if (line === "F") { + // 按F键并等待对话结束 + log.info("按下F键并等待对话结束"); + keyPress("F"); - // 执行路径追踪脚本 - log.info("开始执行路径追踪脚本: {path}", scriptPath); + // 定义识别对象 + const paimonMenuRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync("Data/RecognitionObject/paimon_menu.png"), + 0, 0, genshin.width / 3.0, genshin.width / 5.0 + ); - // 单个脚本执行超时时间(10分钟) - const SCRIPT_TIMEOUT = 10 * 60 * 1000; + // 判断是否在主界面的函数 + const isInMainUI = () => { + let captureRegion = captureGameRegion(); // 获取一张截图 + let res = captureRegion.Find(paimonMenuRo); + return !res.isEmpty(); + }; - // 创建路径追踪任务(异步执行) - const pathingTask = pathingScript.runFile(scriptPath); + // 重复执行自动剧情,直到返回主界面 + let maxAttempts = 100; // 设置最大尝试次数,防止无限循环 + let attempts = 0; + await sleep(1000); + log.info("开始执行自动剧情循环"); - // 实时检测委托触发和完成状态 - let triggered = false; - let completed = false; - - // 开始时间记录 - const scriptStartTime = Date.now(); - - // 实时检测循环 - while (Date.now() - scriptStartTime < SCRIPT_TIMEOUT) { - // 检测委托是否触发 - if (!triggered && await detectCommissionTrigger()) { - triggered = true; - log.info("委托已触发,开始自动战斗"); - await autoFight(FIGHT_TIMEOUT); - - // 战斗后等待一段时间再检测完成状态 - await sleep(3000); - } + while (!isInMainUI() && attempts < maxAttempts) { + attempts++; + log.info(`执行第 ${attempts} 次自动剧情选择`); + await genshin.chooseTalkOption("", 10, false); - // 检测委托是否完成 - if (await detectCommissionComplete()) { - log.info("委托已完成: {name} ({location})", commission.name, location); - commission.completed = true; - scriptCompleted = true; - - // 尝试取消路径追踪任务(如果API支持) - try { - pathingTask.cancel && pathingTask.cancel(); - } catch (cancelError) { - log.warn("取消路径追踪任务失败: {error}", cancelError); - } - - return true; - } - - // 每秒检测一次 - await sleep(1000); - } - - log.warn("脚本执行超时,尝试下一个脚本"); - - // 尝试取消路径追踪任务(如果API支持) - try { - pathingTask.cancel && pathingTask.cancel(); - } catch (cancelError) { - log.warn("取消路径追踪任务失败: {error}", cancelError); - } - - // 额外等待检测 - log.info("额外等待5秒检测委托触发..."); - let finalTriggered = false; - - for (let i = 0; i < 5; i++) { - await sleep(1000); - - if (!triggered && await detectCommissionTrigger()) { - finalTriggered = true; - log.info("在额外等待期间检测到委托触发"); - - // 开始自动战斗 - log.info("委托已触发,开始自动战斗"); - await autoFight(FIGHT_TIMEOUT); - - // 战斗后等待一段时间再检测完成状态 - await sleep(3000); - - if (await detectCommissionComplete()) { - log.info("委托已完成: {name} ({location})", commission.name, location); - commission.completed = true; - scriptCompleted = true; - return true; - } - + // 检查是否已返回主界面 + if (isInMainUI()) { + log.info("检测到已返回主界面,结束循环"); break; } } - if (!finalTriggered && !triggered) { - log.info("未检测到委托触发,尝试下一个脚本"); + if (isInMainUI()) { + log.info("已返回主界面,自动剧情执行完成"); + } else { + log.warn(`已达到最大尝试次数 ${maxAttempts},但未检测到返回主界面`); } - - } catch (scriptError) { - log.error("执行路径追踪脚本时出错: {error}", scriptError); + } else { + // 其他未知命令 + log.warn("未知的流程命令: {command}", line); } + + // 每个步骤之间等待一段时间 + await sleep(2000); } - if (!scriptFound) { - log.warn("未找到委托 {name} 在 {location} 的路径追踪脚本", commission.name, location); - return false; - } - - return scriptCompleted; + log.info("简单格式的对话委托流程执行完成: {name}", commissionName); + return true; } catch (error) { - log.error("执行追踪脚本时出错: {error}", error); + log.error("执行简单格式的对话委托流程时出错: {error}", error); return false; } } /** - * 从Data文件夹加载委托数据 - * @returns {Promise} 委托数据数组 + * 执行JSON格式的对话委托流程 + * @param {string} processContent - 流程内容 + * @param {string} commissionName - 委托名称 + * @param {string} location - 委托地点 + * @returns {Promise} - 执行结果 */ -async function loadCommissionsFromData() { +async function executeJsonProcess(processContent, commissionName, location) { try { - log.info("尝试从Data文件夹加载委托数据"); - const dataPath = `${OUTPUT_DIR}/commissions_data.json`; + log.info("执行JSON格式的对话委托流程: {name}", commissionName); - try { - const dataContent = await file.readText(dataPath); - const commissionsData = JSON.parse(dataContent); - - if (commissionsData && commissionsData.commissions && commissionsData.commissions.length > 0) { - log.info("成功从Data文件夹加载委托数据,共 {count} 个", commissionsData.commissions.length); - return commissionsData.commissions; - } else { - log.warn("Data文件夹中的委托数据为空"); - return null; + // 解析JSON内容 + const processSteps = JSON.parse(processContent); + + // 如果是数组,则按顺序执行每个步骤 + if (Array.isArray(processSteps)) { + for (let i = 0; i < processSteps.length; i++) { + const step = processSteps[i]; + log.info("执行流程步骤 {step}: {type}", i + 1, step.type); + + // 如果有注释,输出注释 + if (step.note) { + log.info("步骤说明: {note}", step.note); + } + + switch (step.type) { + case "地图追踪": + // 执行地图追踪 + log.info("执行地图追踪: {path}", step.data); + try { + await pathingScript.runFile(step.data); + log.info("地图追踪执行完成"); + } catch (error) { + log.error("执行地图追踪时出错: {error}", error); + } + break; + + case "键鼠脚本": + // 执行键鼠脚本 + log.info("执行键鼠脚本: {path}", step.data); + try { + await runFile(step.data); + log.info("键鼠脚本执行完成"); + } catch (error) { + log.error("执行键鼠脚本时出错: {error}", error); + } + break; + + case "对话": + // 执行对话 + log.info("执行对话流程"); + keyPress("F"); + + // 定义识别对象 + const paimonMenuRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync("Data/RecognitionObject/paimon_menu.png"), + 0, 0, genshin.width / 3.0, genshin.width / 5.0 + ); + + // 判断是否在主界面的函数 + const isInMainUI = () => { + let captureRegion = captureGameRegion(); // 获取一张截图 + let res = captureRegion.Find(paimonMenuRo); + return !res.isEmpty(); + }; + + // 重复执行自动剧情,直到返回主界面 + let maxAttempts = 100; // 设置最大尝试次数,防止无限循环 + let attempts = 0; + await sleep(1000); + log.info("开始执行自动剧情循环"); + + const skipCount = step.data || 10; // 默认跳过10次对话 + + while (!isInMainUI() && attempts < maxAttempts) { + attempts++; + log.info(`执行第 ${attempts} 次自动剧情选择`); + await genshin.chooseTalkOption("", skipCount, false); + + // 检查是否已返回主界面 + if (isInMainUI()) { + log.info("检测到已返回主界面,结束循环"); + break; + } + } + + if (isInMainUI()) { + log.info("已返回主界面,自动剧情执行完成"); + } else { + log.warn(`已达到最大尝试次数 ${maxAttempts},但未检测到返回主界面`); + } + break; + + case "按键": + // 执行按键操作 + if (typeof step.data === "string") { + // 单个按键 + log.info("执行按键: {key}", step.data); + keyPress(step.data); + } else if (typeof step.data === "object") { + // 复杂按键操作 + if (step.data.action === "down") { + log.info("按下按键: {key}", step.data.key); + keyDown(step.data.key); + } else if (step.data.action === "up") { + log.info("释放按键: {key}", step.data.key); + keyUp(step.data.key); + } else if (step.data.action === "press") { + log.info("点击按键: {key}", step.data.key); + keyPress(step.data.key); + } + } + break; + + case "tp": + // 执行传送 + if (Array.isArray(step.data) && step.data.length >= 2) { + log.info("执行传送: {x}, {y}", step.data[0], step.data[1]); + const force = step.data.length > 2 ? step.data[2] : false; + await genshin.tp(step.data[0], step.data[1], force); + log.info("传送完成"); + } else { + log.error("传送参数格式错误"); + } + break; + + default: + log.warn("未知的流程类型: {type}", step.type); + } + + // 每个步骤之间等待一段时间 + await sleep(2000); } - } catch (readError) { - log.warn("读取委托数据文件失败: {error}", readError); - return null; + } else { + log.error("JSON流程格式错误,应为数组"); + return false; } + + log.info("JSON格式的对话委托流程执行完成: {name}", commissionName); + return true; } catch (error) { - log.error("加载委托数据时出错: {error}", error); - return null; + log.error("执行JSON格式的对话委托流程时出错: {error}", error); + return false; } } +/** + * 执行委托追踪 + * 新版本:执行所有委托而不检测触发状态 + */ +async function executeCommissionTracking_old() { + try { + log.info("开始执行委托追踪 - 全部执行模式"); + + // 获取已识别的委托列表 + let commissions = []; + try { + const commissionsData = JSON.parse(file.readTextSync(`${OUTPUT_DIR}/commissions_data.json`)); + commissions = commissionsData.commissions.filter(c => c.supported); + log.info("已加载支持的委托数据,共 {count} 个", commissions.length); + } catch (error) { + log.error("读取委托数据失败: {error}", error); + return false; + } + + if (commissions.length === 0) { + log.warn("没有找到支持的委托,请先运行识别脚本"); + return false; + } + + // 确保回到主界面 + await genshin.returnMainUi(); + + // 执行每个委托 + let completedCount = 0; + for (const commission of commissions) { + // 跳过已完成的委托 + if (commission.location === "已完成") { + log.info("委托 {name} 已完成,跳过", commission.name); + completedCount++; + continue; + } + + // 跳过没有地点信息的委托 + if (!commission.location || commission.location === "未知地点" || commission.location === "识别失败") { + log.warn("委托 {name} 缺少地点信息,跳过", commission.name); + continue; + } + + log.info("开始执行委托: {name} ({location}) [{type}]", + commission.name, commission.location, commission.type || "未知类型"); + + // 根据委托类型执行不同的处理逻辑 + if (commission.type === COMMISSION_TYPE.TALK) { + // 执行对话委托 + const success = await executeTalkCommission(commission.name, commission.location); + if (success) { + completedCount++; + log.info("对话委托 {name} 执行完成", commission.name); + } else { + log.warn("对话委托 {name} 执行失败", commission.name); + } + } else { + // 默认执行战斗委托 + // 构建可能的路径追踪脚本路径 + const location = commission.location.trim(); + const scriptPaths = [ + `assets/${commission.name}/${location}-1.json`, + `assets/${commission.name}/${location}-2.json`, + `assets/${commission.name}/${location}-3.json`, + ]; + + let scriptFound = false; + let scriptExecuted = false; + + // 尝试执行每个可能的脚本路径 + for (const scriptPath of scriptPaths) { + try { + // 检查脚本文件是否存在 + log.info("检查路径追踪脚本: {path}", scriptPath); + + try { + // 尝试读取文件内容来检查是否存在 + await file.readText(scriptPath); + log.info("找到路径追踪脚本: {path}", scriptPath); + scriptFound = true; + scriptExecuted = true; + } catch (readError) { + log.info("路径追踪脚本不存在: {path}", scriptPath); + continue; // 尝试下一个脚本路径 + } + + // 执行路径追踪脚本 + log.info("开始执行路径追踪脚本: {path}", scriptPath); + + // 执行脚本并等待完成 + await pathingScript.runFile(scriptPath); + log.info("路径追踪脚本执行完成"); + } catch (scriptError) { + log.error("执行路径追踪脚本时出错: {error}", scriptError); + } + } + + if (!scriptFound) { + log.warn("未找到委托 {name} 在 {location} 的路径追踪脚本", commission.name, location); + } else if (scriptExecuted) { + completedCount++; + log.info("战斗委托 {name} 执行完成", commission.name); + } + } + + // 每个委托之间等待一段时间 + log.info("等待5秒后执行下一个委托..."); + await sleep(5000); + } + + log.info("委托追踪全部执行完成,共执行 {count}/{total} 个委托", + completedCount, commissions.length); + + return completedCount > 0; + } catch (error) { + log.error("执行委托追踪时出错: {error}", error); + return false; + } +} /** * 执行委托追踪 @@ -888,56 +1147,66 @@ async function executeCommissionTracking() { continue; } - log.info("开始执行委托: {name} ({location})", commission.name, commission.location); + log.info("开始执行委托: {name} ({location}) [{type}]", + commission.name, commission.location, commission.type || "未知类型"); - // 构建可能的路径追踪脚本路径 - const location = commission.location.trim(); - const scriptPaths = [ - `assets/${commission.name}/${location}-1.json`, - `assets/${commission.name}/${location}-2.json`, - `assets/${commission.name}/${location}-3.json`, - ]; - - let scriptFound = false; - let scriptExecuted = false; - - // 尝试执行每个可能的脚本路径 - for (const scriptPath of scriptPaths) { - try { - // 检查脚本文件是否存在 - log.info("检查路径追踪脚本: {path}", scriptPath); - - try { - // 尝试读取文件内容来检查是否存在 - await file.readText(scriptPath); - log.info("找到路径追踪脚本: {path}", scriptPath); - scriptFound = true; - scriptExecuted = true; - } catch (readError) { - log.info("路径追踪脚本不存在: {path}", scriptPath); - continue; // 尝试下一个脚本路径 - } - - // 执行路径追踪脚本 - log.info("开始执行路径追踪脚本: {path}", scriptPath); - - // 执行脚本并等待完成 - await pathingScript.runFile(scriptPath); - log.info("路径追踪脚本执行完成"); - - //log.info("委托 {name} 执行完成", commission.name); - - // 成功执行一个脚本后,跳出循环 - //break; - } catch (scriptError) { - log.error("执行路径追踪脚本时出错: {error}", scriptError); + // 根据委托类型执行不同的处理逻辑 + if (commission.type === COMMISSION_TYPE.TALK) { + // 执行对话委托 + const success = await executeTalkCommission(commission.name, commission.location); + if (success) { + completedCount++; + log.info("对话委托 {name} 执行完成", commission.name); + } else { + log.warn("对话委托 {name} 执行失败", commission.name); + } + } else { + // 默认执行战斗委托 + // 构建可能的路径追踪脚本路径 + const location = commission.location.trim(); + const scriptPaths = [ + `assets/${commission.name}/${location}-1.json`, + `assets/${commission.name}/${location}-2.json`, + `assets/${commission.name}/${location}-3.json`, + ]; + + let scriptFound = false; + let scriptExecuted = false; + + // 尝试执行每个可能的脚本路径 + for (const scriptPath of scriptPaths) { + try { + // 检查脚本文件是否存在 + log.info("检查路径追踪脚本: {path}", scriptPath); + + try { + // 尝试读取文件内容来检查是否存在 + await file.readText(scriptPath); + log.info("找到路径追踪脚本: {path}", scriptPath); + scriptFound = true; + scriptExecuted = true; + } catch (readError) { + log.info("路径追踪脚本不存在: {path}", scriptPath); + continue; // 尝试下一个脚本路径 + } + + // 执行路径追踪脚本 + log.info("开始执行路径追踪脚本: {path}", scriptPath); + + // 执行脚本并等待完成 + await pathingScript.runFile(scriptPath); + log.info("路径追踪脚本执行完成"); + } catch (scriptError) { + log.error("执行路径追踪脚本时出错: {error}", scriptError); + } + } + + if (!scriptFound) { + log.warn("未找到委托 {name} 在 {location} 的路径追踪脚本", commission.name, location); + } else if (scriptExecuted) { + completedCount++; + log.info("战斗委托 {name} 执行完成", commission.name); } - } - - if (!scriptFound) { - log.warn("未找到委托 {name} 在 {location} 的路径追踪脚本", commission.name, location); - } else if (scriptExecuted) { - completedCount++; } // 每个委托之间等待一段时间 @@ -955,67 +1224,6 @@ async function executeCommissionTracking() { } } -/** - * 执行委托追踪主函数 - * @returns {Promise} - */ -async function executeCommissionTracking_old() { - try { - log.info("开始执行委托追踪"); - await genshin.returnMainUi(); - - // 加载支持的委托列表 - const supportedCommissions = loadSupportedCommissions(); - - // 尝试从Data文件夹加载委托数据 - let commissions = await loadCommissionsFromData(); - - // 如果Data文件夹没有数据,则执行识别 - if (!commissions) { - log.info("未找到已保存的委托数据,开始执行委托识别"); - await Identification(); - - // 再次尝试加载委托数据 - commissions = await loadCommissionsFromData(); - - if (!commissions) { - log.error("无法获取委托数据,脚本终止"); - return; - } - } - - // 过滤出支持的委托 - const supportedCommissionsList = commissions.filter(c => c.supported); - - if (supportedCommissionsList.length === 0) { - log.warn("没有找到支持的委托"); - return; - } - - log.info("找到 {count} 个支持的委托", supportedCommissionsList.length); - - // 执行每个支持的委托 - for (const commission of supportedCommissionsList) { - log.info("开始处理委托: {name} ({location})", commission.name, commission.location || "未知地点"); - - // 执行委托追踪脚本 - //const success = await executeTrackingScript(commission); - - if (success) { - log.info("委托 {name} 已成功完成", commission.name); - } else { - log.warn("委托 {name} 未能完成", commission.name); - } - - await sleep(2000); // 等待一段时间再处理下一个委托 - } - - log.info("委托追踪执行完成"); - } catch (error) { - log.error("执行委托追踪时出错: {error}", error); - } -} - // 主函数 async function main() { @@ -1039,4 +1247,4 @@ async function executeCommissionTracking_old() { // 修改这里:使用 Promise 包装 main 函数的执行 return main(); //log.info(""); -})(); \ No newline at end of file +})(); diff --git a/repo/js/AutoEntrust/manifest.json b/repo/js/AutoEntrust/manifest.json index 20446252..0ec64da8 100644 --- a/repo/js/AutoEntrust/manifest.json +++ b/repo/js/AutoEntrust/manifest.json @@ -1,12 +1,12 @@ { "manifest_version": 1, - "name": "(Beta)全自动寻路蒙德地区每日委托", - "version": "0.94.1", + "name": "(Beta)全自动蒙德地区每日委托", + "version": "0.95", "bgi_version": "0.44.3", - "description": "基于BetterGI的原神自动化脚本,可自动识别每日委托内容、OCR识别委托地点和状态、自动追踪委托路径。目前支持蒙德地区委托,未来将支持全国家委托。使用前请阅读README.md(可用记事本打开)获取详细说明和常见问题解答。请关闭战斗后自动拾取,不然部分委托会发生错误并且浪费过多时间。如果发生错误,如不支持的战斗委托,请将脚本data/文件夹下面的数据,log/日志下今日日志,每日委托任务包含地点截图反馈给作者。反馈方法1.加3302871403QQ好友2.发送截图,日志给3302871403@qq.com3.加1036100501bgi v8群@星野(bgi v7群也可以)。目前项目正处于开发阶段急需人手,有意者可私信作者(会在地图上标点即可)", + "description": "基于BetterGI的原神自动化脚本,可自动识别每日委托内容、OCR识别委托地点和状态、自动追踪委托路径。目前支持蒙德地区委托,未来将支持全国家委托。使用前请阅读README.md(可用记事本打开)获取详细说明和常见问题解答。请关闭战斗后自动拾取,不然部分委托会发生错误并且浪费过多时间。如果发生错误,如不支持的战斗委托,请将脚本data/文件夹下面的数据,log/日志下今日日志,每日委托任务包含地点截图反馈给作者。反馈方法1.加3302871403QQ好友2.发送截图,日志给3302871403@qq.com。目前项目正处于开发阶段急需人手,有意者可私信作者(会在地图上标点即可)。感谢云闲vsv & 换苏伟u的共同开发", "authors": [ { - "name": "星野(Main) & 换苏伟u", + "name": "星野", "link": "https://github.com/LX666-666" } ], diff --git a/repo/js/AutoEntrust/name.json b/repo/js/AutoEntrust/name.json new file mode 100644 index 00000000..ff168457 --- /dev/null +++ b/repo/js/AutoEntrust/name.json @@ -0,0 +1,23 @@ +{ + "fight": [ + "圆滚滚的易爆品", + "丘丘人的一小步", + "临危受命", + "持盾的危机", + "攀高危险", + "邪恶的扩张", + "冷冰冰的大麻烦", + "为了执行官大人", + "极速前进", + "冷凉凉的大团危机" + ], + "talk": [ + "说到做到", + "那位先生的委托", + "父亲能做的事", + "冒险家安娜", + "诗歌交流", + "钥匙是易丢物品", + "语言交流" + ] +} \ No newline at end of file diff --git a/repo/js/AutoEntrust/settings.json b/repo/js/AutoEntrust/settings.json index c670af77..ac13422e 100644 --- a/repo/js/AutoEntrust/settings.json +++ b/repo/js/AutoEntrust/settings.json @@ -10,14 +10,14 @@ "label": "最小文本长度(小于此长度的文本将被过滤)", "default": "4" }, - { - "name": "debugMode", - "type": "checkbox", - "label": "调试模式(输出更多日志信息)" - }, { "name": "team", "type": "input-text", "label": "战斗的队伍名称,不填表示不切换队伍" + }, + { + "name": "fight", + "type": "input-text", + "label": "自定义战斗脚本(研究中)" } ] \ No newline at end of file diff --git a/repo/js/AutoEntrust/对话委托制做方法.txt b/repo/js/AutoEntrust/对话委托制做方法.txt new file mode 100644 index 00000000..58255afe --- /dev/null +++ b/repo/js/AutoEntrust/对话委托制做方法.txt @@ -0,0 +1,59 @@ +编写方法 +创建 JSON 文件 +使用文本编辑器创建一个新的 JSON 文件process.json。 +根据需要定义对话委托流程的各个步骤,每个步骤包含type(类型)和data(数据)等属性,可选地添加note(注释)属性来描述步骤。 +定义流程步骤类型 +地图追踪 :设置type为"地图追踪",data为地图追踪文件的路径。 +键鼠脚本 :设置type为"键鼠脚本",data为键鼠脚本文件的路径。 +对话 :设置type为"对话",可选地在data中指定跳过对话的次数(默认为10)。 +按键 :设置type为"按键",data为按键值(如"F");也可以是复杂按键操作对象,包含action(动作,如"down"、"up"、"press")和key(按键值)。 +传送 :设置type为"tp",data为一个数组,包含传送的目标坐标(x、y)以及可选的强制传送标志。 +组织流程步骤 +将所有步骤组织成一个数组,按照执行顺序排列。 +可以在每个步骤中添加note属性,用于记录步骤的详细说明或备注信息。 +[ + { + "type": "地图追踪", + "data": "assets/process/example/tracking1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "按键", + "data": { + "action": "press", + "key": "E" + }, + "note": "点击E键" + }, + { + "type": "tp", + "data": [100, 200, true], + "note": "传送到坐标(100, 200),强制传送" + }, + { + "type": "键鼠脚本", + "data": "assets/process/example/script1.js", + "note": "执行键鼠脚本" + } +] + +我不会json +可以用简单版 +格式如下 +XXX-1.json +F +XXX-2.json +F +XXX-3.json + +XXX-1.json:地图追踪 +F:对话 \ No newline at end of file