From 312d126432c5a03e3524b0e4ad6a7a585fd7bbc0 Mon Sep 17 00:00:00 2001 From: mno <718135749@qq.com> Date: Thu, 3 Jul 2025 20:45:25 +0800 Subject: [PATCH] =?UTF-8?q?js=EF=BC=9A=E6=8F=90=E7=93=A6=E7=89=B9=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E4=BB=AA=E5=88=9D=E7=89=88=20(#1263)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repo/js/TeyvatScanner/README.md | 21 + repo/js/TeyvatScanner/assets/icon/Anemo.png | Bin 0 -> 4108 bytes .../TeyvatScanner/assets/icon/Anemo_off.png | Bin 0 -> 4194 bytes repo/js/TeyvatScanner/assets/icon/Dendro.png | Bin 0 -> 3806 bytes .../TeyvatScanner/assets/icon/Dendro_off.png | Bin 0 -> 3828 bytes repo/js/TeyvatScanner/assets/icon/Electro.png | Bin 0 -> 4057 bytes .../TeyvatScanner/assets/icon/Electro_off.png | Bin 0 -> 4120 bytes repo/js/TeyvatScanner/assets/icon/Geo.png | Bin 0 -> 4043 bytes repo/js/TeyvatScanner/assets/icon/Geo_off.png | Bin 0 -> 4162 bytes repo/js/TeyvatScanner/assets/icon/Hydro.png | Bin 0 -> 4014 bytes .../TeyvatScanner/assets/icon/Hydro_off.png | Bin 0 -> 3887 bytes repo/js/TeyvatScanner/assets/icon/Pyro.png | Bin 0 -> 4321 bytes .../js/TeyvatScanner/assets/icon/Pyro_off.png | Bin 0 -> 4027 bytes repo/js/TeyvatScanner/assets/icon/chest.png | Bin 0 -> 2671 bytes repo/js/TeyvatScanner/assets/icon/flag.png | Bin 0 -> 1912 bytes .../assets/switchElement/岩.json | 51 + .../assets/switchElement/水.json | 33 + .../assets/switchElement/火.json | 33 + .../assets/switchElement/草.json | 33 + .../assets/switchElement/雷.json | 33 + .../assets/switchElement/风.json | 42 + .../assets/waitFor10Seconds.json | 24 + repo/js/TeyvatScanner/main.js | 963 ++++++++++++++++++ repo/js/TeyvatScanner/manifest.json | 16 + .../璃月/璃月-A01-09/璃月-A01-石门.json | 24 + .../璃月/璃月-A01-09/璃月-A02-山脊守望.json | 24 + .../璃月/璃月-A01-09/璃月-A03-荻花洲.json | 24 + .../璃月/璃月-A01-09/璃月-A04-望舒客栈.json | 24 + .../璃月/璃月-A01-09/璃月-A05-地中之盐.json | 24 + .../璃月/璃月-A01-09/璃月-A06-无妄坡下.json | 24 + .../璃月-A01-09/璃月-A07-无妄引咎密宫.json | 24 + .../璃月/璃月-A01-09/璃月-A08- 轻策庄.json | 43 + .../璃月/璃月-A01-09/璃月-A09-轻策庄右.json | 24 + .../璃月/璃月-A11-19/璃月-A10-轻策庄左.json | 24 + .../璃月/璃月-A11-19/璃月-A11-药蝶谷右.json | 24 + .../璃月/璃月-A11-19/璃月-A12-奥藏山右.json | 24 + .../璃月/璃月-A11-19/璃月-A13-华池岩岫.json | 24 + .../璃月/璃月-A11-19/璃月-A14-奥藏山下.json | 24 + .../璃月/璃月-A11-19/璃月-A15-庆云顶神像.json | 24 + .../璃月/璃月-A11-19/璃月-A16-庆云顶锚点.json | 24 + .../璃月/璃月-A11-19/璃月-A17-琥牢山.json | 24 + .../璃月/璃月-A11-19/璃月-A18-南天门山顶.json | 24 + .../璃月/璃月-A11-19/璃月-A19-南天门.json | 24 + .../璃月/璃月-A21-29/璃月-A20-天遒谷.json | 24 + .../璃月/璃月-A21-29/璃月-A21-奥藏山右下.json | 24 + .../璃月/璃月-A21-29/璃月-A22-绝云间右上.json | 24 + .../璃月/璃月-A21-29/璃月-A23-荻花洲左.json | 24 + .../璃月/璃月-A21-29/璃月-A24-绝云间下.json | 24 + .../璃月/璃月-A21-29/璃月-A25-翠珏坡左上.json | 24 + .../璃月/璃月-A21-29/璃月-A26-翠珏坡下.json | 24 + .../璃月/璃月-A21-29/璃月-A27-禄华池右.json | 24 + .../璃月/璃月-A21-29/璃月-A28-明蕴镇上.json | 24 + .../璃月/璃月-A21-29/璃月-A29-明蕴镇神像.json | 51 + .../璃月-A31-39/璃月-A30-震雷连山密宫.json | 24 + .../璃月/璃月-A31-39/璃月-A31-瑶光滩右.json | 24 + .../璃月/璃月-A31-39/璃月-A32-瑶光滩左上.json | 24 + .../璃月/璃月-A31-39/璃月-A33-归离原.json | 24 + .../璃月-A31-39/璃月-A34-墟散人离之处.json | 24 + .../璃月/璃月-A31-39/璃月-A35-云来海.json | 24 + .../璃月/璃月-A31-39/璃月-A36-云来海下.json | 24 + .../璃月/璃月-A31-39/璃月-A37-孤云阁.json | 24 + .../璃月-A31-39/璃月-A38-孤云凌霄之处.json | 24 + .../璃月/璃月-A31-39/璃月-A39-死兆星.json | 24 + .../璃月/璃月-A41-49/璃月-A40-璃月港上.json | 24 + .../璃月/璃月-A41-49/璃月-A41-璃月港左.json | 24 + .../璃月/璃月-A41-49/璃月-A42-璃月港下.json | 24 + .../璃月/璃月-A41-49/璃月-A43-云来海神像.json | 24 + .../璃月/璃月-A41-49/璃月-A44-天衡山上.json | 24 + .../璃月/璃月-A41-49/璃月-A45-天衡山下.json | 24 + .../璃月/璃月-A41-49/璃月-A46-黄金屋.json | 24 + .../璃月/璃月-A41-49/璃月-A47-群玉阁左.json | 24 + .../璃月/璃月-A41-49/璃月-A48-天衡山左.json | 24 + .../璃月/璃月-A41-49/璃月-A49-青墟浦.json | 24 + .../璃月/璃月-A51-59/璃月-A50-灵矩关.json | 24 + .../璃月/璃月-A51-59/璃月-A51-遁玉陵神像.json | 24 + .../璃月/璃月-A51-59/璃月-A52-天遒谷下.json | 24 + .../璃月/璃月-B001-006-岩主/璃月-B001.json | 97 ++ .../璃月/璃月-B001-006-岩主/璃月-B002.json | 89 ++ .../璃月/璃月-B001-006-岩主/璃月-B003.json | 142 +++ .../璃月/璃月-B001-006-岩主/璃月-B004.json | 69 ++ .../璃月/璃月-B001-006-岩主/璃月-B005.json | 78 ++ .../璃月/璃月-B001-006-岩主/璃月-B006.json | 79 ++ .../纳塔-安饶之野-路线01-1.json | 69 ++ .../纳塔-安饶之野-路线02-2.json | 78 ++ .../纳塔-安饶之野-路线03-3.json | 78 ++ .../纳塔-安饶之野-路线03-4.json | 51 + .../纳塔-安饶之野-路线04-5.json | 96 ++ .../纳塔-安饶之野-路线05-6.json | 24 + .../纳塔-安饶之野-路线06-7.json | 51 + .../纳塔-安饶之野-路线07-8.json | 24 + .../纳塔-安饶之野-路线08-9.json | 87 ++ .../纳塔-安饶之野-路线09-10.json | 51 + .../纳塔-安饶之野-路线10-11.json | 42 + .../纳塔-安饶之野-路线11-12.json | 33 + .../纳塔-安饶之野-路线12-13.json | 61 ++ .../纳塔-安饶之野-路线13-14.json | 42 + .../纳塔-安饶之野-路线14-15.json | 61 ++ .../纳塔-安饶之野-路线15-16.json | 97 ++ .../纳塔-安饶之野-路线16-17.json | 51 + .../纳塔-安饶之野-路线17-18.json | 106 ++ .../纳塔-安饶之野-路线18-19.json | 51 + .../纳塔-安饶之野-路线19-20.json | 51 + .../纳塔-安饶之野-路线20-21.json | 24 + repo/js/TeyvatScanner/records/占位.json | 0 repo/js/TeyvatScanner/settings.json | 58 ++ .../切换主角元素/assets/switchElement/岩.json | 51 + .../切换主角元素/assets/switchElement/水.json | 33 + .../切换主角元素/assets/switchElement/火.json | 33 + .../切换主角元素/assets/switchElement/草.json | 33 + .../切换主角元素/assets/switchElement/雷.json | 33 + .../切换主角元素/assets/switchElement/风.json | 42 + repo/js/切换主角元素/main.js | 39 + repo/js/切换主角元素/manifest.json | 13 + repo/js/切换主角元素/settings.json | 21 + 114 files changed, 4681 insertions(+) create mode 100644 repo/js/TeyvatScanner/README.md create mode 100644 repo/js/TeyvatScanner/assets/icon/Anemo.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Anemo_off.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Dendro.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Dendro_off.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Electro.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Electro_off.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Geo.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Geo_off.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Hydro.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Hydro_off.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Pyro.png create mode 100644 repo/js/TeyvatScanner/assets/icon/Pyro_off.png create mode 100644 repo/js/TeyvatScanner/assets/icon/chest.png create mode 100644 repo/js/TeyvatScanner/assets/icon/flag.png create mode 100644 repo/js/TeyvatScanner/assets/switchElement/岩.json create mode 100644 repo/js/TeyvatScanner/assets/switchElement/水.json create mode 100644 repo/js/TeyvatScanner/assets/switchElement/火.json create mode 100644 repo/js/TeyvatScanner/assets/switchElement/草.json create mode 100644 repo/js/TeyvatScanner/assets/switchElement/雷.json create mode 100644 repo/js/TeyvatScanner/assets/switchElement/风.json create mode 100644 repo/js/TeyvatScanner/assets/waitFor10Seconds.json create mode 100644 repo/js/TeyvatScanner/main.js create mode 100644 repo/js/TeyvatScanner/manifest.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A01-石门.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A02-山脊守望.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A03-荻花洲.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A04-望舒客栈.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A05-地中之盐.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A06-无妄坡下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A07-无妄引咎密宫.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A08- 轻策庄.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A09-轻策庄右.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A10-轻策庄左.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A11-药蝶谷右.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A12-奥藏山右.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A13-华池岩岫.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A14-奥藏山下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A15-庆云顶神像.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A16-庆云顶锚点.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A17-琥牢山.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A18-南天门山顶.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A19-南天门.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A20-天遒谷.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A21-奥藏山右下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A22-绝云间右上.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A23-荻花洲左.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A24-绝云间下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A25-翠珏坡左上.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A26-翠珏坡下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A27-禄华池右.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A28-明蕴镇上.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A29-明蕴镇神像.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A30-震雷连山密宫.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A31-瑶光滩右.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A32-瑶光滩左上.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A33-归离原.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A34-墟散人离之处.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A35-云来海.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A36-云来海下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A37-孤云阁.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A38-孤云凌霄之处.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A39-死兆星.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A40-璃月港上.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A41-璃月港左.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A42-璃月港下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A43-云来海神像.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A44-天衡山上.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A45-天衡山下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A46-黄金屋.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A47-群玉阁左.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A48-天衡山左.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A49-青墟浦.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A50-灵矩关.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A51-遁玉陵神像.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A52-天遒谷下.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B001.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B002.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B003.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B004.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B005.json create mode 100644 repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B006.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线01/纳塔-安饶之野-路线01-1.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线02/纳塔-安饶之野-路线02-2.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-3.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-4.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线04/纳塔-安饶之野-路线04-5.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线05/纳塔-安饶之野-路线05-6.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线06/纳塔-安饶之野-路线06-7.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线07/纳塔-安饶之野-路线07-8.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线08/纳塔-安饶之野-路线08-9.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线09/纳塔-安饶之野-路线09-10.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线10/纳塔-安饶之野-路线10-11.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线11/纳塔-安饶之野-路线11-12.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线12/纳塔-安饶之野-路线12-13.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线13/纳塔-安饶之野-路线13-14.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线14/纳塔-安饶之野-路线14-15.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线15/纳塔-安饶之野-路线15-16.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线16/纳塔-安饶之野-路线16-17.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线17/纳塔-安饶之野-路线17-18.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线18/纳塔-安饶之野-路线18-19.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线19/纳塔-安饶之野-路线19-20.json create mode 100644 repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线20/纳塔-安饶之野-路线20-21.json create mode 100644 repo/js/TeyvatScanner/records/占位.json create mode 100644 repo/js/TeyvatScanner/settings.json create mode 100644 repo/js/切换主角元素/assets/switchElement/岩.json create mode 100644 repo/js/切换主角元素/assets/switchElement/水.json create mode 100644 repo/js/切换主角元素/assets/switchElement/火.json create mode 100644 repo/js/切换主角元素/assets/switchElement/草.json create mode 100644 repo/js/切换主角元素/assets/switchElement/雷.json create mode 100644 repo/js/切换主角元素/assets/switchElement/风.json create mode 100644 repo/js/切换主角元素/main.js create mode 100644 repo/js/切换主角元素/manifest.json create mode 100644 repo/js/切换主角元素/settings.json diff --git a/repo/js/TeyvatScanner/README.md b/repo/js/TeyvatScanner/README.md new file mode 100644 index 00000000..109eff2e --- /dev/null +++ b/repo/js/TeyvatScanner/README.md @@ -0,0 +1,21 @@ +# 提瓦特扫描仪 + +## 使用说明 +在启用本工具之前,请确保完成以下准备工作: +1. **装备寻宝罗盘**:确保已经装备寻宝罗盘,并启用自动切换不同国家的罗盘。 +2. **准备配队**:准备一个含有旅行者的配队,并为该配队配置对应的战斗策略。 +3. **宝藏记录存储**:宝藏记录将被存储到 `js` 文件夹下的 `records` 文件夹中。 + +## 自定义配置说明 + +### 操作模式 +在配置文件中,你可以选择以下两种操作模式之一: +- **寻宝模式**:工具将自动寻找宝藏。 +- **导航至宝藏**:工具将自动导航至宝藏位置,并在到达宝藏位置后等待10秒。你可以使用快捷键暂停脚本,并在该位置找齐所有宝箱后继续运行。 + +### 终止运行时间段 +你可以指定一个时间段,在该时间段内工具将自动终止运行。这有助于在特定的时间(如凌晨四点后)切换到其他任务。 + +## 注意事项 +- 确保在使用前仔细检查自定义配置。 +- 如果在使用过程中遇到任何问题,请及时查看日志文件以获取更多信息。 diff --git a/repo/js/TeyvatScanner/assets/icon/Anemo.png b/repo/js/TeyvatScanner/assets/icon/Anemo.png new file mode 100644 index 0000000000000000000000000000000000000000..36da1a697e3d0bbd33a094a537e901bb22f9a530 GIT binary patch literal 4108 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 literal 0 HcmV?d00001 diff --git a/repo/js/TeyvatScanner/assets/icon/Dendro.png b/repo/js/TeyvatScanner/assets/icon/Dendro.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6078e2977841aea94c13a588f026d733c21921 GIT binary patch literal 3806 zcmV<44k7W0P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D4s%IFK~z{rWtdrP zT<3MifA_oV?86z(49Ve;Gu$L9QYBfHEXB5*ICfjxO0zXdQy_tnx1vCipha7>K&w8q z&*?*oAO!-XTigTPaw1EXY}qokP+UcFNDgP8x%<6+7)NQ+4>-8MefaME z&Uem#Inwgljd0=pEA)Cj9zOm%Se8X9nMVkL=l75#iC13!4{XOq5?yp%=ds5grrB(9 z<9dS&7cNklS9Xhwu9+S^^;i z$45TJ;lqcycIh$)4<4jp4xy?lo8B_g`JerF_`{!mjdr_DaqJ+fqVnXE&tjS;*REf} zG)>l*dd$ww@`ca+IZI1R{QG}?gL=JAG8xCREP7rPNs^G2E|MhSSaA%)Kvw&Bo=4o5 z$>;N&dg4)z96iDZtIJ%ydX<**7P_vJ+Rbt5)F~We0$G+3h5~?OIY@u@r_Y7kogXkW zGlL+D=Xvnun^YJaXcb%+1a5t#AH>J9qA2Irq_Zow>OgCMG5jkpi+TqiTJG z5V&>%$8o6Dm)Y6bp}xEUfQYN;y1~cKJWaV=<`?gNm&L_J#FD|8GiQj89pTcYOUxhs z2s=AFG&ZY9U;5HqsLk}r<#OPv2qB0_5~`|VHOF}T@y99THo0`^5{tJKgb*BgXo_aD z$^3y4QmGV*avV+5u!JvMzdJ!v4zGNC6Sgg})feBbBD!H-iem$`HM z0}^`%a_lyy}eDjd=f=b@O+DYuaE6CiN#_h6FFpAMpIqNH%i2 zfvW2G{Sl%@k!PO%1n1BH4}mKaG4hO!&N4GIN8htylT^TR)`PS)ej`ie4u{b*n)> zSE4*|n6Z(0;t8MK+9LOst|6;k!XQbz1=p|cQN6D*I(32Xz3^!)_cl9wSLk*IFqO&b zlqNDLT8)*pUtpRo5(ypGukw*YBS^yH)z^N^sS{rWe}bDgZ=&luxq^gPSh&S+u4Bi3 zn^#|bmGSX$(&;prOa>tY^?Ds$*D06FSeC``@G#M6lxLoPhJ{-Tq*5tVRb_8)k8Cze z5C*8KiY&`Wl7ylt7=}T+)283=69fT52&Si}saC7pyLXSTe)X$lG8wL1xxz~?y@ZG) z4G2?%@TS0)5#XM9`yI6kWp$0}vXP6CkAorfQKL z^;o!fo=ovE+HQ$0#YLo2DTarKAJk76hN!BFVHjwdh9pV!`+XEe`H*Kdn$0G%Ec4V; zPjT_$Mb_8Xi9{l#(`h1+2mp~tWPq(K7kH-;0{93rKi!26pD$6py?{nb5 z0W?iR=$eG0=m??Wc_xnABbm&Q%@&BoqX=1|-dH6P^$5d|Xe`QX`SV28kD_ZCKKq$3 zGdcDduDt1U^SyPB9)6tt2a23~?FD4TL(@aT0IFNtlqctj7#S3%2cZlowbyH*8#0ol zBFj3C6Hq7=>GfKOcDqfp*`(cWV_6oizb#;~P?QQmIdt7__+JKX5HS+m9ckeE;y}k4QGHBcOgHD$|WU+WW4uEhR z2j7#BP!Y1lZf%XB^capUV_7|dz#%=PEnAEy>38pY(LRRf&H^j zvUJyBD4nHJnPzeIMgHTz{+3&}Z=&fkrP2hkSe&Je@3PzeA(rK0SuTp|V>@jeTSCG> zkz=Sz93i`iU)Eh1h7Y>f_XC0;pwsCfgdmYf;CUWF5MWsrzVFj$Gpc4CX(UNTHMVerd)&LXNH&|HH1a8m`A?F|93`7R40s>L03S6iO1<7jhyW3W zAwduTAW0Gc=gyrYkw_4W#c&)4$9CxV`xu6SuIYU6!3X5?`3ITY-Py&qZR+(pp66kj zCPD~gS?1KKQxCeh(P+@=bO?fgNF;);>)5vas{{U@^~(&(fB*G=JXhn5uk%Wc(nl&L*|pfNY_OX?HN~ z8mS?beoMx&JWQp@R{b`UnSBT>xG4i?84~JBWBZ&ZCb$ z%IVXm2ci{-Mx%WH``;&#NDzi0p6AhQHmTR^q|<38CMHNGlW3YoGMPk@B*HL6Q51^B zA}cE^^m;vn5HuQ%2OSv%0kv8UAq0-&psFgq@1v?JLK?hFr_(r&^WZkbaDJZmZmh6f z?ej-}@J)^!_!A2#X=8w*&L#nrdh zsZ=Uth6U|*n^(TbLE_O_I=vR2s{#r_M9_>TtE$z)*)#6qn8W+Z;N$kG16;)}`B6YKK5^*zGNI`OTZu+dGts2S_A` z=y$d;J0|_MPv|Nbasflm5mV>Tq!L|s2%j8ASSF@a7*357262`b-r(Q<<=ZrycPL~u zqQpoWS@w+{z}j(%c~RtSQ93&_c9h}aVT4d{T^HSOSy)&gm6q7p*kIeaKkyI1V8mfa z1-7=fc>UG4SYBRcIHMAa#V8a;NhXuTVhIw71c^k3L?S^nl|t8bLSMplT`pg|#EUP! zNTa?;E|;S)o?&csl+%x&#&ta^l``>of@8-XLi&rZKOL$OgJ++8mdeEA?C$PTuU9FR zO8C+u&wuZEwv?L#(DcC$*a*JHPO zn{Ky@yT&dehH-Cut;G+l=<40-nV{+Rjs zc~)2N;`=_1f15WhzQJ1X4zetxD+3?l_EknkMo1WGs?{oiZ2(}~10Gi8%&+~RD;$In zM6`k5jfgt2Sd63dU!+>Ck{!v=?RGJY!9I#I7_qFZtRNqG?BrS8ZMxkCOG}HiJ5`Py zJBqA?ynXF0dOZg%>L7Un&xN662Gg~eo1f$D_ueLueXQUVUeMVgLXD literal 0 HcmV?d00001 diff --git a/repo/js/TeyvatScanner/assets/icon/Dendro_off.png b/repo/js/TeyvatScanner/assets/icon/Dendro_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e885c354d4fe60ad043902015b65f30ff61281de GIT binary patch literal 3828 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 M07*qoM6N<$g8kw1761SM literal 0 HcmV?d00001 diff --git a/repo/js/TeyvatScanner/assets/icon/Hydro.png b/repo/js/TeyvatScanner/assets/icon/Hydro.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb22c795135f4f7e4c442104410cf93093d3bf2 GIT binary patch literal 4014 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 literal 0 HcmV?d00001 diff --git a/repo/js/TeyvatScanner/assets/icon/Pyro_off.png b/repo/js/TeyvatScanner/assets/icon/Pyro_off.png new file mode 100644 index 0000000000000000000000000000000000000000..ad123d6d057658f8ee177c173050ce5fec39179d GIT binary patch literal 4027 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 literal 0 HcmV?d00001 diff --git a/repo/js/TeyvatScanner/assets/icon/flag.png b/repo/js/TeyvatScanner/assets/icon/flag.png new file mode 100644 index 0000000000000000000000000000000000000000..c76282832f780612307ec6c71a011e1363f5c206 GIT binary patch literal 1912 zcmY*adpy&7AD@W1->ak1nv>D8nYqr~hvvAw##z&G8ygemvSB#R%C)Ibh7&@q_2jsB ziia|VlhZ*xS`kGth2k0MahuxnbDm!3d7eK$-|y%8{(Qdg*Z1}Pas&Ll)Kv^rKp>Dh z;W(ZM>_&i?ffa!j=6|^p*yNZ*FE>!jW5^<4D8#t>x`IIMC8|4=y@0KpbUc^|0%_de z6}eMmTxFo3FgA$HBK!JaqY@L46l!854arVO0kclZVD73x3J<7roWoc;+WSBEE z7%U3goWV5y3V^3Eqf%m%Sh0x==q?~7GBK6q2un?krDCHg(bkbvspCv>Z)xb8+o;WuW)541t!-<67Pd{~u^ zNlx_s(qc2)L&)CQOb+YG%%9I7lkzhfB$fS^sF0VFd{=fh*M5H z@(N;FO4KSz$5{Mha9}{85*Zpvr=JZ$dR+~0G281BE&)BiqjEbh3$ysC@H&w%RXLcs zVba{$`<<>1*N)FO{_*1@ls)quTu;R#q%%)~fZVOVDaw7}v@|l>eMir&LuHvuS8peu zZ)i9-JUpBvnRaXm>AGd_r)34+F(}Z8hzX0oc7dd9>}#Q5+AFxpd#Lp$!xxs;7}|j4 z;&~g>Qm6j@!L|hM=xb@QFk5OP5{X!;%Jk(LN3`43?}eUKiVGbZ%Lm?ryaks2wYZs8 z@!;^t$m-4(lSecaOott~zp-byrQ+I0>nF92Q4B`0SBVkY*}3FHx2a$Sr)hS??d)T) zd=qKx=eoN22f0eP>}{SvaKu}n<89_6x=w1;=Hg8&PS#C~dn22#_85aF{U@j23K1)n ztzZ85*N5@0WU(R!gSp3E&53M3E0NNhS8*lpGiiamas6pKm(ydl&sLV7TBb{;X{SyV zRof4LTbHkf9_eU3sS$%&)33{3x99WuuX;IknLWa{FPGYCq!l^U z{5S9VOwv3|1*Jropx)49?3DGZl*^nSKU;IUrCu#RW#)&=qN{p8f0jEVC)BuUebB00 zlUR!SX@5r+)bm=5%j+&?;o{;!y82d1alFlUHr2GWv6^=QG1!e)Nz#G z-sqL)u2-MTQg4>+ysg|GXb9|fzWl769r8mlUs^_(a#C|3r8TYE%61BXOZDpn-kb0% zsedH>OA*3Hga^B7EsQk1swYl5AYNA(8YKpV1}mRPJumz+H{Dn05zf(BU)yXm?aJ_G z7-=t`L-HGJz9!3jpZg`fdM~gu4Ly^z>1e71yZ5*k#reB^|a`3{`{9Rn69qww`Bw$ zk=n+xDe%na>B9Y>dG~J}Q&dvATvIc!))4~Nl*?FBlEkR>M^Gqd;%$b8IK9;5GNE-rOD5;&%jN}fwGDQ^KZ1uJzQrvf=ieo1R&oFU literal 0 HcmV?d00001 diff --git a/repo/js/TeyvatScanner/assets/switchElement/岩.json b/repo/js/TeyvatScanner/assets/switchElement/岩.json new file mode 100644 index 00000000..41d997db --- /dev/null +++ b/repo/js/TeyvatScanner/assets/switchElement/岩.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "岩", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302360644 + }, + "positions": [ + { + "id": 1, + "x": 978.720703125, + "y": -353.53662109375, + "type": "teleport", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": 984.4345703125, + "y": -351.3369140625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 985.9130859375, + "y": -348.8408203125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 986.513671875, + "y": -344.76611328125, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/assets/switchElement/水.json b/repo/js/TeyvatScanner/assets/switchElement/水.json new file mode 100644 index 00000000..bb90fee0 --- /dev/null +++ b/repo/js/TeyvatScanner/assets/switchElement/水.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "水", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302729676 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 4610.498046875, + "y": 3600.668701171875, + "action_params": "" + }, + { + "id": 2, + "x": 4631.1494140625, + "y": 3598.541259765625, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/assets/switchElement/火.json b/repo/js/TeyvatScanner/assets/switchElement/火.json new file mode 100644 index 00000000..c1d5c081 --- /dev/null +++ b/repo/js/TeyvatScanner/assets/switchElement/火.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "火", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302846273 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 8597.341796875, + "y": -1928.5986328125, + "action_params": "" + }, + { + "id": 2, + "x": 8597.623046875, + "y": -1932.87451171875, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/assets/switchElement/草.json b/repo/js/TeyvatScanner/assets/switchElement/草.json new file mode 100644 index 00000000..ef1afce8 --- /dev/null +++ b/repo/js/TeyvatScanner/assets/switchElement/草.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "草", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302613795 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 2297.580078125, + "y": -824.5205078125, + "action_params": "" + }, + { + "id": 2, + "x": 2295.8798828125, + "y": -825.7041015625, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/assets/switchElement/雷.json b/repo/js/TeyvatScanner/assets/switchElement/雷.json new file mode 100644 index 00000000..daa8111c --- /dev/null +++ b/repo/js/TeyvatScanner/assets/switchElement/雷.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "雷", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302521509 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -3233.314453125, + "y": -3534.126953125, + "action_params": "" + }, + { + "id": 2, + "x": -3237.7265625, + "y": -3533.8779296875, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/assets/switchElement/风.json b/repo/js/TeyvatScanner/assets/switchElement/风.json new file mode 100644 index 00000000..a7f33708 --- /dev/null +++ b/repo/js/TeyvatScanner/assets/switchElement/风.json @@ -0,0 +1,42 @@ +{ + "info": { + "name": "风主", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751300321221 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1266.748046875, + "y": 1933.923828125, + "action_params": "" + }, + { + "id": 2, + "x": -1266.5419921875, + "y": 1929.845703125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1265.130859375, + "y": 1924.84375, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/assets/waitFor10Seconds.json b/repo/js/TeyvatScanner/assets/waitFor10Seconds.json new file mode 100644 index 00000000..63c18b8d --- /dev/null +++ b/repo/js/TeyvatScanner/assets/waitFor10Seconds.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "waitFor10Seconds", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750964027700 + }, + "positions": [ + { + "id": 1, + "action": "combat_script", + "move_mode": "walk", + "type": "orientation", + "x": 0, + "y": 0, + "action_params": "wait(10)" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/main.js b/repo/js/TeyvatScanner/main.js new file mode 100644 index 00000000..92361aab --- /dev/null +++ b/repo/js/TeyvatScanner/main.js @@ -0,0 +1,963 @@ +// 主函数 +(async function () { + await fakeLog("提瓦特扫描仪", true, true, 0); + //去七天神像切换到可战斗配队 + await genshin.tpToStatueOfTheSeven(); + await switchPartyIfNeeded(settings.partyName); + //文件处理 + const pathFolder = "pathing"; + const paths = await readFolder(pathFolder, true); + + for (let i = 0; i < 30; i++) { + if (await isCompassFree(1)) { + keyPress("Z"); + break; + } else { + log.warn(`第${i + 1}次尝试未找到罗盘图标`); + } + if (i === 29) { + log.warn("请装备罗盘后再启动本js"); + return; + } + await sleep(1000); + } + + if (!isValidAccountName(settings.accountName || "默认账户")) { + return; + } + + const recordFilePath = `records/${settings.accountName || "默认账户"}.txt`; + + // 初始化结果对象 + const result = {}; + + if (!doFileExist(recordFilePath)) { + log.warn("对应记录文件不存在,将创建空白文件"); + } else { + // 读取文件内容 + const content = await file.readText(recordFilePath); + + // 按行分割内容 + const lines = content.split('\n'); + + // 当前国家 + let currentCountry = null; + + // 遍历每一行 + for (const line of lines) { + // 去除行首行尾的空格 + const trimmedLine = line.trim(); + + // 如果行以国家名称结尾(冒号),更新当前国家 + if (trimmedLine.endsWith(":")) { + currentCountry = trimmedLine.slice(0, -1).trim(); + result[currentCountry] = {}; + continue; + } + + // 如果行以“-”开头,表示路线信息 + if (trimmedLine.startsWith("-")) { + // 提取路线名称和宝藏信息 + const [routeInfo, treasureInfo] = trimmedLine.slice(1).split(":"); + const routeName = routeInfo.trim(); + const treasures = treasureInfo.split(",").map(t => t.trim()); + + // 将路线信息添加到当前国家 + if (currentCountry) { + result[currentCountry][routeName] = treasures; + } + } + } + + } + + // 创建一个对象来存储每条路线的文件路径 + const routes = {}; + + // 遍历 paths,将文件按路线分类 + for (const file of paths) { + // 获取文件所在的路线文件夹路径 + const folderPathArray = file.folderPathArray; + + // 确保路径数组长度足够 + if (folderPathArray.length < 2) { + log.debug(`文件路径 ${file.fullPath} 的层级不足,跳过该文件`); + continue; + } + + const routeFolder = folderPathArray[folderPathArray.length - 1]; // 倒数第一个元素是路线文件夹 + const countryFolder = folderPathArray[folderPathArray.length - 2]; // 倒数第二个元素是国家文件夹 + + // 如果国家文件夹不存在于 routes 对象中,则初始化 + if (!routes[countryFolder]) { + routes[countryFolder] = {}; + } + + // 如果路线文件夹不存在于国家文件夹中,则初始化 + if (!routes[countryFolder][routeFolder]) { + routes[countryFolder][routeFolder] = []; + } + + // 将文件的完整路径添加到对应的路线文件夹中 + routes[countryFolder][routeFolder].push(file.fullPath); + log.debug(`找到文件${file.fullPath},在${countryFolder}的${routeFolder}`); + } + + let currentElement = ""; + + if (settings.operationMode != "导航至宝藏地点") { + log.info("开启扫描模式"); + // 遍历 routes 对象 + for (const country in routes) { + // 使用 switch 语句判断是否跳过该国家 + // 获取当前国家的所有路线 + const routesForCountry = routes[country]; + // 检查 result 中是否存在多余的路线,并移除 + if (result[country]) { + const resultRoutes = Object.keys(result[country]); + for (const resultRoute of resultRoutes) { + if (!routesForCountry[resultRoute]) { + // 如果 result 中的路线在 routes 中不存在,则移除该路线 + delete result[country][resultRoute]; + log.warn(`移除路线: ${resultRoute},因为该路线在 routes 中不存在`); + } + } + } + + switch (country) { + case "蒙德": + if (settings.disableMondstadt) { + log.info(`跳过国家: ${country}`); + continue; + } + break; + case "璃月": + if (settings.disableLiyue) { + log.info(`跳过国家: ${country}`); + continue; + } + break; + case "稻妻": + if (settings.disableInazuma) { + log.info(`跳过国家: ${country}`); + continue; + } + break; + case "须弥": + if (settings.disableSumeru) { + log.info(`跳过国家: ${country}`); + continue; + } + break; + case "枫丹": + if (settings.disableFontaine) { + log.info(`跳过国家: ${country}`); + continue; + } + break; + case "纳塔": + if (settings.disableNatlan) { + log.info(`跳过国家: ${country}`); + continue; + } + break; + default: + log.warn(`跳过未知国家: ${country}`); + continue; + } + + log.info(`开始处理 ${country}的路线`); + for (const route in routes[country]) { + // 获取当前路线下的文件数量 + const fileCount = routes[country][route].length; + + // 检查 result 中是否存在该路线 + if (result[country] && result[country][route]) { + const treasureResults = result[country][route]; + const allNotExist = treasureResults.every(item => item === "不存在宝藏"); + + // 如果所有项都是“不存在宝藏”且文件数量与项目数量一致,则跳过该路线 + if (allNotExist && fileCount === treasureResults.length) { + log.info(`跳过路线: ${route},所有点位都已确认不存在宝藏`); + continue; + } + } + + // 如果 result 中不存在该路线,或者项目数量与文件数量不一致 + if (!result[country] || !result[country][route] || fileCount !== result[country][route].length) { + // 在 result 中新增或修改该路线,项目改为文件数量的“未知” + if (!result[country]) { + result[country] = {}; + } + result[country][route] = Array(fileCount).fill("未知"); + } + + log.info(`开始处理路线: ${route}`); + + let targetElement = null; // 初始化 targetElement + + // 检查字符串是否以“主”结尾 + if (route.endsWith("主")) { + // 获取“主”字前的一个字 + targetElement = route[route.length - 2]; // 获取倒数第二个字符 + log.info(`该路线需要${targetElement}系主角`); + if (targetElement != currentElement) { + currentElement = targetElement; + await switchTravelerElement(targetElement); + } + } + + await fakeLog(`${route}.json`, false, true, 0); + let index = 0; // 添加一个计数器 + let xyCheck = false; + for (const pathingPath of routes[country][route]) { + // 判断是否处于限制运行时间 + if (await isTimeRestricted(settings.timeRule)) { + return; + } + log.info(`地图追踪:${pathingPath}`); + await pathingScript.runFile(pathingPath); + try { + await sleep(10); + } catch (error) { + log.error(`终止任务: ${error}`); + return; + } + + // 获取 JSON 文件中的最后一个点位坐标及 description + const jsonINfo = await checkJson(pathingPath); + + // 获取当前在小地图上的位置坐标,确保调用之前在主界面 + const miniMapPosition = await genshin.getPositionFromMap(); + log.info(`当前小地图坐标: X=${miniMapPosition.X}, Y=${miniMapPosition.Y}`); + + // 比较坐标 + const diffX = Math.abs(jsonINfo.lastX - miniMapPosition.X); + const diffY = Math.abs(jsonINfo.lastY - miniMapPosition.Y); + if (diffX + diffY >= 5 && jsonINfo.description !== "终点处小地图无效") { + log.error(`坐标偏差过大,地图追踪可能异常。偏差: X=${diffX}, Y=${diffY}`); + xyCheck = true; + continue; //跳出该路线 + } else { + log.info(`坐标偏差在允许范围内。偏差: X=${diffX}, Y=${diffY}`); + } + + const compassResult = await checkTreasure(); + // 根据 compassResult 更新 result 中对应项的信息 + if (compassResult === "罗盘状态异常,可能在战斗中") { + result[country][route][index] = "未知"; + log.error("出错啦,请检查路线"); + } else if (compassResult === "未发现宝藏或宝藏相关线索") { + result[country][route][index] = "不存在宝藏"; + log.info("这里的宝箱都找齐啦"); + } else if (compassResult === "发现宝藏或宝藏相关线索") { + result[country][route][index] = "存在宝藏"; + log.warn("快看,是野生的宝箱"); + } else { + result[country][route][index] = "未知"; + } + // 更新记录文件 + await writeDataToFile(result, recordFilePath); + index++; // 更新计数器 + } + await fakeLog(`${route}.json`, false, false, 0); + } + } + } else { + log.info("开启导航模式,将带您前往扫描到宝箱的地点,请到达后使用快捷键暂停bgi,找齐后继续运行,前往下一个地点"); + // 遍历 result 对象 + for (const country in result) { + for (const country in result) { + if (Object.keys(result[country]).length === 0) { + log.warn(`国家 ${country} 不包含任何路线,将从 result 中删除`); + delete result[country]; + } + } + //更新记录文件 + await writeDataToFile(result, recordFilePath); + for (const route in result[country]) { + const treasures = result[country][route]; + // 检查 routes 中是否存在对应的国家和路线 + if (!routes[country] || !routes[country][route]) { + log.warn(`路线 ${route}不存在,从 result 中删除`); + delete result[country][route]; // 从 result 中删除对应的路线 + for (const country in result) { + if (Object.keys(result[country]).length === 0) { + log.warn(`国家 ${country} 不包含任何路线,将从 result 中删除`); + delete result[country]; + } + } + //更新记录文件 + await writeDataToFile(result, recordFilePath); + continue; + } + const filesForRoute = routes[country][route]; // 获取该路线下的所有文件路径 + for (let i = 0; i < treasures.length; i++) { + if (treasures[i] === "存在宝藏") { + // 检查字符串是否以“主”结尾 + if (route.endsWith("主")) { + // 获取“主”字前的一个字 + targetElement = route[route.length - 2]; // 获取倒数第二个字符 + log.info(`该路线需要${targetElement}系主角`); + if (targetElement != currentElement) { + currentElement = targetElement; + await switchTravelerElement(targetElement); + } + } + // 遍历前 i + 1 个地图追踪文件 + log.info(`路线${route}第${i + 1}个点位存在宝藏`); + for (let j = 0; j <= i; j++) { + if (j < filesForRoute.length) { + const filePath = filesForRoute[j]; + await pathingScript.runFile(filePath); + try { + await sleep(10); + } catch (error) { + log.error(`终止任务: ${error}`); + return; + } + } else { + log.error("路线数量错误,请检查文件"); + return; + } + } + keyPress("Z"); + result[country][route][i] = "未知"; + await writeDataToFile(result, recordFilePath); + log.info("到啦,野生的宝箱在召唤你,请在10秒内按下快捷键暂停bgi运行,找齐该点位宝箱后继续运行"); + await pathingScript.runFile("assets/waitFor10Seconds.json"); + log.info("已更新记录中对应项目为未知,继续运行"); + } + } + } + } + log.info("所有存在宝藏的位置都处理了") + } + await fakeLog("提瓦特扫描仪", true, false, 2333); +})(); + +/** + * 切换主角元素 + */ +async function switchTravelerElement(element) { + const fullPath = `assets/switchElement/${element}.json`; + //导航至对应的七天神像 + await pathingScript.runFile(fullPath); + //点击与某元素共鸣 + log.info(`旅行者正在汲取${element}元素力`); + for (let i = 0; i < 5; i++) { + await click(1400, 675); + await sleep(500); + } + //传送离开防止影响后续 + await genshin.returnMainUi(); + await genshin.tpToStatueOfTheSeven(); +} + +/** + * 检查罗盘是否处于冷却状态 + * @returns {Promise} + */ +async function isCompassFree(totalAttempts = 3) { + const iconPaths = [ + { path: "assets/icon/Anemo.png", name: "风" }, + { path: "assets/icon/Geo.png", name: "岩" }, + { path: "assets/icon/Electro.png", name: "雷" }, + { path: "assets/icon/Dendro.png", name: "草" }, + { path: "assets/icon/Hydro.png", name: "水" }, + { path: "assets/icon/Pyro.png", name: "火" }, + //{ path: "assets/icon/Cryo.png", name: "冰" } + ]; // 定义寻宝罗盘图标的路径及名称 + + for (let i = 0; i < totalAttempts; i++) { + // 后续每次暂停 100 毫秒 + if (i > 0) { + await sleep(100); + } + + // 遍历所有图标路径 + for (const icon of iconPaths) { + // 使用图像识别方法查找图标 + const iconList = captureGameRegion().findMulti( + RecognitionObject.TemplateMatch(file.ReadImageMatSync(icon.path)) + ); + + // 判断是否找到图标 + if (iconList && iconList.count > 0) { + log.debug(`${icon.name}之寻宝罗盘已刷新`); + return true; // 任意一个图标存在则返回 true + } else { + } + } + } + log.debug(`寻宝罗盘未刷新`); + return false; // 所有图标都不存在则返回 false +} + +/** + * 检查罗盘是否处于冷却状态 + * @returns {Promise} + */ +async function isCompassFree(totalAttempts = 3) { + const iconPaths = [ + { path: "assets/icon/Anemo.png", name: "风" }, + { path: "assets/icon/Geo.png", name: "岩" }, + { path: "assets/icon/Electro.png", name: "雷" }, + { path: "assets/icon/Dendro.png", name: "草" }, + { path: "assets/icon/Hydro.png", name: "水" }, + { path: "assets/icon/Pyro.png", name: "火" }, + //{ path: "assets/icon/Cryo.png", name: "冰" } + ]; // 定义寻宝罗盘图标的路径及名称 + + for (let i = 0; i < totalAttempts; i++) { + // 后续每次暂停 100 毫秒 + if (i > 0) { + await sleep(100); + } + + // 遍历所有图标路径 + for (const icon of iconPaths) { + // 使用图像识别方法查找图标 + const iconList = captureGameRegion().findMulti( + RecognitionObject.TemplateMatch(file.ReadImageMatSync(icon.path)) + ); + + // 判断是否找到图标 + if (iconList && iconList.count > 0) { + log.debug(`${icon.name}之寻宝罗盘已刷新`); + return true; // 任意一个图标存在则返回 true + } else { + } + } + } + log.debug(`寻宝罗盘未刷新`); + return false; // 所有图标都不存在则返回 false +} + +/** + * 检查罗盘是否处于不可用状态 + * @returns {Promise} + */ +async function isCompassLocked(totalAttempts = 3) { + const iconPaths = [ + { path: "assets/icon/Anemo_off.png", name: "风" }, + { path: "assets/icon/Geo_off.png", name: "岩" }, + { path: "assets/icon/Electro_off.png", name: "雷" }, + { path: "assets/icon/Dendro_off.png", name: "草" }, + { path: "assets/icon/Hydro_off.png", name: "水" }, + { path: "assets/icon/Pyro_off.png", name: "火" }, + //{ path: "assets/icon/Cryo_off.png", name: "冰" } + ]; // 定义寻宝罗盘图标的路径及名称 + + for (let i = 0; i < totalAttempts; i++) { + // 后续每次暂停 100 毫秒 + if (i > 0) { + await sleep(100); + } + + // 遍历所有图标路径 + for (const icon of iconPaths) { + // 使用图像识别方法查找图标 + const iconList = captureGameRegion().findMulti( + RecognitionObject.TemplateMatch(file.ReadImageMatSync(icon.path)) + ); + + // 判断是否找到图标 + if (iconList && iconList.count > 0) { + log.debug(`${icon.name}之寻宝罗盘处于锁定状态`); + return true; // 任意一个图标存在则返回 true + } else { + } + } + } + log.debug(`寻宝罗盘不处于锁定状态`); + return false; // 所有图标都不存在则返回 false +} + +/** + * 检查 chest.png 或 flag.png 是否存在 + * @param {number} [totalAttempts=3] - 尝试次数,默认为 3 次 + * @returns {Promise} - 如果 chest.png 或 flag.png 存在,则返回 true,否则返回 false + */ +async function doTreasureExist(totalAttempts = 3) { + const iconPaths = [ + { path: "assets/icon/chest.png", name: "宝箱" }, + { path: "assets/icon/flag.png", name: "旗帜" } + ]; // 定义图标路径及名称 + + for (let i = 0; i < totalAttempts; i++) { + // 后续每次暂停 100 毫秒 + if (i > 0) { + await sleep(100); + } + + // 遍历所有图标路径 + for (const icon of iconPaths) { + // 使用图像识别方法查找图标 + const iconList = captureGameRegion().findMulti( + RecognitionObject.TemplateMatch(file.ReadImageMatSync(icon.path)) + ); + + // 判断是否找到图标 + if (iconList && iconList.count > 0) { + log.debug(`${icon.name}图标存在`); + return true; // 任意一个图标存在则返回 true + } + } + } + + log.debug(`未找到任何图标`); + return false; // 所有图标都不存在则返回 false +} + + +/** + * 检查宝藏状态 + * @returns {Promise} 返回检查结果的描述 + */ +async function checkTreasure() { + let checkTime = 0; + let compassFree = false; + let offCount = 0; + let WaitStartTime = Date.now(); // 记录检查开始时间 + while (checkTime < 31000) { + // 检查罗盘状态 + const startTime = Date.now(); // 记录调用结束时间 + compassFree = await isCompassFree(1); + let compassOff = await isCompassLocked(1); + const endTime = Date.now(); // 记录调用结束时间 + checkTime = endTime - WaitStartTime; // 计算实际调用时间 + + if (compassOff) { + offCount++; //累计失败次数 + } + if (compassFree) { + break; // 如果返回 true,则跳出循环 + } + if (offCount > 2) { + break; + } + //确保每轮循环时间不少于3秒 + await sleep(startTime + 3000 - endTime) + } + + if (!compassFree) { + //31秒后罗盘仍然不处于刷新状态,或三次以上处于锁定状态 + return "罗盘状态异常,可能在战斗中"; + } + + // 按下 Z 键两次 + keyPress("Z"); + await sleep(500); + keyPress("Z"); + await sleep(500); + + checkTime = 0; + let compassOff = false; + offCount = 0; + WaitStartTime = Date.now(); // 记录检查开始时间 + while (checkTime < 10000) { + // 检查罗盘状态 + const startTime = Date.now(); // 记录调用结束时间 + compassFree = await isCompassFree(1); + compassOff = await isCompassLocked(1); + const endTime = Date.now(); // 记录调用结束时间 + checkTime = endTime - WaitStartTime; // 计算实际调用时间 + + if (compassOff) { + offCount++; //累计失败次数 + } + if (compassFree) { + break; // 如果返回 true,则跳出循环 + } + if (offCount > 0) { + break; + } + //确保每轮循环时间不少于3秒 + await sleep(startTime + 3000 - endTime) + } + if (compassFree) { + //罗盘刷新了说明此处没有宝箱 + return "未发现宝藏或宝藏相关线索"; + } else if (checkTime >= 10000) { + //罗盘10秒内都没有刷新,说明此处有宝箱 + return "发现宝藏或宝藏相关线索"; + } else { + //识别到罗盘处于锁定状态 + return "罗盘状态异常,可能在战斗中"; + } +} + +//切换队伍 +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(); + } +} + +// 定义 readFolder 函数 +/* +该函数可以实现输入要处理的文件夹路径后,将其中所有文件/仅json文件按照原顺序存储在一个对象中,具体使用参考主函数 +*/ +async function readFolder(folderPath, onlyJson) { + log.info(`开始读取文件夹:${folderPath}`); + + // 新增一个堆栈,初始时包含 folderPath + const folderStack = [folderPath]; + + // 新增一个数组,用于存储文件信息对象 + const files = []; + + // 当堆栈不为空时,继续处理 + while (folderStack.length > 0) { + // 从堆栈中弹出一个路径 + const currentPath = folderStack.pop(); + + // 读取当前路径下的所有文件和子文件夹路径 + const filesInSubFolder = file.ReadPathSync(currentPath); + + // 临时数组,用于存储子文件夹路径 + const subFolders = []; + for (const filePath of filesInSubFolder) { + if (file.IsFolder(filePath)) { + // 如果是文件夹,先存储到临时数组中 + subFolders.push(filePath); + } else { + // 如果是文件,根据 onlyJson 判断是否存储 + if (onlyJson) { + if (filePath.endsWith(".json")) { + const fileName = filePath.split('\\').pop(); // 提取文件名 + const folderPathArray = filePath.split('\\').slice(0, -1); // 提取文件夹路径数组 + files.push({ + fullPath: filePath, + fileName: fileName, + folderPathArray: folderPathArray + }); + //log.info(`找到 JSON 文件:${filePath}`); + } + } else { + const fileName = filePath.split('\\').pop(); // 提取文件名 + const folderPathArray = filePath.split('\\').slice(0, -1); // 提取文件夹路径数组 + files.push({ + fullPath: filePath, + fileName: fileName, + folderPathArray: folderPathArray + }); + //log.info(`找到文件:${filePath}`); + } + } + } + // 将临时数组中的子文件夹路径按原顺序压入堆栈 + folderStack.push(...subFolders.reverse()); // 反转子文件夹路径 + } + + return files; +} + +/** + * 检查当前时间是否处于限制时间内或即将进入限制时间 + * @param {string} timeRule - 时间规则字符串,格式如 "4, 4-6, 10-12" + * @param {number} [threshold=10] - 接近限制时间的阈值(分钟) + * @returns {Promise} - 如果处于限制时间内或即将进入限制时间,则返回 true,否则返回 false + */ +async function isTimeRestricted(timeRule, threshold = 10) { + // 如果输入的时间规则为 undefined 或空字符串,视为不进行时间处理,返回 false + if (timeRule === undefined || timeRule === "") { + return false; + } + + // 初始化 0-23 小时为可用状态 + const hours = Array(24).fill(false); + + // 解析时间规则 + const rules = timeRule.split(',').map(rule => rule.trim()); + + // 校验输入的字符串是否符合规则 + for (const rule of rules) { + if (rule.includes('-')) { + // 处理时间段,如 "4-6" + const [startHour, endHour] = rule.split('-').map(Number); + if (isNaN(startHour) || isNaN(endHour) || startHour < 0 || startHour >= 24 || endHour <= startHour || endHour > 24) { + // 如果时间段格式不正确或超出范围,则报错并返回 true + log.error("时间填写不符合规则,请检查"); + return true; + } + for (let i = startHour; i < endHour; i++) { + hours[i] = true; // 标记为不可用 + } + } else { + // 处理单个时间点,如 "4" + const hour = Number(rule); + if (isNaN(hour) || hour < 0 || hour >= 24) { + // 如果时间点格式不正确或超出范围,则报错并返回 true + log.error("时间填写不符合规则,请检查"); + return true; + } + hours[hour] = true; // 标记为不可用 + } + } + + // 获取当前时间 + const now = new Date(); + const currentHour = now.getHours(); + const currentMinute = now.getMinutes(); + log.info(`当前小时数为${currentHour},分钟数为${currentMinute}`); + + // 检查当前时间是否处于限制时间内 + if (hours[currentHour]) { + log.warn("处于限制时间内"); + return true; // 当前时间处于限制时间内 + } + + // 检查当前时间是否即将进入限制时间 + for (let i = 0; i < 24; i++) { + if (hours[i]) { + const nextHour = i; + const timeUntilNextHour = (nextHour - currentHour - 1) * 60 + (60 - currentMinute); + if (timeUntilNextHour > 0 && timeUntilNextHour <= threshold) { + // 如果距离下一个限制时间小于等于阈值,则等待到限制时间开始 + log.warn("接近限制时间,开始等待"); + await sleep(timeUntilNextHour * 60 * 1000); + return true; + } + } + } + log.info("不处于限制时间"); + return false; // 当前时间不在限制时间内 +} + + +/** + * 检查账户名是否合法 + * @param {string} accountName - 账户名 + * @returns {boolean} - 如果账户名合法,返回 true;否则返回 false + */ +function isValidAccountName(accountName) { + // Windows文件名非法字符列表 + const illegalCharacters = /[\\/:*?"<>|]/; + // Windows保留设备名称列表 + const reservedNames = [ + "CON", "PRN", "AUX", "NUL", + "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", + "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" + ]; + + // 检查accountName是否为空字符串 + if (accountName === "") { + log.error(`账户名 "${accountName}" 不合法,为空字符串。`); + log.error(`请使用合法的名称`); + return false; + } + // 检查accountName是否以空格开头 + else if (accountName.startsWith(" ")) { + log.error(`账户名 "${accountName}" 不合法,以空格开头。`); + log.error(`请使用合法的名称`); + return false; + } + // 检查accountName是否以空格结尾 + else if (accountName.endsWith(" ")) { + log.error(`账户名 "${accountName}" 不合法,以空格结尾。`); + log.error(`请使用合法的名称`); + return false; + } + // 检查accountName是否包含非法字符 + else if (illegalCharacters.test(accountName)) { + log.error(`账户名 "${accountName}" 不合法,包含非法字符。`); + log.error(`请使用合法的名称`); + return false; + } + // 检查accountName是否是保留设备名称 + else if (reservedNames.includes(accountName.toUpperCase())) { + log.error(`账户名 "${accountName}" 不合法,是保留设备名称。`); + log.error(`请使用合法的名称`); + return false; + } + // 检查accountName长度是否超过255字符 + else if (accountName.length > 255) { + log.error(`账户名 "${accountName}" 不合法,账户名过长。`); + log.error(`请使用合法的名称`); + return false; + } + else { + log.info(`账户名 "${accountName}" 合法。`); + return true; + } +} + +/** + * 将对象内容写入文件 + * @param {Object} data - 要写入的对象 + * @returns {Promise} + */ +async function writeDataToFile(data, recordFilePath) { + // 初始化内容字符串 + let content = ""; + + // 遍历对象,将内容逐行转化为文字 + for (const country in data) { + content += `${country}:\n`; + for (const route in data[country]) { + // 每条路线的最后一项之后没有逗号 + const treasures = data[country][route].join(',').replace(/,$/, ''); + content += `-${route}:${treasures}\n`; + } + } + + // 异步写入文件 + await file.writeText(recordFilePath, content); +} + +// 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.debug(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.debug(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.debug(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.debug(logMessage); + } +} + +/** + * 检查指定文件是否存在 + * @param {string} filePath - 文件的完整路径 + * @returns {boolean} - 如果文件存在,返回 true;否则返回 false + */ +function doFileExist(filePath) { + // 提取文件夹路径和文件名 + const folderPath = filePath.substring(0, filePath.lastIndexOf('/') + 1); // 获取文件夹路径 + log.info(`目标文件夹路径:${folderPath}`) + const fileName = filePath.substring(filePath.lastIndexOf('/') + 1); // 获取文件名 + log.info(`目标文件名:${fileName}`) + // 读取子文件夹中的所有文件路径 + const filesInSubFolder = file.ReadPathSync(folderPath); + + // 检查指定文件是否存在 + for (const currentFilePath of filesInSubFolder) { + const currentFileName = currentFilePath.substring(currentFilePath.lastIndexOf('\\') + 1); // 提取文件名 + if (currentFileName === fileName) { + return true; // 文件存在 + } + } + + return false; // 文件不存在 +} + +/** + * 读取并解析 JSON 文件 + * @param {string} filePath - JSON 文件路径 + * @returns {Promise} - 包含最后一个点位的 x 和 y 坐标,以及 description 字段 + */ +async function checkJson(filePath) { + try { + // 使用 file.readText() 读取文件内容 + const content = await file.readText(filePath); + + // 解析 JSON 数据 + const parsedData = JSON.parse(content); + + // 获取最后一个点位的 x 和 y 坐标 + const lastPosition = parsedData.positions[parsedData.positions.length - 1]; + const lastX = lastPosition.x; + const lastY = lastPosition.y; + + // 获取 description 字段 + const description = parsedData.info.description; + + // 返回结果对象 + return { + lastX: lastX, + lastY: lastY, + description: description + }; + } catch (error) { + log.error('读取或解析文件时发生错误:', error); + } +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/manifest.json b/repo/js/TeyvatScanner/manifest.json new file mode 100644 index 00000000..f39d5e00 --- /dev/null +++ b/repo/js/TeyvatScanner/manifest.json @@ -0,0 +1,16 @@ +{ + "manifest_version": 1, + "name": "提瓦特扫描仪", + "version": "0.1", + "tags": ["宝箱"], + "bgi_version": "0.46.0", + "description": "通过使用寻宝罗盘,判断指定区域是否存在宝藏并进行记录,同时根据记录,将用户导航至找到宝藏的地点,建议配合“罗盘找不到的宝箱"视频食用”, + "authors": [ + { + "name": "mno", + } + ], + "settings_ui": "settings.json", + "main": "main.js" + } + \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A01-石门.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A01-石门.json new file mode 100644 index 00000000..6576ba2a --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A01-石门.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A01-石门", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750868891854 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 207.50390625, + "y": 1573.005859375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A02-山脊守望.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A02-山脊守望.json new file mode 100644 index 00000000..e8a0b1dd --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A02-山脊守望.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A02-山脊守望", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750868945661 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": -321.5966796875, + "y": 1473.2958984375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A03-荻花洲.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A03-荻花洲.json new file mode 100644 index 00000000..793ea36e --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A03-荻花洲.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A03-荻花洲", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869062853 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 253.16015625, + "y": 1285.13330078125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A04-望舒客栈.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A04-望舒客栈.json new file mode 100644 index 00000000..dff06470 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A04-望舒客栈.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A04-望舒客栈", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869119464 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 328.912109375, + "y": 873.61376953125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A05-地中之盐.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A05-地中之盐.json new file mode 100644 index 00000000..95435144 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A05-地中之盐.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A05-地中之盐", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869193482 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": -164.52734375, + "y": 1182.53564453125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A06-无妄坡下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A06-无妄坡下.json new file mode 100644 index 00000000..62a896e2 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A06-无妄坡下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A06-无妄坡下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869248194 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 489.744140625, + "y": 1435.1298828125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A07-无妄引咎密宫.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A07-无妄引咎密宫.json new file mode 100644 index 00000000..7780dd7a --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A07-无妄引咎密宫.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A07-无妄引咎密宫", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869322027 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 385.9150390625, + "y": 1688.5625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A08- 轻策庄.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A08- 轻策庄.json new file mode 100644 index 00000000..b1efbae6 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A08- 轻策庄.json @@ -0,0 +1,43 @@ +{ + "info": { + "name": "璃月-A08- 轻策庄", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869497977 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 844.169921875, + "y": 1535.88427734375, + "action_params": "" + }, + { + "id": 2, + "x": 840.05859375, + "y": 1532.77685546875, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "wait(3)", + "locked": false + }, + { + "id": 3, + "x": 840.05859375, + "y": 1532.77685546875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A09-轻策庄右.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A09-轻策庄右.json new file mode 100644 index 00000000..98622ddf --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A01-09/璃月-A09-轻策庄右.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A09-轻策庄右", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869562344 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 547.6865234375, + "y": 1766.771484375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A10-轻策庄左.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A10-轻策庄左.json new file mode 100644 index 00000000..2b00ae6e --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A10-轻策庄左.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A10-轻策庄左", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869694709 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 801.5908203125, + "y": 1796.07177734375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A11-药蝶谷右.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A11-药蝶谷右.json new file mode 100644 index 00000000..1fd898d6 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A11-药蝶谷右.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A11-药蝶谷右", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869768103 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 1271.138671875, + "y": 1564.01025390625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A12-奥藏山右.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A12-奥藏山右.json new file mode 100644 index 00000000..a634ea10 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A12-奥藏山右.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A12-奥藏山右", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869821658 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1121.017578125, + "y": 1190.359375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A13-华池岩岫.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A13-华池岩岫.json new file mode 100644 index 00000000..684e2ed6 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A13-华池岩岫.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A13-华池岩岫", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750869939777 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1436.3330078125, + "y": 1289.9130859375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A14-奥藏山下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A14-奥藏山下.json new file mode 100644 index 00000000..419e1ca9 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A14-奥藏山下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A14-奥藏山下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750870022825 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1604.4619140625, + "y": 1039.6787109375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A15-庆云顶神像.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A15-庆云顶神像.json new file mode 100644 index 00000000..90cdca10 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A15-庆云顶神像.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A15-庆云顶神像", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750870080508 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1474.59375, + "y": 763.6416015625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A16-庆云顶锚点.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A16-庆云顶锚点.json new file mode 100644 index 00000000..22f82b28 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A16-庆云顶锚点.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A16-庆云顶锚点", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873437527 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1433.3994140625, + "y": 837.1103515625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A17-琥牢山.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A17-琥牢山.json new file mode 100644 index 00000000..0dd3724c --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A17-琥牢山.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A17-琥牢山", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873493676 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1794.2255859375, + "y": 717.45947265625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A18-南天门山顶.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A18-南天门山顶.json new file mode 100644 index 00000000..3e0096be --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A18-南天门山顶.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A18-南天门山顶", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873555580 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1389.029296875, + "y": 516.47998046875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A19-南天门.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A19-南天门.json new file mode 100644 index 00000000..144e5e8a --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A11-19/璃月-A19-南天门.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A19-南天门", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873591382 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1665.8896484375, + "y": 386.5791015625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A20-天遒谷.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A20-天遒谷.json new file mode 100644 index 00000000..092603a1 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A20-天遒谷.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A20-天遒谷", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873650178 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1153.36328125, + "y": 139.78466796875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A21-奥藏山右下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A21-奥藏山右下.json new file mode 100644 index 00000000..9c4a2ccd --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A21-奥藏山右下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A21-奥藏山右下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873705648 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1451.505859375, + "y": 1028.58349609375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A22-绝云间右上.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A22-绝云间右上.json new file mode 100644 index 00000000..8e7f44e2 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A22-绝云间右上.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A22-绝云间右上", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873758370 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 1045.5341796875, + "y": 950.5810546875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A23-荻花洲左.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A23-荻花洲左.json new file mode 100644 index 00000000..ed27ef24 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A23-荻花洲左.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A23-荻花洲左", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873803098 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 730.36328125, + "y": 1062.19580078125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A24-绝云间下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A24-绝云间下.json new file mode 100644 index 00000000..1da621fe --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A24-绝云间下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A24-绝云间下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873847026 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 1182.7060546875, + "y": 626.07177734375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A25-翠珏坡左上.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A25-翠珏坡左上.json new file mode 100644 index 00000000..9cfee5b8 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A25-翠珏坡左上.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A25-翠珏坡左上", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873931036 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 897.8369140625, + "y": 583.482421875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A26-翠珏坡下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A26-翠珏坡下.json new file mode 100644 index 00000000..d9a476fb --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A26-翠珏坡下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A26-翠珏坡下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750873976305 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 837.4560546875, + "y": 235.1640625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A27-禄华池右.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A27-禄华池右.json new file mode 100644 index 00000000..978870f1 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A27-禄华池右.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A27-禄华池右", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874024139 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 489.4306640625, + "y": 222.1767578125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A28-明蕴镇上.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A28-明蕴镇上.json new file mode 100644 index 00000000..7b042593 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A28-明蕴镇上.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A28-明蕴镇上", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874091402 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -188.544921875, + "y": 972.51220703125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A29-明蕴镇神像.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A29-明蕴镇神像.json new file mode 100644 index 00000000..1c998675 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A21-29/璃月-A29-明蕴镇神像.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "璃月-A29-明蕴镇神像", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874254592 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -255.0458984375, + "y": 630.11279296875, + "action_params": "" + }, + { + "id": 2, + "x": -256.5458984375, + "y": 622.85205078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -261.6103515625, + "y": 618.7109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -263.1142578125, + "y": 611.904296875, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A30-震雷连山密宫.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A30-震雷连山密宫.json new file mode 100644 index 00000000..393634c3 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A30-震雷连山密宫.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A30-震雷连山密宫", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874306953 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -416.125, + "y": 729.04833984375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A31-瑶光滩右.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A31-瑶光滩右.json new file mode 100644 index 00000000..884d3e43 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A31-瑶光滩右.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A31-瑶光滩右", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874343785 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -473.9794921875, + "y": 441.60693359375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A32-瑶光滩左上.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A32-瑶光滩左上.json new file mode 100644 index 00000000..0ac155bc --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A32-瑶光滩左上.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A32-瑶光滩左上", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874385072 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -57.447265625, + "y": 656.94384765625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A33-归离原.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A33-归离原.json new file mode 100644 index 00000000..7d31079f --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A33-归离原.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A33-归离原", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874419927 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 341.3388671875, + "y": 548.09619140625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A34-墟散人离之处.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A34-墟散人离之处.json new file mode 100644 index 00000000..c8e9a3e8 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A34-墟散人离之处.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A34-墟散人离之处", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874474154 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 173.9384765625, + "y": 389.595703125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A35-云来海.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A35-云来海.json new file mode 100644 index 00000000..24ea3189 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A35-云来海.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A35-云来海", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874515725 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 54.3046875, + "y": 139.3203125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A36-云来海下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A36-云来海下.json new file mode 100644 index 00000000..0700614a --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A36-云来海下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A36-云来海下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874567649 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 25.9521484375, + "y": -112.228515625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A37-孤云阁.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A37-孤云阁.json new file mode 100644 index 00000000..2f1139b8 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A37-孤云阁.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A37-孤云阁", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "终点处小地图无效", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874685844 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": -657.2549999999992, + "y": -91.21900000000005, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A38-孤云凌霄之处.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A38-孤云凌霄之处.json new file mode 100644 index 00000000..a86c4a75 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A38-孤云凌霄之处.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A38-孤云凌霄之处", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750876063789 + }, + "positions": [ + { + "id": 1, + "x": -963.3369140625, + "y": -288.96044921875, + "action": "force_tp", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A39-死兆星.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A39-死兆星.json new file mode 100644 index 00000000..da7776aa --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A31-39/璃月-A39-死兆星.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A39-死兆星", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "终点处小地图无效", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874806999 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": -1146.4089999999997, + "y": -390.5169999999998, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A40-璃月港上.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A40-璃月港上.json new file mode 100644 index 00000000..f466bb24 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A40-璃月港上.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A40-璃月港上", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874861525 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 295.5751953125, + "y": -247.27783203125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A41-璃月港左.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A41-璃月港左.json new file mode 100644 index 00000000..9ac1dc85 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A41-璃月港左.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A41-璃月港左", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874896041 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 366.7841796875, + "y": -502.52587890625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A42-璃月港下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A42-璃月港下.json new file mode 100644 index 00000000..a95eeeda --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A42-璃月港下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A42-璃月港下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750874972774 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 267.9326171875, + "y": -665.150390625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A43-云来海神像.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A43-云来海神像.json new file mode 100644 index 00000000..d12e32ff --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A43-云来海神像.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A43-云来海神像", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875011030 + }, + "positions": [ + { + "id": 1, + "x": 259.4921875, + "y": -13.921875, + "type": "teleport", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A44-天衡山上.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A44-天衡山上.json new file mode 100644 index 00000000..30d55261 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A44-天衡山上.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A44-天衡山上", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875050777 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 611.7138671875, + "y": -284.662109375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A45-天衡山下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A45-天衡山下.json new file mode 100644 index 00000000..0e24f335 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A45-天衡山下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A45-天衡山下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875085879 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 508.0029296875, + "y": -630.46044921875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A46-黄金屋.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A46-黄金屋.json new file mode 100644 index 00000000..8f76d7d5 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A46-黄金屋.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A46-黄金屋", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875147196 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 254.4716796875, + "y": -904.6240234375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A47-群玉阁左.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A47-群玉阁左.json new file mode 100644 index 00000000..fbf173d1 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A47-群玉阁左.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A47-群玉阁左", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875196060 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 710.7626953125, + "y": -772.42919921875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A48-天衡山左.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A48-天衡山左.json new file mode 100644 index 00000000..b65646ad --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A48-天衡山左.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A48-天衡山左", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875229611 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 828.234375, + "y": -583.36279296875, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A49-青墟浦.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A49-青墟浦.json new file mode 100644 index 00000000..3f8a384a --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A41-49/璃月-A49-青墟浦.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A49-青墟浦", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875274823 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 1128.4697265625, + "y": -984.302734375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A50-灵矩关.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A50-灵矩关.json new file mode 100644 index 00000000..3eb63def --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A50-灵矩关.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A50-灵矩关", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875320276 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 1043.1611328125, + "y": -558.03662109375, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A51-遁玉陵神像.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A51-遁玉陵神像.json new file mode 100644 index 00000000..dc7b8083 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A51-遁玉陵神像.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A51-遁玉陵神像", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875361154 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 978.72265625, + "y": -353.5400390625, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A52-天遒谷下.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A52-天遒谷下.json new file mode 100644 index 00000000..b795ba82 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-A51-59/璃月-A52-天遒谷下.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "璃月-A52-天遒谷下", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750875403123 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 1268.4873046875, + "y": -64.1298828125, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B001.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B001.json new file mode 100644 index 00000000..687f82f6 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B001.json @@ -0,0 +1,97 @@ +{ + "info": { + "name": "璃月-B01", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751298878387 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 207.4755859375, + "y": 1573.0087890625, + "action_params": "" + }, + { + "id": 2, + "x": 195.421875, + "y": 1563.53564453125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 191.7216796875, + "y": 1560.53564453125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 188.88671875, + "y": 1558.38671875, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w),wait(1); 荧 attack,keypress(e);空 attack,keypress(e);", + "locked": false + }, + { + "id": 5, + "x": 188.88671875, + "y": 1558.38671875, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "wait(3),keypress(space),wait(0.1),keypress(space),wait(4)" + }, + { + "id": 6, + "x": 151.0537109375, + "y": 1527.0341796875, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 7, + "x": 139.6162109375, + "y": 1531.6689453125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": 117.0078125, + "y": 1501.20947265625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": 112.42578125, + "y": 1490.9873046875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B002.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B002.json new file mode 100644 index 00000000..1b5a35f5 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B002.json @@ -0,0 +1,89 @@ +{ + "info": { + "name": "璃月-B02", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751299446093 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": 111.3095703125, + "y": 1490.693359375, + "action_params": "" + }, + { + "id": 2, + "x": 89.244140625, + "y": 1490.42431640625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 49.373046875, + "y": 1531.79052734375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 25.1806640625, + "y": 1518.95361328125, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "", + "locked": false + }, + { + "id": 5, + "x": 25.1806640625, + "y": 1518.95361328125, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 6, + "x": 21.892578125, + "y": 1544.38623046875, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "", + "locked": false + }, + { + "id": 7, + "x": 21.892578125, + "y": 1544.38623046875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": 13.619140625, + "y": 1549.82861328125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B003.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B003.json new file mode 100644 index 00000000..de071a65 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B003.json @@ -0,0 +1,142 @@ +{ + "info": { + "name": "璃月-B03", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751383709464 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": 14.048828125, + "y": 1549.4560546875, + "action_params": "" + }, + { + "id": 2, + "x": 20.6435546875, + "y": 1566.98876953125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 31.984375, + "y": 1568.3515625, + "type": "path", + "move_mode": "jump", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 55.4873046875, + "y": 1560.61572265625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": 67.599609375, + "y": 1558.7861328125, + "type": "path", + "move_mode": "jump", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": 57.689453125, + "y": 1595.3974609375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": 19.2314453125, + "y": 1584.916015625, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "", + "locked": false + }, + { + "id": 8, + "x": 19.2314453125, + "y": 1584.916015625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": 11.4853515625, + "y": 1577.89306640625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": 6.123046875, + "y": 1577.4052734375, + "type": "path", + "move_mode": "jump", + "action": "", + "action_params": "" + }, + { + "id": 11, + "x": -18.3583984375, + "y": 1554.607421875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 12, + "x": -28.220703125, + "y": 1540.9775390625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 13, + "x": -47.6142578125, + "y": 1543.83251953125, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 14, + "x": -50.0634765625, + "y": 1540.375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B004.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B004.json new file mode 100644 index 00000000..40c02dee --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B004.json @@ -0,0 +1,69 @@ +{ + "info": { + "name": "璃月-B04", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751384068633 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -47.87109375, + "y": 1547.7080078125, + "action_params": "" + }, + { + "id": 2, + "x": -51.23046875, + "y": 1572.4921875, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -55.9033203125, + "y": 1600.00537109375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -56.4287109375, + "y": 1605.625, + "type": "path", + "move_mode": "jump", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -84.943359375, + "y": 1675.17236328125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -86.3994140625, + "y": 1680.35791015625, + "type": "target", + "move_mode": "jump", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B005.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B005.json new file mode 100644 index 00000000..67b2e77d --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B005.json @@ -0,0 +1,78 @@ +{ + "info": { + "name": "璃月-B05", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751384273398 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -86.556640625, + "y": 1680.87939453125, + "action_params": "" + }, + { + "id": 2, + "x": -69.73046875, + "y": 1675.19140625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -65.416015625, + "y": 1673.7080078125, + "type": "path", + "move_mode": "jump", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -15.2822265625, + "y": 1628.28271484375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": 0.791015625, + "y": 1639.802734375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": 31.4951171875, + "y": 1645.15966796875, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 7, + "x": 43.48046875, + "y": 1672.12890625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B006.json b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B006.json new file mode 100644 index 00000000..97812073 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/璃月/璃月-B001-006-岩主/璃月-B006.json @@ -0,0 +1,79 @@ +{ + "info": { + "name": "璃月-B06", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751385409463 + }, + "positions": [ + { + "id": 1, + "x": 41.6279296875, + "y": 1671.39501953125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": 46.3583984375, + "y": 1711.91650390625, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 3, + "x": 55.7138671875, + "y": 1737.76123046875, + "type": "path", + "move_mode": "dash", + "action": "fight", + "action_params": "", + "locked": false + }, + { + "id": 4, + "x": 55.7138671875, + "y": 1737.76123046875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": 78.0205078125, + "y": 1718.51611328125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": 98.1103515625, + "y": 1713.17578125, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 7, + "x": 78.58984375, + "y": 1714.111328125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线01/纳塔-安饶之野-路线01-1.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线01/纳塔-安饶之野-路线01-1.json new file mode 100644 index 00000000..ee07f104 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线01/纳塔-安饶之野-路线01-1.json @@ -0,0 +1,69 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线01-1", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838384112 + }, + "positions": [ + { + "id": 1, + "x": 9282.5751953125, + "y": -2163.6015625, + "action": "force_tp", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 9261.953125, + "y": -2197.5283203125, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 9248.12890625, + "y": -2236.96484375, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 9288.189453125, + "y": -2261.119140625, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": 9311.0634765625, + "y": -2252.6416015625, + "action": "fight", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": 9311.0634765625, + "y": -2252.6416015625, + "action": "combat_script", + "move_mode": "dash", + "action_params": "wait(1)", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线02/纳塔-安饶之野-路线02-2.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线02/纳塔-安饶之野-路线02-2.json new file mode 100644 index 00000000..f15c1d97 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线02/纳塔-安饶之野-路线02-2.json @@ -0,0 +1,78 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线02-2", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838408428 + }, + "positions": [ + { + "id": 1, + "x": 9522.37890625, + "y": -2216.0185546875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 9568.5, + "y": -2218.376953125, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 9628, + "y": -2225.4306640625, + "action": "fight", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 9628, + "y": -2225.4306640625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": 9635.365234375, + "y": -2245.7021484375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 6, + "x": 9642.2734375, + "y": -2249.501953125, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": 9642.2734375, + "y": -2249.501953125, + "action": "combat_script", + "move_mode": "walk", + "action_params": "wait(1)", + "type": "orientation" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-3.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-3.json new file mode 100644 index 00000000..3eeb8470 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-3.json @@ -0,0 +1,78 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线03-3", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838397938 + }, + "positions": [ + { + "id": 1, + "x": 9713.416015625, + "y": -2420.5322265625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 9721.6083984375, + "y": -2476.18359375, + "action": "fight", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 9721.6083984375, + "y": -2476.18359375, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 9737.748046875, + "y": -2491.02734375, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": 9729.376953125, + "y": -2505.8134765625, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": 9718.61328125, + "y": -2508.654296875, + "action": "fight", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": 9718.61328125, + "y": -2508.654296875, + "action": "combat_script", + "move_mode": "dash", + "action_params": "wait(1)", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-4.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-4.json new file mode 100644 index 00000000..ffe8ba0f --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线03/纳塔-安饶之野-路线03-4.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线03-4", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838423003 + }, + "positions": [ + { + "id": 1, + "x": 9719.0869140625, + "y": -2508.744140625, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": 9750.43359375, + "y": -2508.611328125, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 9808.4755859375, + "y": -2510.8359375, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 9831.3037109375, + "y": -2505.9853515625, + "action": "combat_script", + "move_mode": "dash", + "action_params": "wait(1)", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线04/纳塔-安饶之野-路线04-5.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线04/纳塔-安饶之野-路线04-5.json new file mode 100644 index 00000000..bea5ab2c --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线04/纳塔-安饶之野-路线04-5.json @@ -0,0 +1,96 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线04-5", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838432593 + }, + "positions": [ + { + "id": 1, + "x": 9795.7568359375, + "y": -2665.5986328125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 9751.83203125, + "y": -2697.76953125, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 9745.4794921875, + "y": -2707.5126953125, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 9724.880859375, + "y": -2716.2294921875, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": 9685.8837890625, + "y": -2715.498046875, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": 9660.9306640625, + "y": -2708.6923828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": 9647.953125, + "y": -2705.0068359375, + "action": "", + "move_mode": "jump", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": 9649.1201171875, + "y": -2674.4248046875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 9, + "x": 9646.3056640625, + "y": -2674.7177734375, + "action": "combat_script", + "move_mode": "walk", + "action_params": "wait(1)", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线05/纳塔-安饶之野-路线05-6.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线05/纳塔-安饶之野-路线05-6.json new file mode 100644 index 00000000..9ccde3f0 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线05/纳塔-安饶之野-路线05-6.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线05-6", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "终点处小地图无效", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838442062 + }, + "positions": [ + { + "id": 1, + "x": 9643.806, + "y": -2805.074, + "action": "force_tp", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线06/纳塔-安饶之野-路线06-7.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线06/纳塔-安饶之野-路线06-7.json new file mode 100644 index 00000000..9e8ba6f8 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线06/纳塔-安饶之野-路线06-7.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线06-7", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838454232 + }, + "positions": [ + { + "id": 1, + "x": 9812.71875, + "y": -2852.5966796875, + "action": "force_tp", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 9812.71875, + "y": -2852.5966796875, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "orientation" + }, + { + "id": 3, + "x": 9812.71875, + "y": -2852.5966796875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 9847.203125, + "y": -2860.099609375, + "action": "combat_script", + "move_mode": "dash", + "action_params": "wait(1)", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线07/纳塔-安饶之野-路线07-8.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线07/纳塔-安饶之野-路线07-8.json new file mode 100644 index 00000000..0c94e838 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线07/纳塔-安饶之野-路线07-8.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线07-8", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838463348 + }, + "positions": [ + { + "id": 1, + "x": 9923.705078125, + "y": -3277.525390625, + "action": "force_tp", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线08/纳塔-安饶之野-路线08-9.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线08/纳塔-安饶之野-路线08-9.json new file mode 100644 index 00000000..38584dd0 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线08/纳塔-安饶之野-路线08-9.json @@ -0,0 +1,87 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线08-9", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838472208 + }, + "positions": [ + { + "id": 1, + "x": 10025.986328125, + "y": -2615.8779296875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 10088.765625, + "y": -2648.166015625, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 10098.1396484375, + "y": -2663.869140625, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 10116.470703125, + "y": -2683.208984375, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": 10149.9208984375, + "y": -2699.8564453125, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": 10165.25, + "y": -2684.9326171875, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": 10175.283203125, + "y": -2684.984375, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "target" + }, + { + "id": 8, + "x": 10173.279296875, + "y": -2688.33203125, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线09/纳塔-安饶之野-路线09-10.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线09/纳塔-安饶之野-路线09-10.json new file mode 100644 index 00000000..523cbd40 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线09/纳塔-安饶之野-路线09-10.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线09-10", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838483008 + }, + "positions": [ + { + "id": 1, + "x": 10260.708984375, + "y": -2538.646484375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 10257.94140625, + "y": -2526.189453125, + "action": "", + "move_mode": "run", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 10249.7822265625, + "y": -2477.9423828125, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": 10249.7822265625, + "y": -2477.9423828125, + "action": "combat_script", + "move_mode": "walk", + "action_params": "wait(1)", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线10/纳塔-安饶之野-路线10-11.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线10/纳塔-安饶之野-路线10-11.json new file mode 100644 index 00000000..2415bcfb --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线10/纳塔-安饶之野-路线10-11.json @@ -0,0 +1,42 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线10-11", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838322920 + }, + "positions": [ + { + "id": 1, + "x": 10595.28515625, + "y": -2654.416015625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 10584.04296875, + "y": -2667.5771484375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": 10586.75390625, + "y": -2668.8828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线11/纳塔-安饶之野-路线11-12.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线11/纳塔-安饶之野-路线11-12.json new file mode 100644 index 00000000..45123059 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线11/纳塔-安饶之野-路线11-12.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线11-12", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750838277639 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10925.71875, + "y": -2363.615234375, + "action_params": "" + }, + { + "id": 2, + "x": 10930.36328125, + "y": -2365.5986328125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线12/纳塔-安饶之野-路线12-13.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线12/纳塔-安饶之野-路线12-13.json new file mode 100644 index 00000000..e03b8ba7 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线12/纳塔-安饶之野-路线12-13.json @@ -0,0 +1,61 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线12-13", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750839061292 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10931.4912109375, + "y": -2366.181640625, + "action_params": "" + }, + { + "id": 2, + "x": 10889.5625, + "y": -2369.1748046875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 10842.41015625, + "y": -2364.634765625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 10821.03125, + "y": -2351.404296875, + "type": "path", + "move_mode": "dash", + "action": "fight", + "action_params": "", + "locked": false + }, + { + "id": 5, + "x": 10821.03125, + "y": -2351.404296875, + "type": "target", + "move_mode": "dash", + "action": "combat_script", + "action_params": "wait(1)" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线13/纳塔-安饶之野-路线13-14.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线13/纳塔-安饶之野-路线13-14.json new file mode 100644 index 00000000..1e8566ec --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线13/纳塔-安饶之野-路线13-14.json @@ -0,0 +1,42 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线13-14", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750839182092 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10595.3359375, + "y": -2654.41796875, + "action_params": "" + }, + { + "id": 2, + "x": 10630.1796875, + "y": -2674.85546875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 10652.982421875, + "y": -2670.3134765625, + "type": "target", + "move_mode": "dash", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线14/纳塔-安饶之野-路线14-15.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线14/纳塔-安饶之野-路线14-15.json new file mode 100644 index 00000000..88d3fcd4 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线14/纳塔-安饶之野-路线14-15.json @@ -0,0 +1,61 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线14-15", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750839410252 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10794.7314453125, + "y": -3069.646484375, + "action_params": "" + }, + { + "id": 2, + "x": 10814.40234375, + "y": -3052.806640625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 10825.357421875, + "y": -3021.28125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 10856.3291015625, + "y": -2977.8701171875, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "", + "locked": false + }, + { + "id": 5, + "x": 10856.3291015625, + "y": -2977.8701171875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线15/纳塔-安饶之野-路线15-16.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线15/纳塔-安饶之野-路线15-16.json new file mode 100644 index 00000000..e0e28fb6 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线15/纳塔-安饶之野-路线15-16.json @@ -0,0 +1,97 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线15-16", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750840114987 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10794.658203125, + "y": -3069.640625, + "action_params": "" + }, + { + "id": 2, + "x": 10819.46875, + "y": -3102.8291015625, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 3, + "x": 10827.609375, + "y": -3114.966796875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 10851.60546875, + "y": -3151.5654296875, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 5, + "x": 10887.3837890625, + "y": -3224.0732421875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": 10897.701171875, + "y": -3265.5341796875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": 10928.34765625, + "y": -3290.66796875, + "type": "path", + "move_mode": "dash", + "action": "fight", + "action_params": "" + }, + { + "id": 8, + "x": 10939.634765625, + "y": -3294.998046875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": 10948.90625, + "y": -3258.2421875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "", + "locked": false + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线16/纳塔-安饶之野-路线16-17.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线16/纳塔-安饶之野-路线16-17.json new file mode 100644 index 00000000..7c3f2b91 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线16/纳塔-安饶之野-路线16-17.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线16-17", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750840318726 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10548.1015625, + "y": -3373.0888671875, + "action_params": "" + }, + { + "id": 2, + "x": 10600.4453125, + "y": -3361.03515625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 10627.861328125, + "y": -3380.3251953125, + "type": "path", + "move_mode": "dash", + "action": "fight", + "action_params": "" + }, + { + "id": 4, + "x": 10619.3203125, + "y": -3373.1708984375, + "type": "target", + "move_mode": "dash", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线17/纳塔-安饶之野-路线17-18.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线17/纳塔-安饶之野-路线17-18.json new file mode 100644 index 00000000..ef16651a --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线17/纳塔-安饶之野-路线17-18.json @@ -0,0 +1,106 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线17-18", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750840643599 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10363.783203125, + "y": -3315.8828125, + "action_params": "" + }, + { + "id": 2, + "x": 10409.455078125, + "y": -3299.724609375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 10397.8291015625, + "y": -3290.2626953125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 10409.2578125, + "y": -3275.28515625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": 10455.6455078125, + "y": -3265.5888671875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": 10463.12890625, + "y": -3269.6083984375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": 10467.06640625, + "y": -3286.5673828125, + "type": "path", + "move_mode": "dash", + "action": "fight", + "action_params": "", + "locked": false + }, + { + "id": 8, + "x": 10467.06640625, + "y": -3286.5673828125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": 10471.9033203125, + "y": -3292.2744140625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": 10484.4375, + "y": -3265.46484375, + "type": "target", + "move_mode": "dash", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线18/纳塔-安饶之野-路线18-19.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线18/纳塔-安饶之野-路线18-19.json new file mode 100644 index 00000000..87800525 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线18/纳塔-安饶之野-路线18-19.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线18-19", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "终点处小地图无效", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750841209901 + }, + "positions": [ + { + "id": 1, + "x": 10184.7265625, + "y": -3017.64453125, + "type": "teleport", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": 10204.8076171875, + "y": -3003.544921875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 10208.6904296875, + "y": -2984.5947265625, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 10207.80796875, + "y": -2981.384765625, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "w(4.5)" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线19/纳塔-安饶之野-路线19-20.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线19/纳塔-安饶之野-路线19-20.json new file mode 100644 index 00000000..cae22849 --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线19/纳塔-安饶之野-路线19-20.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线19-20", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750841321680 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 10263.8271484375, + "y": -2711.673828125, + "action_params": "" + }, + { + "id": 2, + "x": 10256.30859375, + "y": -2717.0615234375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 10251.3232421875, + "y": -2737.1259765625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 10237.9521484375, + "y": -2759.3583984375, + "type": "target", + "move_mode": "dash", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线20/纳塔-安饶之野-路线20-21.json b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线20/纳塔-安饶之野-路线20-21.json new file mode 100644 index 00000000..2245a05a --- /dev/null +++ b/repo/js/TeyvatScanner/pathing/纳塔/纳塔-安饶之野-路线20/纳塔-安饶之野-路线20-21.json @@ -0,0 +1,24 @@ +{ + "info": { + "name": "纳塔-安饶之野-路线20-21", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "终点处小地图无效", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750841518273 + }, + "positions": [ + { + "id": 1, + "action": "force_tp", + "move_mode": "walk", + "type": "teleport", + "x": 10570.958, + "y": -3133.4969999999994, + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/TeyvatScanner/records/占位.json b/repo/js/TeyvatScanner/records/占位.json new file mode 100644 index 00000000..e69de29b diff --git a/repo/js/TeyvatScanner/settings.json b/repo/js/TeyvatScanner/settings.json new file mode 100644 index 00000000..4bb5da33 --- /dev/null +++ b/repo/js/TeyvatScanner/settings.json @@ -0,0 +1,58 @@ +[ + { + "name": "operationMode", + "type": "select", + "label": "操作模式", + "options": [ + "寻找宝藏位置并记录", + "导航至宝藏地点" + ], + "default": "寻找宝藏位置并记录" + }, + { + "name": "partyName", + "type": "input-text", + "label": "运行使用的队伍名称,最好有战斗能力" + }, + { + "name": "accountName", + "type": "input-text", + "label": "账户名称,用于多用户运行时区分不同账户\n单用户时无需修改", + "default": "默认账户" + }, + { + "name": "timeRule", + "type": "input-text", + "label": "输入不运行的时间或时间段的小时,以本地时间为准\n将提前10分钟结束路线,并等待到对应时间\n允许填入时间如4表示4点不运行,或4-6表示4点到6点都不运行\n允许多项,由中文逗号分隔", + }, + { + "name": "disableMondstadt", + "type": "checkbox", + "label": "是否禁用蒙德路线" + }, + { + "name": "disableLiyue", + "type": "checkbox", + "label": "是否禁用璃月路线" + }, + { + "name": "disableInazuma", + "type": "checkbox", + "label": "是否禁用稻妻路线" + }, + { + "name": "disableSumeru", + "type": "checkbox", + "label": "是否禁用须弥路线" + }, + { + "name": "disableFontaine", + "type": "checkbox", + "label": "是否禁用枫丹路线" + }, + { + "name": "disableNatlan", + "type": "checkbox", + "label": "是否禁用纳塔路线" + } +] \ No newline at end of file diff --git a/repo/js/切换主角元素/assets/switchElement/岩.json b/repo/js/切换主角元素/assets/switchElement/岩.json new file mode 100644 index 00000000..41d997db --- /dev/null +++ b/repo/js/切换主角元素/assets/switchElement/岩.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "岩", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302360644 + }, + "positions": [ + { + "id": 1, + "x": 978.720703125, + "y": -353.53662109375, + "type": "teleport", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": 984.4345703125, + "y": -351.3369140625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 985.9130859375, + "y": -348.8408203125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 986.513671875, + "y": -344.76611328125, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/切换主角元素/assets/switchElement/水.json b/repo/js/切换主角元素/assets/switchElement/水.json new file mode 100644 index 00000000..bb90fee0 --- /dev/null +++ b/repo/js/切换主角元素/assets/switchElement/水.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "水", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302729676 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 4610.498046875, + "y": 3600.668701171875, + "action_params": "" + }, + { + "id": 2, + "x": 4631.1494140625, + "y": 3598.541259765625, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/切换主角元素/assets/switchElement/火.json b/repo/js/切换主角元素/assets/switchElement/火.json new file mode 100644 index 00000000..c1d5c081 --- /dev/null +++ b/repo/js/切换主角元素/assets/switchElement/火.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "火", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302846273 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 8597.341796875, + "y": -1928.5986328125, + "action_params": "" + }, + { + "id": 2, + "x": 8597.623046875, + "y": -1932.87451171875, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/切换主角元素/assets/switchElement/草.json b/repo/js/切换主角元素/assets/switchElement/草.json new file mode 100644 index 00000000..ef1afce8 --- /dev/null +++ b/repo/js/切换主角元素/assets/switchElement/草.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "草", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302613795 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 2297.580078125, + "y": -824.5205078125, + "action_params": "" + }, + { + "id": 2, + "x": 2295.8798828125, + "y": -825.7041015625, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/切换主角元素/assets/switchElement/雷.json b/repo/js/切换主角元素/assets/switchElement/雷.json new file mode 100644 index 00000000..daa8111c --- /dev/null +++ b/repo/js/切换主角元素/assets/switchElement/雷.json @@ -0,0 +1,33 @@ +{ + "info": { + "name": "雷", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751302521509 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -3233.314453125, + "y": -3534.126953125, + "action_params": "" + }, + { + "id": 2, + "x": -3237.7265625, + "y": -3533.8779296875, + "type": "path", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/切换主角元素/assets/switchElement/风.json b/repo/js/切换主角元素/assets/switchElement/风.json new file mode 100644 index 00000000..a7f33708 --- /dev/null +++ b/repo/js/切换主角元素/assets/switchElement/风.json @@ -0,0 +1,42 @@ +{ + "info": { + "name": "风主", + "type": "collect", + "author": "mno", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751300321221 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1266.748046875, + "y": 1933.923828125, + "action_params": "" + }, + { + "id": 2, + "x": -1266.5419921875, + "y": 1929.845703125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1265.130859375, + "y": 1924.84375, + "type": "orientation", + "move_mode": "walk", + "action": "combat_script", + "action_params": "keypress(w); 荧 attack,wait(2),keypress(f); 空 attack,wait(2),keypress(f);" + } + ] +} \ No newline at end of file diff --git a/repo/js/切换主角元素/main.js b/repo/js/切换主角元素/main.js new file mode 100644 index 00000000..792538cc --- /dev/null +++ b/repo/js/切换主角元素/main.js @@ -0,0 +1,39 @@ +(async function () { + //处理自定义配置 + const partyName = settings.partyName || ""; + const element = settings.element || "风"; + const fullPath = `assets/switchElement/${element}.json`; + //切换到用户指定的含有主角的配队 + await switchPartyIfNeeded(partyName); + //导航至对应的七天神像 + await pathingScript.runFile(fullPath); + //点击与某元素共鸣 + log.info(`旅行者正在汲取${element}元素力`); + for (let i = 0; i < 5; i++) { + await click(1400, 675); + await sleep(500); + } + //传送离开防止影响后续 + await genshin.returnMainUi(); + await genshin.tpToStatueOfTheSeven(); +})(); + +//切换队伍 +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(); + } +} \ No newline at end of file diff --git a/repo/js/切换主角元素/manifest.json b/repo/js/切换主角元素/manifest.json new file mode 100644 index 00000000..2812c405 --- /dev/null +++ b/repo/js/切换主角元素/manifest.json @@ -0,0 +1,13 @@ +{ + "manifest_version": 1, + "name": "切换主角元素", + "version": "1.0", + "description": "", + "authors": [ + { + "name": "mno" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/切换主角元素/settings.json b/repo/js/切换主角元素/settings.json new file mode 100644 index 00000000..9fdd4293 --- /dev/null +++ b/repo/js/切换主角元素/settings.json @@ -0,0 +1,21 @@ +[ + { + "name": "element", + "type": "select", + "label": "要切换的元素", + "options": [ + "风", + "岩", + "雷", + "草", + "水", + "火" + ], + "default": "不卡时间,ab交替运行" + }, + { + "name": "partyName", + "type": "input-text", + "label": "含有主角的队伍名称" + } +] \ No newline at end of file