JS脚本:AutoFishingTeyvat【更新】、JS脚本:AutoPathingLoader-MultiUser【修复】、地图追踪:澄晶实【新增】、JS脚本: 提瓦特自动饵料机【新增】 (#2654)

* 新增了澄晶实地图追踪,任意角色均可

* 优化了已知问题

1. 解决了校对码容易误识别的问题
2. 尽量避免发送消息发不出去的情况

* 多项改动

1. 新增远古圣山点位,全部点位已齐全
2. 更新并修复了鱼类信息和点位信息
3. 优化了settings的UI布局
4. 细化了伪造日志的内容
5. 优化了部分代码

* 自动修复 JSON 格式和版本号 [ci skip]

* 修复

* 优化OCR识别率

* fix

* JS钓鱼的辅助脚本

* 自动修复 JSON 格式和版本号 [ci skip]

* fix

* fix

@this-Fish 给custom_identifier那里简化了一下,你看看有问题没

* fix

* fix

* 更新readme

* 新增三个垂钓点

---------

Co-authored-by: GitHub Actions Bot <actions@github.com>
This commit is contained in:
提瓦特钓鱼玳师
2026-01-19 17:46:55 +08:00
committed by GitHub
parent 594dfda002
commit bcfb4618da
56 changed files with 4106 additions and 177 deletions

View File

@@ -0,0 +1,24 @@
脚本名称:提瓦特自动饵料机
功能描述:提瓦特自动钓鱼(全流程+自选)的附属脚本,用于全自动获取鱼饵
## 核心功能
~~1. 自动收集和制作合成鱼饵所需的材料~~
2. 自动合成设定的鱼饵,可通过背包识别达到指定数量
3. 可选择合成台位置
4. 可自行配置鱼饵原材料余量相关的设置
~~5. 可通过NPC购买原料(可选)~~
## 注意事项 **该脚本处于测试阶段可能出现OCR误差导致的问题**
1. 请确保所选的鱼饵配方已经学习(如果勾选```其他功能```中的```优化OCR(建议启用)```)
2. 请确保鱼饵的原材料数量充足
~~2. 自动获取的原料有限在单次原材料CD周期内通过地图追踪来收集原料合成的饵料数量建议**小于500**~~
~~3. 小麦目前只能通过购买获取(暂不支持通过调查点获取)~~
~~4. 如果选择了购买原料,需要保证对应的商人可用(确保已经进行过前置对话,可以直接进入商店)~~
## 其它
脚本反馈群推荐BetterGI v7群(1029539994)
脚本反馈邮箱hijiwos@hotmail.com

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

View File

@@ -0,0 +1,58 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110813248,
"map_match_method": "",
"map_name": "Teyvat",
"name": "挪德卡莱-杂货店",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9458.0341796875,
"y": 1660.66552734375
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "fly",
"type": "path",
"x": 9449.81640625,
"y": 1649.8583984375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 9441.4072265625,
"y": 1641.27392578125
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "run",
"type": "target",
"x": 9449.595703125,
"y": 1638.40771484375
}
]
}

View File

@@ -0,0 +1,76 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768112052510,
"map_match_method": "",
"map_name": "Teyvat",
"name": "挪德卡莱-餐馆",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9458.0341796875,
"y": 1660.66552734375
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 9465.1923828125,
"y": 1657.12353515625
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 9465.857421875,
"y": 1626.4423828125
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "run",
"type": "path",
"x": 9442.0224609375,
"y": 1614.4873046875
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "run",
"type": "path",
"x": 9437.3974609375,
"y": 1599.068359375
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "walk",
"type": "target",
"x": 9451.8095703125,
"y": 1606.18115234375
}
]
}

View File

@@ -0,0 +1,76 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110681001,
"map_match_method": "",
"map_name": "Teyvat",
"name": "枫丹-杂货店",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 4509.001953125,
"y": 3630.5986328125
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 4488.6044921875,
"y": 3625.522705078125
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 4457.5849609375,
"y": 3596.621826171875
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "path",
"x": 4452.30859375,
"y": 3570.415771484375
},
{
"action": "stop_flying",
"action_params": "",
"id": 5,
"move_mode": "fly",
"type": "path",
"x": 4476.505859375,
"y": 3556.928466796875
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "walk",
"type": "target",
"x": 4470.21484375,
"y": 3559.9794921875
}
]
}

View File

@@ -0,0 +1 @@
{"macroEvents":[{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":1250},{"type":3,"mouseX":-3,"mouseY":-2,"time":2651},{"type":3,"mouseX":-15,"mouseY":-4,"time":2682},{"type":3,"mouseX":-11,"mouseY":-1,"time":2714},{"type":3,"mouseX":-12,"mouseY":0,"time":2745},{"type":3,"mouseX":-17,"mouseY":0,"time":2776},{"type":3,"mouseX":-22,"mouseY":0,"time":2807},{"type":3,"mouseX":-24,"mouseY":0,"time":2839},{"type":3,"mouseX":-24,"mouseY":0,"time":2870},{"type":3,"mouseX":-20,"mouseY":0,"time":2901},{"type":3,"mouseX":-16,"mouseY":0,"time":2932},{"type":3,"mouseX":-29,"mouseY":0,"time":2964},{"type":3,"mouseX":-22,"mouseY":0,"time":2995},{"type":3,"mouseX":-18,"mouseY":0,"time":3026},{"type":3,"mouseX":-19,"mouseY":0,"time":3057},{"type":3,"mouseX":-13,"mouseY":0,"time":3089},{"type":3,"mouseX":-13,"mouseY":0,"time":3120},{"type":3,"mouseX":-14,"mouseY":0,"time":3151},{"type":3,"mouseX":-14,"mouseY":-1,"time":3182},{"type":3,"mouseX":-8,"mouseY":0,"time":3214},{"type":3,"mouseX":-8,"mouseY":0,"time":3245},{"type":3,"mouseX":-7,"mouseY":0,"time":3276},{"type":3,"mouseX":-3,"mouseY":0,"time":3307},{"type":3,"mouseX":-6,"mouseY":1,"time":3339},{"type":3,"mouseX":-7,"mouseY":0,"time":3370},{"type":3,"mouseX":-7,"mouseY":0,"time":3401},{"type":3,"mouseX":-6,"mouseY":0,"time":3432},{"type":3,"mouseX":-4,"mouseY":0,"time":3464},{"type":3,"mouseX":-4,"mouseY":0,"time":3495},{"type":3,"mouseX":-4,"mouseY":0,"time":3526},{"type":3,"mouseX":-4,"mouseY":0,"time":3557},{"type":3,"mouseX":-5,"mouseY":0,"time":3589},{"type":3,"mouseX":-3,"mouseY":0,"time":3620},{"type":3,"mouseX":-3,"mouseY":0,"time":3745},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":7000}],"info":{"name":"","description":"","x":0,"y":0,"width":1920,"height":1080,"recordDpi":1.25}}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "GCM",
"enable_monster_loot_split": false,
"last_modified_time": 1768202433668,
"map_match_method": "",
"map_name": "Teyvat",
"name": "枫丹-餐馆",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 4645.5244140625,
"y": 3467.85791015625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 4630.716796875,
"y": 3455.758544921875
},
{
"action": "combat_script",
"action_params": "wait(1),keypress(f)",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 4637.1005859375,
"y": 3449.37060546875
}
]
}

View File

@@ -0,0 +1,40 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110184162,
"map_match_method": "",
"map_name": "Teyvat",
"name": "璃月-杂货店",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 267.9453125,
"y": -665.11962890625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "target",
"x": 257.09765625,
"y": -682.64013671875
}
]
}

View File

@@ -0,0 +1,67 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110245250,
"map_match_method": "",
"map_name": "Teyvat",
"name": "璃月-餐馆",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 267.9453125,
"y": -665.11962890625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 234.3349609375,
"y": -662.765625
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 232.0498046875,
"y": -667.93212890625
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "target",
"x": 231.26953125,
"y": -671.8984375
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "walk",
"type": "target",
"x": 227.7578125,
"y": -671.4951171875
}
]
}

View File

@@ -0,0 +1,40 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110280474,
"map_match_method": "",
"map_name": "Teyvat",
"name": "稻妻-杂货店",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": -4402.544921875,
"y": -3052.9765625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "target",
"x": -4403.53515625,
"y": -3071.873046875
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110316801,
"map_match_method": "",
"map_name": "Teyvat",
"name": "稻妻-餐馆",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": -4402.544921875,
"y": -3052.9765625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": -4413.2890625,
"y": -3078.0234375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "target",
"x": -4424.4921875,
"y": -3080.904296875
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110741778,
"map_match_method": "",
"map_name": "Teyvat",
"name": "纳塔-杂货店",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9060.5400390625,
"y": -1847.5087890625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 9091.1748046875,
"y": -1852.68896484375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "walk",
"type": "target",
"x": 9091.259765625,
"y": -1855.701171875
}
]
}

View File

@@ -0,0 +1,67 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768112128446,
"map_match_method": "",
"map_name": "Teyvat",
"name": "纳塔-餐馆",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9060.5400390625,
"y": -1847.5087890625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 9097.1318359375,
"y": -1853.87255859375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 9119.736328125,
"y": -1877.31591796875
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "path",
"x": 9106.6796875,
"y": -1885.41943359375
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "walk",
"type": "target",
"x": 9108.181640625,
"y": -1874.44140625
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110143377,
"map_match_method": "",
"map_name": "Teyvat",
"name": "蒙德-杂货店",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": -867.68359375,
"y": 2281.3779296875
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": -890.798828125,
"y": 2258.972412109375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "target",
"x": -895.05859375,
"y": 2264.6123046875
}
]
}

View File

@@ -0,0 +1,39 @@
{
"info": {
"name": "蒙德-锅",
"type": "collect",
"author": "提瓦特钓鱼玳师",
"version": "1.0",
"description": "",
"bgi_version": "0.42.3"
},
"positions": [
{
"id": 1,
"x": -867.6669921875,
"y": 2281.359619140625,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "teleport"
},
{
"id": 2,
"x": -887.74609375,
"y": 2259.37158203125,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 3,
"x": -884.6875,
"y": 2243.4833984375,
"type": "target",
"move_mode": "walk",
"action": "combat_script",
"action_params": "wait(1),keypress(f)"
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110100722,
"map_match_method": "",
"map_name": "Teyvat",
"name": "蒙德-餐馆",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": -867.68359375,
"y": 2281.3779296875
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": -890.798828125,
"y": 2258.972412109375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "target",
"x": -888.4453125,
"y": 2241.251953125
}
]
}

View File

@@ -0,0 +1,67 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768110440521,
"map_match_method": "",
"map_name": "Teyvat",
"name": "须弥-杂货店",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 2786.9990234375,
"y": -503.1044921875
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 2786.5751953125,
"y": -487.19482421875
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 2770.955078125,
"y": -474.021484375
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "run",
"type": "path",
"x": 2765.5888671875,
"y": -456.40234375
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "run",
"type": "target",
"x": 2778.025390625,
"y": -430.5654296875
}
]
}

View File

@@ -0,0 +1 @@
{"macroEvents":[{"type":3,"mouseX":-9,"mouseY":0,"time":1339},{"type":3,"mouseX":-16,"mouseY":1,"time":1370},{"type":3,"mouseX":-17,"mouseY":0,"time":1401},{"type":3,"mouseX":-10,"mouseY":0,"time":1433},{"type":3,"mouseX":-8,"mouseY":0,"time":1464},{"type":3,"mouseX":-8,"mouseY":-1,"time":1495},{"type":3,"mouseX":-12,"mouseY":-1,"time":1526},{"type":3,"mouseX":-13,"mouseY":0,"time":1558},{"type":3,"mouseX":-13,"mouseY":0,"time":1589},{"type":3,"mouseX":-6,"mouseY":0,"time":1620},{"type":3,"mouseX":-10,"mouseY":0,"time":1651},{"type":3,"mouseX":-8,"mouseY":0,"time":1683},{"type":3,"mouseX":-4,"mouseY":0,"time":1714},{"type":3,"mouseX":-6,"mouseY":0,"time":1745},{"type":3,"mouseX":-8,"mouseY":-1,"time":1776},{"type":3,"mouseX":-2,"mouseY":0,"time":1808},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":2016},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":4172},{"type":3,"mouseX":6,"mouseY":-1,"time":4714},{"type":3,"mouseX":13,"mouseY":2,"time":4745},{"type":3,"mouseX":20,"mouseY":3,"time":4776},{"type":3,"mouseX":28,"mouseY":2,"time":4808},{"type":3,"mouseX":34,"mouseY":3,"time":4839},{"type":3,"mouseX":37,"mouseY":4,"time":4870},{"type":3,"mouseX":39,"mouseY":3,"time":4901},{"type":3,"mouseX":45,"mouseY":3,"time":4933},{"type":3,"mouseX":46,"mouseY":4,"time":4964},{"type":3,"mouseX":33,"mouseY":2,"time":4995},{"type":3,"mouseX":41,"mouseY":3,"time":5026},{"type":3,"mouseX":39,"mouseY":3,"time":5058},{"type":3,"mouseX":36,"mouseY":1,"time":5089},{"type":3,"mouseX":37,"mouseY":2,"time":5120},{"type":3,"mouseX":36,"mouseY":4,"time":5151},{"type":3,"mouseX":40,"mouseY":4,"time":5183},{"type":3,"mouseX":40,"mouseY":4,"time":5214},{"type":3,"mouseX":30,"mouseY":3,"time":5245},{"type":3,"mouseX":40,"mouseY":4,"time":5276},{"type":3,"mouseX":43,"mouseY":4,"time":5308},{"type":3,"mouseX":39,"mouseY":3,"time":5339},{"type":3,"mouseX":35,"mouseY":2,"time":5370},{"type":3,"mouseX":28,"mouseY":0,"time":5401},{"type":3,"mouseX":20,"mouseY":0,"time":5433},{"type":3,"mouseX":11,"mouseY":0,"time":5464},{"type":3,"mouseX":9,"mouseY":0,"time":5495},{"type":3,"mouseX":11,"mouseY":0,"time":5526},{"type":3,"mouseX":13,"mouseY":1,"time":5558},{"type":3,"mouseX":19,"mouseY":2,"time":5589},{"type":3,"mouseX":10,"mouseY":0,"time":5620},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":6000},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":8110}],"info":{"name":"","description":"","x":0,"y":0,"width":1920,"height":1080,"recordDpi":1.25}}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "GCM",
"enable_monster_loot_split": false,
"last_modified_time": 1768202342717,
"map_match_method": "",
"map_name": "Teyvat",
"name": "须弥-餐馆",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 2786.9990234375,
"y": -503.1044921875
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 2795.779296875,
"y": -492.0908203125
},
{
"action": "combat_script",
"action_params": "wait(1),keypress(f)",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 2807.658203125,
"y": -485.568359375
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

View File

@@ -0,0 +1,58 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768109661987,
"map_match_method": "",
"map_name": "Teyvat",
"name": "挪德卡莱",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9458.03515625,
"y": 1660.6650390625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "fly",
"type": "path",
"x": 9450.2890625,
"y": 1652.7412109375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 9438.224609375,
"y": 1633.86181640625
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "target",
"x": 9439.15234375,
"y": 1630.451171875
}
]
}

View File

@@ -0,0 +1,40 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768109544763,
"map_match_method": "",
"map_name": "Teyvat",
"name": "枫丹",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 4509.001953125,
"y": 3630.5986328125
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "target",
"x": 4480.392578125,
"y": 3627.619140625
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768109280308,
"map_match_method": "",
"map_name": "Teyvat",
"name": "璃月",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 267.9453125,
"y": -665.11962890625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 264.060546875,
"y": -658.76171875
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "walk",
"type": "target",
"x": 267.115234375,
"y": -653.3427734375
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768109317124,
"map_match_method": "",
"map_name": "Teyvat",
"name": "稻妻",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": -4402.544921875,
"y": -3052.9765625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": -4417.25,
"y": -3081.08203125
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "target",
"x": -4432.759765625,
"y": -3092.818359375
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768109600187,
"map_match_method": "",
"map_name": "Teyvat",
"name": "纳塔",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9060.5400390625,
"y": -1847.5087890625
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 9082.689453125,
"y": -1850.669921875
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "target",
"x": 9095.2099609375,
"y": -1857.32861328125
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768109232861,
"map_match_method": "",
"map_name": "Teyvat",
"name": "蒙德",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": -867.68359375,
"y": 2281.378173828125
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": -884.982421875,
"y": 2261.303466796875
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "walk",
"type": "target",
"x": -889.53125,
"y": 2265.453857421875
}
]
}

View File

@@ -0,0 +1,67 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768109501652,
"map_match_method": "",
"map_name": "Teyvat",
"name": "须弥",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 2694.0859375,
"y": -416.4287109375
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 2716.341796875,
"y": -424.84765625
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "fly",
"type": "path",
"x": 2741.5234375,
"y": -436.37548828125
},
{
"action": "stop_flying",
"action_params": "",
"id": 4,
"move_mode": "fly",
"type": "path",
"x": 2765.7587890625,
"y": -444.34716796875
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "run",
"type": "target",
"x": 2749.7314453125,
"y": -428.375
}
]
}

View File

@@ -0,0 +1,966 @@
(async function () { // 鱼饵合成上限[]、鱼饵原料数不为2时可能出错[]、NPC的CD记录[]
const bait_list = ["果酿饵", "赤糜饵", "蠕虫假饵", "飞蝇假饵", "甘露饵", "酸桔饵", "维护机关频闪诱饵", "澄晶果粒饵", "温火饵", "槲梭饵", "清白饵"]
const material_msg = {
"风缠": {"花鳉": 20, "蓝染花鳉": 20, "鸩棘鱼": 20, "流纹茶蝶鱼": 20},
"愿者": {"花鳉": 20, "甜甜花鳉": 20, "斗棘鱼": 20, "流纹褐蝶鱼": 20},
"鸣川鹈饲": {"花鳉": 20, "琉璃花鳉": 20, "肺棘鱼": 20, "流纹京紫蝶鱼": 20},
"盘缘": {"花鳉": 20, "真果角鲀": 20, "暮云角鲀": 20, "吹沙角鲀": 20},
"穿浪斗枪": {"维护机关·初始能力型": 20, "维护机关·水域清理者": 20, "维护机关·态势控制者": 20, "海涛斧枪鱼": 20},
"长犀圆鸟和扁鱼": {"炽岩斗士急流鱼": 20, "拟似燃素独角鱼": 20, "青浪翻车鲀": 20, "晚霞翻车鲀": 20},
"谧晖白枝": {"无奇巨斧鱼": 20, "素素凶凶鲨": 20, "蓝昼明眼鱼": 20, "夜色明眼鱼": 20},
"渔获": {"雷鸣仙": 6, "金赤假龙": 20, "锖假龙": 20},
"赤穗酒枡": {"雷鸣仙": 12, "炮鲀": 40, "苦炮鲀": 40},
"竭泽": {"沉波蜜桃": 4, "青金斧枪鱼": 16, "翡玉斧枪鱼": 16},
"原海鱼油": {"沉波蜜桃": 8, "青金斧枪鱼": 32, "翡玉斧枪鱼": 32},
"灰河渡手": {"维护机关·白金典藏型": 4, "波波心羽鲈": 10, "烘烘心羽鲈": 10, "海涛斧枪鱼": 12},
"马腾斯万能护养剂": {"维护机关·白金典藏型": 8, "波波心羽鲈": 20, "烘烘心羽鲈": 20, "海涛斧枪鱼": 24}
}
const fish_msg = { // [DEBUG] 从AEscoffier_main补充数据
"花鳉": {"bait": "果酿饵", "num": 0},
"波波心羽鲈": {"bait": "酸桔饵", "num": 0},
"烘烘心羽鲈": {"bait": "酸桔饵", "num": 0},
"维护机关·水域清理者": {"bait": "维护机关频闪诱饵", "num": 0},
"维护机关·态势控制者": {"bait": "维护机关频闪诱饵", "num": 0},
"维护机关·澄金领队型": {"bait": "维护机关频闪诱饵", "num": 0},
"海涛斧枪鱼": {"bait": "甘露饵", "num": 0},
"维护机关·初始能力型": {"bait": "维护机关频闪诱饵", "num": 0},
"维护机关·白金典藏型": {"bait": "维护机关频闪诱饵", "num": 0},
"吹沙角鲀": {"bait": "甘露饵", "num": 0},
"甜甜花鳉": {"bait": "果酿饵", "num": 0},
"擒霞客": {"bait": "果酿饵", "num": 0},
"水晶宴": {"bait": "果酿饵", "num": 0},
"斗棘鱼": {"bait": "赤糜饵", "num": 0},
"炮鲀": {"bait": "飞蝇假饵", "num": 0},
"流纹褐蝶鱼": {"bait": "蠕虫假饵", "num": 0},
"锖假龙": {"bait": "飞蝇假饵", "num": 0},
"金赤假龙": {"bait": "飞蝇假饵", "num": 0},
"玉玉心羽鲈": {"bait": "酸桔饵", "num": 0},
"赤魔王": {"bait": "赤糜饵", "num": 0},
"长生仙": {"bait": "蠕虫假饵", "num": 0},
"苦炮鲀": {"bait": "飞蝇假饵", "num": 0},
"肺棘鱼": {"bait": "赤糜饵", "num": 0},
"流纹京紫蝶鱼": {"bait": "蠕虫假饵", "num": 0},
"琉璃花鳉": {"bait": "果酿饵", "num": 0},
"伪装鲨鲨独角鱼": {"bait": "澄晶果粒饵", "num": 0},
"繁花斗士急流鱼": {"bait": "澄晶果粒饵", "num": 0},
"深潜斗士急流鱼": {"bait": "澄晶果粒饵", "num": 0},
"晚霞翻车鲀": {"bait": "澄晶果粒饵", "num": 0},
"青浪翻车鲀": {"bait": "澄晶果粒饵", "num": 0},
"拟似燃素独角鱼": {"bait": "温火饵", "num": 0},
"炽岩斗士急流鱼": {"bait": "温火饵", "num": 0},
"蓝染花鳉": {"bait": "果酿饵", "num": 0},
"鸩棘鱼": {"bait": "赤糜饵", "num": 0},
"流纹茶蝶鱼": {"bait": "蠕虫假饵", "num": 0},
"雪中君": {"bait": "赤糜饵", "num": 0},
"真果角鲀": {"bait": "甘露饵", "num": 0},
"青金斧枪鱼": {"bait": "甘露饵", "num": 0},
"暮云角鲀": {"bait": "甘露饵", "num": 0},
"翡玉斧枪鱼": {"bait": "甘露饵", "num": 0},
"沉波蜜桃": {"bait": "甘露饵", "num": 0},
"雷鸣仙": {"bait": "蠕虫假饵", "num": 0},
"佛玛洛鳐": {"bait": "飞蝇假饵", "num": 0},
"迪芙妲鳐": {"bait": "飞蝇假饵", "num": 0},
"秘源机关·巡戒使": {"bait": "温火饵", "num": 0},
"蓝昼明眼鱼": {"bait": "清白饵", "num": 0},
"夜色明眼鱼": {"bait": "清白饵", "num": 0},
"无奇巨斧鱼": {"bait": "槲梭饵", "num": 0},
"素素凶凶鲨": {"bait": "清白饵", "num": 0},
"炽铁巨斧鱼": {"bait": "槲梭饵", "num": 0},
"虹光凶凶鲨": {"bait": "清白饵", "num": 0},
"冷冽巨斧鱼": {"bait": "槲梭饵", "num": 0}
}
const bait_msg = {
"果酿饵": ["日落果", "小麦"],
"赤糜饵": ["血斛", "禽肉"],
"蠕虫假饵": ["史莱姆凝液", "树莓"],
"飞蝇假饵": ["绯樱绣球", "马尾"],
"甘露饵": ["香辛果", "须弥蔷薇"],
"酸桔饵": ["泡泡桔", "小麦"],
"维护机关频闪诱饵": ["茉洁草", "铁块"],
"澄晶果粒饵": ["澄晶实", "颗粒果"],
"温火饵": ["烬芯花", "小麦"],
"槲梭饵": ["夏槲果", "面粉"],
"清白饵": ["白灵果", "薄荷"]
}
const ingredient = { // 加工产品
"面粉": {"material": {"小麦": 1}, "time": 1},
"兽肉": {"material": {"冷鲜肉": 1}, "time": 2},
"鱼肉": {"material": fish_msg, "time": 2}, // 暂不考虑加工鱼肉,两个值均不定
"神秘的肉加工产物": {"material": {"神秘的肉": 1}, "time": 1},
"奶油": {"material": {"牛奶": 1}, "time": 3},
"熏禽肉": {"material": {"禽肉": 3, "盐": 1}, "time": 5},
"黄油": {"material": {"牛奶": 2}, "time": 5},
"火腿": {"material": {"兽肉": 2, "盐": 1}, "time": 5},
"糖": {"material": {"甜甜花": 2}, "time": 3},
"香辛料": {"material": {"香辛果": 2}, "time": 1},
"蟹黄": {"material": {"螃蟹": 4}, "time": 20},
"果酱": {"material": {"日落果": 3, "树莓": 2, "糖": 1}, "time": 10},
"奶酪": {"material": {"牛奶": 3}, "time": 10},
"培根": {"material": {"兽肉": 2, "盐": 2}, "time": 15},
"香肠": {"material": {"兽肉": 3}, "time": 20}
}
const accelerator_msg = {
"铁块": 20,
"白铁块": 40,
"水晶块": 60,
"魔晶块": 60,
"星银矿石": 40,
"紫晶块": 60,
"萃凝晶": 60,
"虹滴晶": 60
}
/**
* 简洁易用的OCR函数
* @param x
* @param y
* @param w
* @param h
* @param multi 是否使用FindMulti
* @returns {Promise<void>} 返回对应的OCR对象
*/
async function Ocr(x, y, w, h, multi = false) {
let OcrRo = RecognitionObject.Ocr(x, y, w, h);
let gameRegion = captureGameRegion();
if (multi) {
let ocrResult = gameRegion.FindMulti(OcrRo);
gameRegion.dispose();
if (ocrResult.count !== 0) {
let resultList = [];
for (let i = 0; i < ocrResult.count; i++) {
resultList.push(ocrResult[i]);
}
return resultList;
} else {
log.debug(`FindMulti为空: (${x}, ${y}, ${w}, ${h})`);
return false;
}
} else {
let ocrResult = gameRegion.Find(OcrRo);
gameRegion.dispose();
if (ocrResult.isExist()) {
return ocrResult;
} else {
log.debug(`Find为空: (${x}, ${y}, ${w}, ${h})`);
return false;
}
}
}
/**
* 对话并进入NPC商店需要确保与NPC对话的F图标存在
* 餐馆NPC、杂货店NPC、合成台、合成台NPC均可使用(适用于按F进入对话后一直按F进入界面的所有可交互对象)
* @returns {Promise<boolean>}
*/
async function enter_store() {
let imageFRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/F.png"));
let imageExitRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/Exit.png"));
let location_flag = false;
for (let i = 0; i < 3; i++) {
await sleep(500);
let gameRegion = captureGameRegion();
if (gameRegion.Find(imageFRo).isExist()) {
gameRegion.dispose();
keyPress("F");
log.debug("找到并按下F");
await sleep(1000);
location_flag = true;
break;
}
gameRegion.dispose();
}
if (location_flag) {
while (!(captureGameRegion().Find(imageExitRo).isExist())) { // [DEBUG] 可能陷入死循环?
await sleep(500);
keyPress("F");
log.debug("按F直到进入商店界面");
}
log.info("已进入商店界面");
await sleep(500);
return true;
} else {
log.error("未找到对话按钮");
return false;
}
}
/**
* 在当前页面选购商品餐馆、杂货店等商人NPC购买完成后停留在商店界面
* @param {string} name - 名称
* @param {number} num - 数量
* @param {boolean} detect - 启用摩拉检测
* @returns {Promise<number|boolean>}
* - 成功时返回实际购买成功的商品数量(可能与实际数目不符[如果OCR兜底失败]
* - 失败时返回 false如不存在、售罄、资金不足[还没做]或其他错误)
*/
async function select_goods(name, num, detect = false) { // [DEBUG] 暂未设置摩拉不足的情况
let barUpRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/slide_bar_main_up.png"), 1270, 112, 13, 831);
let barDownRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/slide_bar_main_down.png"), 1270, 112, 13, 831);
barUpRo.threshold = 0.8;
barDownRo.threshold = 0.8;
// 确保滑块位于顶端
while (true) {
let gameRegion = captureGameRegion();
let barUpSite = gameRegion.Find(barUpRo);
if (barUpSite) {
if (barUpSite.y >= 125) {
click(1276, 125);
await sleep(200);
log.debug(`尝试将滑块调至顶端,当前位置: ${barUpSite.y}`);
} else {
log.debug(`滑块已位于顶端: ${barUpSite.y}`);
break
}
} else {
log.error("未找到滑块: Up");
return false;
}
}
while (true) {
let gameRegion = captureGameRegion();
let ocrList = await Ocr(115, 89, 1142, 856, true); // 左侧列表区域
let barDownSite = gameRegion.Find(barDownRo);
gameRegion.dispose();
if (ocrList) {
for (let i = 0; i < ocrList.length; i++) {
if (ocrList[i].text.includes(name)) { // 找到name
let real_num = 0;
ocrList[i].Click();
await sleep(500);
let buy_btn = await Ocr(1631, 993, 150, 50); // 右下购买按钮
if (buy_btn) {
buy_btn.Click();
await sleep(500);
let available_num = await Ocr(1190, 588, 81, 27); // 最大可选数量
if (available_num) {
let max_num = parseInt(available_num.text, 10);
if (max_num < num) { // 拉满
click(1185, 601); // 点击滑条最大值(736-1186)
await sleep(500);
if (detect) { // 检测摩拉是否充足
let mora_ocr = Ocr(1609, 28, 162, 40);
let cost_ocr = Ocr(961,682, 95, 32);
if (cost_ocr && mora_ocr) {
let cost = parseInt(cost_ocr, 10);
let mora = parseInt(mora_ocr, 10);
if (cost > mora) {
log.error(`剩余摩拉不足: 需求(${cost})拥有(${mora})`);
return false;
}
}
}
click(1181, 780); // 点击购买
await sleep(500);
click(1555, 827); // 点击空白区域
await sleep(500);
real_num = max_num;
} else { // 百分比选择数量(有误差使用OCR修正)
click(736 + Math.floor(450 * num / max_num), 601);
await sleep(100);
let current_num = await Ocr(904, 527, 115, 54); // 已选的数量
if (current_num) { // [DEBUG]若false则可能有些许误差
current_num = parseInt(current_num.text, 10);
log.debug(`OCR识别的当前已选数量(需求: ${num}): ${current_num}`);
if (current_num > num) {
for (let k = 0; k < current_num - num; k++) { // -
log.debug("-1");
click(628, 602);
await sleep(50);
}
} else if (current_num < num) {
for (let k = 0; k < num - current_num; k++) { // +
log.debug("+1");
click(1292, 602);
await sleep(50);
}
}
}
await sleep(500);
if (detect) { // 检测摩拉是否充足
let mora_ocr = Ocr(1609, 28, 162, 40);
let cost_ocr = Ocr(961,682, 95, 32);
if (cost_ocr && mora_ocr) {
let cost = parseInt(cost_ocr, 10);
let mora = parseInt(mora_ocr, 10);
if (cost > mora) {
log.error(`剩余摩拉不足: 需求(${cost})拥有(${mora})`);
return false;
}
}
}
click(1181, 780); // 点击购买
await sleep(500);
click(1555, 827); // 点击空白区域
await sleep(500);
real_num = num;
}
return real_num;
} else {
log.error(`未识别到 ${name} 的剩余数量`);
keyPress("Escape");
await sleep(500);
}
} else {
log.info(`${name} 已售罄`);
}
return false
}
}
if (barDownSite.isExist()) { // [DEBUG] 以下重复代码段应当优化
if (barDownSite.y <= 920) {
click(1276, barDownSite.y + 15);
log.debug(`将滑块向下调一格,当前位置: ${barDownSite.y}`);
await sleep(200);
} else {
log.warn(`已经滑动到底部: y(${barDownSite.y})`); // [DEBUG] 滑动到底部未找到
return false;
}
} else {
log.error("未找到滑块: Down");
return false;
}
} else if (barDownSite.isExist()) {
if (barDownSite.y <= 920) {
click(1276, barDownSite.y + 15);
await sleep(200);
} else {
log.warn(`已经滑动到底部: y(${barDownSite.y}),未找到 ${name}`); // [DEBUG] 滑动到底部未找到
return false;
}
} else {
log.error(`OCR为空且未找到滑块: Down`);
return false;
}
}
}
/**
* 供 findClosestMatch 调用
*/
async function levenshteinDistance(a, b) {
const matrix = [];
for (let i = 0; i <= b.length; i++) {
matrix[i] = [i];
}
for (let j = 0; j <= a.length; j++) {
matrix[0][j] = j;
}
for (let i = 1; i <= b.length; i++) {
for (let j = 1; j <= a.length; j++) {
if (b.charAt(i - 1) === a.charAt(j - 1)) {
matrix[i][j] = matrix[i - 1][j - 1];
} else {
matrix[i][j] = Math.min(
matrix[i - 1][j - 1] + 1, // 替换
matrix[i][j - 1] + 1, // 插入
matrix[i - 1][j] + 1 // 删除
);
}
}
}
return matrix[b.length][a.length];
}
/**
*
* 查找最相似的字符串用于查找鱼饵最大限度避免OCR偏差导致的异常
*
* @param target 目标字符串
* @param candidates 字符串数组
* @returns {null}
*/
async function findClosestMatch(target, candidates) {
let closest = null;
let minDistance = Infinity;
for (const candidate of candidates) {
const distance = await levenshteinDistance(target, candidate);
if (distance < minDistance) {
minDistance = distance;
closest = candidate;
}
}
return closest;
}
/**
* 按照原神物品名长度显示裁剪字符串[主物品显示界面适用]用于OCR
* @param string 原字符串
* @returns {Promise<*|string>} 处理后的字符串
*/
async function deal_string(string) {
if (string.length <= 6) {
return string; // 如果字符串长度是6位或以下原形返回
} else {
return string.substring(0, 5) + '..'; // 如果字符串长度超过6位保留前5位并加上'..'
}
}
/**
* 在当前合成台页面找到鱼饵,并读取当前鱼饵数量和原材料数量
* @param {string} name - 鱼饵名称
* @returns {Promise<number[]|boolean>}
* - 成功时返回鱼饵和对应的原材料数组长度为3
* - 失败时返回 false
*/
async function get_bait_material_num(name) {
let shelter_option = await Ocr(165, 1001, 289, 32); // 筛选器文本
if (shelter_option) {
if (shelter_option.text !== "鱼饵") {
await sleep(500);
shelter_option.Click(); // 继续测试:没奏效?
await sleep(500);
let ocrList = await Ocr(17, 93, 748, 893, true); // 左侧区域文本
if (ocrList.length !== 0) {
let flag = true;
for (let i = 0; i < ocrList.length; i++) {
if (ocrList[i].text.includes("鱼饵")) {
flag = false;
ocrList[i].Click();
await sleep(500);
break;
}
}
if (flag) {
log.error("未找到筛选项:鱼饵");
return false;
}
} else {
log.error(`OCR错误未识别到筛选文本`);
return false;
}
}
} else {
log.error(`OCR错误未识别到筛选文本`);
return false;
}
let ocrList = await Ocr(44, 171, 704, 807, true); // 左侧物品区域
if (ocrList.length !== 0) {
if (settings.use_levenshteinDistance) {
let menu_bait_list = [];
for (let i = 0; i < ocrList.length; i++) {
menu_bait_list.push(ocrList[i].text);
}
let closest_match = await findClosestMatch(await deal_string(name), menu_bait_list);
ocrList[menu_bait_list.indexOf(closest_match)].Click();
await sleep(500);
} else {
let flag = true;
for (let i = 0; i < ocrList.length; i++) {
if (ocrList[i].text.includes(await deal_string(name))) {
flag = false;
ocrList[i].Click();
await sleep(500);
break
}
}
if (flag) {
log.error(`未找到鱼饵 ${name}建议在JS脚本配置启用OCR优化`);
log.info(`鱼饵: ${name} 已跳过`);
return false;
}
}
} else {
log.error(`OCR错误未识别到鱼饵文本`);
return false;
}
// 记录两种原料的当前数量
let material_num = [-1, -1];
for (let k = 0; k < 2; k++) {
click(k === 0 ? 1080: 1216, 874); // 点击原料1、2
await sleep(500);
let ocr_area = await Ocr(881, 763, 158, 267, true); // 中间 "当前拥有xxx" 部分区域
if (ocr_area.length !== 0) {
let refer_y;
for (let i = 0; i < ocr_area.length; i++) {
if (ocr_area[i].text.includes("当前拥有")) {
refer_y = ocr_area[i].y;
for (let j = 0; j < ocr_area.length; j++) {
let string = ocr_area[j].text.replace(/\D/g, '');
if (string && ocr_area[j].y > refer_y - 12 && ocr_area[j].y < refer_y + 12) { // 纯数字且y坐标范围合理
material_num[k === 0 ? 0: 1] = parseInt(string, 10);
log.info(`识别到 ${name} 的原料${k === 0 ? 1: 2}(${bait_msg[name][k === 0 ? 0: 1]})数量: ${material_num[k === 0 ? 0: 1]}`);
click(1480, 974); // 点击空白处返回
await sleep(500);
}
}
}
if (material_num[k === 0 ? 0: 1] !== -1) break;
}
if (material_num[k === 0 ? 0: 1] === -1) {
log.error(`OCR错误未定位到原料${k ===0 ? 1: 2}数量`);
click(1480, 974); // 点击空白处返回
await sleep(500);
return false;
}
} else {
log.error(`OCR错误未识别到原料${k === 0 ? 1: 2}文本`);
click(1480, 974); // 点击空白处返回
await sleep(500);
return false;
}
}
// 获取鱼饵数量
click(1346, 399); // 点击鱼饵图标
await sleep(500);
let bait_num = -1;
let ocr_area = await Ocr(881, 763, 158, 267, true); // 中间 "当前拥有xxx" 部分区域
if (ocr_area.length !== 0) {
let refer_y;
for (let i = 0; i < ocr_area.length; i++) {
if (ocr_area[i].text.includes("当前拥有")) {
refer_y = ocr_area[i].y;
for (let j = 0; j < ocr_area.length; j++) {
let string = ocr_area[j].text.replace(/\D/g, '');
if (string && ocr_area[j].y > refer_y - 12 && ocr_area[j].y < refer_y + 12) { // 纯数字且y坐标范围合理
let bait_num = parseInt(string, 10);
log.info(`识别到 ${name} 的数量: ${bait_num}`);
click(1480, 974); // 点击空白处返回
await sleep(500);
return [bait_num, material_num[0], material_num[1]]; // return
}
}
}
if (bait_num !== -1) break;
}
if (bait_num === -1) {
log.error(`OCR错误未定位到鱼饵 ${name} 数量`);
click(1480, 974); // 点击空白处返回
await sleep(500);
return false;
}
} else {
log.error(`OCR错误未识别到鱼饵 ${name} 文本`);
click(1480, 974); // 点击空白处返回
await sleep(500);
return false;
}
}
/**
* 在当前合成台页面找到并合成鱼饵,合成完成后停留在合成界面 [DEBUG]如果以后鱼饵种类大于20种则需要加入滑块策略
* @param {string} name - 名称
* @param {number} num - 数量
* @returns {Promise<boolean>}
*/
async function make_bait(name, num) {
if (num === 0) return true;
let shelter_option = await Ocr(165, 1001, 289, 32); // 筛选器文本
if (shelter_option) {
if (shelter_option.text !== "鱼饵") {
shelter_option.Click();
await sleep(500);
let ocrList = await Ocr(17, 93, 748, 893, true); // 左侧区域文本
if (ocrList.length !== 0) {
let flag = true;
for (let i = 0; i < ocrList.length; i++) {
if (ocrList[i].text.includes("鱼饵")) {
flag = false;
ocrList[i].Click();
await sleep(500);
break;
}
}
if (flag) {
log.error("未找到筛选项:鱼饵");
return false;
}
} else {
log.error(`OCR错误未识别到筛选文本`);
return false;
}
}
} else {
log.error(`OCR错误未识别到筛选文本`);
return false;
}
let ocrList = await Ocr(44, 171, 704, 807, true); // 左侧物品区域
if (ocrList.length !== 0) {
if (settings.use_levenshteinDistance) {
let menu_bait_list = [];
for (let i = 0; i < ocrList.length; i++) {
menu_bait_list.push(ocrList[i].text);
}
let closest_match = await findClosestMatch(await deal_string(name), menu_bait_list);
ocrList[menu_bait_list.indexOf(closest_match)].Click();
await sleep(500);
} else {
let flag = true;
for (let i = 0; i < ocrList.length; i++) {
if (ocrList[i].text.includes(await deal_string(name))) {
flag = false;
ocrList[i].Click();
await sleep(500);
break
}
}
if (flag) {
log.error(`未找到鱼饵 ${name}建议在JS脚本配置启用OCR优化`);
log.info(`鱼饵: ${name} 已跳过`);
return false;
}
}
} else {
log.error(`OCR错误未识别到鱼饵文本`);
return false;
}
// 记录两种原料的当前数量
let material_num = [-1, -1];
for (let k = 0; k < 2; k++) {
click(k === 0 ? 1080: 1216, 874); // 点击原料1、2
await sleep(500);
let ocr_area = await Ocr(881, 763, 158, 267, true); // 中间 "当前拥有xxx" 部分区域
if (ocr_area.length !== 0) {
let refer_y;
for (let i = 0; i < ocr_area.length; i++) {
if (ocr_area[i].text.includes("当前拥有")) {
refer_y = ocr_area[i].y;
for (let j = 0; j < ocr_area.length; j++) {
let string = ocr_area[j].text.replace(/\D/g, '');
if (string && ocr_area[j].y > refer_y - 12 && ocr_area[j].y < refer_y + 12) { // 纯数字且y坐标范围合理
material_num[k === 0 ? 0: 1] = parseInt(string, 10);
log.info(`识别到 ${name} 的原料${k === 0 ? 1: 2}(${bait_msg[name][k === 0 ? 0: 1]})数量: ${material_num[k === 0 ? 0: 1]}`);
click(1480, 974); // 点击空白处返回
await sleep(500);
break;
}
}
}
if (material_num[k === 0 ? 0: 1] !== -1) break;
}
if (material_num[k === 0 ? 0: 1] === -1) {
log.error(`OCR错误未定位到原料${k ===0 ? 1: 2}数量`);
click(1480, 974); // 点击空白处返回
await sleep(500);
return false;
}
} else {
log.error(`OCR错误未识别到原料${k === 0 ? 1: 2}文本`);
click(1480, 974); // 点击空白处返回
await sleep(500);
return false;
}
}
if (material_num[0] - num < parseInt(settings.material_num, 10) || material_num[1] - num < parseInt(settings.material_num, 10)) {
log.warn(`二次检查生效: 合成后剩余原料数过低(<${parseInt(settings.material_num, 10)}),本次合成跳过`);
return true;
}
// 选择鱼饵数量并合成
let max_num = material_num[0] < material_num[1] ? material_num[0]: material_num[1];
click(1166 + Math.floor(359 * num < max_num ? num: max_num / max_num), 671);
await sleep(100);
let current_num = await Ocr(1264, 617, 158, 30); // 已选的合成次数文本区域
if (current_num && max_num > num) { // [DEBUG]若false则可能有些许误差
current_num = parseInt(current_num.text.replace(/\D/g, ''), 10);
if (current_num > num) {
for (let i = 0; i < current_num - num; i++) { // -
log.debug("-1");
click(1075, 671);
await sleep(50);
}
} else if (current_num < num) {
for (let i = 0; i < num - current_num; i++) { // +
log.debug("+1");
click(1612, 671);
await sleep(50);
}
}
}
await sleep(500);
click(1757, 1017); // 点击合成
await sleep(500);
click(1171, 756); // 点击确认
await sleep(2000); // 合成动画
click(1555, 827); // 点击空白区域
await sleep(500);
return true;
}
/**
* 计算各种数值,各鱼饵实际合成次数,各原料的实际需求量,计算摩拉消耗和实际消耗(食材加工计算)
* @returns {Promise<Object>}
*/
async function calculate_values() {
let bait_dic = {};
// 获取要合成的鱼饵种类和数量(此处的数量为原始数量,后续判断是否需要更改)
if (Array.from(settings.material_select).length !== 0) {
let material_select = Array.from(settings.material_select);
for (let i = 0; i < material_select.length; i++) {
for (let j = 0; j < Object.keys(material_msg).length; j++) {
if (material_select[i].includes(Object.keys(material_msg)[j])) {
let fish_dic = material_msg[Object.keys(material_msg)[j]];
for (const [f_name, f_num] of Object.entries(fish_dic)) {
if (Object.keys(bait_dic).includes(f_name)) {
bait_dic[f_name][0] += f_num;
} else {
bait_dic[f_name] = [f_num, 0, 0];
}
}
break;
}
}
}
} else if (Array.from(settings.bait_select).length !== 0) { // [DEBUG] parseInt可能的报错未处理
let bait_select = Array.from(settings.bait_select);
let bait_num = settings.bait_num.split(" ");
if (bait_num.length === 1) {
bait_num = parseInt(bait_num[0], 10);
for (let i = 0; i < bait_select.length; i++) {
bait_dic[bait_select[i]] = [bait_num, 0, 0];
}
} else if (bait_num.length > 1 && bait_select.length === bait_num.length) {
for (let i = 0; i < bait_select.length; i++) {
bait_dic[bait_select[i]] = [parseInt(bait_num[i], 10), 0, 0];
}
} else {
log.error("鱼饵数量设置有误");
return false;
}
}
// 获取当前的鱼饵和原料数据
let current_bait_dic = {}; // 供计算实际鱼饵需求数量和记录原料变化
await go_and_interact("合成台"); // 进入合成台界面
for (let i = 0; i < Object.keys(bait_dic).length; i++) {
let num_list = await get_bait_material_num(Object.keys(bait_dic)[i]);
if (num_list) {
current_bait_dic[Object.keys(bait_dic)[i]] = num_list;
} else {
log.error(`鱼饵(${Object.keys(bait_dic)[i]})数据获取错误`);
return false;
}
}
// 计算实际鱼饵需求数量
if (settings.select_method === "合成的鱼饵数量(设置200则合成200个)") {
log.info(`选择的合成模式: ${settings.select_method}`);
} else if (settings.select_method === "期望的鱼饵数量(设置200则合成到200个)") {
log.info(`选择的合成模式: ${settings.select_method}`);
for (let i = 0; i < Object.keys(bait_dic).length; i++) {
let b_name = Object.keys(bait_dic)[i];
let exp_bait_num = bait_dic[b_name][0];
let cur_bait_num = current_bait_dic[b_name][0];
if (exp_bait_num >= cur_bait_num) {
log.info(`实际需合成的鱼饵(${b_name})数: ${exp_bait_num - cur_bait_num},期望(${exp_bait_num})、已有(${cur_bait_num})`);
bait_dic[b_name][0] = exp_bait_num - cur_bait_num;
} else {
log.info(`鱼饵(${b_name})的数量已达标: 期望(${exp_bait_num})、已有(${cur_bait_num})`);
bait_dic[b_name][0] = 0;
}
}
} else {
// 留空
}
// 计算合成鱼饵需求的原料数量(鱼饵数除以10最后向上取整)
let material_dic = {}; // 存储原料需求数量(并非兑换材料)
for (const [b_name, b_msg] of Object.entries(bait_dic)) {
for (let i = 0; i < bait_msg[b_name].length; i++) {
let material_name = bait_msg[b_name][i]; // 原料名
if (Object.keys(material_dic).includes(material_name)) {
material_dic[material_name] += b_msg[0] / 10;
} else {
material_dic[material_name] = b_msg[0] / 10;
}
}
}
for (const [m_name, m_num] of Object.entries(material_dic)) { // 向上取整
material_dic[m_name] = Math.ceil(material_dic[m_name]);
}
// 根据鱼饵需求的原料量计算实际的原料需求量
let critical_value = parseInt(settings.material_num, 10); // [DEBUG] 没加检测(懒得加了
let current_material_dic = {}; // 存储账号张当前已有的对应原料量
for (const[b_name, b_msg] of Object.entries(current_bait_dic)) {
for (let i = 0; i < bait_msg[b_name].length; i++) {
if (!(Object.keys(current_material_dic).includes(bait_msg[b_name][i]))) {
current_material_dic[bait_msg[b_name][i]] = b_msg[i + 1]; //
}
}
}
for (const [m_name, m_num] of Object.entries(material_dic)) {
if (m_num + critical_value <= current_material_dic[m_name]) {
material_dic[m_name] = 0; // 保底+合成所需小于已有数量将实际所需设为0
} else {
material_dic[m_name] = m_num + critical_value - current_material_dic[m_name]; // 计算实际所需
}
}
return {
"exp_bait_dic": bait_dic, // x: [x, 0, 0]
"cur_bait_dic": current_bait_dic, // x: [x, x, x]
"material_dic": material_dic // x: x
}
}
/**
* 跑到指定位置并交互进入界面
* @param type 类型
* @param area 国家
* @returns {Promise<boolean>} 是否成功进入
*/
async function go_and_interact(type, area = "蒙德") {
// 返回主界面
genshin.returnMainUi();
if (type === "合成台") {
await sleep(500);
await pathingScript.runFile(`assets/timaeus/${settings.timaeus_select}.json`);
await sleep(500);
} else if (type === "餐馆" || type === "杂货店" || type === "锅") {
const path_json = JSON.parse((file.readTextSync(`assets/npc/${area}-${type}.json`)));
await sleep(500);
await pathingScript.run(JSON.stringify(path_json));
await sleep(500);
if (path_json["info"]["description"].includes("GCM")) {
// 等待到返回主界面
genshin.returnMainUi();
await sleep(500);
await keyMouseScript.runFile(`assets/npc/${area}-${type}-GCM.json`);
await sleep(500);
}
}
return await enter_store();
}
/**
*
* 调整加工食材到指定数量(1-999)后点击确定
*
* @param num 加工食材数量
* @returns {Promise<void>}
*/
async function set_ingredient_num(num) {
click(961, 454); // 选中输入框
await sleep(200);
inputText(`${num}`);
await sleep(500);
await click(1190, 760); // 确认
await sleep(200);
}
/**
* 在烹饪/食材加工界面开始,自动收集并实现单个食材加工
* @param name 要加工的物品名称
* @param num 要加工的食材数量为0时仅收集
* @param accelerator 使用矿石加速
* @returns {Promise<number|boolean>} 实际加工的数量
*/
async function ingredient_process(name, num, accelerator = []) {
await sleep(500);
click(1008, 48); // 点击食材加工图标
await sleep(500);
let claim_all = await Ocr(198, 1003, 118, 31);
if (claim_all && claim_all.text === "全部领取") {
claim_all.Click(); // 全部领取
await sleep(500);
click(1569, 864); // 点击空白处
await sleep(500);
}
// 找到 name (制作中也能找到)
let flag = false;
for (let y = 0; y < 3; y++) {
for (let x = 0; x < 8; x++) {
click(178 + 147 * x, 197 + 175 * y);
await sleep(300);
let item_name = await Ocr(1334, 129, 440, 40);
if (item_name && item_name.text.includes(name)) {
flag = true;
break;
}
}
if (flag) break;
}
// 点击 制作
click(1687, 1016);
await sleep(500);
let check_ocr = await Ocr(901, 524, 118, 31);
if (check_ocr && check_ocr.text === "队列已满") {
log.info(`食材加工(${name}): 队列已满...`);
return 0;
}
let max_num_ocr = await Ocr(1226, 578, 44, 24);
let max_num = -1;
if (max_num_ocr) {
let string = max_num_ocr.text.replace(/\D/g, '');
if (string) {
max_num = parseInt(string, 10);
}
}
if (max_num === -1) {
log.warn(`食材加工(${name})制作界面未检测到最大值文本,可能是数字过小`);
keyPress("Escape");
await sleep(500);
return 0;
}
if (num < max_num) {
await set_ingredient_num(num);
return num;
} else {
await set_ingredient_num(max_num);
return max_num;
}
}
async function main() {
/**
* {
* "exp_bait_dic": bait_dic, // x: [x, 0, 0]
* "cur_bait_dic": current_bait_dic, // x: [x, x, x]
* "material_dic": material_dic // x: x
* }
*/
let data = await calculate_values();
await go_and_interact("合成台");
for (const[b_name, b_msg] of Object.entries(data["exp_bait_dic"])) {
log.info(`开始合成: ${b_name} - ${b_msg[0]}`);
await make_bait(b_name, Math.ceil(b_msg[0] / 10));
}
// log.info(`${await get_bait_material_num("维护机关频闪诱饵")}`)
// await make_bait("维护机关频闪诱饵", 10);
// await enter_store();
// await select_goods("小麦", 67);
}
await main();
})();

View File

@@ -0,0 +1,15 @@
{
"manifest_version": 1,
"name": "提瓦特自动饵料机[测试版]",
"version": "1.0.0",
"bgi_version": "0.55.0",
"description": "全自动合成鱼饵(支持自动获取原料)",
"authors": [
{
"name": "提瓦特钓鱼玳师",
"links": "https://github.com/Hijiwos"
}
],
"settings_ui": "settings.json",
"main": "main.js"
}

View File

@@ -0,0 +1,165 @@
[
{
"name": "show_info_title_1",
"type": "input-text",
"label": "[合成鱼饵]----------------------合成和原料----------------------",
"default": "⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬"
},
{
"name": "bait_select",
"type": "multi-checkbox",
"label": "选择鱼饵种类",
"options": ["果酿饵", "酸桔饵", "维护机关频闪诱饵", "甘露饵", "赤糜饵", "飞蝇假饵", "蠕虫假饵", "澄晶果粒饵", "温火饵", "槲梭饵", "清白饵"]
},
{
"name": "select_method",
"type": "select",
"label": "选择鱼饵数量的衡量方式\n该计算方式同样影响根据兑换物品合成鱼饵的模式",
"options": [
"期望的鱼饵数量(设置200则合成到200个)",
"合成的鱼饵数量(设置200则合成200个)"
],
"default": "期望的鱼饵数量(设置200则合成到200个)"
},
{
"name": "bait_num",
"type": "input-text",
"label": "输入数量\n(使用单个空格隔开,只填一个则全部沿用该数量)",
"default": "200"
},
{
"name": "material_num",
"type": "input-text",
"label": "合成鱼饵后最低保留的原料数量(所有材料的最低余量一致)",
"default": "200"
},
{
"name": "use_pathing",
"type": "checkbox",
"label": "使用地图追踪补全不足的原料[暂不可用]",
"default": true
},
{
"type":"separator"
},
{
"type":"separator"
},
{
"name": "show_info_title_2",
"type": "input-text",
"label": "[地图追踪]---------------------合成台和商人---------------------",
"default": "⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬"
},
{
"name": "timaeus_select",
"type": "select",
"label": "选择合成台",
"options": [
"蒙德",
"璃月",
"稻妻",
"须弥",
"枫丹",
"纳塔",
"挪德卡莱"
],
"default": "枫丹"
},
{
"name": "use_mora",
"type": "checkbox",
"label": "使用摩拉购买原材料(主要涉及小麦、面粉)[暂不可用]",
"default": true
},
{
"name": "use_process",
"type": "checkbox",
"label": "使用食材加工获取原材料(主要涉及面粉)[暂不可用]",
"default": true
},
{
"name": "process_priority",
"type": "select",
"label": "加工和购买的优先级(对应方式启用后生效)[暂不可用]",
"options": [
"加工>购买",
"购买>加工",
"只购买",
"只加工"
],
"default": "加工>购买"
},
{
"name": "mora_budget",
"type": "input-text",
"label": "预算(最多使用多少摩拉)[暂不可用]\n购买600小麦的原价为60000",
"default": "60000"
},
{
"name": "discount_select",
"type": "multi-checkbox",
"label": "选择已获得折扣的区域(用于计算预算折扣为9折)[暂不可用]",
"options": ["蒙德", "璃月", "稻妻", "须弥", "枫丹", "纳塔", "挪德卡莱"]
},
{
"type":"separator"
},
{
"type":"separator"
},
{
"name": "show_info_title_3",
"type": "input-text",
"label": "[特殊需求]-----------------------其他功能-----------------------",
"default": "⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬⏬"
},
{
"name": "material_select",
"type": "multi-checkbox",
"label": "根据要兑换的物品合成所需的鱼饵(精炼材料默认为4个)\n此处选择后通过[选择鱼饵种类]选择的鱼类将失效",
"options": [
"⚓风缠⚓(蒙德钓竿)",
"⚓愿者⚓(璃月钓竿)",
"⚓鸣川鹈饲⚓(稻妻钓竿)",
"⚓盘缘⚓(须弥钓竿)",
"⚓穿浪斗枪⚓(枫丹钓竿)",
"⚓长犀圆鸟和扁鱼⚓(纳塔钓竿)",
"⚓谧晖白枝⚓(挪德卡莱钓竿)",
"⚔渔获⚔(稻妻武器)",
"✞赤穗酒枡✞(稻妻精炼材料)",
"⚔竭泽⚔(须弥武器)",
"✞原海鱼油✞(须弥精练材料)",
"⚔灰河渡手⚔(枫丹武器)",
"✞马腾斯万能护养剂✞(枫丹精练材料)"
]
},
{
"name": "use_levenshteinDistance",
"type": "checkbox",
"label": "优化OCR(建议启用)\n勾选后可以避免出现多类别识别相关的报错",
"default": false
},
{
"name": "accelerator_select",
"type": "multi-checkbox",
"label": "使用矿石加速食材加工[暂不可用]\n选择用于加速食材加工的矿石(不选或用尽则等待)\n注: 即便选择了加速,也只会在最后合成前使用矿石加速",
"options": [
"铁块: -20s",
"白铁块: -40s",
"水晶块: -60s",
"魔晶块: -60s",
"星银矿石: -40s",
"紫晶块: -60s",
"萃凝晶: -60s",
"虹滴晶: -60s"
]
},
{
"name": "accelerator_remain",
"type": "input-text",
"label": "用于加速的矿石至少保留多少个(启用矿石加速后生效)",
"default": "500"
}
]

View File

@@ -13,7 +13,7 @@
7. 支持自定义钓鱼超时时间
8. 支持设置定时关闭最多24小时
9. 4点自动领取月卡可选
10. 自动记录垂钓点冷却时间(多人模式自动关闭
10. 自动记录垂钓点冷却时间(多人模式则记录房主的CD
11. 启用自动拾取(可选)
## 注意事项
@@ -23,10 +23,10 @@
3. 同时选择鱼类和鱼饵的情况下按照以下逻辑选择路线: 所有被选的鱼类会被加入任务列表,如果选择的鱼饵中某个鱼饵不是已选的任何一个鱼类的对应的鱼饵,那么这个鱼饵对应的所有鱼类将被添加到任务列表
4. 部分钓鱼点为路径追踪+键鼠脚本(GCM)的混合模式可能会出现因键鼠脚本误差卡死的情况如果出现这种情况请在JS脚本设置禁用键鼠路线来禁用所有包含键鼠脚本的钓鱼点
5. 请确保```F2```不被占用(用于打开**多人游戏**窗口)否则会影响多人模式检测导致CD记录出现误差
6. 远古圣山点位暂不支持
7. 支持鹤观点位自动使用小道具「奇特的羽毛」,提供两种使用小道具的方法
6. 支持鹤观点位自动使用小道具「奇特的羽毛」,提供两种使用小道具的方法
## 其它
脚本反馈群推荐BetterGI v7群(1029539994)
脚本反馈邮箱hijiwos@hotmail.com

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,94 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768791625113,
"map_match_method": "",
"map_name": "Teyvat",
"name": "挪德卡莱-垂钓点-烟硌山峰望崖营壁西-无奇巨斧鱼_冷冽巨斧鱼_素素凶凶鲨_虹光凶凶鲨_蓝昼明眼鱼_夜色明眼鱼-槲梭饵_清白饵-普通",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 10043.1875,
"y": 5938.0673828125
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 10021.193359375,
"y": 5947.9990234375
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "walk",
"type": "path",
"x": 10014.96484375,
"y": 5960.52978515625
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "run",
"type": "path",
"x": 10066.197265625,
"y": 6020.537109375
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "run",
"type": "path",
"x": 10102.96875,
"y": 6019.38916015625
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "run",
"type": "path",
"x": 10140.962890625,
"y": 6026.20703125
},
{
"action": "",
"action_params": "",
"id": 7,
"move_mode": "run",
"type": "path",
"x": 10145.77734375,
"y": 6020.8837890625
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 8,
"move_mode": "walk",
"type": "target",
"x": 10143.6171875,
"y": 6016.19580078125
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768791378848,
"map_match_method": "",
"map_name": "Teyvat",
"name": "挪德卡莱-垂钓点-虚海望噩影泽地东北-花鳉_素素凶凶鲨_虹光凶凶鲨_蓝昼明眼鱼-果酿饵_清白饵-普通",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9492.001953125,
"y": 5526.0830078125
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 9424.1484375,
"y": 5521.88671875
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 3,
"move_mode": "walk",
"type": "target",
"x": 9420.625,
"y": 5526.373046875
}
]
}

View File

@@ -0,0 +1,85 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768791235489,
"map_match_method": "",
"map_name": "Teyvat",
"name": "挪德卡莱-垂钓点-虚海望皮拉米达城南-花鳉_无奇巨斧鱼_冷冽巨斧鱼_素素凶凶鲨_虹光凶凶鲨-果酿饵_槲梭饵_清白饵-普通",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 9637.7734375,
"y": 4976.1689453125
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "walk",
"type": "path",
"x": 9616.47265625,
"y": 4993.7705078125
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "fly",
"type": "path",
"x": 9616.515625,
"y": 4972.326171875
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "fly",
"type": "path",
"x": 9500.498046875,
"y": 4945.158203125
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "swim",
"type": "path",
"x": 9462.9326171875,
"y": 4938.2626953125
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "run",
"type": "path",
"x": 9393.3984375,
"y": 4996.67236328125
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 7,
"move_mode": "walk",
"type": "target",
"x": 9403.97265625,
"y": 5012.14599609375
}
]
}

View File

@@ -0,0 +1,154 @@
{
"config": {
"realtime_triggers": {
"AutoPick": true
}
},
"farming_info": {
"allow_farming_count": false,
"duration_seconds": 0,
"elite_details": "",
"elite_mob_count": 0,
"normal_mob_count": 0,
"primary_target": "",
"total_mora": 0
},
"info": {
"authors": [
{
"links": "",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.45.0",
"description": "",
"enable_monster_loot_split": false,
"items": [],
"last_modified_time": 1767958854733,
"map_match_method": "TemplateMatch",
"map_name": "AncientSacredMountain",
"name": "远古圣山-垂钓点-分流识海-炽岩斗士急流鱼_秘源机关·巡戒使-温火饵-普通",
"order": 0,
"tags": [],
"type": "collect",
"version": ""
},
"positions": [
{
"action": "",
"id": 1,
"move_mode": "walk",
"point_ext_params": {
"description": "",
"enable_monster_loot_split": false,
"misidentification": {
"arrival_time": 0,
"handling_mode": "previousDetectedPoint",
"type": [
"unrecognized"
]
}
},
"type": "teleport",
"x": 185.4827880859375,
"y": -43.462890625
},
{
"action": "",
"id": 2,
"move_mode": "run",
"point_ext_params": {
"description": "",
"enable_monster_loot_split": false,
"misidentification": {
"arrival_time": 0,
"handling_mode": "previousDetectedPoint",
"type": [
"unrecognized"
]
}
},
"type": "path",
"x": 208.844970703125,
"y": -19.76904296875
},
{
"action": "",
"id": 3,
"move_mode": "walk",
"point_ext_params": {
"description": "",
"enable_monster_loot_split": false,
"misidentification": {
"arrival_time": 0,
"handling_mode": "previousDetectedPoint",
"type": [
"unrecognized"
]
}
},
"type": "path",
"x": 220.3687744140625,
"y": -2.805908203125
},
{
"action": "combat_script",
"action_params": "keypress(space),wait(3.5),attack(0.1),wait(3)",
"id": 4,
"move_mode": "fly",
"point_ext_params": {
"description": "",
"enable_monster_loot_split": false,
"misidentification": {
"arrival_time": 0,
"handling_mode": "previousDetectedPoint",
"type": [
"unrecognized"
]
}
},
"type": "path",
"x": 250.4083251953125,
"y": 55.0343017578125
},
{
"action": "",
"id": 5,
"move_mode": "walk",
"point_ext_params": {
"description": "",
"enable_monster_loot_split": false,
"misidentification": {
"arrival_time": 0,
"handling_mode": "previousDetectedPoint",
"type": [
"unrecognized"
]
}
},
"type": "target",
"x": 254.2086181640625,
"y": 49.870361328125
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 6,
"move_mode": "walk",
"point_ext_params": {
"description": "",
"enable_monster_loot_split": false,
"misidentification": {
"arrival_time": 0,
"handling_mode": "previousDetectedPoint",
"type": [
"unrecognized"
]
}
},
"type": "target",
"x": 246.414814453125,
"y": 51.7835693359375
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,6 +1,6 @@
(async function () { // CD读写仍有优化空间
(async function () { // CD计算仍有优化空间、多人模式非房主记录的CD无法确定时间
const area_list = ['蒙德', '璃月', '稻妻', '须弥', '枫丹', '纳塔', '至冬', '挪德卡莱', '层岩巨渊·地下矿区', '渊下宫']
const area_list = ['蒙德', '璃月', '稻妻', '须弥', '枫丹', '纳塔', '至冬', '挪德卡莱', '层岩巨渊·地下矿区', '渊下宫', '远古圣山']
const fish_list = ['花鳉', '波波心羽鲈', '烘烘心羽鲈', '维护机关·水域清理者', '维护机关·态势控制者', '维护机关·澄金领队型', '海涛斧枪鱼', '维护机关·初始能力型', '维护机关·白金典藏型', '吹沙角鲀', '甜甜花鳉', '擒霞客', '水晶宴', '斗棘鱼', '炮鲀', '流纹褐蝶鱼', '锖假龙', '金赤假龙', '玉玉心羽鲈', '赤魔王', '长生仙', '苦炮鲀', '肺棘鱼', '流纹京紫蝶鱼', '琉璃花鳉', '伪装鲨鲨独角鱼', '繁花斗士急流鱼', '深潜斗士急流鱼', '晚霞翻车鲀', '青浪翻车鲀', '拟似燃素独角鱼', '炽岩斗士急流鱼', '蓝染花鳉', '鸩棘鱼', '流纹茶蝶鱼', '雪中君', '真果角鲀', '青金斧枪鱼', '暮云角鲀', '翡玉斧枪鱼', '沉波蜜桃', '雷鸣仙', '佛玛洛鳐', '迪芙妲鳐', '秘源机关·巡戒使', '蓝昼明眼鱼', '冷冽巨斧鱼', '夜色明眼鱼', '炽铁巨斧鱼', '虹光凶凶鲨', '无奇巨斧鱼', '素素凶凶鲨']
const bait_list = ['果酿饵', '酸桔饵', '维护机关频闪诱饵', '甘露饵', '赤糜饵', '飞蝇假饵', '蠕虫假饵', '澄晶果粒饵', '温火饵', '槲梭饵', '清白饵']
const material_msg = {
@@ -10,89 +10,89 @@
"盘缘": ["花鳉", "真果角鲀", "暮云角鲀", "吹沙角鲀"],
"穿浪斗枪": ["维护机关·初始能力型", "维护机关·水域清理者", "维护机关·态势控制者", "海涛斧枪鱼"],
"长犀圆鸟和扁鱼": ["炽岩斗士急流鱼", "拟似燃素独角鱼", "青浪翻车鲀", "晚霞翻车鲀"],
"谧晖白枝": ["无奇巨斧鱼", "素素凶凶鲨", "蓝昼明眼鱼", "夜色明眼鱼"],
"渔获": ["雷鸣仙", "金赤假龙", "锖假龙"],
"赤穗酒枡": ["雷鸣仙", "炮鲀", "苦炮鲀"],
"竭泽": ["沉波蜜桃", "青金斧枪鱼", "翡玉斧枪鱼"],
"原海鱼油": ["沉波蜜桃", "青金斧枪鱼", "翡玉斧枪鱼"],
"灰河渡手": ["维护机关·白金典藏型", "波波心羽鲈", "烘烘心羽鲈", "海涛斧枪鱼"],
"马腾斯万能护养剂": ["维护机关·白金典藏型", "波波心羽鲈", "烘烘心羽鲈", "海涛斧枪鱼"],
"谧晖白枝": ["无奇巨斧鱼", "素素凶凶鲨", "蓝昼明眼鱼", "夜色明眼鱼"]
"马腾斯万能护养剂": ["维护机关·白金典藏型", "波波心羽鲈", "烘烘心羽鲈", "海涛斧枪鱼"]
}
const time_msg = {
'白天': ['烘烘心羽鲈', '维护机关·水域清理者', '吹沙角鲀', '水晶宴', '流纹褐蝶鱼', '赤魔王', '长生仙', '流纹京紫蝶鱼', '深潜斗士急流鱼', '青浪翻车鲀', '流纹茶蝶鱼', '真果角鲀', '沉波蜜桃', '蓝昼明眼鱼', '冷冽巨斧鱼'],
'夜晚': ['波波心羽鲈', '维护机关·态势控制者', '维护机关·白金典藏型', '擒霞客', '斗棘鱼', '肺棘鱼', '繁花斗士急流鱼', '晚霞翻车鲀', '鸩棘鱼', '雪中君', '暮云角鲀', '雷鸣仙', '夜色明眼鱼', '炽铁巨斧鱼', '虹光凶凶鲨'],
'全天': ['花鳉', '维护机关·澄金领队型', '海涛斧枪鱼', '维护机关·初始能力型', '甜甜花鳉', '炮鲀', '锖假龙', '金赤假龙', '玉玉心羽鲈', '苦炮鲀', '琉璃花鳉', '伪装鲨鲨独角鱼', '拟似燃素独角鱼', '炽岩斗士急流鱼', '蓝染花鳉', '青金斧枪鱼', '翡玉斧枪鱼', '佛玛洛鳐', '迪芙妲鳐', '秘源机关·巡戒使', '无奇巨斧鱼', '素素凶凶鲨']
}
const fish_msg = { // 可能有误,需要检查
'花鳉': {'bait': '果酿饵', 'time': '全天'},
'波波心羽鲈': {'bait': '酸桔饵', 'time': '夜晚'},
'烘烘心羽鲈': {'bait': '酸桔饵', 'time': '白天'},
'维护机关·水域清理者': {'bait': '维护机关频闪诱饵', 'time': '白天'},
'维护机关·态势控制者': {'bait': '维护机关频闪诱饵', 'time': '夜晚'},
'维护机关·澄金领队型': {'bait': '维护机关频闪诱饵', 'time': '全天'},
'海涛斧枪鱼': {'bait': '甘露饵', 'time': '全天'},
'维护机关·初始能力型': {'bait': '维护机关频闪诱饵', 'time': '全天'},
'维护机关·白金典藏型': {'bait': '维护机关频闪诱饵', 'time': '夜晚'},
'吹沙角鲀': {'bait': '甘露饵', 'time': '白天'},
'甜甜花鳉': {'bait': '果酿饵', 'time': '全天'},
'擒霞客': {'bait': '果酿饵', 'time': '夜晚'},
'水晶宴': {'bait': '果酿饵', 'time': '白天'},
'斗棘鱼': {'bait': '赤糜饵', 'time': '夜晚'},
'炮鲀': {'bait': '飞蝇假饵', 'time': '全天'},
'流纹蝶鱼': {'bait': '蠕虫假饵', 'time': '白天'},
'锖假龙': {'bait': '飞蝇假饵', 'time': '全天'},
'金赤假龙': {'bait': '飞蝇假饵', 'time': '全天'},
'玉玉心羽鲈': {'bait': '酸桔饵', 'time': '全天'},
'赤魔王': {'bait': '赤糜饵', 'time': '白天'},
'长生仙': {'bait': '蠕虫假饵', 'time': '白天'},
'苦炮鲀': {'bait': '飞蝇假饵', 'time': '全天'},
'肺棘鱼': {'bait': '赤糜饵', 'time': '夜晚'},
'流纹京紫蝶鱼': {'bait': '蠕虫假饵', 'time': '白天'},
'琉璃花鳉': {'bait': '果酿饵', 'time': '全天'},
'伪装鲨鲨独角鱼': {'bait': '澄晶果粒饵', 'time': '全天'},
'繁花斗士急流鱼': {'bait': '澄晶果粒饵', 'time': '夜晚'},
'深潜斗士急流鱼': {'bait': '澄晶果粒饵', 'time': '白天'},
'晚霞翻车鲀': {'bait': '澄晶果粒饵', 'time': '夜晚'},
'青浪翻车鲀': {'bait': '澄晶果粒饵', 'time': '白天'},
'拟似燃素独角鱼': {'bait': '温火饵', 'time': '全天'},
'炽岩斗士急流鱼': {'bait': '温火饵', 'time': '全天'},
'蓝染花鳉': {'bait': '果酿饵', 'time': '全天'},
'鸩棘鱼': {'bait': '赤糜饵', 'time': '夜晚'},
'流纹茶蝶鱼': {'bait': '蠕虫假饵', 'time': '白天'},
'雪中君': {'bait': '赤糜饵', 'time': '夜晚'},
'真果角鲀': {'bait': '甘露饵', 'time': '白天'},
'青金斧枪鱼': {'bait': '甘露饵', 'time': '全天'},
'暮云角鲀': {'bait': '甘露饵', 'time': '夜晚'},
'翡玉斧枪鱼': {'bait': '甘露饵', 'time': '全天'},
'沉波蜜桃': {'bait': '甘露饵', 'time': '白天'},
'雷鸣仙': {'bait': '蠕虫假饵', 'time': '夜晚'},
'佛玛洛鳐': {'bait': '飞蝇假饵', 'time': '全天'},
'迪芙妲鳐': {'bait': '飞蝇假饵', 'time': '全天'},
'秘源机关·巡戒使': {'bait': '温火饵', 'time': '全天'},
'蓝昼明眼鱼': {'bait': '清白饵', 'time': '白天'},
'夜色明眼鱼': {'bait': '清白饵', 'time': '夜晚'},
'无奇巨斧鱼': {'bait': '槲梭饵', 'time': '全天'},
'素素凶凶鲨': {'bait': '清白饵', 'time': '全天'},
'炽铁巨斧鱼': {'bait': '槲梭饵', 'time': '夜晚'},
'虹光凶凶鲨': {'bait': '清白饵', 'time': '夜晚'},
'冷冽巨斧鱼': {'bait': '槲梭饵', 'time': '白天'}
const fish_msg = {
'花鳉': {'bait': '果酿饵', 'time': '全天', 'BigFishType': 'medaka'},
'琉璃花鳉': {'bait': '果酿饵', 'time': '全天', 'BigFishType': 'medaka'},
'甜甜花鳉': {'bait': '果酿饵', 'time': '全天', 'BigFishType': 'medaka'},
'蓝染花鳉': {'bait': '果酿饵', 'time': '全天', 'BigFishType': 'medaka'},
'擒霞客': {'bait': '果酿饵', 'time': '夜晚', 'BigFishType': 'large_medaka'},
'水晶宴': {'bait': '果酿饵', 'time': '白天', 'BigFishType': 'large_medaka'},
'肺棘鱼': {'bait': '赤糜饵', 'time': '夜晚', 'BigFishType': 'stickleback'},
'斗棘鱼': {'bait': '赤糜饵', 'time': '夜晚', 'BigFishType': 'stickleback'},
'鸩棘鱼': {'bait': '赤糜饵', 'time': '夜晚', 'BigFishType': 'stickleback'},
'赤魔王': {'bait': '赤糜饵', 'time': '白天', 'BigFishType': 'stickleback'},
'雪中君': {'bait': '赤糜饵', 'time': '夜晚', 'BigFishType': 'stickleback'},
'金赤假龙': {'bait': '飞蝇假饵', 'time': '全天', 'BigFishType': 'koi'},
'锖假龙': {'bait': '飞蝇假饵', 'time': '全天', 'BigFishType': 'koi'},
'流纹褐蝶鱼': {'bait': '蠕虫假饵', 'time': '白天', 'BigFishType': 'butterflyfish'},
'流纹茶蝶鱼': {'bait': '蠕虫假饵', 'time': '白天', 'BigFishType': 'butterflyfish'},
'流纹京紫蝶鱼': {'bait': '蠕虫假饵', 'time': '白天', 'BigFishType': 'butterflyfish'},
'长生仙': {'bait': '蠕虫假饵', 'time': '白天', 'BigFishType': 'butterflyfish'},
'雷鸣仙': {'bait': '蠕虫假饵', 'time': '夜晚', 'BigFishType': 'butterflyfish'},
'炮鲀': {'bait': '飞蝇假饵', 'time': '全天', 'BigFishType': 'pufferfish'},
'苦炮鲀': {'bait': '飞蝇假饵', 'time': '全天', 'BigFishType': 'pufferfish'},
'佛玛洛鳐': {'bait': '飞蝇假饵', 'time': '全天', 'BigFishType': 'ray'},
'迪芙妲鳐': {'bait': '飞蝇假饵', 'time': '全天', 'BigFishType': 'ray'},
'吹沙角鲀': {'bait': '甘露饵', 'time': '白天', 'BigFishType': 'angler'},
'暮云角鲀': {'bait': '甘露饵', 'time': '夜晚', 'BigFishType': 'angler'},
'真果角鲀': {'bait': '甘露饵', 'time': '白天', 'BigFishType': 'angler'},
'沉波蜜桃': {'bait': '甘露饵', 'time': '白天', 'BigFishType': 'angler'},
'翡玉斧枪鱼': {'bait': '甘露饵', 'time': '全天', 'BigFishType': 'axe_marlin'},
'青金斧枪鱼': {'bait': '甘露饵', 'time': '全天', 'BigFishType': 'axe_marlin'},
'海涛斧枪鱼': {'bait': '甘露饵', 'time': '全天', 'BigFishType': 'axe_marlin'},
'烘烘心羽鲈': {'bait': '酸桔饵', 'time': '白天', 'BigFishType': 'heartfeather_bass'},
'波波心羽鲈': {'bait': '酸桔饵', 'time': '夜晚', 'BigFishType': 'heartfeather_bass'},
'玉玉心羽鲈': {'bait': '酸桔饵', 'time': '全天', 'BigFishType': 'heartfeather_bass'},
'维护机关·初始能力型': {'bait': '维护机关频闪诱饵', 'time': '全天', 'BigFishType': 'maintenance_mek'},
'维护机关·态势控制者': {'bait': '维护机关频闪诱饵', 'time': '夜晚', 'BigFishType': 'maintenance_mek'},
'维护机关·水域清理者': {'bait': '维护机关频闪诱饵', 'time': '白天', 'BigFishType': 'maintenance_mek'},
'维护机关·澄金领队型': {'bait': '维护机关频闪诱饵', 'time': '全天', 'BigFishType': 'maintenance_mek'},
'维护机关·白金典藏型': {'bait': '维护机关频闪诱饵', 'time': '夜晚', 'BigFishType': 'maintenance_mek'},
'伪装鲨鲨独角鱼': {'bait': '澄晶果粒饵', 'time': '全天', 'BigFishType': 'unihornfish'},
'青浪翻车鲀': {'bait': '澄晶果粒饵', 'time': '白天', 'BigFishType': 'sunfish'},
'晚霞翻车鲀': {'bait': '澄晶果粒饵', 'time': '夜晚', 'BigFishType': 'sunfish'},
'繁花斗士急流鱼': {'bait': '澄晶果粒饵', 'time': '夜晚', 'BigFishType': 'rapidfish'},
'深潜斗士急流鱼': {'bait': '澄晶果粒饵', 'time': '白天', 'BigFishType': 'rapidfish'},
'拟似燃素独角鱼': {'bait': '温火饵', 'time': '全天', 'BigFishType': 'phony_unihornfish'},
'炽岩斗士急流鱼': {'bait': '温火饵', 'time': '全天', 'BigFishType': 'magma_rapidfish'},
'秘源机关·巡戒使': {'bait': '温火饵', 'time': '全天', 'BigFishType': 'secret_source'},
'无奇巨斧鱼': {'bait': '槲梭饵', 'time': '全天', 'BigFishType': 'axehead'},
'冷冽巨斧鱼': {'bait': '槲梭饵', 'time': '白天', 'BigFishType': 'axehead'},
'炽铁巨斧鱼': {'bait': '槲梭饵', 'time': '夜晚', 'BigFishType': 'axehead'},
'素素凶凶鲨': {'bait': '清白饵', 'time': '全天', 'BigFishType': 'mauler_shark'},
'虹光凶凶鲨': {'bait': '清白饵', 'time': '夜晚', 'BigFishType': 'mauler_shark'},
'蓝昼明眼鱼': {'bait': '清白饵', 'time': '白天', 'BigFishType': 'crystal_eye'},
'夜色明眼鱼': {'bait': '清白饵', 'time': '夜晚', 'BigFishType': 'crystal_eye'}
}
const path_pathing = [
'枫丹-垂钓点-伊黎耶林区幽林雾道西南-花鳉_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者_维护机关·澄金领队型-果酿饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-伊黎耶林区柔灯港西北-海涛斧枪鱼_波波心羽鲈_维护机关·水域清理者_维护机关·澄金领队型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-伊黎耶林区幽林雾道西南-花鳉_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者_维护机关·澄金领队型-果酿饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-伊黎耶林区柔灯港西北-海涛斧枪鱼_波波心羽鲈_维护机关·水域清理者_维护机关·澄金领队型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-枫丹动能工程科学研究院区中央实验室遗址南-花鳉_海涛斧枪鱼_波波心羽鲈_维护机关·初始能力型_维护机关·水域清理者-果酿饵_甘露饵_酸桔饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-枫丹廷区茉洁站西南-海涛斧枪鱼_烘烘心羽鲈_维护机关·初始能力型_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-枫丹廷区枫丹廷东北-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-GCM',
'枫丹-垂钓点-枫丹廷区茉洁站西南-海涛斧枪鱼_烘烘心羽鲈_维护机关·初始能力型_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-枫丹廷区枫丹廷东北-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-GCM',
'枫丹-垂钓点-枫丹廷区枫丹廷南-花鳉_海涛斧枪鱼_维护机关·水域清理者_维护机关·态势控制者-果酿饵_甘露饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-白露区白淞镇西南-花鳉_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·白金典藏型-果酿饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-白露区白淞镇西南-花鳉_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·白金典藏型-果酿饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-翡黎区芒索斯山东麓东-海涛斧枪鱼_烘烘心羽鲈_维护机关·初始能力型_维护机关·态势控制者-甘露饵_酸桔饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-苍晶区厄里那斯东-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·初始能力型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-苍晶区厄里那斯东北-吹沙角鲀_波波心羽鲈_维护机关·初始能力型_维护机关·水域清理者_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-苍晶区海露港北-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-莫尔泰区卡布狄斯堡遗迹南-花鳉_波波心羽鲈_烘烘心羽鲈_维护机关·态势控制者_维护机关·澄金领队型-果酿饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-莫尔泰区欧庇克莱歌剧院南-海涛斧枪鱼_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者_维护机关·澄金领队型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-诺思托伊区佩特莉可镇南-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·初始能力型_维护机关·水域清理者_维护机关·态势控制者_维护机关·澄金领队型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-枫丹廷区欧庇克莱歌剧院西-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·初始能力型-甘露饵_酸饵_维护机关频闪诱饵-GCM',
'枫丹-垂钓点-苍晶区厄里那斯东-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·初始能力型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-苍晶区厄里那斯东北-吹沙角鲀_波波心羽鲈_维护机关·初始能力型_维护机关·水域清理者_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-苍晶区海露港北-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-莫尔泰区卡布狄斯堡遗迹南-花鳉_波波心羽鲈_烘烘心羽鲈_维护机关·态势控制者_维护机关·澄金领队型-果酿饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-莫尔泰区欧庇克莱歌剧院南-海涛斧枪鱼_烘烘心羽鲈_维护机关·水域清理者_维护机关·态势控制者_维护机关·澄金领队型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-诺思托伊区佩特莉可镇南-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·初始能力型_维护机关·水域清理者_维护机关·态势控制者_维护机关·澄金领队型-甘露饵_酸饵_维护机关频闪诱饵-普通',
'枫丹-垂钓点-枫丹廷区欧庇克莱歌剧院西-海涛斧枪鱼_波波心羽鲈_烘烘心羽鲈_维护机关·初始能力型-甘露饵_酸饵_维护机关频闪诱饵-GCM',
'璃月-垂钓点-云来海璃月港东南-甜甜花鳉_擒霞客_水晶宴_斗棘鱼_炮鲀-果酿饵_赤糜饵_飞蝇假饵-普通',
'璃月-垂钓点-沉玉谷·上谷古树茶坡-花鳉_斗棘鱼_流纹褐蝶鱼_锖假龙_金赤假龙_玉玉心羽鲈-果酿饵_赤糜饵_蠕虫假饵_飞蝇假饵_酸桔饵-普通',
'璃月-垂钓点-沉玉谷·上谷古树茶坡东-花鳉_擒霞客_水晶宴_斗棘鱼_锖假龙_玉玉心羽鲈-果酿饵_赤糜饵_飞蝇假饵_酸桔饵-普通',
@@ -139,10 +139,10 @@
'纳塔-垂钓点-悠悠度假村彩彩崖北-花鳉_繁花斗士急流鱼_青浪翻车鲀_伪装鲨鲨独角鱼-果酿饵_澄晶果粒饵-普通',
'纳塔-垂钓点-悠悠度假村呼呼丘西南-繁花斗士急流鱼_深潜斗士急流鱼_晚霞翻车鲀_伪装鲨鲨独角鱼-澄晶果粒饵-普通',
'纳塔-垂钓点-悠悠度假村悠悠集市西南-花鳉_深潜斗士急流鱼_青浪翻车鲀_晚霞翻车鲀-果酿饵_澄晶果粒饵-普通',
// '远古圣山-垂钓点-分流识海-炽岩斗士急流鱼_秘源机关·巡戒使-温火饵-普通',
'远古圣山-垂钓点-分流识海-炽岩斗士急流鱼_秘源机关·巡戒使-温火饵-普通',
'蒙德-垂钓点-龙脊雪山寒天之钉西-花鳉_鸩棘鱼_雪中君_流纹茶蝶鱼-果酿饵_赤糜饵_蠕虫假饵-普通',
'蒙德-垂钓点-坠星山谷低语森林南-蓝染花鳉_水晶宴_鸩棘鱼_锖假龙_流纹茶蝶鱼-果酿饵_赤糜饵_蠕虫假饵_飞蝇假饵-普通',
'蒙德-垂钓点-坠星山谷望风山地-花鳉_蓝染花鳉_擒霞客_水晶宴_鸩棘鱼_金赤假龙_流纹茶蝶-果酿饵_赤糜饵_蠕虫假饵_飞蝇假饵-普通',
'蒙德-垂钓点-坠星山谷望风山地-花鳉_蓝染花鳉_擒霞客_水晶宴_鸩棘鱼_金赤假龙_流纹茶蝶-果酿饵_赤糜饵_蠕虫假饵_飞蝇假饵-普通',
'蒙德-垂钓点-明冠山地风龙废墟北-花鳉_蓝染花鳉_擒霞客_水晶宴-果酿饵-战斗',
'蒙德-垂钓点-明冠山地风龙废墟南-花鳉_蓝染花鳉_擒霞客_流纹茶蝶鱼-果酿饵_蠕虫假饵-普通',
'蒙德-垂钓点-苍风高地晨曦酒庄西南-蓝染花鳉_擒霞客_鸩棘鱼_赤魔王_流纹茶蝶鱼_炮鲀_苦炮鲀-果酿饵_赤糜饵_蠕虫假饵_飞蝇假饵-战斗',
@@ -167,13 +167,16 @@
'挪德卡莱-垂钓点-帕哈岛月矩力实验设计局东南-花鳉_无奇巨斧鱼_冷冽巨斧鱼_夜色明眼鱼-果酿饵_槲梭饵_清白饵-普通',
'挪德卡莱-垂钓点-希汐岛沐光之台西南-素素凶凶鲨_虹光凶凶鲨_蓝昼明眼鱼_夜色明眼鱼-槲梭饵_清白饵-普通',
'挪德卡莱-垂钓点-希汐岛霜月之坊东北-冷冽巨斧鱼_蓝昼明眼鱼_夜色明眼鱼_虹光凶凶鲨-槲梭饵_清白饵-普通',
'挪德卡莱-垂钓点-希汐岛霜月之坊西-花鳉_蓝昼明眼鱼_夜色明眼鱼-果酿饵_清白饵-战斗'
'挪德卡莱-垂钓点-希汐岛霜月之坊西-花鳉_蓝昼明眼鱼_夜色明眼鱼-果酿饵_清白饵-战斗',
'挪德卡莱-垂钓点-虚海望噩影泽地东北-花鳉_素素凶凶鲨_虹光凶凶鲨_蓝昼明眼鱼-果酿饵_清白饵-普通',
'挪德卡莱-垂钓点-虚海望皮拉米达城南-花鳉_无奇巨斧鱼_冷冽巨斧鱼_素素凶凶鲨_虹光凶凶鲨-果酿饵_槲梭饵_清白饵-普通',
'挪德卡莱-垂钓点-烟硌山峰望崖营壁西-无奇巨斧鱼_冷冽巨斧鱼_素素凶凶鲨_虹光凶凶鲨_蓝昼明眼鱼_夜色明眼鱼-槲梭饵_清白饵-普通'
]
const fishing_time_dic = {
"全天": {"name": "All", "param": 0},
"白天": {"name": "Daytime", "param": 1},
"夜晚": {"name": "Nighttime", "param": 2},
"禁用": {"name": "Block", "param": ""},
"禁用": {"name": "DontChange", "param": 3}
}
// const positions = {
// "quick_change_state": [169, 1019],
@@ -196,8 +199,60 @@
// 存储本次任务中的所有鱼类,作为调节时间的关键参考
let list_fish = [];
/**
* 简洁易用的OCR函数
* @param x
* @param y
* @param w
* @param h
* @param multi 是否使用FindMulti
* @returns {Promise<void>} 返回对应的OCR对象
*/
async function Ocr(x, y, w, h, multi = false) {
let OcrRo = RecognitionObject.Ocr(x, y, w, h);
let gameRegion = captureGameRegion();
if (multi) {
let ocrResult = gameRegion.FindMulti(OcrRo);
gameRegion.dispose();
if (ocrResult.count !== 0) {
let resultList = [];
for (let i = 0; i < ocrResult.count; i++) {
resultList.push(ocrResult[i]);
}
return resultList;
} else {
log.debug(`FindMulti为空: (${x}, ${y}, ${w}, ${h})`);
return false;
}
} else {
let ocrResult = gameRegion.Find(OcrRo);
gameRegion.dispose();
if (ocrResult.isExist()) {
return ocrResult;
} else {
log.debug(`Find为空: (${x}, ${y}, ${w}, ${h})`);
return false;
}
}
}
/**
* 计算垂钓点再次可用的时间戳
* @param {String} status - Daytime或Nighttime
* @returns {number} 返回垂钓点再次可用的时间戳
* @description
* 当前采用的CD计算为基于当前冷却时间对象中的 status 属性,计算并返回三天后(从当天 0 点开始计算)的时间戳。
*/
async function cdCal(status) {
// 计算垂钓点再次可用的时间戳
let critical_time_date = new Date(current_cd[status]);
critical_time_date.setHours(0, 0, 0, 0);
critical_time_date.setDate(critical_time_date.getDate() + 3);
return critical_time_date.getTime();
}
// 偽造日志
async function fakeLog(name, isJs, isStart, duration) {
async function fakeLog(name, isJs, isStart, isPick, duration) {
await sleep(10);
const currentTime = Date.now();
// 参数检查
@@ -273,7 +328,7 @@
log.debug(logMessage);
}
// 交互或拾取:"XXXX"
if (duration == 9527) {
if (isPick) {
// const logMessage = `正在 交互或拾取 的日志记录\n\n` +
// `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
// `------------------------------\n\n` +
@@ -408,15 +463,10 @@
if (Object.keys(content).includes(user_id)) {
if (Object.keys(content[user_id]).includes(pathing_name)) {
return content[user_id][pathing_name];
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
return null;
}
/**
@@ -456,11 +506,14 @@
let regex_area, regex_fish, regex_bait;
// 读取地区
let path_sort_area = typeof(settings.path_sort_area) === 'undefined' || settings.path_sort_area === "" ? [] : settings.path_sort_area.split(' ');
// let path_sort_area = typeof(settings.path_sort_area) === 'undefined' || settings.path_sort_area === "" ? [] : settings.path_sort_area.split(' ');
let path_sort_area = Array.from(settings.path_sort_area);
// 读取鱼类
let path_sort_fish = typeof(settings.path_sort_fish) === 'undefined' || settings.path_sort_fish === "" ? [] : settings.path_sort_fish.split(' ');
// let path_sort_fish = typeof(settings.path_sort_fish) === 'undefined' || settings.path_sort_fish === "" ? [] : settings.path_sort_fish.split(' ');
let path_sort_fish = Array.from(settings.path_sort_fish);
// 读取鱼饵
let path_sort_bait = typeof(settings.path_sort_bait) === 'undefined' || settings.path_sort_bait === "" ? [] : settings.path_sort_bait.split(' ');
// let path_sort_bait = typeof(settings.path_sort_bait) === 'undefined' || settings.path_sort_bait === "" ? [] : settings.path_sort_bait.split(' ');
let path_sort_bait = Array.from(settings.path_sort_bait);
// 读取兑换材料
let path_sort_material = typeof(settings.path_sort_material) === 'undefined' ? "无(默认)" : settings.path_sort_material;
// 读取调试信息
@@ -528,7 +581,7 @@
}
}
for (const path of path_pathing) {
for (const path of path_pathing) {
if (regex_area.test(path) && regex_fish.test(path) && regex_bait_include.test(path)) { // 逻辑薄弱点可能导致bug
path_list.push(path);
}
@@ -542,7 +595,7 @@
// 作为时间调节参照数组
list_fish = msg;
log.info(`目标材料: ${material_name}\n鱼类: ${msg}`);
for (const path of path_pathing) {
for (const path of path_pathing) {
const fish_sort_regex = new RegExp(msg.join("|"));
if (fish_sort_regex.test(path)) {
path_list.push(path);
@@ -559,7 +612,7 @@
}
}
async function run_file(path_msg, time_out_throw, time_out_whole, is_con, block_gcm, block_fight, block_tsurumi, tsurumi_method, auto_skip, fishing_cd, uid = "default_user", is_time_kill, time_target, kill_hour, kill_minute) {
async function run_file(path_msg, time_out_throw, time_out_whole, is_con, developer_log, block_gcm, block_fight, block_tsurumi, tsurumi_method, auto_skip, fishing_cd, uid, is_time_kill, time_target, kill_hour, kill_minute) {
const base_path_pathing = "assets/pathing/";
const base_path_gcm = "assets/KeyMouseScript/";
const base_path_statues = "assets/pathing_others/";
@@ -608,7 +661,7 @@
const is_daytime = fish_need.some(item => regex_daytime.test(item));
const is_nighttime = fish_need.some(item => regex_nighttime.test(item));
// 调模式不弹出未匹配钓鱼时间的报错
// 调模式不弹出未匹配钓鱼时间的报错
if (!is_daytime && !is_nighttime && (typeof(settings.path_select) === 'undefined' || settings.path_select === "无(默认)")) {
log.error("出错:未找到匹配的钓鱼时间")
return null;
@@ -618,7 +671,7 @@
fishing_time = "夜晚";
}
// 昼夜都有则还是 全天
} else if (is_con) { // 调时间
} else if (is_con) { // 调时间
if (path_time === "全天(默认)") {
path_time = "全天";
}
@@ -693,19 +746,12 @@
let current_cd = read_archive(file_name, uid);
if (current_cd !== null) {
const now = Date.now();
// 计算垂钓点再次可用的时间戳
let critical_time_date = new Date(current_cd["Daytime"]);
critical_time_date.setHours(0, 0, 0, 0);
critical_time_date.setDate(critical_time_date.getDate() + 3);
let critical_time = critical_time_date.getTime();
if (fishing_time === "全天") {
let daytime = true;
if (current_cd["Daytime"] !== null) {
let critical_time_date = new Date(current_cd["Daytime"]);
critical_time_date.setHours(0, 0, 0, 0);
critical_time_date.setDate(critical_time_date.getDate() + 3);
let critical_time = critical_time_date.getTime();
let critical_time = cdCal("Daytime");
if (now < critical_time) {
log.info(`该垂钓点(白天)处于冷却状态,剩余时间: ${formatTimeDifference(critical_time - now)}`);
log.info(`${file_name}(白天) 已跳过...`);
@@ -715,12 +761,9 @@
log.info(`该垂钓点(白天)未处于冷却状态,闲置时间: ${formatTimeDifference(now - critical_time)}`);
}
}
if (current_cd["Nighttime"] !== null) {
let critical_time_date = new Date(current_cd["Nighttime"]);
critical_time_date.setHours(0, 0, 0, 0);
critical_time_date.setDate(critical_time_date.getDate() + 3);
let critical_time = critical_time_date.getTime();
let critical_time = cdCal("Nighttime");
if (now < critical_time) {
log.info(`该垂钓点(夜晚)处于冷却状态,剩余时间: ${formatTimeDifference(critical_time - now)}`);
@@ -736,10 +779,7 @@
}
} else if (fishing_time === "白天") {
if (current_cd["Daytime"] !== null) {
let critical_time_date = new Date(current_cd["Daytime"]);
critical_time_date.setHours(0, 0, 0, 0);
critical_time_date.setDate(critical_time_date.getDate() + 3);
let critical_time = critical_time_date.getTime();
let critical_time = cdCal("Daytime");
if (now < critical_time) {
log.info(`该垂钓点(白天)处于冷却状态,剩余时间: ${formatTimeDifference(critical_time - now)}`);
@@ -751,10 +791,7 @@
}
} else if (fishing_time === "夜晚") {
if (current_cd["Nighttime"] !== null) {
let critical_time_date = new Date(current_cd["Nighttime"]);
critical_time_date.setHours(0, 0, 0, 0);
critical_time_date.setDate(critical_time_date.getDate() + 3);
let critical_time = critical_time_date.getTime();
let critical_time = cdCal("Nighttime");
if (now < critical_time) {
log.info(`该垂钓点(夜晚)处于冷却状态,剩余时间: ${formatTimeDifference(critical_time - now)}`);
@@ -765,11 +802,24 @@
}
}
}
} else {
log.info(`本地不存在该垂钓点的CD记录: ${file_name}(${uid})\n该垂钓点将不会跳过...`);
}
}
// 偽造地图追踪开始
await fakeLog(file_name, false, true, 0);
if (developer_log.length !== 0) {
if (developer_log.includes("伪造地图追踪(跑图+垂钓)")) {
// 偽造地图追踪开始
await fakeLog(`${file_name}`, false, true, false, 0);
} else if (developer_log.includes("伪造地图追踪(跑图)")) {
// 偽造地图追踪开始
await fakeLog(`${file_name}-跑图`, false, true, false, 0);
}
}
// 记录地图追踪开始时间
const time_start_pathing = Date.now();
await pathingScript.runFile(base_path_pathing + file_name + ".json");
if (file_name === "稻妻-垂钓点-鹤观逢岳之野西南") {
@@ -784,7 +834,6 @@
await sleep(1000);
let imageRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(image_path), 0, 95, 1278, 883);
let ocrRo = RecognitionObject.Ocr(1626, 990, 150, 52);
imageRo.threshold = 0.9;
// // 记录原有快捷更换的4个小道具及装备状态
@@ -824,11 +873,9 @@
gadget.Click();
await sleep(500);
moveMouseTo(1555, 860); // 移走鼠标,防止干扰识别
let ocr_region = captureGameRegion();
let ocrResult = ocr_region.Find(ocrRo);
ocr_region.dispose();
let ocrResult = await Ocr(1626, 990, 150, 52);
// 防止卸下奇特的羽毛
if (ocrResult.isExist() && ocrResult.text === "装备") {
if (ocrResult && ocrResult.text.includes("装备")) {
click(1685, 1018);
} else {
click(1843, 48);
@@ -950,29 +997,54 @@
await keyMouseScript.runFile(base_path_gcm + file_name + ".json");
}
// 等待站穏
await sleep(750);
// 记录地图追踪结束时间
const time_end_pathing = Date.now();
if (developer_log.length !== 0 && !(developer_log.includes("伪造地图追踪(跑图+垂钓)"))) {
if (developer_log.includes("伪造地图追踪(跑图)")) {
// 偽造地图追踪结束
await fakeLog(`${file_name}-跑图`, false, false, false, time_end_pathing - time_start_pathing);
}
if (developer_log.includes("伪造地图追踪(垂钓)")) {
// 偽造地图追踪开始
await fakeLog(`${file_name}-垂钓`, false, true, false, 0);
}
}
// 记录钓鱼开始时间
const time_start = Date.now();
const time_start_fishing = Date.now();
// 调用自动钓鱼
await dispatcher.runTask(new SoloTask("AutoFishing", {
"fishingTimePolicy": fishing_time_dic[fishing_time]["param"],
"fishingTimePolicy": fishing_time_dic[uid.includes("bgiMultiUser") ? "禁用": fishing_time]["param"],
"throwRodTimeOutTimeoutSeconds": time_out_throw,
"wholeProcessTimeoutSeconds": time_out_whole
}));
// 记录钓鱼结束时间
const time_end = Date.now();
const time_end_fishing = Date.now();
if (developer_log.length !== 0) {
if (developer_log.includes("伪造地图追踪(跑图+垂钓)")) {
// 偽造地图追踪结束
await fakeLog(`${file_name}`, false, false, false, time_end_fishing - time_start_pathing);
} else if (developer_log.includes("伪造地图追踪(垂钓)")) {
// 偽造地图追踪结束
await fakeLog(`${file_name}-垂钓`, false, false, false, time_end_fishing - time_start_fishing);
}
}
// 钓鱼是否正常结束间隔时间大于抛竿超时时间视为正常结束防止CD跳过导致的混淆
const flag = (time_end - time_start) >= time_out_throw * 1000;
const flag = (time_end_fishing - time_start_fishing) >= time_out_throw * 1000;
if (fishing_cd && flag) {
write_archive(file_name, fishing_time, Date.now(), uid);
} else if (fishing_cd && !flag) {
log.warn(`本次钓鱼异常不计算垂钓点CD`);
}
// 偽造地图追踪结束
await fakeLog(file_name, false, false, 0);
}
async function main() {
@@ -992,6 +1064,8 @@
let is_continue = true;
// 判断是否是调式模式
const is_con = !(typeof(settings.path_select) === 'undefined' || settings.path_select === "无(默认)");
// 读取开发者日志设置
const developer_log = Array.from(settings.developer_log);
// 键鼠设置读取
const block_gcm = typeof(settings.block_gcm) === 'undefined' ? false : settings.block_gcm;
// 战斗设置读取
@@ -1015,35 +1089,73 @@
// 获取当前用户UID
let uid = "default_user";
if (fishing_cd && !is_con) {
const ocrRoUid = RecognitionObject.Ocr(166, 198, 120, 22);
const ocrRoText = RecognitionObject.Ocr(1565, 997, 177, 39);
const singleRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/single.png"));
const player1Ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/1P.png"));
let imageExitRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/Exit.png"));
genshin.returnMainUi();
await sleep(1000);
keyPress("Escape");
await sleep(1000);
keyPress("G");
await sleep(1500);
let ro1 = captureGameRegion();
let ocrUid = ro1.Find(ocrRoUid); // 当前页面OCR
if (ocrUid.isExist()) {
uid = ocrUid.text;
}
ro1.dispose();
let ocrUid = await Ocr(1679, 1048, 200, 28);
if (ocrUid && ocrUid.text !== "") uid = ocrUid.text;
await genshin.returnMainUi();
keyPress("F2"); // 按下F2打开多人模式界面
await sleep(1000);
let ro2 = captureGameRegion();
let ocrText = ro2.Find(ocrRoText); // 当前页面OCR
if (ocrText.isExist() && ocrText.text === "回到单人模式") {
log.info("当前为多人模式垂钓点CD统计已失效...");
fishing_cd = false; // 多人模式下关闭CD记录功能
}
ro2.dispose();
// keyPress("F2"); // 按下F2打开多人模式界面
// await sleep(1000);
// let ro2 = captureGameRegion();
// let ocrText = ro2.Find(ocrRoText); // 当前页面OCR
// if (ocrText.isExist() && ocrText.text === "回到单人模式") {
// log.info("当前为多人模式垂钓点CD统计已失效...");
// fishing_cd = false; // 多人模式下关闭CD记录功能
// }
// ro2.dispose();
//
// await sleep(500);
// keyPress("Escape");
await sleep(500);
keyPress("Escape");
let mainUiCapture = captureGameRegion();
if (mainUiCapture.Find(singleRo).isExist()) { // 单人模式
log.info(`当前为单人模式CD统计已启用\n记录标识: ${uid}`);
} else if (mainUiCapture.Find(player1Ro).isExist()) { // 多人模式1P
log.info(`当前为多人模式房主CD统计已启用\n记录标识: ${uid}`);
} else { // 多人模式非房主
uid = "default_bgiMultiUser";
keyPress("F2"); // 按下F2打开多人模式界面
await sleep(500);
while (!(captureGameRegion().Find(imageExitRo).isExist())) { // [DEBUG] 可能陷入死循环?
await sleep(500);
log.debug("等待直到进入多人游戏界面");
}
await sleep(500);
click(333, 219); // 点击1P头像
await sleep(500);
for (let i = 0; i < 5; i++) { // [DEBUG] 如果卡顿超过1s还没弹出小菜单则会出错
let ocrResult = await Ocr(502, 179, 220, 50);
if (ocrResult && ocrResult.text.includes("查看资料")) {
ocrResult.Click(); // 点击查看资料
await sleep(500);
break;
}
await sleep(200);
}
moveMouseTo(1260, 589); // 移走鼠标防止干扰OCR
await sleep(800);
let ocrResult = await Ocr(573, 194, 172, 27);
if (ocrResult) {
ocrResult = ocrResult.text.replace(/\D/g, '');
if (ocrResult) uid = `bgiMultiUser_${ocrResult}`;
}
await genshin.returnMainUi;
log.info("当前为多人模式且并非房主垂钓点CD统计将记录1P的CD(不影响单人模式的CD记录)");
// fishing_cd = false; // 多人模式下关闭CD统计功能
}
mainUiCapture.dispose();
}
if (is_time_kill) {
@@ -1100,7 +1212,7 @@
continue;
}
const run_result = await run_file(path_msg, time_out_throw, time_out_whole, is_con, block_gcm, block_fight, block_tsurumi, tsurumi_method, auto_skip, fishing_cd, uid, is_time_kill, time_target, kill_hour, kill_minute);
const run_result = await run_file(path_msg, time_out_throw, time_out_whole, is_con, developer_log, block_gcm, block_fight, block_tsurumi, tsurumi_method, auto_skip, fishing_cd, uid, is_time_kill, time_target, kill_hour, kill_minute);
// 新增:检查 run_file 是否因为到达终止时间而返回特殊标记
if (run_result === "time_kill") {

View File

@@ -1,8 +1,8 @@
{
"manifest_version": 1,
"name": "提瓦特自动钓鱼(全流程+自选)",
"version": "2.3.9",
"bgi_version": "0.47.0",
"version": "2.4.0",
"bgi_version": "0.55.0",
"description": "支持自动追踪并垂钓bgi支持的全提瓦特垂钓点",
"authors": [
{

View File

@@ -24,22 +24,27 @@
"✞原海鱼油✞(须弥精练材料)",
"⚔灰河渡手⚔(枫丹武器)",
"✞马腾斯万能护养剂✞(枫丹精练材料)"
]
],
"default": "无(默认)"
},
{
"name": "path_sort_area",
"type": "input-text",
"label": "地区筛选 例:蒙德 层岩巨渊·地下矿区 挪德卡莱"
"type": "multi-checkbox",
"label": "地区筛选",
"options": ["蒙德", "璃月", "稻妻", "须弥", "枫丹", "纳塔", "至冬", "挪德卡莱", "层岩巨渊·地下矿区", "渊下宫", "远古圣山"]
},
{
"name": "path_sort_fish",
"type": "input-text",
"label": "鱼类筛选 例:花鳉 蓝昼明眼鱼"
"type": "multi-checkbox",
"label": "鱼类筛选",
"options": ["花鳉", "波波心羽鲈", "烘烘心羽鲈", "维护机关·水域清理者", "维护机关·态势控制者", "维护机关·澄金领队型", "海涛斧枪鱼", "维护机关·初始能力型", "维护机关·白金典藏型", "吹沙角鲀", "甜甜花鳉", "擒霞客", "水晶宴", "斗棘鱼", "炮鲀", "流纹褐蝶鱼", "锖假龙", "金赤假龙", "玉玉心羽鲈", "赤魔王", "长生仙", "苦炮鲀", "肺棘鱼", "流纹京紫蝶鱼", "琉璃花鳉", "伪装鲨鲨独角鱼", "繁花斗士急流鱼", "深潜斗士急流鱼", "晚霞翻车鲀", "青浪翻车鲀", "拟似燃素独角鱼", "炽岩斗士急流鱼", "蓝染花鳉", "鸩棘鱼", "流纹茶蝶鱼", "雪中君", "真果角鲀", "青金斧枪鱼", "暮云角鲀", "翡玉斧枪鱼", "沉波蜜桃", "雷鸣仙", "佛玛洛鳐", "迪芙妲鳐", "秘源机关·巡戒使", "蓝昼明眼鱼", "冷冽巨斧鱼", "夜色明眼鱼", "炽铁巨斧鱼", "虹光凶凶鲨", "无奇巨斧鱼", "素素凶凶鲨"]
},
{
"name": "path_sort_bait",
"type": "input-text",
"label": "鱼饵筛选 例:果酿饵 槲梭饵"
"type": "multi-checkbox",
"label": "鱼饵筛选",
"options": ["果酿饵", "酸桔饵", "维护机关频闪诱饵", "甘露饵", "赤糜饵", "飞蝇假饵", "蠕虫假饵", "澄晶果粒饵", "温火饵", "槲梭饵", "清白饵"]
},
{
"name": "block_gcm",
@@ -66,7 +71,11 @@
"options": [
"1.打开背包替换[默认](会顶替快捷更换列表的最后一项)",
"2.使用快捷更换(需要提前配置快捷更换列表)"
]
],
"default": "1.打开背包替换[默认](会顶替快捷更换列表的最后一项)"
},
{
"type":"separator"
},
{
"name": "show_info_title_2",
@@ -168,20 +177,27 @@
"挪德卡莱-垂钓点-帕哈岛月矩力实验设计局东南-普通",
"挪德卡莱-垂钓点-希汐岛沐光之台西南-普通",
"挪德卡莱-垂钓点-希汐岛霜月之坊东北-普通",
"挪德卡莱-垂钓点-希汐岛霜月之坊西-战斗"
]
"挪德卡莱-垂钓点-希汐岛霜月之坊西-战斗",
"挪德卡莱-垂钓点-虚海望噩影泽地东北",
"挪德卡莱-垂钓点-虚海望皮拉米达城南",
"挪德卡莱-垂钓点-烟硌山峰望崖营壁西"
],
"default": "无(默认)"
},
{
"name": "time_out_throw",
"type": "input-text",
"label": "自动抛竿未上钩超时时间(秒)",
"default": 10
"default": "10"
},
{
"name": "time_out_whole",
"type": "input-text",
"label": "整个任务超时时间(秒)",
"default": 300
"default": "300"
},
{
"type":"separator"
},
{
"name": "show_info_title_3",
@@ -204,7 +220,7 @@
{
"name": "fishing_cd",
"type": "checkbox",
"label": "启用垂钓点CD统计(自动跳过冷却中的垂钓点)",
"label": "启用垂钓点CD统计(自动跳过冷却中的垂钓点)\n注: 多人模式且不为房主时自动禁用",
"default": true
},
{
@@ -237,7 +253,8 @@
"21",
"22",
"23"
]
],
"default": "无"
},
{
"name": "time_kill_minute",
@@ -305,7 +322,11 @@
"57",
"58",
"59"
]
],
"default": "无"
},
{
"type":"separator"
},
{
"name": "show_info_title_4",
@@ -407,8 +428,12 @@
"挪德卡莱-垂钓点-帕哈岛月矩力实验设计局东南-普通",
"挪德卡莱-垂钓点-希汐岛沐光之台西南-普通",
"挪德卡莱-垂钓点-希汐岛霜月之坊东北-普通",
"挪德卡莱-垂钓点-希汐岛霜月之坊西-战斗"
]
"挪德卡莱-垂钓点-希汐岛霜月之坊西-战斗",
"挪德卡莱-垂钓点-虚海望噩影泽地东北",
"挪德卡莱-垂钓点-虚海望皮拉米达城南",
"挪德卡莱-垂钓点-烟硌山峰望崖营壁西"
],
"default": "无(默认)"
},
{
"name": "path_time",
@@ -418,6 +443,19 @@
"全天(默认)",
"白天",
"夜晚"
]
],
"default": "全天(默认)"
},
{
"name": "developer_log",
"type": "multi-checkbox",
"label": "[调式]-日志(不可用)",
"options": [
"交互或拾取鱼类",
"伪造地图追踪(跑图)",
"伪造地图追踪(垂钓)",
"伪造地图追踪(跑图+垂钓)"
],
"default": ["伪造地图追踪(跑图)", "伪造地图追踪(垂钓)"]
}
]

View File

@@ -1,7 +1,9 @@
# 1. JS脚本的关键配置和路径选择
- **注意:**
只有严格按照以下步骤配置后才能使用,否则将**无法运行**(也可以参考左下角的日志来确认下一步需要如何配置)
1. 只有严格按照以下步骤配置后才能使用,否则将**无法运行**(也可以参考左下角的日志来确认下一步需要如何配置)
1. 选用的路径需要满足以下基本要求:路径可靠性强(避免卡死、高难敌人)
- **配置步骤:**

View File

@@ -104,7 +104,7 @@
await genshin.returnMainUi(); // 保证在主界面
await sleep(500);
await keyPress("VK_RETURN"); // 按Enter进入聊天界面
await sleep(500);
await sleep(1500);
const ocrRo = RecognitionObject.Ocr(0, 0, 257, 173);
moveMouseTo(1555, 860); // 移走鼠标防止干扰OCR
await sleep(300);
@@ -116,10 +116,10 @@
ocr.Click(); // 点击 当前队伍
await sleep(500);
click(445, 1010); // 点击聊天框
await sleep(200);
await sleep(800);
inputText(msg); // 输入文本
keyPress("VK_RETURN"); // 发送
await sleep(200);
await sleep(800);
await genshin.returnMainUi(); // 返回主界面
return true;
} else {
@@ -130,10 +130,10 @@
}
log.error(`未检测到 当前队伍 ,尝试发送信息...`);
click(445, 1010); // 点击聊天框
await sleep(200);
await sleep(880);
inputText(msg); // 输入文本
keyPress("VK_RETURN"); // 发送
await sleep(200);
await sleep(800);
await genshin.returnMainUi(); // 返回主界面
return false;
}
@@ -148,7 +148,7 @@
async function numberToChinese(num) {
// 定义数字到中文的映射
// const chineseDigits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const chineseDigits = ['癸', '甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', ''];
const chineseDigits = ['癸', '甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', ''];
// 将数字转换为字符串,以便逐个处理
const numStr = num.toString();
let result = '';

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "BGI-地图追踪加载器(联机版)",
"version": "1.0.2",
"version": "1.0.3",
"bgi_version": "0.45.0",
"description": "基于聊天框实现的同步联机锄地",
"authors": [

View File

@@ -0,0 +1,59 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768098952903,
"map_match_method": "",
"map_name": "Teyvat",
"name": "01-澄晶实-涌流地-2个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 8664.165,
"y": -2742.9277
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "walk",
"type": "path",
"x": 8659.7451,
"y": -2737.7881
},
{
"action": "stop_flying",
"action_params": "",
"id": 3,
"locked": false,
"move_mode": "fly",
"type": "path",
"x": 8652.1299,
"y": -2725.5508
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 4,
"move_mode": "walk",
"type": "target",
"x": 8652.1299,
"y": -2725.5508
}
]
}

View File

@@ -0,0 +1,49 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768101116347,
"map_match_method": "",
"map_name": "Teyvat",
"name": "02-澄晶实-涌流地-2个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 8664.165,
"y": -2742.9268
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "walk",
"type": "path",
"x": 8685.0674,
"y": -2742.873
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 3,
"move_mode": "walk",
"type": "target",
"x": 8683.4004,
"y": -2769.3799
}
]
}

View File

@@ -0,0 +1,50 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768099432790,
"map_match_method": "",
"map_name": "Teyvat",
"name": "03-澄晶实-涌流地-2个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 8664.1621,
"y": -2742.9277
},
{
"action": "stop_flying",
"action_params": "",
"id": 2,
"locked": false,
"move_mode": "fly",
"type": "path",
"x": 8645.6895,
"y": -2764.834
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 3,
"move_mode": "walk",
"type": "target",
"x": 8645.6895,
"y": -2764.834
}
]
}

View File

@@ -0,0 +1,221 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768102006569,
"map_match_method": "",
"map_name": "Teyvat",
"name": "04-澄晶实-涌流地-8个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"locked": false,
"move_mode": "walk",
"type": "teleport",
"x": 8664.1621,
"y": -2742.9316
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "walk",
"type": "path",
"x": 8668.5078,
"y": -2738.3076
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "fly",
"type": "path",
"x": 8625.2217,
"y": -2787.5371
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "run",
"type": "path",
"x": 8610.2461,
"y": -2778.3438
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "walk",
"type": "target",
"x": 8595.4053,
"y": -2785.0566
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "walk",
"type": "target",
"x": 8594.2549,
"y": -2790.1729
},
{
"action": "",
"action_params": "",
"id": 7,
"move_mode": "walk",
"type": "target",
"x": 8590.3818,
"y": -2797.3945
},
{
"action": "",
"action_params": "",
"id": 8,
"move_mode": "walk",
"type": "target",
"x": 8585.6523,
"y": -2801.4805
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 9,
"move_mode": "walk",
"type": "target",
"x": 8586.0664,
"y": -2806.0762
},
{
"action": "",
"action_params": "",
"id": 10,
"move_mode": "fly",
"type": "path",
"x": 8581.0049,
"y": -2805.127
},
{
"action": "",
"action_params": "",
"id": 11,
"move_mode": "walk",
"type": "path",
"x": 8569.0664,
"y": -2823.6289
},
{
"action": "",
"action_params": "",
"id": 12,
"move_mode": "fly",
"type": "path",
"x": 8579.5547,
"y": -2830.165
},
{
"action": "",
"action_params": "",
"id": 13,
"move_mode": "walk",
"type": "target",
"x": 8588.0381,
"y": -2836.0674
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 14,
"move_mode": "walk",
"type": "target",
"x": 8590.0654,
"y": -2835.4775
},
{
"action": "",
"action_params": "",
"id": 15,
"move_mode": "walk",
"type": "target",
"x": 8589.6484,
"y": -2838.1055
},
{
"action": "stop_flying",
"action_params": "",
"id": 16,
"move_mode": "fly",
"type": "path",
"x": 8613.6455,
"y": -2829.498
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 17,
"move_mode": "walk",
"type": "target",
"x": 8607.8438,
"y": -2827.6641
},
{
"action": "",
"action_params": "",
"id": 18,
"move_mode": "walk",
"type": "path",
"x": 8611.1465,
"y": -2826.1035
},
{
"action": "",
"action_params": "",
"id": 19,
"move_mode": "climb",
"type": "path",
"x": 8605.7656,
"y": -2815.6699
},
{
"action": "",
"action_params": "",
"id": 20,
"move_mode": "walk",
"type": "path",
"x": 8607.3105,
"y": -2820.2266
},
{
"action": "stop_flying",
"action_params": "",
"id": 21,
"move_mode": "fly",
"type": "target",
"x": 8636.7275,
"y": -2851.5068
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 22,
"move_mode": "walk",
"type": "target",
"x": 8637.5312,
"y": -2852.0869
}
]
}

View File

@@ -0,0 +1,221 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768100945412,
"map_match_method": "",
"map_name": "Teyvat",
"name": "05-澄晶实-涌流地-10个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 8664.1621,
"y": -2742.9277
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 8662.3281,
"y": -2724.2158
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 8625.459,
"y": -2697.1201
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "target",
"x": 8585.4102,
"y": -2694.6455
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "walk",
"type": "target",
"x": 8571.5117,
"y": -2702.9434
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "walk",
"type": "target",
"x": 8570.0693,
"y": -2706.4697
},
{
"action": "",
"action_params": "",
"id": 7,
"move_mode": "fly",
"type": "path",
"x": 8565.9287,
"y": -2707.9121
},
{
"action": "stop_flying",
"action_params": "",
"id": 8,
"locked": false,
"move_mode": "fly",
"type": "path",
"x": 8560.2031,
"y": -2717.7295
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 9,
"move_mode": "walk",
"type": "path",
"x": 8560.2031,
"y": -2717.7295
},
{
"action": "",
"action_params": "",
"id": 10,
"move_mode": "fly",
"type": "path",
"x": 8558.6357,
"y": -2721.0322
},
{
"action": "",
"action_params": "",
"id": 11,
"move_mode": "walk",
"type": "path",
"x": 8543.7549,
"y": -2738.1328
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 12,
"move_mode": "walk",
"type": "target",
"x": 8531.5244,
"y": -2747.6406
},
{
"action": "",
"action_params": "",
"id": 13,
"move_mode": "climb",
"type": "path",
"x": 8522.127,
"y": -2739.7285
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 14,
"move_mode": "walk",
"type": "target",
"x": 8502.1729,
"y": -2717.7627
},
{
"action": "fight",
"action_params": "",
"id": 15,
"move_mode": "walk",
"type": "path",
"x": 8521.8057,
"y": -2760.2012
},
{
"action": "",
"action_params": "",
"id": 16,
"move_mode": "walk",
"type": "path",
"x": 8517.6982,
"y": -2759.6543
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 17,
"move_mode": "walk",
"type": "target",
"x": 8531.1309,
"y": -2761.9082
},
{
"action": "",
"action_params": "",
"id": 18,
"move_mode": "walk",
"type": "path",
"x": 8515.625,
"y": -2741.3408
},
{
"action": "",
"action_params": "",
"id": 19,
"move_mode": "walk",
"type": "path",
"x": 8549.8037,
"y": -2739.4229
},
{
"action": "",
"action_params": "",
"id": 20,
"move_mode": "walk",
"type": "path",
"x": 8565.8564,
"y": -2747.1396
},
{
"action": "",
"action_params": "",
"id": 21,
"move_mode": "walk",
"type": "target",
"x": 8565.9658,
"y": -2754.1475
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 22,
"move_mode": "walk",
"type": "target",
"x": 8570.7949,
"y": -2751.4688
}
]
}

View File

@@ -0,0 +1,104 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768102352640,
"map_match_method": "",
"map_name": "Teyvat",
"name": "06-澄晶实-涌流地-2个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"locked": false,
"move_mode": "walk",
"type": "teleport",
"x": 8664.1631,
"y": -2742.9277
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "run",
"type": "path",
"x": 8663.0361,
"y": -2725.2109
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "run",
"type": "path",
"x": 8630.7324,
"y": -2698.3457
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "path",
"x": 8607.8525,
"y": -2701.2129
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "walk",
"type": "path",
"x": 8610.3477,
"y": -2712.3262
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "walk",
"type": "path",
"x": 8605.916,
"y": -2721.2861
},
{
"action": "",
"action_params": "",
"id": 7,
"move_mode": "walk",
"type": "path",
"x": 8605.3145,
"y": -2726.6143
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 8,
"move_mode": "walk",
"type": "target",
"x": 8600.918,
"y": -2729.5234
},
{
"action": "",
"action_params": "",
"id": 9,
"move_mode": "walk",
"type": "teleport",
"x": 8664.1631,
"y": -2742.9277
}
]
}

View File

@@ -0,0 +1,148 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768102569121,
"map_match_method": "",
"map_name": "Teyvat",
"name": "07-澄晶实-燃素开采研究所-4个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 7647.877,
"y": -2113.0664
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "walk",
"type": "path",
"x": 7656.0273,
"y": -2106.5938
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "walk",
"type": "path",
"x": 7651.3301,
"y": -2094.9883
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "target",
"x": 7659.6113,
"y": -2089.1387
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "walk",
"type": "target",
"x": 7665.293,
"y": -2086.8242
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "fly",
"type": "target",
"x": 7668.415,
"y": -2084.0498
},
{
"action": "",
"action_params": "",
"id": 7,
"move_mode": "walk",
"type": "path",
"x": 7678.0,
"y": -2079.623
},
{
"action": "stop_flying",
"action_params": "",
"id": 8,
"move_mode": "fly",
"type": "path",
"x": 7688.1035,
"y": -2078.8438
},
{
"action": "",
"action_params": "",
"id": 9,
"move_mode": "walk",
"type": "target",
"x": 7694.1895,
"y": -2078.1572
},
{
"action": "",
"action_params": "",
"id": 10,
"move_mode": "walk",
"type": "path",
"x": 7697.1973,
"y": -2084.5713
},
{
"action": "",
"action_params": "",
"id": 11,
"move_mode": "walk",
"type": "target",
"x": 7697.0703,
"y": -2087.8652
},
{
"action": "",
"action_params": "",
"id": 12,
"move_mode": "fly",
"type": "path",
"x": 7699.5137,
"y": -2093.1484
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 13,
"move_mode": "walk",
"type": "path",
"x": 7704.1191,
"y": -2098.0195
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 14,
"move_mode": "walk",
"type": "path",
"x": 7704.123,
"y": -2098.0234
}
]
}

View File

@@ -0,0 +1,86 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768102726784,
"map_match_method": "",
"map_name": "Teyvat",
"name": "08-澄晶实-燃素开采研究所-4个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 7647.877,
"y": -2113.0664
},
{
"action": "stop_flying",
"action_params": "",
"id": 2,
"locked": false,
"move_mode": "fly",
"type": "target",
"x": 7612.707,
"y": -2126.8447
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 3,
"move_mode": "walk",
"type": "target",
"x": 7612.707,
"y": -2126.8447
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "fly",
"type": "path",
"x": 7610.5957,
"y": -2133.2744
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "walk",
"type": "path",
"x": 7613.251,
"y": -2163.3652
},
{
"action": "",
"action_params": "",
"id": 6,
"move_mode": "fly",
"type": "path",
"x": 7619.2305,
"y": -2175.4648
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 7,
"move_mode": "walk",
"type": "target",
"x": 7617.9092,
"y": -2173.9453
}
]
}

View File

@@ -0,0 +1,94 @@
{
"info": {
"authors": [
{
"links": "https://github.com/Hijiwos",
"name": "提瓦特钓鱼玳师"
}
],
"bgi_version": "0.52.0",
"description": "",
"enable_monster_loot_split": false,
"last_modified_time": 1768102850423,
"map_match_method": "",
"map_name": "Teyvat",
"name": "09-澄晶实-燃素开采研究所-4个",
"tags": [],
"type": "collect",
"version": "1.0"
},
"positions": [
{
"action": "",
"action_params": "",
"id": 1,
"move_mode": "walk",
"type": "teleport",
"x": 7647.877,
"y": -2113.0664
},
{
"action": "",
"action_params": "",
"id": 2,
"move_mode": "walk",
"type": "path",
"x": 7639.623,
"y": -2108.4912
},
{
"action": "",
"action_params": "",
"id": 3,
"move_mode": "walk",
"type": "path",
"x": 7623.6367,
"y": -2112.3145
},
{
"action": "",
"action_params": "",
"id": 4,
"move_mode": "walk",
"type": "path",
"x": 7614.3477,
"y": -2115.2725
},
{
"action": "",
"action_params": "",
"id": 5,
"move_mode": "fly",
"type": "path",
"x": 7573.0303,
"y": -2133.8008
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 6,
"move_mode": "walk",
"type": "target",
"x": 7579.6934,
"y": -2129.876
},
{
"action": "",
"action_params": "",
"id": 7,
"move_mode": "walk",
"type": "path",
"x": 7570.1543,
"y": -2137.4121
},
{
"action": "combat_script",
"action_params": "wait(0.5),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f),wait(0.2),keypress(f)",
"id": 8,
"move_mode": "walk",
"type": "target",
"x": 7576.3057,
"y": -2142.7227
}
]
}

View File

@@ -0,0 +1,6 @@
任意角色可用仅缺少火榴树根系·地热的流涌地图的2个点位共计4个澄晶实
注意:
- 01 02 03 09 有小概率碰到熔岩掉血
- 04 05 06 07 08 有概率掉进熔岩暴毙