11let 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+ }
289async 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// 判断是否在主界面的函数
17107const 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 */
58147async 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}
0 commit comments