AutoCommission 0.98.18 (#3149)

This commit is contained in:
DarkFlameMaster
2026-04-21 12:00:47 +08:00
committed by GitHub
parent 8d9a192fc4
commit 1d573e9df8
6 changed files with 74 additions and 67 deletions

View File

@@ -4,7 +4,7 @@
"type": "collect",
"author": "星野",
"version": "1.0",
"description": "",
"description": "老版本这个任务点位所在地区命名为明冠峡,新版本被重命名为明冠山地",
"map_name": "Teyvat",
"bgi_version": "0.45.0",
"tags": [],
@@ -75,4 +75,4 @@
"type": "path"
}
]
}
}

View File

@@ -442,26 +442,9 @@ var CommissionRecognition = {
await sleep(300);
keyUp("VK_ESCAPE");
await sleep(1200);
let scale = 2.0
let bigMapPosition
while (scale <= 5.0) {
try {
await genshin.setBigMapZoomLevel(scale);
bigMapPosition = genshin.getPositionFromBigMap();
break;
} catch {
scale += 0.1;
}
await sleep(100);
}
if (bigMapPosition) {
commission.CommissionPosition = bigMapPosition;
log.info(
"当前委托位置: ({x}, {y})",
bigMapPosition.x,
bigMapPosition.y
);
}
// 使用投票机制获取位置
let bigMapPosition = await Utils.getPositionWithVoting(genshin);
commission.CommissionPosition = bigMapPosition;
keyDown("VK_ESCAPE");
await sleep(300);
@@ -636,26 +619,9 @@ var CommissionRecognition = {
await sleep(300);
keyUp("VK_ESCAPE");
await sleep(1200);
let scale = 2.0
let bigMapPosition
while (scale <= 5.0) {
try {
await genshin.setBigMapZoomLevel(scale);
bigMapPosition = genshin.getPositionFromBigMap();
break;
} catch {
scale += 0.1;
}
await sleep(100);
}
if (bigMapPosition) {
fourthCommission.CommissionPosition = bigMapPosition;
log.info(
"当前委托位置: ({x}, {y})",
bigMapPosition.x,
bigMapPosition.y
);
}
// 使用投票机制获取位置
let bigMapPosition = await Utils.getPositionWithVoting(genshin);
fourthCommission.CommissionPosition = bigMapPosition;
keyDown("VK_ESCAPE");
await sleep(300);

View File

@@ -127,26 +127,9 @@ var Execute = {
await sleep(300);
keyUp("VK_ESCAPE");
await sleep(1200);
let scale = 2.0
let bigMapPosition
while (scale <= 5.0) {
try {
await genshin.setBigMapZoomLevel(scale);
bigMapPosition = genshin.getPositionFromBigMap();
break;
} catch {
scale += 0.1;
}
await sleep(100);
}
if (bigMapPosition) {
currentCommissionPosition = bigMapPosition;
log.info(
"当前委托位置: ({x}, {y})",
bigMapPosition.x,
bigMapPosition.y
);
}
// 使用投票机制获取位置
let bigMapPosition = await Utils.getPositionWithVoting(genshin);
currentCommissionPosition = bigMapPosition;
await genshin.returnMainUi();
} else {

View File

@@ -43,15 +43,11 @@ var StepProcessorLoader = {
for (var i = 0; i < stepFiles.length; i++) {
var fileName = stepFiles[i];
try {
log.info("正在加载步骤处理器: {file}", fileName);
eval(file.readTextSync("lib/steps/" + fileName));
log.debug("步骤处理器 {file} 加载成功", fileName);
} catch (error) {
log.error("加载步骤处理器 {file} 失败: {error}", fileName, error.message);
}
}
log.info("步骤处理器动态加载完成,共注册 {count} 个处理器", Object.keys(this.processors).length);
} catch (error) {
log.error("动态扫描步骤处理器目录失败: {error}", error.message);
log.warn("将使用备用的固定文件列表加载方式");

View File

@@ -374,4 +374,66 @@ var Utils = {
return false;
}
},
// 位置识别投票函数
getPositionWithVoting: async function (genshin) {
/**
* 使用投票机制获取最可靠的地图位置
* @param {Object} genshin - genshin对象
* @returns {Object} - 最可靠的位置对象
* @throws {Error} - 当无法识别位置时抛出错误
*/
let scale = 2.0;
const positions = [];
let recognitionCount = 0;
// 至少识别6次
while (scale <= 5.0 && recognitionCount < 6) {
try {
await genshin.setBigMapZoomLevel(scale);
await sleep(100);
const position = genshin.getPositionFromBigMap();
positions.push(position);
recognitionCount++;
} catch (error) {
log.debug('缩放:{0}, error:{1}', scale, error.message);
}
scale += 0.3;
}
// 聚类并选择最可靠的位置
if (positions.length > 0) {
// 简单的聚类算法
const clusters = [];
for (const pos of positions) {
let added = false;
for (const cluster of clusters) {
const distance = Math.sqrt(
Math.pow(cluster[0].x - pos.x, 2) + Math.pow(cluster[0].y - pos.y, 2)
);
if (distance < 5) {
cluster.push(pos);
added = true;
break;
}
}
if (!added) {
clusters.push([pos]);
}
}
// 选择最大的聚类
clusters.sort((a, b) => b.length - a.length);
if (clusters.length > 0) {
// 取聚类中的第一个位置作为最终位置
const bestPosition = clusters[0][0];
log.info(`位置识别成功: (${bestPosition.x}, ${bestPosition.y})`);
// 打印所有识别的坐标debug日志
log.debug(`所有识别坐标: ${positions.map(p => `(${p.x}, ${p.y})`).join(', ')}`);
return bestPosition;
}
}
throw new Error('无法从大地图中识别位置');
},
};

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "(对话+成就)全自动蒙德地区每日委托",
"version": "0.98.17",
"version": "0.98.18",
"tags": [
"委托",
"对话",