Skip to content

Commit 7809496

Browse files
活动期限/周本通知器 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): 添加新的活动任务选项并设置默认值 - 添加探索派遣奖励选项 - 添加豪斗旅纪奖励选项 - 设置伴月纪闻任务为默认选项之一 - 设置探索派遣奖励为默认选项之一 - 设置每日委托奖励为默认选项之一 - 更新配置结构以支持多选默认值
1 parent 1d9526f commit 7809496

File tree

8 files changed

+358
-112
lines changed

8 files changed

+358
-112
lines changed

repo/js/ActivitySwitchNotice/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,11 @@ ActivitySwitchNotice/
511511

512512
## 版本历史
513513

514+
### 0.0.8 (2026-01-22)
515+
- 新增 地图识别任务提醒 如:
516+
517+
![0.0.8-00](md/0.0.8-map-00.jpg)
518+
![0.0.8](md/0.0.8-map.jpg)
514519
### 0.0.7 (2026-01-19)
515520
- 新增每日委托提醒
516521
### 0.0.6 (2026-01-06)

repo/js/ActivitySwitchNotice/main.js

Lines changed: 116 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,108 @@
11
let manifest = {};
2+
let manifest_json = "manifest.json";
3+
let configSettings = undefined
4+
5+
/**
6+
* 初始化设置函数
7+
* 从配置文件中读取设置信息并返回
8+
* @returns {Object} 返回解析后的JSON设置对象
9+
*/
10+
async function initSettings() {
11+
// 默认设置文件路径
12+
let settings_ui = "settings.json";
13+
try {
14+
// 读取并解析manifest.json文件
15+
manifest = JSON.parse(file.readTextSync(manifest_json));
16+
// 调试日志:输出manifest内容
17+
log.debug("manifest={key}", manifest);
18+
// 调试日志:输出manifest中的settings_ui配置
19+
log.debug("settings_ui={key}", manifest.settings_ui);
20+
log.info(`|脚本名称:{name},版本:{version}`, manifest.name, manifest.version);
21+
if (manifest.bgi_version) {
22+
log.info(`|最小可执行BGI版本:{bgi_version}`, manifest.bgi_version);
23+
}
24+
log.info(`|脚本作者:{authors}\n`, manifest.authors.map(a => a.name).join(","));
25+
// 更新settings_ui变量为manifest中指定的路径
26+
settings_ui = manifest.settings_ui
27+
} catch (error) {
28+
// 捕获并记录可能的错误
29+
log.warn("{error}", error.message);
30+
}
31+
// 读取并解析设置文件
32+
const settingsJson = JSON.parse(file.readTextSync(settings_ui));
33+
// 如果configSettings未定义,则将其设置为解析后的设置对象
34+
if (!configSettings) {
35+
configSettings = settingsJson
36+
}
37+
// 调试日志:输出最终解析的设置对象
38+
log.debug("settingsJson={key}", settingsJson);
39+
// 返回设置对象
40+
return settingsJson
41+
}
42+
/**
43+
* 获取多复选框的映射表
44+
* 该函数会从初始化的设置中提取所有类型为"multi-checkbox"的条目,
45+
* 并将这些条目的名称和对应的选项值存储在一个Map对象中返回
46+
* @returns {Promise<Map>} 返回一个Promise对象,解析为包含多复选框配置的Map
47+
*/
48+
async function getMultiCheckboxMap() {
49+
// 如果configSettings存在则使用它,否则调用initSettings()函数获取
50+
const settingsJson = configSettings ? configSettings : await initSettings();
51+
// 创建一个新的Map对象用于存储多复选框的配置
52+
// Map结构为: {名称: 选项数组}
53+
let multiCheckboxMap = new Map();
54+
// 遍历设置JSON中的每个条目
55+
settingsJson.forEach((entry) => {
56+
// 如果条目没有name属性或者类型不是"multi-checkbox",则跳过该条目
57+
if (!entry.name || entry.type !== "multi-checkbox") return;
58+
// 解构条目中的name和label属性,便于后续使用
59+
const {name, label} = entry;
60+
// 获取当前name对应的设置值,如果存在则转换为数组,否则使用空数组
61+
const options = settings[name] ? Array.from(settings[name]) : [];
62+
// 记录调试信息,包含名称、标签、选项和选项数量
63+
log.debug("name={key1},label={key2},options={key3},length={key4}", name, label, JSON.stringify(options), options.length);
64+
// 将名称和对应的选项数组存入Map
65+
multiCheckboxMap.set(name, options);
66+
})
67+
// 返回包含多复选框配置的Map
68+
return multiCheckboxMap
69+
}
70+
71+
/**
72+
* 根据复选框组名称获取对应的值
73+
* 这是一个异步函数,用于从复选框映射中获取指定名称的值
74+
* @param {string} name - 复选框组的名称
75+
* @returns {Promise<any>} 返回一个Promise,解析为复选框组对应的值
76+
*/
77+
async function getValueByMultiCheckboxName(name) {
78+
// 获取复选框映射表,这是一个异步操作
79+
let multiCheckboxMap = await getMultiCheckboxMap()
80+
// log.debug("multiCheckboxMap={key}", JSON.stringify(multiCheckboxMap))
81+
// multiCheckboxMap.entries().forEach(([name, options]) => {
82+
// log.debug("name={key1},options={key2}", name, JSON.stringify(options))
83+
// })
84+
// 从映射表中获取并返回指定名称对应的值
85+
let values = multiCheckboxMap.get(name);
86+
log.debug("values={key}", JSON.stringify(values))
87+
return values
88+
}
289
async function init() {
3-
let utils=[
90+
let utils = [
491
"uid",
592
"ws",
693
"notice",
794
"campaignArea",
895
"activity",
96+
"mapMission",
997
]
1098
for (let util of utils) {
1199
eval(file.readTextSync(`utils/${util}.js`));
12100
}
13-
manifest = JSON.parse(file.readTextSync("manifest.json"));
101+
// manifest = JSON.parse(file.readTextSync("manifest.json"));
102+
await initSettings();
14103
log.debug("main 初始化完成");
15104
}
105+
16106
// 判断是否在主界面的函数
17107
const isInMainUI = () => {
18108
let captureRegion = captureGameRegion();
@@ -44,8 +134,7 @@ async function toMainUi() {
44134

45135
(async function () {
46136
await init();
47-
log.info(`版本:{version}`,manifest.version)
48-
if (settings.toMainUi){
137+
if (settings.toMainUi) {
49138
await toMainUi();
50139
}
51140
await main();
@@ -57,10 +146,29 @@ async function toMainUi() {
57146
*/
58147
async function main() {
59148
let ms = 600
60-
await campaignAreaUtil.dailyCommissionMain()
61-
await sleep(ms*2);
62-
await campaignAreaUtil.campaignAreaMain(false)
63-
await sleep(ms*2);
149+
const mapList = await getValueByMultiCheckboxName('mapMissionKeys')|| []
150+
// log.info(`mapList=>{0}`,JSON.stringify(mapList))
151+
if (mapList.length > 0) {
152+
try {
153+
log.info(`开始识别地图任务`)
154+
await mapUtil.mapMission(mapList)
155+
} finally {
156+
await toMainUi()
157+
}
158+
}
159+
160+
let openKey = true
161+
162+
try {
163+
await campaignAreaUtil.dailyCommissionMain(openKey)
164+
await sleep(ms * 2);
165+
openKey = false
166+
} catch (e) {
167+
await toMainUi()
168+
throw e
169+
}
170+
await campaignAreaUtil.campaignAreaMain(openKey)
171+
await sleep(ms * 2);
64172
await toMainUi()
65173
await activityUtil.activityMain()
66174
}

repo/js/ActivitySwitchNotice/manifest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"name": "活动期限/周本通知器",
3-
"version": "0.0.7",
3+
"version": "0.0.8",
44
"description": "",
55
"settings_ui": "settings.json",
66
"main": "main.js",
7+
"bgi_version": "0.55.0",
78
"authors": [
89
{
910
"name": "云端客",
119 KB
Loading
5.98 KB
Loading

0 commit comments

Comments
 (0)