@@ -37,7 +37,7 @@
|
|||||||
- - 默认选择 **运行锄地路线** ,选择该模式会按照后续设置选择并运行相应路线
|
- - 默认选择 **运行锄地路线** ,选择该模式会按照后续设置选择并运行相应路线
|
||||||
- - 选项 **输出地图追踪文件** ,会将选择的路线读取并分组输出到js文件夹下pathingOut文件夹
|
- - 选项 **输出地图追踪文件** ,会将选择的路线读取并分组输出到js文件夹下pathingOut文件夹
|
||||||
- - 选项 **强制刷新所有路线cd** ,用于清除js记录的运行历史
|
- - 选项 **强制刷新所有路线cd** ,用于清除js记录的运行历史
|
||||||
- **选择执行第几个路径组:** 本js会分组运行地图追踪,分组方式详见后续选项,需要分组运行时建议在一个配置组中填好配置之后直接【复制配置组】,再在复制的配置组中选择路径组并修改配队,战斗策略等信息
|
- **选择执行第几个路径组:** 本js会分组运行地图追踪,分组方式详见后续选项,需要分组运行时请确保精英目标数量,小怪目标数量,各个路径组的标签等信息【完全相同】,复制配置组时未知原因无法正确复制配置,请不要使用
|
||||||
- **本路径组使用配队名称:** 填写该路径组使用的配队名称,js会自动切换
|
- **本路径组使用配队名称:** 填写该路径组使用的配队名称,js会自动切换
|
||||||
- **是否禁用js拾取:** 本js采用黑白名单结合的方式实现仅拾取部分物品(默认只拾取狗粮和晶蝶),如果你想要使用bgi默认的拾取以拾取绝大部分物品,请禁用
|
- **是否禁用js拾取:** 本js采用黑白名单结合的方式实现仅拾取部分物品(默认只拾取狗粮和晶蝶),如果你想要使用bgi默认的拾取以拾取绝大部分物品,请禁用
|
||||||
- **账户名称:** 本js支持多用户,不同账户的记录分开存储,当你需要使用多用户时,请在这里填写不同的文本来区分不同账号的记录,如果你只使用一个账号,请不要修改该选项
|
- **账户名称:** 本js支持多用户,不同账户的记录分开存储,当你需要使用多用户时,请在这里填写不同的文本来区分不同账号的记录,如果你只使用一个账号,请不要修改该选项
|
||||||
@@ -72,6 +72,10 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
### 更新日志
|
### 更新日志
|
||||||
|
### 1.1.3(2025.07.09)
|
||||||
|
1. 优化拾取逻辑
|
||||||
|
2. 调整部分路线的数据
|
||||||
|
3. 优化路线选择逻辑
|
||||||
### 1.1.0(2025.07.08)
|
### 1.1.0(2025.07.08)
|
||||||
1. 优化日志输出
|
1. 优化日志输出
|
||||||
2. 新增估算剩余时间,并适配abgi
|
2. 新增估算剩余时间,并适配abgi
|
||||||
|
|||||||
@@ -430,12 +430,12 @@
|
|||||||
{
|
{
|
||||||
"fileName": "3211稻妻名椎滩东.json",
|
"fileName": "3211稻妻名椎滩东.json",
|
||||||
"时间": 174.52,
|
"时间": 174.52,
|
||||||
"精英摩拉": 200,
|
"精英摩拉": 0,
|
||||||
"小怪摩拉": 751.4285714,
|
"小怪摩拉": 751.4285714,
|
||||||
"小怪数量": 16,
|
"小怪数量": 16,
|
||||||
"水免": 1,
|
"水免": 1,
|
||||||
"高危": 0,
|
"高危": 0,
|
||||||
"精英数量": 1
|
"精英数量": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileName": "3212稻妻名椎滩西.json",
|
"fileName": "3212稻妻名椎滩西.json",
|
||||||
@@ -1610,12 +1610,12 @@
|
|||||||
{
|
{
|
||||||
"fileName": "6707--纳塔_踞石山_庙宇_(9-11).json",
|
"fileName": "6707--纳塔_踞石山_庙宇_(9-11).json",
|
||||||
"时间": 224.23,
|
"时间": 224.23,
|
||||||
"精英摩拉": 200,
|
"精英摩拉": 0,
|
||||||
"小怪摩拉": 1129,
|
"小怪摩拉": 1129,
|
||||||
"小怪数量": 19,
|
"小怪数量": 19,
|
||||||
"水免": 1,
|
"水免": 1,
|
||||||
"高危": 0,
|
"高危": 0,
|
||||||
"精英数量": 1
|
"精英数量": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileName": "6708--纳塔_踞石山_彩石顶3_(6-9).json",
|
"fileName": "6708--纳塔_踞石山_彩石顶3_(6-9).json",
|
||||||
|
|||||||
@@ -1,21 +1,26 @@
|
|||||||
//拾取时上下滑动的时间
|
//拾取时上下滑动的时间
|
||||||
const timeMoveUp = 300;
|
const timeMoveUp = 600;
|
||||||
const timeMoveDown = 1200;
|
const timeMoveDown = 1200;
|
||||||
|
|
||||||
(async function () {
|
(async function () {
|
||||||
//自定义配置处理
|
//自定义配置处理
|
||||||
const operationMode = settings.operationMode || "运行锄地路线";
|
const operationMode = settings.operationMode || "运行锄地路线";
|
||||||
const k = settings.efficiencyIndex || 0.5;
|
let k = settings.efficiencyIndex || 0.5;
|
||||||
|
k = k / 1.25;
|
||||||
let targetEliteNum = (+settings.targetEliteNum || 400);
|
let targetEliteNum = (+settings.targetEliteNum || 400);
|
||||||
targetEliteNum += 5;//预留漏怪
|
targetEliteNum += 5;//预留漏怪
|
||||||
let targetMonsterNum = (+settings.targetMonsterNum || 2000);
|
let targetMonsterNum = (+settings.targetMonsterNum + 1 || 2000);
|
||||||
targetMonsterNum += 25;//预留漏怪
|
targetMonsterNum += 25;//预留漏怪
|
||||||
const partyName = settings.partyName || "";
|
const partyName = settings.partyName || "";
|
||||||
// 获取 settings 中的标签,如果没有则使用默认值
|
// 获取 settings 中的标签,如果没有则使用默认值
|
||||||
let group1Tags = (settings.tagsForGroup1 || "蕈兽").split(",").filter(Boolean);
|
const group1Settings = settings.tagsForGroup1 || "蕈兽";
|
||||||
const group2Tags = (settings.tagsForGroup2 || "").split(",").filter(Boolean);
|
const group2Settings = settings.tagsForGroup2 || "";
|
||||||
const group3Tags = (settings.tagsForGroup3 || "").split(",").filter(Boolean);
|
const group3Settings = settings.tagsForGroup3 || "";
|
||||||
const group4Tags = (settings.tagsForGroup4 || "").split(",").filter(Boolean);
|
const group4Settings = settings.tagsForGroup4 || "";
|
||||||
|
let group1Tags = group1Settings.split(",").filter(Boolean);
|
||||||
|
const group2Tags = group2Settings.split(",").filter(Boolean);
|
||||||
|
const group3Tags = group3Settings.split(",").filter(Boolean);
|
||||||
|
const group4Tags = group4Settings.split(",").filter(Boolean);
|
||||||
// 将 group2Tags、group3Tags 和 group4Tags 的内容添加到 group1Tags 中,并去除重复项
|
// 将 group2Tags、group3Tags 和 group4Tags 的内容添加到 group1Tags 中,并去除重复项
|
||||||
group1Tags = [...new Set([...group1Tags, ...group2Tags, ...group3Tags, ...group4Tags])];
|
group1Tags = [...new Set([...group1Tags, ...group2Tags, ...group3Tags, ...group4Tags])];
|
||||||
|
|
||||||
@@ -228,7 +233,7 @@ async function findBestRouteGroups(pathings, k, targetEliteNum, targetMonsterNum
|
|||||||
pathing.G1 = G1;
|
pathing.G1 = G1;
|
||||||
const G2 = pathing.mora_m; // 进入二组的收益
|
const G2 = pathing.mora_m; // 进入二组的收益
|
||||||
pathing.G2 = G2;
|
pathing.G2 = G2;
|
||||||
pathing.E1 = pathing.e === 0 ? 0 : ((G1 - G2) / pathing.e) ** k * (G1 / pathing.t); // 进入一组的效率
|
pathing.E1 = pathing.e === 0 ? 0 : ((G1 - 0.5 * G2) / pathing.e) ** k * (G1 / pathing.t); // 进入一组的效率
|
||||||
pathing.E2 = pathing.m === 0 ? 0 : (G2 / pathing.m) ** k * (G2 / pathing.t); // 进入二组的效率
|
pathing.E2 = pathing.m === 0 ? 0 : (G2 / pathing.m) ** k * (G2 / pathing.t); // 进入二组的效率
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -274,7 +279,7 @@ async function findBestRouteGroups(pathings, k, targetEliteNum, targetMonsterNum
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 循环调整目标精英怪数量
|
// 循环调整目标精英怪数量
|
||||||
while (iterationCount < 5) {
|
while (iterationCount < 10) {
|
||||||
// 第一轮选择
|
// 第一轮选择
|
||||||
selectRoutesByEliteTarget(currentTargetEliteNum);
|
selectRoutesByEliteTarget(currentTargetEliteNum);
|
||||||
|
|
||||||
@@ -283,12 +288,16 @@ async function findBestRouteGroups(pathings, k, targetEliteNum, targetMonsterNum
|
|||||||
|
|
||||||
// 检查精英怪总数是否满足条件
|
// 检查精英怪总数是否满足条件
|
||||||
const diff = totalSelectedElites - targetEliteNum;
|
const diff = totalSelectedElites - targetEliteNum;
|
||||||
currentTargetEliteNum -= Math.round(0.6 * diff); // 调整目标精英怪数量,乘以系数并取整
|
currentTargetEliteNum -= Math.round(0.5 * diff); // 调整目标精英怪数量,乘以系数并取整
|
||||||
|
|
||||||
if (totalSelectedElites === targetEliteNum) {
|
if (totalSelectedElites === targetEliteNum) {
|
||||||
break; // 如果满足目标,直接终止循环
|
break; // 如果满足目标,直接终止循环
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((totalSelectedElites > targetEliteNum) && iterationCount >= 5) {
|
||||||
|
break; // 如果满足目标,直接终止循环
|
||||||
|
}
|
||||||
|
|
||||||
iterationCount++; // 增加循环次数
|
iterationCount++; // 增加循环次数
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -368,7 +377,7 @@ async function runPathWithOcr(pathFilePath, targetTexts, blacklistKeywords) {
|
|||||||
"卵": "卯"
|
"卵": "卯"
|
||||||
};
|
};
|
||||||
let thisMoveUpTime = 0;
|
let thisMoveUpTime = 0;
|
||||||
let lastMoveUp = 0;
|
let lastMoveDown = 0;
|
||||||
|
|
||||||
let lastPickupTime = new Date();
|
let lastPickupTime = new Date();
|
||||||
// 定义状态变量
|
// 定义状态变量
|
||||||
@@ -543,23 +552,23 @@ async function runPathWithOcr(pathFilePath, targetTexts, blacklistKeywords) {
|
|||||||
if (!foundTarget) {
|
if (!foundTarget) {
|
||||||
const currentTime = new Date().getTime(); // 获取当前时间(毫秒)
|
const currentTime = new Date().getTime(); // 获取当前时间(毫秒)
|
||||||
|
|
||||||
// 如果距离上次上翻超过1秒,则执行上翻
|
// 如果距离上次下翻超过timeMoveUp秒,则执行下翻
|
||||||
if (currentTime - lastMoveUp > timeMoveDown) {
|
if (currentTime - lastMoveDown > timeMoveUp) {
|
||||||
await keyMouseScript.runFile(`assets/滚轮上翻.json`);
|
await keyMouseScript.runFile(`assets/滚轮下翻.json`);
|
||||||
|
|
||||||
// 如果这是第一次上翻,记录这次上翻的时间
|
// 如果这是第一次下翻,记录这次下翻的时间
|
||||||
if (thisMoveUpTime === 0) {
|
if (thisMoveUpTime === 0) {
|
||||||
thisMoveUpTime = currentTime; // 记录第一次上翻的时间
|
thisMoveUpTime = currentTime; // 记录第一次上翻的时间
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否需要更新 lastMoveUp
|
// 检查是否需要更新 lastMoveDown
|
||||||
if (currentTime - thisMoveUpTime >= timeMoveUp) {
|
if (currentTime - thisMoveUpTime >= timeMoveDown) {
|
||||||
lastMoveUp = currentTime; // 更新 lastMoveUp 为第一次上翻的时间
|
lastMoveDown = currentTime; // 更新 lastMoveDown 为第一次下翻的时间
|
||||||
thisMoveUpTime = 0; // 重置 thisMoveUpTime,以便下一次上翻时重新记录
|
thisMoveUpTime = 0; // 重置 thisMoveUpTime,以便下一次下翻时重新记录
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 否则执行下翻
|
// 否则执行下翻
|
||||||
await keyMouseScript.runFile(`assets/滚轮下翻.json`);
|
await keyMouseScript.runFile(`assets/滚轮上翻.json`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -820,6 +829,9 @@ async function updateCdTimeRecord(pathings, accountName) {
|
|||||||
const cdTimeData = pathings.map(pathing => ({
|
const cdTimeData = pathings.map(pathing => ({
|
||||||
fileName: pathing.fileName,
|
fileName: pathing.fileName,
|
||||||
//description: pathing.description,
|
//description: pathing.description,
|
||||||
|
精英数量: pathing.e,
|
||||||
|
小怪数量: pathing.m,
|
||||||
|
标签: pathing.tags,
|
||||||
cdTime: pathing.cdTime
|
cdTime: pathing.cdTime
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "锄地一条龙",
|
"name": "锄地一条龙",
|
||||||
"version": "1.1.2",
|
"version": "1.1.3",
|
||||||
"description": "一站式解决自动化锄地,支持只拾取狗粮,请阅读README.md后使用",
|
"description": "一站式解决自动化锄地,支持只拾取狗粮,请阅读README.md后使用",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"type": "collect",
|
"type": "collect",
|
||||||
"author": "Demo&汐&mno",
|
"author": "Demo&汐&mno",
|
||||||
"version": "1.1",
|
"version": "1.1",
|
||||||
"description": " 路线信息:该路线预计用时253.99秒,包含4600只精英与17只小怪,预计收入920972摩拉,包含以下怪物:1只丘丘人、1只雷箭丘丘人、1只水丘丘萨满、3只疾讯勇士·引索客、1只疾讯勇士·荡风斥候、1只疾讯勇士·重刃讯使、2只幼匿叶龙、7只匿叶龙。",
|
"description": " 路线信息:该路线预计用时253.99秒,包含以下怪物:1只丘丘人、1只雷箭丘丘人、1只水丘丘萨满、3只疾讯勇士·引索客、1只疾讯勇士·荡风斥候、1只疾讯勇士·重刃讯使、2只幼匿叶龙、7只匿叶龙。",
|
||||||
"bgi_version": "0.42.0",
|
"bgi_version": "0.42.0",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user