mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-04-22 22:10:02 +08:00
AutoCommission 0.98.18 (#3149)
This commit is contained in:
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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("将使用备用的固定文件列表加载方式");
|
||||
|
||||
@@ -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('无法从大地图中识别位置');
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "(对话+成就)全自动蒙德地区每日委托",
|
||||
"version": "0.98.17",
|
||||
"version": "0.98.18",
|
||||
"tags": [
|
||||
"委托",
|
||||
"对话",
|
||||
|
||||
Reference in New Issue
Block a user