mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-15 03:23:22 +08:00
* feat(ActivitySwitchNotice): 添加地图任务识别功能 - 新增 mapMission 工具模块用于OCR地图任务识别 - 在初始化工具列表中加入 mapMission 模块 - 修改 main 函数增加异常处理和开关控制逻辑 - 优化代码格式和缩进一致性 - 添加地图任务OCR识别区域配置参数 * feat(ActivitySwitchNotice): 添加地图任务识别功能并优化配置管理 - 实现地图任务识别功能,支持伴月纪闻任务和每日委托奖励识别 - 新增initSettings函数用于统一管理配置文件读取和初始化 - 在settings.json中添加地图任务相关的多选框配置选项 - 更新manifest.json版本至0.0.8并添加最低BGI版本要求 - 重构ocrMapMission函数以支持多任务名称匹配 - 添加openMap和mapMission工具函数用于地图操作和任务识别 - 优化通知系统,移除不必要的参数并完善错误处理 - 调整设置界面布局,添加分隔符提升用户体验 * feat(map): 添加地图任务识别功能 - 实现多复选框配置映射表获取功能 - 添加根据复选框名称获取对应值的方法 - 重构OCR地图任务识别函数,优化参数和错误处理 - 集成UID识别并在通知中显示 - 更新地图任务识别流程和结果显示格式 - 添加地图任务识别数量统计日志 - 在README中更新版本历史记录 * feat(map): 添加地图任务识别功能 - 实现多复选框配置映射表获取功能 - 添加根据复选框名称获取对应值的方法 - 重构OCR地图任务识别函数,优化参数和错误处理 - 集成UID识别并在通知中显示 - 更新地图任务识别流程和结果显示格式 - 添加地图任务识别数量统计日志 - 在README中更新版本历史记录 * feat(ActivitySwitchNotice): 添加新的活动任务选项并设置默认值 - 添加探索派遣奖励选项 - 添加豪斗旅纪奖励选项 - 设置伴月纪闻任务为默认选项之一 - 设置探索派遣奖励为默认选项之一 - 设置每日委托奖励为默认选项之一 - 更新配置结构以支持多选默认值
100 lines
3.1 KiB
JavaScript
100 lines
3.1 KiB
JavaScript
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)属性
|
||
*/
|
||
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;
|
||
}
|
||
|
||
|
||
//伴月纪闻任务待完成
|
||
// 通过地图识别任务
|
||
async function openMap() {
|
||
const key = settings.mapKey || 'M'
|
||
await sleep(200)
|
||
await keyPress(key)
|
||
}
|
||
|
||
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
|
||
}
|
||
const uid = await uidUtil.ocrUID()
|
||
let text = ""
|
||
keyJsonList.forEach(item => text += "|< " + item.text + " >\n")
|
||
await noticeUtil.sendText(text, `UID:${uid}\n地图任务`)
|
||
}
|
||
|
||
this.mapUtil = {
|
||
mapMission,
|
||
ocrMapMission,
|
||
openMap,
|
||
} |