* @description 异步获取地图数据操作。 * @returns {Promise } 包含地图数据的 Promise 对象。
()
| 193 | * @returns {Promise<object>} 包含地图数据的 Promise 对象。 |
| 194 | */ |
| 195 | async function fetchMapData() { |
| 196 | const params = { |
| 197 | 'roleId': $.read(`zsfc_roleId`), |
| 198 | 'uin': $.read(`zsfc_uin`), |
| 199 | 'areaId': $.read(`zsfc_areaId`), |
| 200 | }; |
| 201 | const url = `https://bang.qq.com/app/speed/treasure/index?${$.queryStr(params)}`; |
| 202 | $.log(`🧑💻 正在获取地图数据`); |
| 203 | let mapData = {}; |
| 204 | |
| 205 | return new Promise(resolve => { |
| 206 | $.get(url, (error, response, data) => { |
| 207 | if (data) { |
| 208 | // 提取userInfo和mapInfo的数据 |
| 209 | const [userInfoData, mapInfoData, todaycanTimes, todayTimes] = [ |
| 210 | data.match(/window\.userInfo\s*=\s*eval\('([^']+)'\);/)?.[1], |
| 211 | data.match(/window\.mapInfo\s*=\s*eval\('([^']+)'\);/)?.[1], |
| 212 | data.match(/"todaycanTimes":(\d+)/)?.[1], |
| 213 | data.match(/"todayTimes":(\d+)/)?.[1] |
| 214 | ].map(match => match && eval(`(${match})`)); |
| 215 | |
| 216 | // 判断今日可寻宝次数是否用完 |
| 217 | if ((todaycanTimes - todayTimes)) { // 次数没有用完 |
| 218 | // 固定 iFlowId 列表 |
| 219 | const iFlowIdArray = { |
| 220 | "1": ["856152", "856155"], // 1星 |
| 221 | "2": ["856156", "856157"], // 2星,100次 |
| 222 | "3": ["856158", "856159"], // 3星,300次 |
| 223 | "4": ["856160", "856161"], // 4星,500次 |
| 224 | "5": ["856162", "856163"], // 5星,紫钻地图 |
| 225 | "6": ["856164", "856165"] // 6星,皇族地图 |
| 226 | }; |
| 227 | |
| 228 | // 获取地图最高解锁星级 |
| 229 | const highestUnlockedStarId = Math.max( |
| 230 | ...Object.keys(userInfoData.starInfo) // 转化为数组 |
| 231 | .filter(starId => userInfoData.starInfo[starId] === 1) |
| 232 | ); |
| 233 | |
| 234 | // 获取大吉地图信息 |
| 235 | const luckyMap = mapInfoData[highestUnlockedStarId] |
| 236 | .find(map => map.isdaji === 1); |
| 237 | |
| 238 | mapData = { |
| 239 | remainingTimes: true, |
| 240 | starId: highestUnlockedStarId, |
| 241 | mapId: luckyMap.id, |
| 242 | isVip: userInfoData.vip_flag, |
| 243 | mapName: luckyMap.name, |
| 244 | iFlowId: iFlowIdArray[highestUnlockedStarId] |
| 245 | }; |
| 246 | } else { // 次数已经用完 |
| 247 | mapData = { |
| 248 | remainingTimes: false |
| 249 | }; |
| 250 | } |
| 251 | } else { |
| 252 | $.log(`❌ 获取地图数据时发生错误`); |
no test coverage detected