Files
bettergi-scripts-list/repo/js/ActivitySwitchNotice/utils/mapMission.js
云端客 9c8e5753c2 Uid识别批量改本体API (#3254)
* refactor(ActivitySwitchNotice): 替换OCR UID识别为游戏内UID获取

- 移除uid.js文件中的OCR UID识别功能及相关代码
- 在activity.js中将ocrUID()调用替换为genshin.uid()并添加toMainUi()调用
- 在campaignArea.js中将ocrUID()调用替换为genshin.uid()并添加toMainUi()调用
- 在mapMission.js中将ocrUID()调用替换为genshin.uid()并添加toMainUi()调用
- 在ws.js中将ocrUID()调用替换为genshin.uid()并添加toMainUi()调用
- 在HolyRelics.js中添加genshin.uid()获取并在日志中显示UID信息
- 更新manifest.json版本号从0.1.5到0.1.6
- 更新bgi_version从0.55.0到0.61.0

* refactor(FullyAutoAndSemiAutoTools): 重构UID识别模块并更新依赖版本

- 将uid.js重命名为tool.js并导出相关函数
- 移除旧的OCR UID识别逻辑,改用genshin.uid()方法
- 更新manifest.json中的版本号从0.0.1到0.0.2
- 升级bgi_version从0.54.3到0.61.0
- 修改main.js中的导入语句和UID获取方式
- 在initRecord函数中先调用toMainUi()确保在主界面
- 更新README.md中的文件结构说明

* refactor(SwitchAccountMultipleMode): 重构工具函数模块并更新依赖版本

- 将 uid.js 重命名为 tool.js 并导出所有工具函数
- 移除全局 uidUtil 对象,改为直接导出函数
- 更新 manifest.json 中的版本号至 2.1 和 bgi_version 至 0.61.0
- 修复 UID 比较逻辑,替换 ocrUID 调用为 genshin.uid()
- 清理未使用的 eval 语句和 ocrUID 函数
2026-05-30 23:20:52 +08:00

104 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {sendText} from "./notice";
const ocrRegionConfig = {
mapMission: {x: 6, y: 8, width: 395, height: 977},//地图任务识别区域坐标和尺寸
}
/**
* OCR地图任务识别函数
* 通过OCR技术识别游戏界面中的任务名称并与预设的任务名称列表进行匹配
* @param {Array<string>} [missionNameList=[]] - 需要识别的任务名称列表
* @param {Object} [regionConfig=ocrRegionConfig.mapMission] - OCR识别区域配置对象包含x、y、width、height属性
* @returns {Promise<Array<Object>>} 返回识别结果数组每个元素包含ok(boolean)和text(string)属性
*/
export async function ocrMapMission(missionNameList = [], regionConfig = ocrRegionConfig.mapMission) {
let jsonList = [];
let region = null;
try {
// 捕获游戏区域并创建OCR识别对象
region = captureGameRegion();
let recognitionObject = RecognitionObject.Ocr(regionConfig.x, regionConfig.y, regionConfig.width, regionConfig.height);
// 执行多目标OCR识别
let resList = region.findMulti(recognitionObject);
// if (!resList || !resList.length) {
// return jsonList;
// }
// 遍历识别结果并匹配任务名称
for (let i = 0; i < resList.count; i++) {
let res = resList[i];
log.debug(`[-]识别结果: ${res.text}, 原始坐标: x=${res.x}, y=${res.y},width:${res.width},height:${res.height}`);
let json = {
ok: false,
text: undefined
};
// 检查当前识别文本是否包含任一任务名称
let matchedMission = null;
for (const missionName of missionNameList) {
if (res.text.trim().includes(missionName)) {
matchedMission = missionName;
break;
}
}
if (matchedMission) {
log.debug(`识别成功=>${matchedMission}->${res.text}`);
json.ok = true;
json.text = res.text.trim();
}
jsonList.push(json);
}
} catch (e) {
log.error('OCR识别过程出错:', e.message);
throw e;
} finally {
// 确保资源始终被释放
if (region) {
region.Dispose();
}
}
return jsonList;
}
//伴月纪闻任务待完成
// 通过地图识别任务
export async function openMap() {
const key = settings.mapKey || 'M'
await sleep(200)
await keyPress(key)
}
export async function mapMission(list = [], toOpenMap = true) {
let ms = 600
if (toOpenMap) {
await openMap();
await sleep(ms);
}
await sleep(ms * 2);
let keyJsonList = await ocrMapMission(list);
keyJsonList = keyJsonList.filter(item => item.ok)
log.info(`识别到地图任务数量:${keyJsonList.length}`)
if (keyJsonList.length <= 0) {
log.warn(`未识别到地图任务`)
return
}
await toMainUi()
let uid = await genshin.uid()
let text = ""
keyJsonList.forEach(item => text += "|< " + item.text + " >\n")
await sendText(text, `UID:${uid}\n地图任务`)
}
// export {
// mapMission,
// ocrMapMission,
// openMap,
// }