js:狗粮和锄地修修bug,加点功能 (#2234)

* js:锄地一条龙1.9.7

新增异常处理,检测到被冻结时连点空格挣脱

* js:联机狗粮1.5.9

1.自动进入时将房主强制指定为1号,队员强制指定为0号(不指定)
2.禁用房主名称检测
This commit is contained in:
mno
2025-10-24 17:23:36 +08:00
committed by GitHub
parent 360fdc2ccc
commit 78e85c2ddd
9 changed files with 86 additions and 26 deletions

View File

@@ -12,6 +12,7 @@ let TMthreshold = +settings.TMthreshold || 0.9;
(async function () {
setGameMetrics(1920, 1080, 1);
if (settings.logName) {
await processArtifacts();
}
@@ -48,6 +49,7 @@ let TMthreshold = +settings.TMthreshold || 0.9;
//构造加入idx号世界的autoEnter的settings
let autoEnterSettings;
if (idx === yourIndex) {
settings.forceGroupNumber = 1;//将房主强制指定为房主
// 1. 先收集真实存在的白名单
const permits = {};
let permitIndex = 1;
@@ -73,6 +75,7 @@ let TMthreshold = +settings.TMthreshold || 0.9;
log.info(`等待他人进入自己世界,目标人数:${autoEnterSettings.maxEnterCount}`);
notification.send(`等待他人进入自己世界,目标人数:${autoEnterSettings.maxEnterCount}`);
} else {
settings.forceGroupNumber = 0;//取消强制指定
// 构造队员配置
autoEnterSettings = {
enterMode: "进入他人世界",
@@ -113,6 +116,7 @@ let TMthreshold = +settings.TMthreshold || 0.9;
}
//执行对应的联机狗粮
await runGroupPurchasing(false);
settings.forceGroupNumber = 0;//解除强制指定
}
//如果勾选了额外,在结束后再执行一次额外路线
if (settings.runExtra) {
@@ -130,27 +134,52 @@ let TMthreshold = +settings.TMthreshold || 0.9;
)();
async function checkP1Name(p1Name) {
await genshin.returnMainUi();
await keyPress("F2");
await sleep(2000);
const gameRegion = captureGameRegion();
const resList = gameRegion.findMulti(RecognitionObject.ocr(400, 170, 300, 55));
gameRegion.dispose();
let hit = null;
let txt;
for (const res of resList) {
txt = res.text.trim();
if (txt === p1Name) { hit = txt; break; }
}
if (hit) {
log.info(`识别到房主为${hit},与预期相符`);
if (true) {
//log.info("禁用了房主名称校验,直接视为通过");
//强制禁用房主检测
return true;
} else {
log.warn(`识别结果为${txt},与预期的${p1Name}不符,重试`);
return false;
}
try {
// 加载目标 PNG
const targetPngs = await readFolder(targetsPath, false);
for (const f of targetPngs) {
if (!f.fullPath.endsWith('.png')) continue;
const mat = file.ReadImageMatSync(f.fullPath);
const ro = RecognitionObject.TemplateMatch(mat, 395, 158, 588, 65);
const baseName = f.fileName.replace(/\.png$/i, '');
targetsRo.push({ ro, baseName });
}
log.info(`加载完成共 ${targetsRo.length} 个目标`);
await genshin.returnMainUi();
await keyPress("F2");
await sleep(2000);
const gameRegion = captureGameRegion();
for (const { ro, baseName } of targetsRo) {
if (gameRegion.find(ro).isExist()) { gameRegion.dispose(); log.info(`找到房主为${baseName}`); return true; }
}
gameRegion.dispose();
} catch { }
try {
const gameRegion = captureGameRegion();
const resList = gameRegion.findMulti(RecognitionObject.ocr(400, 170, 300, 55));
gameRegion.dispose();
let hit = null;
let txt;
for (const res of resList) {
txt = res.text.trim();
if (txt === p1Name) { hit = txt; break; }
}
if (hit) {
log.info(`识别到房主为${hit},与预期相符`);
return true;
} else {
log.warn(`识别结果为${txt},与预期的${p1Name}不符,重试`);
return false;
}
} catch { return false; }
}
/**
* 群收尾 / 额外路线统一入口
*

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "AAA狗粮联机团购",
"version": "1.5.6",
"version": "1.5.9",
"tags": [
"狗粮"
],

View File

@@ -96,6 +96,12 @@
"type": "input-text",
"label": "运行时使用角色的序号\n将在进入联机模式前尝试切换到对应序号的角色"
},
{
"name": "TMthreshold",
"type": "input-text",
"label": "拾取使用的匹配阈值\n观察到误捡可适当调高\n观察到漏捡可适当调低",
"default": "0.9"
},
{
"name": "p1EndingRoute",
"type": "select",
@@ -143,11 +149,5 @@
"踏鞴砂"
],
"default": "踏鞴砂"
},
{
"name": "TMthreshold",
"type": "input-text",
"label": "拾取使用的匹配阈值\n观察到误捡可适当调高\n观察到漏捡可适当调低",
"default": "0.9"
}
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -13,6 +13,7 @@ let gameRegion;
let targetItemPath = "assets/targetItems";
let mainUITemplate = file.ReadImageMatSync("assets/MainUI.png");
let itemFullTemplate = file.ReadImageMatSync("assets/itemFull.png");
let frozenTemplate = file.ReadImageMatSync("assets/解除冰冻.png");
let targetItems;
let rollingDelay = (+settings.rollingDelay || 25);
@@ -559,8 +560,38 @@ async function runPath(fullPath, map_name) {
})();
const errorProcessTask = (async () => {
async function checkFrozen() {
const maxAttempts = 1;
let attempts = 0;
let frozenGameRegion;
while (attempts < maxAttempts && state.running) {
try {
const recognitionObject = RecognitionObject.TemplateMatch(frozenTemplate, 1379, 574, 1463 - 1379, 613 - 574);
frozenGameRegion = captureGameRegion();
const result = frozenGameRegion.find(recognitionObject);
frozenGameRegion.dispose();
if (result.isExist()) {
return true;
}
} catch (error) {
log.error(`识别图像时发生异常: ${error.message}`);
if (!state.running) break;
return false;
}
attempts++;
}
return false;
}
while (state.running) {
await sleep(1000);
if (await checkFrozen()) {
log.info("检测到冻结,尝试挣脱");
for (let m = 0; m < 3; m++) {
keyPress("VK_SPACE");
await sleep(30);
}
} else {
await sleep(500);
}
}
})();

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "锄地一条龙",
"version": "1.9.6",
"version": "1.9.7",
"description": "一站式解决自动化锄地支持只拾取狗粮请仔细阅读README.md后使用",
"authors": [
{