活动期限/周本通知器 0.0.8 (#2763)

* 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): 添加新的活动任务选项并设置默认值

- 添加探索派遣奖励选项
- 添加豪斗旅纪奖励选项
- 设置伴月纪闻任务为默认选项之一
- 设置探索派遣奖励为默认选项之一
- 设置每日委托奖励为默认选项之一
- 更新配置结构以支持多选默认值
This commit is contained in:
云端客
2026-01-23 00:01:53 +08:00
committed by GitHub
parent 1d9526f186
commit 7809496731
8 changed files with 358 additions and 112 deletions

View File

@@ -1,18 +1,108 @@
let manifest = {};
let manifest_json = "manifest.json";
let configSettings = undefined
/**
* 初始化设置函数
* 从配置文件中读取设置信息并返回
* @returns {Object} 返回解析后的JSON设置对象
*/
async function initSettings() {
// 默认设置文件路径
let settings_ui = "settings.json";
try {
// 读取并解析manifest.json文件
manifest = JSON.parse(file.readTextSync(manifest_json));
// 调试日志输出manifest内容
log.debug("manifest={key}", manifest);
// 调试日志输出manifest中的settings_ui配置
log.debug("settings_ui={key}", manifest.settings_ui);
log.info(`|脚本名称:{name},版本:{version}`, manifest.name, manifest.version);
if (manifest.bgi_version) {
log.info(`|最小可执行BGI版本:{bgi_version}`, manifest.bgi_version);
}
log.info(`|脚本作者:{authors}\n`, manifest.authors.map(a => a.name).join(","));
// 更新settings_ui变量为manifest中指定的路径
settings_ui = manifest.settings_ui
} catch (error) {
// 捕获并记录可能的错误
log.warn("{error}", error.message);
}
// 读取并解析设置文件
const settingsJson = JSON.parse(file.readTextSync(settings_ui));
// 如果configSettings未定义则将其设置为解析后的设置对象
if (!configSettings) {
configSettings = settingsJson
}
// 调试日志:输出最终解析的设置对象
log.debug("settingsJson={key}", settingsJson);
// 返回设置对象
return settingsJson
}
/**
* 获取多复选框的映射表
* 该函数会从初始化的设置中提取所有类型为"multi-checkbox"的条目,
* 并将这些条目的名称和对应的选项值存储在一个Map对象中返回
* @returns {Promise<Map>} 返回一个Promise对象解析为包含多复选框配置的Map
*/
async function getMultiCheckboxMap() {
// 如果configSettings存在则使用它否则调用initSettings()函数获取
const settingsJson = configSettings ? configSettings : await initSettings();
// 创建一个新的Map对象用于存储多复选框的配置
// Map结构为: {名称: 选项数组}
let multiCheckboxMap = new Map();
// 遍历设置JSON中的每个条目
settingsJson.forEach((entry) => {
// 如果条目没有name属性或者类型不是"multi-checkbox",则跳过该条目
if (!entry.name || entry.type !== "multi-checkbox") return;
// 解构条目中的name和label属性便于后续使用
const {name, label} = entry;
// 获取当前name对应的设置值如果存在则转换为数组否则使用空数组
const options = settings[name] ? Array.from(settings[name]) : [];
// 记录调试信息,包含名称、标签、选项和选项数量
log.debug("name={key1},label={key2},options={key3},length={key4}", name, label, JSON.stringify(options), options.length);
// 将名称和对应的选项数组存入Map
multiCheckboxMap.set(name, options);
})
// 返回包含多复选框配置的Map
return multiCheckboxMap
}
/**
* 根据复选框组名称获取对应的值
* 这是一个异步函数,用于从复选框映射中获取指定名称的值
* @param {string} name - 复选框组的名称
* @returns {Promise<any>} 返回一个Promise解析为复选框组对应的值
*/
async function getValueByMultiCheckboxName(name) {
// 获取复选框映射表,这是一个异步操作
let multiCheckboxMap = await getMultiCheckboxMap()
// log.debug("multiCheckboxMap={key}", JSON.stringify(multiCheckboxMap))
// multiCheckboxMap.entries().forEach(([name, options]) => {
// log.debug("name={key1},options={key2}", name, JSON.stringify(options))
// })
// 从映射表中获取并返回指定名称对应的值
let values = multiCheckboxMap.get(name);
log.debug("values={key}", JSON.stringify(values))
return values
}
async function init() {
let utils=[
let utils = [
"uid",
"ws",
"notice",
"campaignArea",
"activity",
"mapMission",
]
for (let util of utils) {
eval(file.readTextSync(`utils/${util}.js`));
}
manifest = JSON.parse(file.readTextSync("manifest.json"));
// manifest = JSON.parse(file.readTextSync("manifest.json"));
await initSettings();
log.debug("main 初始化完成");
}
// 判断是否在主界面的函数
const isInMainUI = () => {
let captureRegion = captureGameRegion();
@@ -44,8 +134,7 @@ async function toMainUi() {
(async function () {
await init();
log.info(`版本:{version}`,manifest.version)
if (settings.toMainUi){
if (settings.toMainUi) {
await toMainUi();
}
await main();
@@ -57,10 +146,29 @@ async function toMainUi() {
*/
async function main() {
let ms = 600
await campaignAreaUtil.dailyCommissionMain()
await sleep(ms*2);
await campaignAreaUtil.campaignAreaMain(false)
await sleep(ms*2);
const mapList = await getValueByMultiCheckboxName('mapMissionKeys')|| []
// log.info(`mapList=>{0}`,JSON.stringify(mapList))
if (mapList.length > 0) {
try {
log.info(`开始识别地图任务`)
await mapUtil.mapMission(mapList)
} finally {
await toMainUi()
}
}
let openKey = true
try {
await campaignAreaUtil.dailyCommissionMain(openKey)
await sleep(ms * 2);
openKey = false
} catch (e) {
await toMainUi()
throw e
}
await campaignAreaUtil.campaignAreaMain(openKey)
await sleep(ms * 2);
await toMainUi()
await activityUtil.activityMain()
}