Compare commits
11 Commits
91fd9eeb2f
...
3c1df8dbc8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c1df8dbc8 | ||
|
|
514efa5041 | ||
|
|
b7e82972a7 | ||
|
|
a522fc7c0a | ||
|
|
6453625ebb | ||
|
|
928b66d622 | ||
|
|
1f76f4419f | ||
|
|
31535c8bbe | ||
|
|
ca9819299f | ||
|
|
a60bc2717e | ||
|
|
24f70e0fe2 |
244
repo.json
244
repo.json
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"time": "20250716095734",
|
||||
"time": "20250716235110",
|
||||
"url": "https://github.com/babalae/bettergi-scripts-list/archive/refs/heads/main.zip",
|
||||
"file": "repo.json",
|
||||
"indexes": [
|
||||
@@ -54268,6 +54268,214 @@
|
||||
"有攀爬"
|
||||
],
|
||||
"lastUpdated": "2025-07-07 22:32:48"
|
||||
},
|
||||
{
|
||||
"name": "A33-甜甜花-蒙德-风龙废墟-4个.json",
|
||||
"type": "file",
|
||||
"hash": "066f926e06e17101cf436c32f523ac6b276360e8",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花",
|
||||
"低效"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 09:39:33"
|
||||
},
|
||||
{
|
||||
"name": "A34-甜甜花-蒙德-风龙废墟-4个.json",
|
||||
"type": "file",
|
||||
"hash": "db3aed05afcfaf19154ba86af01ce15d6347006b",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花",
|
||||
"低效"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 09:39:33"
|
||||
},
|
||||
{
|
||||
"name": "A35-甜甜花-蒙德-风龙废墟-2个.json",
|
||||
"type": "file",
|
||||
"hash": "2aae41c9936b320d94c320e67cef8d9a87885bf2",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 09:39:33"
|
||||
},
|
||||
{
|
||||
"name": "A36-甜甜花-蒙德-风龙废墟-6个.json",
|
||||
"type": "file",
|
||||
"hash": "0e6e4684f28a1129a044f70e9eb4814e88bf5443",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花",
|
||||
"低效",
|
||||
"有攀爬"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 09:39:33"
|
||||
},
|
||||
{
|
||||
"name": "A37-甜甜花-蒙德-风龙废墟-3个.json",
|
||||
"type": "file",
|
||||
"hash": "4add96bbd9f174925bd90f7706a2cf790e299391",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花",
|
||||
"低效",
|
||||
"有攀爬"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 15:47:26"
|
||||
},
|
||||
{
|
||||
"name": "A38-甜甜花-蒙德-风龙废墟-6个.json",
|
||||
"type": "file",
|
||||
"hash": "7d33df40b07a34c5b690ce69638cae418740a5a6",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 15:47:26"
|
||||
},
|
||||
{
|
||||
"name": "A39-甜甜花-蒙德-风龙废墟-4个.json",
|
||||
"type": "file",
|
||||
"hash": "e0462b390c79d35ba806920e461f5189084e490a",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 15:47:26"
|
||||
},
|
||||
{
|
||||
"name": "A40-甜甜花-蒙德-风龙废墟-8个.json",
|
||||
"type": "file",
|
||||
"hash": "0aabd690c39470e1a103d4db11cbea0755bf9510",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 15:47:26"
|
||||
},
|
||||
{
|
||||
"name": "A41-甜甜花-蒙德-苍风高地-2个.json",
|
||||
"type": "file",
|
||||
"hash": "5c8c84c09c1814f4533dd349b9e2c2c8daf2a86e",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 15:47:26"
|
||||
},
|
||||
{
|
||||
"name": "A42-甜甜花-蒙德-达达乌帕谷-15个.json",
|
||||
"type": "file",
|
||||
"hash": "cc2d415d6bda21d0485cc8af7f323a357ab9dca4",
|
||||
"version": "1.0",
|
||||
"author": "ddaodan",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"link": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"description": "",
|
||||
"tags": [
|
||||
"bgi≥0.45.0",
|
||||
"食材与炼金",
|
||||
"甜甜花",
|
||||
"高危",
|
||||
"有攀爬"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 15:47:26"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -69851,8 +70059,8 @@
|
||||
{
|
||||
"name": "AutoArtifactsPro",
|
||||
"type": "directory",
|
||||
"hash": "91e64bdd4ad99409db27bef0bddd374d7f689963",
|
||||
"version": "1.5.9",
|
||||
"hash": "33118569eaed8e7a60807f024c159625ef1cb1a1",
|
||||
"version": "1.6.0",
|
||||
"author": "mno",
|
||||
"authors": [
|
||||
{
|
||||
@@ -69873,7 +70081,7 @@
|
||||
"好感",
|
||||
"狗粮"
|
||||
],
|
||||
"lastUpdated": "2025-07-16 09:57:16"
|
||||
"lastUpdated": "2025-07-16 23:50:56"
|
||||
},
|
||||
{
|
||||
"name": "AutoArtifactsSalvageOrDestroy(1-4star)",
|
||||
@@ -70008,26 +70216,25 @@
|
||||
{
|
||||
"name": "AutoFishingTeyvat",
|
||||
"type": "directory",
|
||||
"hash": "8874e17c60404321d06767a805e126f410d73850",
|
||||
"version": "2.1.0",
|
||||
"hash": "4761d1f2b75fa0a4662707e12165bee8c1b9c0bc",
|
||||
"version": "2.2.0",
|
||||
"author": "提瓦特钓鱼玳师",
|
||||
"authors": [
|
||||
{
|
||||
"name": "提瓦特钓鱼玳师",
|
||||
"link": "https://github.com/Hijiwos"
|
||||
"name": "提瓦特钓鱼玳师"
|
||||
}
|
||||
],
|
||||
"description": "提瓦特自动钓鱼(全流程+自选)~|~脚本名称:提瓦特自动钓鱼(全流程+自选)\n功能描述:支持自动追踪并垂钓bgi支持的全提瓦特垂钓点\n核心功能------------------------------>\n1.可自选地区、鱼类、鱼饵\n2.可直接钓取特定物品的兑换材料(例如渔获)\n3.脚本会根据需要的鱼类自动调节时间,不需要的时段会跳过\n4.支持部分地图追踪无法到达的钓鱼点(例如炽岩斗士急流鱼钓鱼点,枫丹廷东北钓鱼点、雷鸣仙垂钓点)\n5.支持从特定的垂钓点继续任务(仅启用所有垂钓点时可用)\n6.默认禁用需要战斗的路线,如有需要请在JS脚本配置内启用\n7.支持自定义钓鱼超时时间\n8.支持设置定时关闭(最多24小时)\n9.4点自动领取月卡(可选)\n10.启用自动拾取(可选)\n注意事项------------------------------>\n1.部分点位涉及战斗,且队伍内不能有双风和跑步(不是冲刺)时加移速的角色\n2.跑图位必须是少男体型(防止键鼠路线[GCM]出错)\n3.同时选择鱼类和鱼饵的情况下按照以下逻辑选择路线: 所有被选的鱼类会被加入任务列表,如果选择的鱼饵中某个鱼饵不是已选的任何一个鱼类的对应的鱼饵,那么这个鱼饵对应的所有鱼类将被添加到任务列表\n4.JS脚本的设置内各设置项含有优先级,如果存在高优先级且选项不为默认,则只有最高优先级的设置项生效\n5.部分钓鱼点为路径追踪+键鼠脚本(GCM)的混合模式,可能会出现因键鼠脚本误差卡死的情况,如果出现这种情况,请在JS脚本设置禁用键鼠路线来禁用所有包含键鼠脚本的钓鱼点\n---------------------------------------->\n作者:提瓦特钓鱼玳师\n脚本反馈邮箱:hijiwos@hotmail.com",
|
||||
"description": "提瓦特自动钓鱼(全流程+自选)~|~脚本名称:提瓦特自动钓鱼(全流程+自选)\n功能描述:支持自动追踪并垂钓bgi支持的全提瓦特垂钓点\n核心功能------------------------------>\n1.可自选地区、鱼类、鱼饵\n2.可直接钓取特定物品的兑换材料(例如渔获)\n3.脚本会根据需要的鱼类自动调节时间,不需要的时段会跳过\n4.支持部分地图追踪无法到达的钓鱼点(例如炽岩斗士急流鱼钓鱼点,枫丹廷东北钓鱼点、雷鸣仙垂钓点)\n5.支持从特定的垂钓点继续任务(仅启用所有垂钓点时可用)\n6.默认禁用需要战斗的路线,如有需要请在JS脚本配置内启用\n7.支持自定义钓鱼超时时间\n8.支持设置定时关闭(最多24小时)\n9.4点自动领取月卡(可选)\n10.自动记录垂钓点冷却时间(进入其他世界钓鱼时请关闭此功能)\n11.启用自动拾取(可选)\n注意事项------------------------------>\n1.部分点位涉及战斗,且队伍内不能有双风和跑步(不是冲刺)时加移速的角色\n2.跑图位必须是少男体型(防止键鼠路线[GCM]出错)\n3.同时选择鱼类和鱼饵的情况下按照以下逻辑选择路线: 所有被选的鱼类会被加入任务列表,如果选择的鱼饵中某个鱼饵不是已选的任何一个鱼类的对应的鱼饵,那么这个鱼饵对应的所有鱼类将被添加到任务列表\n4.JS脚本的设置内各设置项含有优先级,如果存在高优先级且选项不为默认,则只有最高优先级的设置项生效\n5.部分钓鱼点为路径追踪+键鼠脚本(GCM)的混合模式,可能会出现因键鼠脚本误差卡死的情况,如果出现这种情况,请在JS脚本设置禁用键鼠路线来禁用所有包含键鼠脚本的钓鱼点\n---------------------------------------->\n作者:提瓦特钓鱼玳师\n脚本反馈邮箱:hijiwos@hotmail.com",
|
||||
"tags": [
|
||||
"bgi≥0.45.0"
|
||||
"bgi≥0.47.0"
|
||||
],
|
||||
"lastUpdated": "2025-07-04 23:14:44"
|
||||
"lastUpdated": "2025-07-16 23:13:14"
|
||||
},
|
||||
{
|
||||
"name": "AutoFontaineLeyLine",
|
||||
"type": "directory",
|
||||
"hash": "1e78dc4177521447d9857823e0ae92d040484df8",
|
||||
"version": "3.2",
|
||||
"hash": "343c42b201fe5653a1f7e16b7220039ac70fab0b",
|
||||
"version": "3.3",
|
||||
"author": "LCB-茶包",
|
||||
"authors": [
|
||||
{
|
||||
@@ -70052,7 +70259,7 @@
|
||||
"bgi≥0.44.8",
|
||||
"地脉花"
|
||||
],
|
||||
"lastUpdated": "2025-07-05 00:27:26"
|
||||
"lastUpdated": "2025-07-16 23:13:30"
|
||||
},
|
||||
{
|
||||
"name": "AutoFriendshipEvilBaresItsFangsGetRawMeat",
|
||||
@@ -71537,20 +71744,19 @@
|
||||
{
|
||||
"name": "背包材料统计",
|
||||
"type": "directory",
|
||||
"hash": "753304af508f67bab5ff4cf3e72c0f105a680471",
|
||||
"version": "2.30",
|
||||
"hash": "b7b88b787e58d2d43a6efa87320db50ee896e4a0",
|
||||
"version": "2.40",
|
||||
"author": "吉吉喵",
|
||||
"authors": [
|
||||
{
|
||||
"name": "吉吉喵",
|
||||
"link": "https://github.com/JJMdzh"
|
||||
"name": "吉吉喵"
|
||||
}
|
||||
],
|
||||
"description": "背包统计采集系统~|~默认四行为一页;模板匹配材料,OCR识别数量。\n数字太小可能无法识别,用?代替。\n目前支持采集材料的数量统计+路径CD管理。",
|
||||
"tags": [
|
||||
"bgi≥0.44.8"
|
||||
],
|
||||
"lastUpdated": "2025-07-04 23:14:44"
|
||||
"lastUpdated": "2025-07-16 23:47:39"
|
||||
},
|
||||
{
|
||||
"name": "自动领取成就奖励",
|
||||
|
||||
@@ -171,7 +171,8 @@ https://www.kdocs.cn/wo/sl/v13uXscL
|
||||
|
||||
|
||||
## 更新日志
|
||||
|
||||
### 1.6.0(2025.07.16)
|
||||
1.新增摧毁换取摩拉的选项和沿途分解选项
|
||||
### 1.5.9(2025.07.15)
|
||||
1.微调(激活大炮第二炮掉出影响/204卡木条/216避开穷点/224避开书本/302微调/405微调/407微调/428微调/605微调)
|
||||
### 1.5.7(2025.07.13)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
@@ -9,6 +9,9 @@ let finished = false;
|
||||
const accountName = settings.accountName || "默认账户";
|
||||
let version = "default";
|
||||
let runnedToday = false;
|
||||
let artifactExperienceDiff = 0;
|
||||
let moraDiff = 0;
|
||||
let pathIndex = 0;
|
||||
|
||||
//预处理
|
||||
const minIntervalTime = settings.minIntervalTime || "5";
|
||||
@@ -20,6 +23,7 @@ const runActivatePath = settings.runActivatePath || false;
|
||||
let enemyType = "无";
|
||||
|
||||
(async function () {
|
||||
setGameMetrics(1920, 1080, 1);
|
||||
//伪造js结束记录
|
||||
await fakeLog("自动狗粮重制版", true, true, 0);
|
||||
|
||||
@@ -370,8 +374,12 @@ let enemyType = "无";
|
||||
}
|
||||
|
||||
//运行前按自定义配置清理狗粮
|
||||
const result1 = await decomposeArtifacts(settings.keep4Star, settings.doDecompose);
|
||||
|
||||
if (settings.decomposeMode === "分解(经验瓶)") {
|
||||
await processArtifacts(21);
|
||||
} else {
|
||||
artifactExperienceDiff -= await processArtifacts(21);
|
||||
}
|
||||
moraDiff -= await mora();
|
||||
artifacts: {
|
||||
if (runnedToday && finished) {
|
||||
break artifacts;
|
||||
@@ -379,19 +387,9 @@ let enemyType = "无";
|
||||
|
||||
// 开始运行狗粮路线
|
||||
let runArtifactsResult = true;
|
||||
|
||||
runArtifactsResult = await runArtifactsPaths(runRouteA, grindPartyName, settings.useABE);
|
||||
const result2 = await decomposeArtifacts(settings.keep4Star, settings.doDecompose);
|
||||
// 计算 mora 和 artifactExperience 的差值
|
||||
const moraDiff = Number(result2.mora) - Number(result1.mora); // 将字符串转换为数字后计算差值
|
||||
let artifactExperienceDiff;
|
||||
if (!settings.doDecompose) {
|
||||
artifactExperienceDiff = result2.artifactExperience - result1.artifactExperience;
|
||||
} else {
|
||||
artifactExperienceDiff = result2.artifactExperience;
|
||||
}
|
||||
|
||||
|
||||
artifactExperienceDiff += await processArtifacts(21);
|
||||
moraDiff += await mora();
|
||||
log.info(`狗粮路线获取摩拉: ${moraDiff}`);
|
||||
log.info(`狗粮路线获取狗粮经验: ${artifactExperienceDiff}`);
|
||||
|
||||
@@ -503,6 +501,10 @@ async function runArtifactsPaths(runRouteA, grindPartyName, useABE) {
|
||||
|
||||
// 执行地图追踪文件
|
||||
for (const fileName of jsonFilePaths) {
|
||||
pathIndex++;
|
||||
if ((pathIndex % 5 === 0) && settings.autoSalvage && settings.decomposeMode != "保留") {
|
||||
artifactExperienceDiff += await processArtifacts(1);
|
||||
}
|
||||
const fullPath = fileName;
|
||||
await fakeLog(fileName, false, true, 0);
|
||||
currentTask += 1; // 更新当前任务计数器
|
||||
@@ -934,12 +936,6 @@ function validateTimeoutSetting(value, defaultValue, timeoutType) {
|
||||
return timeout;
|
||||
}
|
||||
|
||||
// 定义替换映射表
|
||||
const replacementMap = {
|
||||
"监": "盐",
|
||||
"卵": "卯"
|
||||
};
|
||||
|
||||
// 定义所有图标的图像识别对象,每个图片都有自己的识别区域
|
||||
let CharacterMenuRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/CharacterMenu.png"), 60, 991, 38, 38);
|
||||
|
||||
@@ -974,12 +970,7 @@ async function recognizeTextAndClick(targetText, ocrRegion, timeout = 3000) {
|
||||
let resList = captureGameRegion().findMulti(RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height)); // 指定识别区域
|
||||
// 遍历识别结果,检查是否找到目标文本
|
||||
for (let res of resList) {
|
||||
// 后处理:根据替换映射表检查和替换错误识别的字符
|
||||
let correctedText = res.text;
|
||||
for (let [wrongChar, correctChar] of Object.entries(replacementMap)) {
|
||||
correctedText = correctedText.replace(new RegExp(wrongChar, 'g'), correctChar);
|
||||
}
|
||||
|
||||
if (correctedText.includes(targetText)) {
|
||||
// 如果找到目标文本,计算并点击文字的中心坐标
|
||||
let centerX = Math.round(res.x + res.width / 2);
|
||||
@@ -1024,7 +1015,7 @@ async function recognizeTextInRegion(ocrRegion, timeout = 5000) {
|
||||
}
|
||||
} catch (error) {
|
||||
retryCount++; // 增加重试计数
|
||||
log.warn(`OCR 摩拉数识别失败,正在进行第 ${retryCount} 次重试...`);
|
||||
log.warn(`OCR 识别失败,正在进行第 ${retryCount} 次重试...`);
|
||||
}
|
||||
await sleep(500); // 短暂延迟,避免过快循环
|
||||
}
|
||||
@@ -1032,59 +1023,7 @@ async function recognizeTextInRegion(ocrRegion, timeout = 5000) {
|
||||
return null; // 如果未识别到文字,返回 null
|
||||
}
|
||||
|
||||
async function decomposeArtifacts(keep4Star, doDecompose) {
|
||||
setGameMetrics(1920, 1080, 1);
|
||||
await genshin.returnMainUi();
|
||||
|
||||
// 按下 C 键
|
||||
keyPress("C");
|
||||
await sleep(1500);
|
||||
|
||||
let recognized = false;
|
||||
|
||||
// 识别“角色菜单”图标或“天赋”文字
|
||||
let startTime = Date.now();
|
||||
while (Date.now() - startTime < 5000) {
|
||||
// 尝试识别“角色菜单”图标
|
||||
let characterMenuResult = await recognizeImage(CharacterMenuRo, 5000);
|
||||
if (characterMenuResult.success) {
|
||||
await click(177, 433);
|
||||
await sleep(500);
|
||||
recognized = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// 尝试识别“天赋”文字
|
||||
let targetText = "天赋";
|
||||
let ocrRegion = { x: 133, y: 395, width: 115, height: 70 }; // 设置对应的识别区域
|
||||
let talentResult = await recognizeTextAndClick(targetText, ocrRegion);
|
||||
if (talentResult.success) {
|
||||
log.info(`点击天赋文字,坐标: x=${talentResult.x}, y=${talentResult.y}`);
|
||||
recognized = true;
|
||||
break;
|
||||
}
|
||||
|
||||
await sleep(1000); // 短暂延迟,避免过快循环
|
||||
}
|
||||
|
||||
let recognizedText = "";
|
||||
|
||||
// 如果识别到了“角色菜单”或“天赋”,则识别“摩拉数值”
|
||||
if (recognized) {
|
||||
let ocrRegionMora = { x: 1620, y: 25, width: 152, height: 46 }; // 设置对应的识别区域
|
||||
recognizedText = await recognizeTextInRegion(ocrRegionMora);
|
||||
if (recognizedText) {
|
||||
log.info(`成功识别到摩拉数值: ${recognizedText}`);
|
||||
|
||||
} else {
|
||||
log.warn("未能识别到摩拉数值。");
|
||||
}
|
||||
} else {
|
||||
log.warn("未能识别到角色菜单或天赋,跳过摩拉数值识别。");
|
||||
}
|
||||
await sleep(500);
|
||||
await genshin.returnMainUi();
|
||||
|
||||
async function decomposeArtifacts() {
|
||||
keyPress("B");
|
||||
await sleep(1000);
|
||||
await click(670, 45);
|
||||
@@ -1109,7 +1048,7 @@ async function decomposeArtifacts(keep4Star, doDecompose) {
|
||||
let firstNumber = 0;
|
||||
let firstNumber2 = 0;
|
||||
|
||||
if (keep4Star) {
|
||||
if (settings.keep4Star) {
|
||||
await recognizeTextAndClick("快速选择", { x: 248, y: 996, width: 121, height: 49 });
|
||||
moveMouseTo(960, 540);
|
||||
await sleep(1000);
|
||||
@@ -1140,7 +1079,7 @@ async function decomposeArtifacts(keep4Star, doDecompose) {
|
||||
moveMouseTo(960, 540);
|
||||
await sleep(1000);
|
||||
|
||||
if (keep4Star) {
|
||||
if (settings.keep4Star) {
|
||||
await click(370, 370);//取消选择四星
|
||||
await sleep(1000);
|
||||
}
|
||||
@@ -1172,7 +1111,7 @@ async function decomposeArtifacts(keep4Star, doDecompose) {
|
||||
log.warn(`在指定区域未识别到有效数字: ${newValue}`);
|
||||
}
|
||||
|
||||
if (doDecompose) {
|
||||
if (settings.decomposeMode === "分解(经验瓶)") {
|
||||
log.info(`用户选择了分解,执行分解`);
|
||||
// 根据用户配置,分解狗粮
|
||||
await sleep(1000);
|
||||
@@ -1203,12 +1142,136 @@ async function decomposeArtifacts(keep4Star, doDecompose) {
|
||||
if (resultExperience === 0) {
|
||||
resultExperience = initialValue;
|
||||
}
|
||||
const result = {
|
||||
mora: recognizedText, // 将 recognizedText 赋值给 mora
|
||||
artifactExperience: resultExperience,
|
||||
fourStarNum: fourStarNum
|
||||
};
|
||||
const result = resultExperience;
|
||||
await genshin.returnMainUi();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 摧毁圣遗物换摩拉
|
||||
*/
|
||||
async function destroyArtifacts(times = 1) {
|
||||
const ArtifactsButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/ArtifactsButton.png"));
|
||||
const DeleteButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/DeleteButton.png"));
|
||||
const AutoAddButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/AutoAddButton.png"));
|
||||
const ConfirmButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/ConfirmButton.png"));
|
||||
const DestoryButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/DestoryButton.png"));
|
||||
const MidDestoryButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("Assets/RecognitionObject/DestoryButton.png"), 900, 600, 500, 300);
|
||||
await genshin.returnMainUi();
|
||||
keyPress("B");
|
||||
await sleep(1500);
|
||||
|
||||
let ArtifactsButton = captureGameRegion().find(ArtifactsButtonRo);
|
||||
if (ArtifactsButton.isExist()) {
|
||||
log.info("识别到圣遗物按钮");
|
||||
ArtifactsButton.click();
|
||||
await sleep(1500);
|
||||
}
|
||||
|
||||
try {
|
||||
for (let i = 0; i < times; i++) {
|
||||
captureGameRegion().find(DeleteButtonRo).click();// 点击摧毁
|
||||
await sleep(600);
|
||||
captureGameRegion().find(AutoAddButtonRo).click();// 点击自动添加
|
||||
await sleep(600);
|
||||
await sleep(300);
|
||||
click(150, 150);
|
||||
await sleep(300);
|
||||
click(150, 220);
|
||||
await sleep(300);
|
||||
click(150, 300);
|
||||
if (!settings.keep4Star) {
|
||||
await sleep(300);
|
||||
click(150, 370);
|
||||
}
|
||||
captureGameRegion().find(ConfirmButtonRo).click();// 点击快捷放入
|
||||
await sleep(600);
|
||||
captureGameRegion().find(DestoryButtonRo).click();// 点击摧毁
|
||||
await sleep(600);
|
||||
captureGameRegion().find(MidDestoryButtonRo).click();// 弹出页面点击摧毁
|
||||
await sleep(600);
|
||||
click(960, 1000);// 点击空白处
|
||||
await sleep(1000);
|
||||
}
|
||||
} catch (ex) {
|
||||
log.info("背包里的圣遗物已摧毁完毕,提前结束")
|
||||
} finally {
|
||||
await genshin.returnMainUi();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async function processArtifacts(times = 1) {
|
||||
await genshin.returnMainUi();
|
||||
let result = 0;
|
||||
try {
|
||||
if (settings.decomposeMode === "销毁(摩拉)") {
|
||||
result = await destroyArtifacts(times);
|
||||
} else {
|
||||
result = await decomposeArtifacts();
|
||||
}
|
||||
} catch (error) {
|
||||
log.error(`处理狗粮分解时发生异常: ${error.message}`);
|
||||
}
|
||||
await genshin.returnMainUi();
|
||||
return result;
|
||||
}
|
||||
|
||||
async function mora() {
|
||||
let result = 0;
|
||||
let tryTimes = 0;
|
||||
while (result = 0 && tryTimes < 3) {
|
||||
await genshin.returnMainUi();
|
||||
|
||||
// 按下 C 键
|
||||
keyPress("C");
|
||||
await sleep(1500);
|
||||
|
||||
let recognized = false;
|
||||
|
||||
// 识别“角色菜单”图标或“天赋”文字
|
||||
let startTime = Date.now();
|
||||
while (Date.now() - startTime < 5000) {
|
||||
// 尝试识别“角色菜单”图标
|
||||
let characterMenuResult = await recognizeImage(CharacterMenuRo, 5000);
|
||||
if (characterMenuResult.success) {
|
||||
await click(177, 433);
|
||||
await sleep(500);
|
||||
recognized = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// 尝试识别“天赋”文字
|
||||
let targetText = "天赋";
|
||||
let ocrRegion = { x: 133, y: 395, width: 115, height: 70 }; // 设置对应的识别区域
|
||||
let talentResult = await recognizeTextAndClick(targetText, ocrRegion);
|
||||
if (talentResult.success) {
|
||||
log.info(`点击天赋文字,坐标: x=${talentResult.x}, y=${talentResult.y}`);
|
||||
recognized = true;
|
||||
break;
|
||||
}
|
||||
|
||||
await sleep(1000); // 短暂延迟,避免过快循环
|
||||
}
|
||||
|
||||
let recognizedText = "";
|
||||
|
||||
// 如果识别到了“角色菜单”或“天赋”,则识别“摩拉数值”
|
||||
if (recognized) {
|
||||
let ocrRegionMora = { x: 1620, y: 25, width: 152, height: 46 }; // 设置对应的识别区域
|
||||
recognizedText = await recognizeTextInRegion(ocrRegionMora);
|
||||
if (recognizedText) {
|
||||
log.info(`成功识别到摩拉数值: ${recognizedText}`);
|
||||
result = recognizedText;
|
||||
} else {
|
||||
log.warn("未能识别到摩拉数值。");
|
||||
}
|
||||
} else {
|
||||
log.warn("未能识别到角色菜单或天赋");
|
||||
}
|
||||
await sleep(500);
|
||||
tryTimes++;
|
||||
await genshin.returnMainUi();
|
||||
}
|
||||
return Number(result);
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "自动狗粮重制版",
|
||||
"version": "1.5.9",
|
||||
"version": "1.6.0",
|
||||
"tags": [
|
||||
"好感",
|
||||
"狗粮"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
{
|
||||
"name": "runActivatePath",
|
||||
"type": "checkbox",
|
||||
"label": "是否启用激活路线,启用后将先花费约3分钟激活狗粮点\n启用该选项后可提高稳定性,并允许中断后重新运行和极大降低最短间隔时间"
|
||||
"label": "是否启用激活路线,启用后将先花费约5分钟激活狗粮点\n启用该选项后可提高稳定性,并允许极大降低最短间隔时间"
|
||||
},
|
||||
{
|
||||
"name": "useABE",
|
||||
@@ -47,15 +47,26 @@
|
||||
"default": "狗粮"
|
||||
},
|
||||
{
|
||||
"name": "doDecompose",
|
||||
"type": "checkbox",
|
||||
"label": "是否分解狗粮(默认不分解)"
|
||||
"name": "decomposeMode",
|
||||
"type": "select",
|
||||
"label": "狗粮分解模式",
|
||||
"options": [
|
||||
"保留",
|
||||
"分解(经验瓶)",
|
||||
"销毁(摩拉)"
|
||||
],
|
||||
"default": "保留"
|
||||
},
|
||||
{
|
||||
"name": "keep4Star",
|
||||
"type": "checkbox",
|
||||
"label": "是否保留四星(默认不保留)"
|
||||
},
|
||||
{
|
||||
"name": "autoSalvage",
|
||||
"type": "checkbox",
|
||||
"label": "是否沿路自动分解(默认:否)"
|
||||
},
|
||||
{
|
||||
"name": "minIntervalTime",
|
||||
"type": "input-text",
|
||||
|
||||
31
repo/js/AutoFishingTeyvat/READEME.md
Normal file
31
repo/js/AutoFishingTeyvat/READEME.md
Normal file
@@ -0,0 +1,31 @@
|
||||
脚本名称:提瓦特自动钓鱼(全流程+自选)
|
||||
|
||||
功能描述:支持自动追踪并垂钓bgi支持的全提瓦特垂钓点
|
||||
|
||||
## 核心功能
|
||||
|
||||
1. 可自选地区、鱼类、鱼饵
|
||||
2. 可直接钓取特定物品的兑换材料(例如渔获)
|
||||
3. 脚本会根据需要的鱼类自动调节时间,不需要的时段会跳过
|
||||
4. 支持部分地图追踪无法到达的钓鱼点(例如炽岩斗士急流鱼钓鱼点,枫丹廷东北钓鱼点、雷鸣仙垂钓点)
|
||||
5. 支持从特定的垂钓点继续任务(仅启用所有垂钓点时可用)
|
||||
6. 默认禁用需要战斗的路线,如有需要请在JS脚本配置内启用
|
||||
7. 支持自定义钓鱼超时时间
|
||||
8. 支持设置定时关闭(最多24小时)
|
||||
9. 4点自动领取月卡(可选)
|
||||
10. 自动记录垂钓点冷却时间(进入其他世界钓鱼时请关闭此功能)
|
||||
11. 启用自动拾取(可选)
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 部分点位涉及战斗,且队伍内不能有双风和跑步(不是冲刺)时加移速的角色
|
||||
2. 跑图位必须是少男体型(防止键鼠路线[GCM]出错)
|
||||
3. 同时选择鱼类和鱼饵的情况下按照以下逻辑选择路线: 所有被选的鱼类会被加入任务列表,如果选择的鱼饵中某个鱼饵不是已选的任何一个鱼类的对应的鱼饵,那么这个鱼饵对应的所有鱼类将被添加到任务列表
|
||||
4. JS脚本的设置内各设置项含有优先级,如果存在高优先级且选项不为默认,则只有最高优先级的设置项生效
|
||||
5. 部分钓鱼点为路径追踪+键鼠脚本(GCM)的混合模式,可能会出现因键鼠脚本误差卡死的情况,如果出现这种情况,请在JS脚本设置禁用键鼠路线来禁用所有包含键鼠脚本的钓鱼点
|
||||
|
||||
## 其它
|
||||
|
||||
作者:提瓦特钓鱼玳师
|
||||
|
||||
脚本反馈邮箱:hijiwos@hotmail.com
|
||||
@@ -1,4 +1,4 @@
|
||||
(async function () {
|
||||
(async function () { // 多人模式不计CD,CD读写仍有优化空间
|
||||
|
||||
const area_list = ['蒙德', '璃月', '稻妻', '须弥', '枫丹', '纳塔', '至冬', '层岩巨渊·地下矿区', '渊下宫']
|
||||
const fish_list = ['花鳉', '波波心羽鲈', '烘烘心羽鲈', '维护机关·水域清理者', '维护机关·态势控制者', '维护机关·澄金领队型', '海涛斧枪鱼', '维护机关·初始能力型', '维护机关·白金典藏型', '吹沙角鲀', '甜甜花鳉', '擒霞客', '水晶宴', '斗棘鱼', '炮鲀', '流纹褐蝶鱼', '锖假龙', '金赤假龙', '玉玉心羽鲈', '赤魔王', '长生仙', '苦炮鲀', '肺棘鱼', '流纹京紫蝶鱼', '琉璃花鳉', '伪装鲨鲨独角鱼', '繁花斗士急流鱼', '深潜斗士急流鱼', '晚霞翻车鲀', '青浪翻车鲀', '拟似燃素独角鱼', '炽岩斗士急流鱼', '蓝染花鳉', '鸩棘鱼', '流纹茶蝶鱼', '雪中君', '真果角鲀', '青金斧枪鱼', '暮云角鲀', '翡玉斧枪鱼', '沉波蜜桃', '雷鸣仙', '佛玛洛鳐', '迪芙妲鳐', '秘源机关·巡戒使']
|
||||
@@ -158,6 +158,95 @@
|
||||
// 存储本次任务中的所有鱼类,作为调节时间的关键参考
|
||||
let list_fish = [];
|
||||
|
||||
/**
|
||||
*
|
||||
* 将毫秒形式的字符串转换为更清晰的时间格式
|
||||
*
|
||||
* @param ms
|
||||
* @returns {string}
|
||||
*/
|
||||
function formatTimeDifference(ms) {
|
||||
ms = Number(ms);
|
||||
// 计算天、小时、分钟、秒
|
||||
const seconds = Math.floor(ms / 1000);
|
||||
const minutes = Math.floor(seconds / 60);
|
||||
const hours = Math.floor(minutes / 60);
|
||||
const days = Math.floor(hours / 24);
|
||||
|
||||
// 计算剩余的小时、分钟、秒
|
||||
const remainingHours = hours % 24;
|
||||
const remainingMinutes = minutes % 60;
|
||||
const remainingSeconds = seconds % 60;
|
||||
|
||||
// 返回格式化字符串
|
||||
return `${days}天 ${remainingHours}小时 ${remainingMinutes}分钟 ${remainingSeconds}秒`;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 垂钓点CD存档写入
|
||||
*
|
||||
* @param {string} pathing_name 路径名称
|
||||
* @param {string} time_status 垂钓点时间状态(白天,夜晚)
|
||||
* @param {string} timestamp 时间戳
|
||||
* @param {string} user_id 原神UID
|
||||
*/
|
||||
function write_archive(pathing_name, time_status, timestamp, user_id) {
|
||||
let assets_dir = Array.from(file.readPathSync("assets"));
|
||||
let content = {};
|
||||
if (assets_dir.includes("assets\\archive.json")) {
|
||||
content = JSON.parse(file.readTextSync("assets/archive.json"));
|
||||
if (time_status === "全天") {
|
||||
content[user_id][pathing_name]["Daytime"] = timestamp;
|
||||
content[user_id][pathing_name]["Nighttime"] = timestamp;
|
||||
} else if (time_status === "白天") {
|
||||
content[user_id][pathing_name]["Daytime"] = timestamp;
|
||||
content[user_id][pathing_name]["Nighttime"] = Object.keys(content[user_id][pathing_name]).includes("Nighttime") ? content[user_id][pathing_name]["Nighttime"]: null;
|
||||
} else if (time_status === "夜晚") {
|
||||
content[user_id][pathing_name]["Daytime"] = Object.keys(content[user_id][pathing_name]).includes("Daytime") ? content[user_id][pathing_name]["Daytime"]: null;
|
||||
content[user_id][pathing_name]["Nighttime"] = timestamp;
|
||||
}
|
||||
|
||||
} else {
|
||||
content[user_id] = {};
|
||||
content[user_id][pathing_name] = {
|
||||
"Daytime": time_status === "白天" || time_status === "全天" ? timestamp : null,
|
||||
"Nighttime": time_status === "夜晚" || time_status === "全天" ? timestamp : null
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
file.WriteTextSync("assets/archive.json", JSON.stringify(content, null, 2), false);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 垂钓点CD存档读取
|
||||
*
|
||||
* @param {string} pathing_name 路径名称
|
||||
* @param {string} user_id 原神UID
|
||||
*
|
||||
* @return Daytime/Nighttime 字典
|
||||
*/
|
||||
function read_archive(pathing_name, user_id) {
|
||||
let assets_dir = Array.from(file.readPathSync("assets"));
|
||||
|
||||
if (assets_dir.includes("assets\\archive.json")) {
|
||||
let content = JSON.parse(file.readTextSync("assets/archive.json"));
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取路径包含的信息
|
||||
*
|
||||
@@ -298,7 +387,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
async function run_file(path_msg, time_out_throw, time_out_whole, is_con, block_gcm, block_fight, block_tsurumi, auto_skip) {
|
||||
async function run_file(path_msg, time_out_throw, time_out_whole, is_con, block_gcm, block_fight, block_tsurumi, auto_skip, fishing_cd, uid = "default_user") {
|
||||
const base_path_pathing = "assets/pathing/";
|
||||
const base_path_gcm = "assets/KeyMouseScript/";
|
||||
const base_path_statues = "assets/pathing_statues/";
|
||||
@@ -408,7 +497,65 @@
|
||||
|
||||
log.info(`该钓鱼点的时间: ${fishing_time}`);
|
||||
|
||||
await pathingScript.runFile(base_path_pathing + file_name + ".json");
|
||||
// 检查垂钓点CD
|
||||
if (fishing_cd) {
|
||||
let current_cd = read_archive(file_name, uid);
|
||||
if (current_cd !== null) {
|
||||
const now = Date.now();
|
||||
if (fishing_time === "全天") {
|
||||
let daytime = true;
|
||||
if (current_cd["Daytime"] !== null) {
|
||||
let difference = now - current_cd["Daytime"];
|
||||
if (difference < 259200000) {
|
||||
log.info(`该垂钓点(白天)处于冷却状态,剩余时间: ${formatTimeDifference(259200000 - difference)}`);
|
||||
log.info(`${file_name}(白天) 已跳过...`);
|
||||
daytime = false;
|
||||
fishing_time = "夜晚";
|
||||
} else {
|
||||
log.info(`该垂钓点(白天)未处于冷却状态,闲置时间: ${formatTimeDifference(difference - 259200000)}`);
|
||||
}
|
||||
}
|
||||
if (current_cd["Nighttime"] !== null) {
|
||||
let difference = now - current_cd["Nighttime"];
|
||||
if (difference < 259200000) {
|
||||
log.info(`该垂钓点(夜晚)处于冷却状态,剩余时间: ${formatTimeDifference(259200000 - difference)}`);
|
||||
log.info(`${file_name}(夜晚) 已跳过...`);
|
||||
if (daytime) {
|
||||
fishing_time = "白天";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
log.info(`该垂钓点(夜晚)未处于冷却状态,闲置时间: ${formatTimeDifference(difference - 259200000)}`);
|
||||
}
|
||||
}
|
||||
} else if (fishing_time === "白天") {
|
||||
if (current_cd["Daytime"] !== null) {
|
||||
let difference = now - current_cd["Daytime"];
|
||||
if (difference < 259200000) {
|
||||
log.info(`该垂钓点(白天)处于冷却状态,剩余时间: ${formatTimeDifference(259200000 - difference)}`);
|
||||
log.info(`${file_name}(白天) 已跳过...`);
|
||||
return null;
|
||||
} else {
|
||||
log.info(`该垂钓点(白天)未处于冷却状态,闲置时间: ${formatTimeDifference(difference - 259200000)}`);
|
||||
}
|
||||
}
|
||||
} else if (fishing_time === "夜晚") {
|
||||
if (current_cd["Nighttime"] !== null) {
|
||||
let difference = now - current_cd["Nighttime"];
|
||||
if (difference < 259200000) {
|
||||
log.info(`该垂钓点(夜晚)处于冷却状态,剩余时间: ${formatTimeDifference(259200000 - difference)}`);
|
||||
log.info(`${file_name}(夜晚) 已跳过...`);
|
||||
return null;
|
||||
} else {
|
||||
log.info(`该垂钓点(夜晚)未处于冷却状态,闲置时间: ${formatTimeDifference(difference - 259200000)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//await pathingScript.runFile(base_path_pathing + file_name + ".json");
|
||||
|
||||
// 执行键鼠脚本
|
||||
if (path_msg["addition"] === "GCM") {
|
||||
@@ -417,11 +564,15 @@
|
||||
|
||||
// 调用自动钓鱼
|
||||
// await genshin.autofishing(fishing_time_dic[fishing_time]["param"]);
|
||||
await dispatcher.runTask(new SoloTask("AutoFishing", {
|
||||
"fishingTimePolicy": fishing_time_dic[fishing_time]["param"],
|
||||
"throwRodTimeOutTimeoutSeconds": time_out_throw,
|
||||
"wholeProcessTimeoutSeconds": time_out_whole
|
||||
}));
|
||||
// await dispatcher.runTask(new SoloTask("AutoFishing", {
|
||||
// "fishingTimePolicy": fishing_time_dic[fishing_time]["param"],
|
||||
// "throwRodTimeOutTimeoutSeconds": time_out_throw,
|
||||
// "wholeProcessTimeoutSeconds": time_out_whole
|
||||
// }));
|
||||
|
||||
if (fishing_cd) {
|
||||
write_archive(file_name, fishing_time, Date.now(), uid);
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
@@ -451,12 +602,33 @@
|
||||
const auto_pick = typeof(settings.auto_pick) === 'undefined' ? false : settings.auto_pick;
|
||||
// 读取4点自动领取月卡的设置
|
||||
const auto_skip = typeof(settings.auto_skip) === 'undefined' ? false : settings.auto_skip;
|
||||
// 读取垂钓点CD统计
|
||||
const fishing_cd = typeof(settings.fishing_cd) === 'undefined' ? false: settings.fishing_cd;
|
||||
// 读取终止时间
|
||||
const kill_hour = typeof(settings.time_kill_hour) === 'undefined' ? "无" : settings.time_kill_hour;
|
||||
const kill_minute = typeof(settings.time_kill_minute) === 'undefined' ? "无" : settings.time_kill_minute;
|
||||
const is_time_kill = kill_hour !== "无" && kill_minute !== "无"; // 判断是否启用
|
||||
let time_target = new Date();
|
||||
|
||||
// 获取当前用户UID
|
||||
let uid = "default_user";
|
||||
if (fishing_cd) {
|
||||
const ocrRo = RecognitionObject.Ocr(166, 198, 120, 22);
|
||||
|
||||
genshin.returnMainUi();
|
||||
await sleep(1000);
|
||||
keyPress("Escape");
|
||||
await sleep(1000);
|
||||
|
||||
let ocr = captureGameRegion().Find(ocrRo); // 当前页面OCR
|
||||
if (ocr.isExist()) {
|
||||
uid = ocr.text;
|
||||
}
|
||||
|
||||
keyPress("Escape");
|
||||
|
||||
}
|
||||
|
||||
if (is_time_kill) {
|
||||
let now = new Date();
|
||||
time_target.setHours(parseInt(kill_hour), 10);
|
||||
@@ -495,8 +667,7 @@
|
||||
}
|
||||
// 路径详细信息
|
||||
const path_msg = get_pathing_msg(path_filter[i]);
|
||||
try {
|
||||
await sleep(100);
|
||||
// try {
|
||||
let current_msg = `${path_msg["area"]}-${path_msg["detail"]}`
|
||||
log.info(`当前钓鱼点: ${current_msg}(进度: ${i + 1}/${path_filter.length})`);
|
||||
if (path_continue === current_msg) {
|
||||
@@ -509,13 +680,13 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
await run_file(path_msg, time_out_throw, time_out_whole, is_con, block_gcm, block_fight, block_tsurumi, auto_skip);
|
||||
} catch (error) {
|
||||
const file_name = `${path_msg["area"]}-${path_msg["type"]}-${path_msg["detail"]}`;
|
||||
log.info(`路径: ${file_name} 执行时出错,已跳过...\n错误信息: ${error}`)
|
||||
}
|
||||
await run_file(path_msg, time_out_throw, time_out_whole, is_con, block_gcm, block_fight, block_tsurumi, auto_skip, fishing_cd, uid);
|
||||
// } catch (error) {
|
||||
// const file_name = `${path_msg["area"]}-${path_msg["type"]}-${path_msg["detail"]}`;
|
||||
// log.info(`路径: ${file_name} 执行时出错,已跳过...\n错误信息: ${error}`)
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
await main();
|
||||
})();
|
||||
})();
|
||||
@@ -1,15 +1,14 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "提瓦特自动钓鱼(全流程+自选)",
|
||||
"version": "2.1.0",
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "脚本名称:提瓦特自动钓鱼(全流程+自选)\n功能描述:支持自动追踪并垂钓bgi支持的全提瓦特垂钓点\n核心功能------------------------------>\n1.可自选地区、鱼类、鱼饵\n2.可直接钓取特定物品的兑换材料(例如渔获)\n3.脚本会根据需要的鱼类自动调节时间,不需要的时段会跳过\n4.支持部分地图追踪无法到达的钓鱼点(例如炽岩斗士急流鱼钓鱼点,枫丹廷东北钓鱼点、雷鸣仙垂钓点)\n5.支持从特定的垂钓点继续任务(仅启用所有垂钓点时可用)\n6.默认禁用需要战斗的路线,如有需要请在JS脚本配置内启用\n7.支持自定义钓鱼超时时间\n8.支持设置定时关闭(最多24小时)\n9.4点自动领取月卡(可选)\n10.启用自动拾取(可选)\n注意事项------------------------------>\n1.部分点位涉及战斗,且队伍内不能有双风和跑步(不是冲刺)时加移速的角色\n2.跑图位必须是少男体型(防止键鼠路线[GCM]出错)\n3.同时选择鱼类和鱼饵的情况下按照以下逻辑选择路线: 所有被选的鱼类会被加入任务列表,如果选择的鱼饵中某个鱼饵不是已选的任何一个鱼类的对应的鱼饵,那么这个鱼饵对应的所有鱼类将被添加到任务列表\n4.JS脚本的设置内各设置项含有优先级,如果存在高优先级且选项不为默认,则只有最高优先级的设置项生效\n5.部分钓鱼点为路径追踪+键鼠脚本(GCM)的混合模式,可能会出现因键鼠脚本误差卡死的情况,如果出现这种情况,请在JS脚本设置禁用键鼠路线来禁用所有包含键鼠脚本的钓鱼点\n---------------------------------------->\n作者:提瓦特钓鱼玳师\n脚本反馈邮箱:hijiwos@hotmail.com",
|
||||
"version": "2.2.0",
|
||||
"bgi_version": "0.47.0",
|
||||
"description": "脚本名称:提瓦特自动钓鱼(全流程+自选)\n功能描述:支持自动追踪并垂钓bgi支持的全提瓦特垂钓点\n核心功能------------------------------>\n1.可自选地区、鱼类、鱼饵\n2.可直接钓取特定物品的兑换材料(例如渔获)\n3.脚本会根据需要的鱼类自动调节时间,不需要的时段会跳过\n4.支持部分地图追踪无法到达的钓鱼点(例如炽岩斗士急流鱼钓鱼点,枫丹廷东北钓鱼点、雷鸣仙垂钓点)\n5.支持从特定的垂钓点继续任务(仅启用所有垂钓点时可用)\n6.默认禁用需要战斗的路线,如有需要请在JS脚本配置内启用\n7.支持自定义钓鱼超时时间\n8.支持设置定时关闭(最多24小时)\n9.4点自动领取月卡(可选)\n10.自动记录垂钓点冷却时间(进入其他世界钓鱼时请关闭此功能)\n11.启用自动拾取(可选)\n注意事项------------------------------>\n1.部分点位涉及战斗,且队伍内不能有双风和跑步(不是冲刺)时加移速的角色\n2.跑图位必须是少男体型(防止键鼠路线[GCM]出错)\n3.同时选择鱼类和鱼饵的情况下按照以下逻辑选择路线: 所有被选的鱼类会被加入任务列表,如果选择的鱼饵中某个鱼饵不是已选的任何一个鱼类的对应的鱼饵,那么这个鱼饵对应的所有鱼类将被添加到任务列表\n4.JS脚本的设置内各设置项含有优先级,如果存在高优先级且选项不为默认,则只有最高优先级的设置项生效\n5.部分钓鱼点为路径追踪+键鼠脚本(GCM)的混合模式,可能会出现因键鼠脚本误差卡死的情况,如果出现这种情况,请在JS脚本设置禁用键鼠路线来禁用所有包含键鼠脚本的钓鱼点\n---------------------------------------->\n作者:提瓦特钓鱼玳师\n脚本反馈邮箱:hijiwos@hotmail.com",
|
||||
"authors": [
|
||||
{
|
||||
"name": "提瓦特钓鱼玳师",
|
||||
"links": "https://github.com/Hijiwos"
|
||||
"name": "提瓦特钓鱼玳师"
|
||||
}
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
"main": "main.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
{
|
||||
"name": "show_info",
|
||||
"type": "input-text",
|
||||
"label": "下方输入的内容用空格隔开、括号内是优先级\n(只会执行当前非默认最高优先级的选项)"
|
||||
"label": "下方输入的内容用空格隔开、括号内是优先级\n(只会执行当前非默认最高优先级的选项)",
|
||||
"default": "该输入框无需输入内容"
|
||||
},
|
||||
{
|
||||
"name": "path_sort_area",
|
||||
@@ -127,22 +128,32 @@
|
||||
{
|
||||
"name": "time_out_throw",
|
||||
"type": "input-text",
|
||||
"label": "自动抛竿未上钩超时时间(秒) 默认: 10"
|
||||
"label": "自动抛竿未上钩超时时间(秒)",
|
||||
"default": 10
|
||||
},
|
||||
{
|
||||
"name": "time_out_whole",
|
||||
"type": "input-text",
|
||||
"label": "整个任务超时时间(秒) 默认: 300"
|
||||
"label": "整个任务超时时间(秒)",
|
||||
"default": 300
|
||||
},
|
||||
{
|
||||
"name": "auto_pick",
|
||||
"type": "checkbox",
|
||||
"label": "启用自动拾取(默认禁用)"
|
||||
"label": "启用自动拾取",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "auto_skip",
|
||||
"type": "checkbox",
|
||||
"label": "启用4点领取月卡(默认禁用)"
|
||||
"label": "启用4点领取月卡",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "fishing_cd",
|
||||
"type": "checkbox",
|
||||
"label": "启用垂钓点CD统计(自动跳过冷却中的垂钓点)",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "time_kill_hour",
|
||||
@@ -247,17 +258,20 @@
|
||||
{
|
||||
"name": "block_gcm",
|
||||
"type": "checkbox",
|
||||
"label": "禁用键鼠路线(默认启用键鼠路线)"
|
||||
"label": "禁用键鼠路线(启用前请自行了解队伍配置要求)",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "block_fight",
|
||||
"type": "checkbox",
|
||||
"label": "启用战斗路线(默认禁用战斗路线)"
|
||||
"label": "启用战斗路线(需要自行配置战斗策略)",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "block_tsurumi",
|
||||
"type": "checkbox",
|
||||
"label": "启用鹤观路线(默认禁用鹤观路线)"
|
||||
"label": "启用鹤观路线(请确保任务已经完成,小道具交互的点位尚不可用)",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "path_select",
|
||||
|
||||
@@ -687,6 +687,7 @@
|
||||
|
||||
//定义领取动作,好感队伍是否添加?
|
||||
async function claimRewards() {
|
||||
await genshin.returnMainUi();
|
||||
log.info(`尝试领取奖励,优先${onerewards}'`);
|
||||
let SHUN01 = await Textocr("接触地脉之花",1.5,2,0,1187,358,200,400);
|
||||
if (SHUN01.found) {
|
||||
@@ -1177,7 +1178,12 @@
|
||||
await sleep(1000);
|
||||
// 领取奖励,开始找地脉口
|
||||
log.info(`开始本线路第 ${executedCount/2+1} 朵花的奖励领取`);
|
||||
if (haoganq==1){log.info(`切换好感队伍:'${haogandui}'`);await genshin.returnMainUi(); await sleep(1000);await genshin.SwitchParty(haogandui);}
|
||||
if (haoganq==1){log.info(
|
||||
`切换好感队伍:'${haogandui}'`);
|
||||
await genshin.returnMainUi();
|
||||
await sleep(1000);
|
||||
if (!await genshin.SwitchParty(haogandui))await genshin.returnMainUi();
|
||||
}
|
||||
shouldContinueChecking = false;
|
||||
await sleep(500);
|
||||
if (!(await claimRewards())) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "全自动枫丹地脉花",
|
||||
"version": "3.2",
|
||||
"version": "3.3",
|
||||
"bgi_version": "0.44.8",
|
||||
"description": "枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800",
|
||||
"tags": [
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时85.01秒,包含以下怪物:1只冰深渊法师、3只冰萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时72.27秒,包含以下怪物:2只冰萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时57.21秒,包含以下怪物:3只冰萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时78.17秒,包含以下怪物:3只冰萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时85.68秒,包含以下怪物:3只冰萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时125.14秒,包含以下怪物:2只冰萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时59.6秒,包含以下怪物:3只水萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时61.37秒,包含以下怪物:1只炽热骗骗花、2只雷萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时174秒,包含以下怪物:1只火箭丘丘人、1只爆弹丘丘人、2只雷萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时43.96秒,包含以下怪物:2只雷萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "collect",
|
||||
"author": "蜜柑魚",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"description": " 路线信息:该路线预计用时66.73秒,包含以下怪物:3只水萤。",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 背包统计采集系统
|
||||
// @version 2.30
|
||||
// @version 2.40
|
||||
// @description 识别路径文件,根据材料数量,自动执行路线,或者主动选择材料类别,统计材料数量
|
||||
// @author 吉吉喵
|
||||
// @match 原神版本:5.6;BGI 版本:0.44.8
|
||||
@@ -79,4 +79,5 @@
|
||||
+ v2.27 修复计算材料数错误、目标数量临界值、"3"识别成"三"等bug
|
||||
+ v2.28 材料更变时初始数量更新;正常记录排除0位移和0数量的路径记录(可能是卡路径,需手动根据0记录去甄别),新增材料名0后缀本地记录;新增背包弹窗识别
|
||||
+ v2.29 新增排除提示;调整平均时间成本计算;过滤掉差异较大的记录;
|
||||
+ v2.30 更改路径专注模式默认值,加log提示;去除注释掉的调试log;背包材料统计更改名为背包统计采集系统
|
||||
+ v2.30 更改路径专注模式默认值,加log提示;去除注释掉的调试log;背包材料统计更改名为背包统计采集系统
|
||||
+ v2.40 优化背包识别时占用的内存;增加通知;
|
||||
@@ -3,6 +3,7 @@ const targetCount = Math.min(9999, Math.max(0, Math.floor(Number(settings.Target
|
||||
const OCRdelay = Math.min(50, Math.max(0, Math.floor(Number(settings.OcrDelay) || 10))); // OCR基准时长
|
||||
const imageDelay = Math.min(1000, Math.max(0, Math.floor(Number(settings.ImageDelay) || 0))); // 识图基准时长
|
||||
const timeCost = Math.min(300, Math.max(0, Math.floor(Number(settings.TimeCost) || 30))); // 耗时和材料数量的比值,即一个材料多少秒
|
||||
const notify = settings.notify || false;
|
||||
// 定义映射表"unselected": "反选材料分类",
|
||||
const material_mapping = {
|
||||
"General": "一般素材",
|
||||
@@ -97,7 +98,7 @@ const selected_materials_array = Object.keys(finalSettings)
|
||||
};
|
||||
|
||||
// OCR识别文本
|
||||
async function recognizeText(ocrRegion, timeout = 10000, retryInterval = 20, maxAttempts = 10, maxFailures = 3) {
|
||||
async function recognizeText(ocrRegion, timeout = 10000, retryInterval = 20, maxAttempts = 10, maxFailures = 3, cachedFrame = null) {
|
||||
let startTime = Date.now();
|
||||
let retryCount = 0;
|
||||
let failureCount = 0; // 用于记录连续失败的次数
|
||||
@@ -117,11 +118,11 @@ const selected_materials_array = Object.keys(finalSettings)
|
||||
"g": "9", "q": "9", "9": "9",
|
||||
};
|
||||
|
||||
const ra = cachedFrame || captureGameRegion();
|
||||
while (Date.now() - startTime < timeout && retryCount < maxAttempts) {
|
||||
let captureRegion = captureGameRegion();
|
||||
let ocrObject = RecognitionObject.Ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height);
|
||||
ocrObject.threshold = 0.85; // 适当降低阈值以提高速度
|
||||
let resList = captureRegion.findMulti(ocrObject);
|
||||
let resList = ra.findMulti(ocrObject);
|
||||
|
||||
if (resList.count === 0) {
|
||||
failureCount++;
|
||||
@@ -302,6 +303,7 @@ async function scanMaterials(materialsCategory, materialCategoryMap) {
|
||||
|
||||
// 扫描背包中的材料
|
||||
for (let scroll = 0; scroll <= pageScrollCount; scroll++) {
|
||||
const ra = captureGameRegion();
|
||||
if (!foundPriorityMaterial) {
|
||||
for (const { category, name } of priorityMaterialNames) {
|
||||
if (recognizedMaterials.has(name)) {
|
||||
@@ -318,7 +320,7 @@ async function scanMaterials(materialsCategory, materialCategoryMap) {
|
||||
const recognitionObject = RecognitionObject.TemplateMatch(mat, 1146, startY, columnWidth, columnHeight);
|
||||
recognitionObject.threshold = 0.8; // 设置识别阈值
|
||||
|
||||
const result = captureGameRegion().find(recognitionObject);
|
||||
const result = ra.find(recognitionObject);
|
||||
if (result.isExist() && result.x !== 0 && result.y !== 0) {
|
||||
foundPriorityMaterial = true; // 标记找到前位材料
|
||||
log.info(`发现当前或后位材料: ${name},开始全列扫描`);
|
||||
@@ -340,7 +342,7 @@ async function scanMaterials(materialsCategory, materialCategoryMap) {
|
||||
const recognitionObject = RecognitionObject.TemplateMatch(mat, scanX, startY, columnWidth, columnHeight);
|
||||
recognitionObject.threshold = 0.85;
|
||||
|
||||
const result = captureGameRegion().find(recognitionObject);
|
||||
const result = ra.find(recognitionObject);
|
||||
await sleep(imageDelay);
|
||||
|
||||
if (result.isExist() && result.x !== 0 && result.y !== 0) {
|
||||
@@ -353,7 +355,7 @@ async function scanMaterials(materialsCategory, materialCategoryMap) {
|
||||
width: 66 + 2 * tolerance,
|
||||
height: 22 + 2 * tolerance
|
||||
};
|
||||
const ocrResult = await recognizeText(ocrRegion, 1000, OCRdelay, 10, 3);
|
||||
const ocrResult = await recognizeText(ocrRegion, 1000, 10, 10, 3);
|
||||
materialInfo.push({ name, count: ocrResult.success ? ocrResult.text : "?" });
|
||||
|
||||
if (!hasFoundFirstMaterial) {
|
||||
@@ -395,7 +397,7 @@ async function scanMaterials(materialsCategory, materialCategoryMap) {
|
||||
// 检查是否到达最后一页
|
||||
const sliderBottomRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/SliderBottom.png"), 1284, 916, 9, 26);
|
||||
sliderBottomRo.threshold = 0.8;
|
||||
const sliderBottomResult = captureGameRegion().find(sliderBottomRo);
|
||||
const sliderBottomResult = ra.find(sliderBottomRo);
|
||||
if (sliderBottomResult.isExist()) {
|
||||
log.info("已到达最后一页!");
|
||||
shouldEndScan = true;
|
||||
@@ -471,12 +473,13 @@ const CultivationItemsRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync
|
||||
const FoodRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/Food.png"), 845, 31, 38, 38);
|
||||
|
||||
// 定义一个函数用于识别图像
|
||||
async function recognizeImage(recognitionObject, timeout = 5000) {
|
||||
async function recognizeImage(recognitionObject, timeout = 5000, cachedFrame=null) {
|
||||
let startTime = Date.now();
|
||||
const ra = cachedFrame || captureGameRegion();
|
||||
while (Date.now() - startTime < timeout) {
|
||||
try {
|
||||
// 尝试识别图像
|
||||
const imageResult = captureGameRegion().find(recognitionObject);
|
||||
const imageResult = ra.find(recognitionObject);
|
||||
if (imageResult.isExist() && imageResult.x !== 0 && imageResult.y !== 0) {
|
||||
return { success: true, x: imageResult.x, y: imageResult.y };
|
||||
}
|
||||
@@ -675,8 +678,9 @@ async function MaterialPath(materialCategoryMap) {
|
||||
|
||||
// 自定义 basename 函数
|
||||
function basename(filePath) {
|
||||
const lastSlashIndex = filePath.lastIndexOf('\\'); // 或者使用 '/',取决于你的路径分隔符
|
||||
return filePath.substring(lastSlashIndex + 1);
|
||||
if (typeof filePath !== 'string') throw new Error('Invalid file path');
|
||||
const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\'));
|
||||
return filePath.substring(lastSlash + 1);
|
||||
}
|
||||
// 检查路径是否存在
|
||||
function pathExists(path) {
|
||||
@@ -1241,6 +1245,11 @@ function matchImageAndGetCategory(resourceName, imagesDir) {
|
||||
// 假设 flattenedLowCountMaterials 是一个全局变量或在外部定义的变量
|
||||
let currentMaterialName = null; // 用于记录当前材料名
|
||||
|
||||
// 全局累积差值统计(记录所有材料的总变化量)
|
||||
const globalAccumulatedDifferences = {};
|
||||
// 按材料分类的累积差值统计(记录每种材料的累计变化)
|
||||
const materialAccumulatedDifferences = {};
|
||||
|
||||
// 遍历所有路径文件
|
||||
for (const { path: pathingFilePath, resourceName } of allPaths) {
|
||||
const pathName = basename(pathingFilePath); // 假设路径文件名即为材料路径
|
||||
@@ -1281,17 +1290,28 @@ function matchImageAndGetCategory(resourceName, imagesDir) {
|
||||
// 输出 resourceCategoryMap 以供调试
|
||||
log.info(`resourceCategoryMap: ${JSON.stringify(resourceCategoryMap, null, 2)}`);
|
||||
|
||||
// 如果材料名发生变化,更新 flattenedLowCountMaterials
|
||||
if (currentMaterialName !== resourceName) {
|
||||
currentMaterialName = resourceName; // 更新当前材料名
|
||||
// 调用背包材料统计(获取当前材料数量)
|
||||
const updatedLowCountMaterials = await MaterialPath(resourceCategoryMap);
|
||||
// 展平数组并按数量从小到大排序
|
||||
flattenedLowCountMaterials = updatedLowCountMaterials
|
||||
.flat()
|
||||
.sort((a, b) => parseInt(a.count, 10) - parseInt(b.count, 10));
|
||||
log.info(`材料名变更,更新了 flattenedLowCountMaterials`);
|
||||
}
|
||||
// 如果材料名发生变化,更新 flattenedLowCountMaterials
|
||||
if (currentMaterialName !== resourceName) {
|
||||
// 材料名变更前,输出上一材料的累积差值并通知
|
||||
if (currentMaterialName && materialAccumulatedDifferences[currentMaterialName]) {
|
||||
const prevDiffs = materialAccumulatedDifferences[currentMaterialName];
|
||||
log.info(`材料[${currentMaterialName}]收集完成,累积差值:${JSON.stringify(prevDiffs, null, 2)}`);
|
||||
if (notify) {
|
||||
notification.Send(`材料[${currentMaterialName}]收集完成,累计获取:${JSON.stringify(prevDiffs, null, 2)}`);
|
||||
}
|
||||
}
|
||||
currentMaterialName = resourceName; // 更新当前材料名
|
||||
// 调用背包材料统计(获取当前材料数量)
|
||||
const updatedLowCountMaterials = await MaterialPath(resourceCategoryMap);
|
||||
// 展平数组并按数量从小到大排序
|
||||
flattenedLowCountMaterials = updatedLowCountMaterials
|
||||
.flat()
|
||||
.sort((a, b) => parseInt(a.count, 10) - parseInt(b.count, 10));
|
||||
log.info(`材料名变更,更新了 flattenedLowCountMaterials`);
|
||||
|
||||
// 初始化当前材料的累积差值记录
|
||||
materialAccumulatedDifferences[resourceName] = {};
|
||||
}
|
||||
|
||||
// 记录开始时间
|
||||
const startTime = new Date().toLocaleString();
|
||||
@@ -1321,22 +1341,34 @@ function matchImageAndGetCategory(resourceName, imagesDir) {
|
||||
.flat()
|
||||
.sort((a, b) => parseInt(a.count, 10) - parseInt(b.count, 10));
|
||||
|
||||
// 提取更新后的低数量材料的名称
|
||||
const updatedLowCountMaterialNames = flattenedUpdatedMaterialCounts.map(material => material.name);
|
||||
|
||||
// 创建一个映射,用于存储更新前后的数量差值
|
||||
const materialCountDifferences = {};
|
||||
|
||||
// 遍历更新后的材料数量,计算差值
|
||||
flattenedUpdatedMaterialCounts.forEach(updatedMaterial => {
|
||||
const originalMaterial = flattenedLowCountMaterials.find(material => material.name === updatedMaterial.name);
|
||||
if (originalMaterial) {
|
||||
const originalCount = parseInt(originalMaterial.count, 10);
|
||||
const updatedCount = parseInt(updatedMaterial.count, 10);
|
||||
const difference = updatedCount - originalCount;
|
||||
materialCountDifferences[updatedMaterial.name] = difference;
|
||||
}
|
||||
});
|
||||
// 遍历更新后的材料数量,计算差值
|
||||
flattenedUpdatedMaterialCounts.forEach(updatedMaterial => {
|
||||
const originalMaterial = flattenedLowCountMaterials.find(material => material.name === updatedMaterial.name);
|
||||
if (originalMaterial) {
|
||||
const originalCount = parseInt(originalMaterial.count, 10);
|
||||
const updatedCount = parseInt(updatedMaterial.count, 10);
|
||||
const difference = updatedCount - originalCount;
|
||||
materialCountDifferences[updatedMaterial.name] = difference;
|
||||
|
||||
// 更新全局累积差值
|
||||
if (globalAccumulatedDifferences[updatedMaterial.name]) {
|
||||
globalAccumulatedDifferences[updatedMaterial.name] += difference;
|
||||
} else {
|
||||
globalAccumulatedDifferences[updatedMaterial.name] = difference;
|
||||
}
|
||||
|
||||
// 更新当前材料的累积差值
|
||||
if (materialAccumulatedDifferences[resourceName][updatedMaterial.name]) {
|
||||
materialAccumulatedDifferences[resourceName][updatedMaterial.name] += difference;
|
||||
} else {
|
||||
materialAccumulatedDifferences[resourceName][updatedMaterial.name] = difference;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 更新 flattenedLowCountMaterials 为最新的材料数量
|
||||
flattenedLowCountMaterials = flattenedLowCountMaterials.map(material => {
|
||||
@@ -1430,7 +1462,8 @@ async function monitorDisplacement(monitoring, resolve) {
|
||||
}
|
||||
|
||||
// 识图点击主逻辑
|
||||
async function imageClick() {
|
||||
|
||||
async function imageClick(cachedFrame = null) {
|
||||
|
||||
// 定义包含多个文件夹的根目录
|
||||
const rootDir = "assets/imageClick";
|
||||
@@ -1500,12 +1533,13 @@ async function imageClick() {
|
||||
}
|
||||
|
||||
// 在屏幕上查找并点击图标
|
||||
const ra = cachedFrame || captureGameRegion();
|
||||
for (const foundRegion of foundRegions) {
|
||||
const tolerance = 1; // 容错区间
|
||||
const iconMat = file.readImageMatSync(`${iconDir}/${foundRegion.iconName}`);
|
||||
const recognitionObject = RecognitionObject.TemplateMatch(iconMat, foundRegion.region.x - tolerance, foundRegion.region.y - tolerance, foundRegion.region.width + 2 * tolerance, foundRegion.region.height + 2 * tolerance);
|
||||
recognitionObject.threshold = 0.9; // 设置识别阈值为 0.9
|
||||
const result = captureGameRegion().find(recognitionObject);
|
||||
const result = ra.find(recognitionObject);
|
||||
if (result.isExist()) {
|
||||
const x = Math.round(foundRegion.region.x + foundRegion.region.width / 2);
|
||||
const y = Math.round(foundRegion.region.y + foundRegion.region.height / 2);
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "背包统计采集系统",
|
||||
"version": "2.30",
|
||||
"version": "2.40",
|
||||
"bgi_version": "0.44.8",
|
||||
"description": "默认四行为一页;模板匹配材料,OCR识别数量。\n数字太小可能无法识别,用?代替。\n目前支持采集材料的数量统计+路径CD管理。",
|
||||
"authors": [
|
||||
{
|
||||
"name": "吉吉喵",
|
||||
"links": "https://github.com/JJMdzh"
|
||||
"name": "吉吉喵"
|
||||
}
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
|
||||
@@ -12,7 +12,12 @@
|
||||
{
|
||||
"name": "TimeCost",
|
||||
"type": "input-text",
|
||||
"label": "====================\n时间成本:秒\n1数量的材料平均耗时,默认最多30"
|
||||
"label": "====================\n时间成本:秒\n一单位材料的平均耗时,默认30"
|
||||
},
|
||||
{
|
||||
"name": "notify",
|
||||
"type": "checkbox",
|
||||
"label": "----------------------------------\n是否发送通知。默认:否\n需在BGI开启JS通知,并设置通知地址"
|
||||
},
|
||||
{
|
||||
"name": "onlyPathing",
|
||||
@@ -23,11 +28,6 @@
|
||||
"否",
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "unselected",
|
||||
"type": "checkbox",
|
||||
"label": "====================\n反选下述【材料分类】"
|
||||
},
|
||||
{
|
||||
"name": "Smithing",
|
||||
"type": "checkbox",
|
||||
|
||||
159
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A37-甜甜花-蒙德-风龙废墟-3个.json
Normal file
159
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A37-甜甜花-蒙德-风龙废墟-3个.json
Normal file
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "A37-甜甜花-蒙德-风龙废墟-3个",
|
||||
"type": "collect",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"links": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
"甜甜花",
|
||||
"低效"
|
||||
],
|
||||
"last_modified_time": 1752589948172,
|
||||
"enable_monster_loot_split": false
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 338.5224609375,
|
||||
"y": 2581.4443359375,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 329.70703125,
|
||||
"y": 2613.593505859375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 297.548828125,
|
||||
"y": 2631.80615234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 288.7822265625,
|
||||
"y": 2635.493408203125,
|
||||
"type": "path",
|
||||
"move_mode": "jump",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 280.7412109375,
|
||||
"y": 2638.201171875,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"x": 297.9482421875,
|
||||
"y": 2664.091796875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"x": 307.85546875,
|
||||
"y": 2662.037841796875,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"x": 312.400390625,
|
||||
"y": 2679.755859375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"x": 341.3642578125,
|
||||
"y": 2700.85693359375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"x": 343.359375,
|
||||
"y": 2711.08447265625,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"x": 352.4853515625,
|
||||
"y": 2720.4521484375,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"x": 397.7919921875,
|
||||
"y": 2706.0576171875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"x": 428.228515625,
|
||||
"y": 2722.81640625,
|
||||
"type": "path",
|
||||
"move_mode": "fly",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"x": 436.431640625,
|
||||
"y": 2728.3076171875,
|
||||
"type": "path",
|
||||
"move_mode": "climb",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"x": 449.4716796875,
|
||||
"y": 2737.8056640625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
}
|
||||
]
|
||||
}
|
||||
122
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A38-甜甜花-蒙德-风龙废墟-6个.json
Normal file
122
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A38-甜甜花-蒙德-风龙废墟-6个.json
Normal file
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "A38-甜甜花-蒙德-风龙废墟-6个",
|
||||
"type": "collect",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"links": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
"甜甜花"
|
||||
],
|
||||
"last_modified_time": 1752590200868,
|
||||
"enable_monster_loot_split": false
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 265.900390625,
|
||||
"y": 2915.163330078125,
|
||||
"type": "teleport",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 246.80078125,
|
||||
"y": 2921.912841796875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 258.36328125,
|
||||
"y": 2950.13671875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 249.669921875,
|
||||
"y": 2953.89306640625,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 182.900390625,
|
||||
"y": 2983.758544921875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"x": 211.8994140625,
|
||||
"y": 2968.329833984375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"x": 210.693359375,
|
||||
"y": 2912.490234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"x": 215.17578125,
|
||||
"y": 2894.092529296875,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"x": 227.5498046875,
|
||||
"y": 2841.11279296875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"x": 218.80859375,
|
||||
"y": 2793.0849609375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"x": 183.78515625,
|
||||
"y": 2813.357666015625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
}
|
||||
]
|
||||
}
|
||||
104
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A39-甜甜花-蒙德-风龙废墟-4个.json
Normal file
104
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A39-甜甜花-蒙德-风龙废墟-4个.json
Normal file
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "A39-甜甜花-蒙德-风龙废墟-4个",
|
||||
"type": "collect",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"links": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
"甜甜花"
|
||||
],
|
||||
"last_modified_time": 1752590391917,
|
||||
"enable_monster_loot_split": false
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": -83.505859375,
|
||||
"y": 2781.96240234375,
|
||||
"type": "teleport",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": -75.0458984375,
|
||||
"y": 2796.97509765625,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": -63.326171875,
|
||||
"y": 2800.15966796875,
|
||||
"type": "path",
|
||||
"move_mode": "jump",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": -17.49609375,
|
||||
"y": 2806.5234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": -9.8095703125,
|
||||
"y": 2811.401611328125,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"x": -17.619140625,
|
||||
"y": 2820.3408203125,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"x": 16.6865234375,
|
||||
"y": 2830.87939453125,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"x": 34.0068359375,
|
||||
"y": 2838.2470703125,
|
||||
"type": "path",
|
||||
"move_mode": "jump",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"x": 54.18359375,
|
||||
"y": 2839.83740234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
}
|
||||
]
|
||||
}
|
||||
131
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A40-甜甜花-蒙德-风龙废墟-8个.json
Normal file
131
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A40-甜甜花-蒙德-风龙废墟-8个.json
Normal file
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "A40-甜甜花-蒙德-风龙废墟-8个",
|
||||
"type": "collect",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"links": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
"甜甜花"
|
||||
],
|
||||
"last_modified_time": 1752590684153,
|
||||
"enable_monster_loot_split": false
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": -83.5078125,
|
||||
"y": 2781.964111328125,
|
||||
"type": "teleport",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": -111.525390625,
|
||||
"y": 2773.5107421875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": -113.947265625,
|
||||
"y": 2767.76953125,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": -117.115234375,
|
||||
"y": 2731.22900390625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": -63.05859375,
|
||||
"y": 2746.0205078125,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"x": -12.376953125,
|
||||
"y": 2754.87646484375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"x": 12.16015625,
|
||||
"y": 2741.99267578125,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"x": 13.513671875,
|
||||
"y": 2711.87939453125,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"x": -16.31640625,
|
||||
"y": 2702.379638671875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"x": -32.5712890625,
|
||||
"y": 2668.02587890625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"x": -31.5224609375,
|
||||
"y": 2643.4990234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"x": -56.794921875,
|
||||
"y": 2610.231201171875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "A41-甜甜花-蒙德-苍风高地-2个",
|
||||
"type": "collect",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"links": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
"甜甜花"
|
||||
],
|
||||
"last_modified_time": 1752592132188,
|
||||
"enable_monster_loot_split": false
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": -1130.478515625,
|
||||
"y": 1598.20458984375,
|
||||
"type": "teleport",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": -1129.69140625,
|
||||
"y": 1619.1328125,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": -1113.71875,
|
||||
"y": 1626.8740234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": -1107.154296875,
|
||||
"y": 1638.41064453125,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
}
|
||||
]
|
||||
}
|
||||
340
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A42-甜甜花-蒙德-达达乌帕谷-15个.json
Normal file
340
repo/pathing/食材与炼金/甜甜花/甜甜花全收集@ddaodan/A42-甜甜花-蒙德-达达乌帕谷-15个.json
Normal file
@@ -0,0 +1,340 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "A42-甜甜花-蒙德-达达乌帕谷-15个",
|
||||
"type": "collect",
|
||||
"authors": [
|
||||
{
|
||||
"name": "ddaodan",
|
||||
"links": "https://github.com/ddaodan"
|
||||
}
|
||||
],
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0",
|
||||
"tags": [
|
||||
"甜甜花",
|
||||
"高危"
|
||||
],
|
||||
"last_modified_time": 1752593958722,
|
||||
"enable_monster_loot_split": false
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": -1866.927734375,
|
||||
"y": 1331.5546875,
|
||||
"type": "teleport",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": -1866.47265625,
|
||||
"y": 1326.5107421875,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": -1877.7265625,
|
||||
"y": 1307.32421875,
|
||||
"type": "path",
|
||||
"move_mode": "jump",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": -1892.3154296875,
|
||||
"y": 1304.412109375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": -1898.1552734375,
|
||||
"y": 1297.6953125,
|
||||
"type": "path",
|
||||
"move_mode": "jump",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"x": -1926.3173828125,
|
||||
"y": 1270.44091796875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"x": -1915.009765625,
|
||||
"y": 1230.3837890625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"x": -1890.2353515625,
|
||||
"y": 1215.853515625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"x": -1905.970703125,
|
||||
"y": 1205.07275390625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"x": -1915.982421875,
|
||||
"y": 1195.533203125,
|
||||
"type": "path",
|
||||
"move_mode": "fly",
|
||||
"action": "stop_flying",
|
||||
"action_params": "1000"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"x": -1918.154296875,
|
||||
"y": 1203.83935546875,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"x": -1891.4853515625,
|
||||
"y": 1167.8583984375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"x": -1839.1044921875,
|
||||
"y": 1170.12451171875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"x": -1829.490234375,
|
||||
"y": 1177.4365234375,
|
||||
"type": "path",
|
||||
"move_mode": "jump",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"x": -1827.8251953125,
|
||||
"y": 1190,
|
||||
"type": "path",
|
||||
"move_mode": "climb",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"x": -1819.185546875,
|
||||
"y": 1190.2451171875,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"x": -1828.568359375,
|
||||
"y": 1218.40234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"x": -1816.08984375,
|
||||
"y": 1211.98681640625,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"x": -1800.7998046875,
|
||||
"y": 1202.6865234375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"x": -1772.0986328125,
|
||||
"y": 1188.15234375,
|
||||
"type": "path",
|
||||
"move_mode": "fly",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"x": -1727.9638671875,
|
||||
"y": 1171.9873046875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"x": -1696.17578125,
|
||||
"y": 1175.85400390625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"x": -1683.57421875,
|
||||
"y": 1181.2666015625,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"x": -1647.33203125,
|
||||
"y": 1190.0732421875,
|
||||
"type": "path",
|
||||
"move_mode": "fly",
|
||||
"action": "stop_flying",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"x": -1647.33203125,
|
||||
"y": 1190.0732421875,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"x": -1601.0869140625,
|
||||
"y": 1197.1669921875,
|
||||
"type": "path",
|
||||
"move_mode": "fly",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"x": -1610.9990234375,
|
||||
"y": 1172.95947265625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"x": -1604.0791015625,
|
||||
"y": 1172.05517578125,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"x": -1578.8046875,
|
||||
"y": 1163.041015625,
|
||||
"type": "path",
|
||||
"move_mode": "climb",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"x": -1511.541015625,
|
||||
"y": 1135.3994140625,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"x": -1445.6142578125,
|
||||
"y": 1121.9482421875,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"x": -1407.20703125,
|
||||
"y": 1152.6484375,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"x": -1382.96484375,
|
||||
"y": 1188.517578125,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"x": -1355.0263671875,
|
||||
"y": 1205.060546875,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"x": -1359.1396484375,
|
||||
"y": 1219.5361328125,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "combat_script",
|
||||
"action_params": "wait(0.2)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
## 当前进度 225/2409
|
||||
## 当前进度 263/2409
|
||||
|
||||
## 未收录点位
|
||||
以下点位因为一些原因未收录
|
||||
@@ -10,5 +10,4 @@
|
||||
|4480|蒙德望风山地|位于地图边界,BGI无法定位|
|
||||
|7080|蒙德晨曦酒庄|位于地图边界,BGI无法定位|
|
||||
|7113|蒙德晨曦酒庄|位于地图边界,BGI无法定位|
|
||||
|44782|蒙德风龙废墟|未找到,可能已被移除|
|
||||
|74402|蒙德风龙废墟|位于地图边界,BGI无法定位|
|
||||
|
||||
Reference in New Issue
Block a user