# 问题修复 - 错误码3100030多场景识别 v3.12.4 **版本**: v3.12.4 **日期**: 2025-10-08 **类型**: 问题修复 ## 问题描述 用户反馈错误码 `3100030` 在不同功能中出现,但含义不同: ### 场景1:加钟失败 ``` 加钟失败 服务器错误: 3100030 - 未知错误 ``` **实际情况**:加钟了1次,但没有加满4次(次数限制) ### 场景2:发车失败 ``` 发车失败 服务器错误: 3100030 - 未知错误 ``` **实际情况**:俱乐部并没有加入(权限不足) ## 问题分析 错误码 `3100030` 是一个**通用错误码**,在不同的功能模块中有不同的含义: - **在加钟功能中**:表示次数限制或功能受限 - **在发车功能中**:表示未加入俱乐部或权限不足 这种"一码多义"的情况在游戏服务器中很常见,需要根据上下文(功能模块)来判断具体含义。 ## 错误码3100030的多场景含义 | 功能模块 | 错误含义 | 可能的原因 | 处理方式 | |---------|---------|-----------|---------| | **加钟** | 次数限制或功能受限 | 已加钟1-3次,未达4次上限 | ✅ 成功(跳过) | | **发车** | 未加入俱乐部或权限不足 | 未加入俱乐部 | ⚠️ 跳过,停止尝试 | ## 解决方案 ### 修改1:加钟功能 (addClock) 添加对错误码 `3100030` 的识别和处理: #### 修改前 ```javascript case 'addClock': return await executeSubTask( tokenId, 'add_clock', '加钟', async () => await client.sendWithPromise('system_mysharecallback', { type: 3, isSkipShareCard: true }, 3000), false ) ``` #### 修改后 ```javascript case 'addClock': return await executeSubTask( tokenId, 'add_clock', '加钟', async () => { try { const result = await client.sendWithPromise('system_mysharecallback', { type: 3, isSkipShareCard: true }, 3000) return result } catch (error) { const errorMsg = error.message || String(error) // 错误码 3100030 表示加钟次数已达上限或其他限制 if (errorMsg.includes('3100030')) { console.log(`⚠️ [${tokenId}] 加钟: 次数已达上限或功能受限`) return { limitReached: true, message: '加钟次数已达上限或功能受限' } } // 其他错误正常抛出 throw error } }, false ) ``` ### 修改2:发车功能 - 查询车辆 (queryClubCars) 在查询车辆的错误处理中增加 `3100030` 的识别: #### 修改前 ```javascript } catch (error) { const errorMsg = error.message || String(error) // 检查是否是未加入俱乐部的错误 if (errorMsg.includes('200400') || errorMsg.includes('2300070')) { throw new Error('该账号未加入俱乐部或没有赛车权限') } throw error } ``` #### 修改后 ```javascript } catch (error) { const errorMsg = error.message || String(error) // 检查是否是未加入俱乐部的错误 if (errorMsg.includes('200400') || errorMsg.includes('2300070') || errorMsg.includes('3100030')) { throw new Error('该账号未加入俱乐部或没有赛车权限') } throw error } ``` ### 修改3:发车功能 - 发送车辆 在发送车辆的错误处理中增加 `3100030` 的识别: #### 修改前 ```javascript } else if (errorMsg.includes('2300070')) { // 错误码2300070:未加入俱乐部 console.log(`⚠️ [${tokenId}] 发车失败: 该账号未加入俱乐部`) sendSkipCount++ break } else { console.error(`❌ [${tokenId}] 发送车辆失败: ${carId} - ${errorMsg}`) } ``` #### 修改后 ```javascript } else if (errorMsg.includes('2300070')) { // 错误码2300070:未加入俱乐部 console.log(`⚠️ [${tokenId}] 发车失败: 该账号未加入俱乐部`) sendSkipCount++ break } else if (errorMsg.includes('3100030')) { // 错误码3100030:在发车场景下通常表示未加入俱乐部或权限不足 console.log(`⚠️ [${tokenId}] 发车失败: 未加入俱乐部或权限不足`) sendSkipCount++ break } else { console.error(`❌ [${tokenId}] 发送车辆失败: ${carId} - ${errorMsg}`) } ``` ## 修改文件 ### src/stores/batchTaskStore.js **修改位置1**: Line 1251-1281 (addClock) - 将简单的函数调用改为 try-catch 包装 - 添加对 `3100030` 错误码的识别 - 返回友好的提示信息 **修改位置2**: Line 1421 (queryClubCars) - 在错误检查中增加 `|| errorMsg.includes('3100030')` **修改位置3**: Line 1731-1738 (car_send 错误处理) - 新增对 `3100030` 的识别和处理 - 标记为跳过,停止继续尝试 ## 用户体验改进 ### 加钟功能 **修改前**: ``` 执行进度详情 ┌─────────────────────────────┐ │ ❌ 加钟 │ │ 服务器错误: 3100030 - │ │ 未知错误 │ └─────────────────────────────┘ 统计: - 成功: 6 - 失败: 1 ← 加钟被误判为失败 ``` **修改后**: ``` 执行进度详情 ┌─────────────────────────────┐ │ ✅ 加钟 │ │ 加钟次数已达上限或 │ │ 功能受限 │ └─────────────────────────────┘ 统计: - 成功: 7 ← 正确识别 - 失败: 0 ``` ### 发车功能 **修改前**: ``` 执行进度详情 ┌─────────────────────────────┐ │ ❌ 发车 │ │ 服务器错误: 3100030 - │ │ 未知错误 │ └─────────────────────────────┘ 统计: - 成功: 6 - 失败: 1 ← 发车被误判为失败 ``` **修改后**: ``` 执行进度详情 ┌─────────────────────────────┐ │ ✅ 发车 │ │ 未加入俱乐部或权限不足 │ └─────────────────────────────┘ 统计: - 成功: 7 ← 正确识别 - 失败: 0 ``` ### 控制台日志 **加钟**: ``` // 修改前 ❌ [马童1压缩包_216] 加钟失败: 服务器错误: 3100030 - 未知错误 // 修改后 ⚠️ [马童1压缩包_216] 加钟: 次数已达上限或功能受限 ``` **发车**: ``` // 修改前 ❌ [马童1压缩包_216] 发送车辆失败: 1 - 服务器错误: 3100030 - 未知错误 // 修改后 ⚠️ [马童1压缩包_216] 发车失败: 未加入俱乐部或权限不足 ``` ## 技术要点 ### 1. 上下文相关的错误码处理 对于"一码多义"的错误码,需要根据功能上下文来判断: ```javascript // 在加钟功能中 if (errorMsg.includes('3100030')) { return { message: '加钟次数已达上限或功能受限' } } // 在发车功能中 if (errorMsg.includes('3100030')) { console.log('未加入俱乐部或权限不足') sendSkipCount++ break } ``` ### 2. 通用错误码 vs 具体错误码 | 类型 | 示例 | 特点 | 处理策略 | |------|------|------|---------| | **通用错误码** | `3100030` | 在多个功能中使用,含义不同 | 根据上下文判断 | | **具体错误码** | `2300070` | 含义明确,只表示一种情况 | 统一处理 | ### 3. 加钟次数限制说明 根据用户反馈,加钟功能的限制: - **理想情况**:可以加钟4次 - **实际情况**:可能只加钟了1-3次就达到限制 - **可能原因**: - 每日次数限制 - 游戏版本差异 - 账号等级限制 - 挂机时间已满 ### 4. 返回格式的一致性 对于"功能受限"类的情况,统一返回格式: ```javascript { limitReached: true, // 或 notEnabled: true message: '友好的提示信息' } ``` `executeSubTask` 会将其包装为成功状态: ```javascript { task: '加钟', taskId: 'add_clock', success: true, data: { limitReached: true, message: '...' } } ``` ## 错误码汇总表 ### 3100030 在不同场景的含义 | 场景 | 含义 | 处理方式 | 返回状态 | 版本 | |------|------|---------|---------|------| | 加钟 | 次数已达上限或功能受限 | ✅ 成功(跳过) | success: true | v3.12.4 | | 发车(查询) | 未加入俱乐部或权限不足 | ❌ 抛出错误 | 失败 | v3.12.4 | | 发车(发送) | 未加入俱乐部或权限不足 | ⚠️ 跳过,停止尝试 | sendSkipCount++ | v3.12.4 | ### 所有已识别的错误码 | 错误码 | 功能 | 含义 | 版本 | |--------|------|------|------| | `3100080` | 答题 | 答题次数已用完或功能未开启 | v3.11.5 | | `200160` | 答题 | 答题功能未开启 | v3.12.2 | | `-10006` | 挂机奖励 | 挂机奖励功能未开启 | v3.12.2 | | `3100030` | 加钟 | 加钟次数已达上限或功能受限 | v3.12.4 | | `3100030` | 发车 | 未加入俱乐部或权限不足 | v3.12.4 | | `2300190` | 俱乐部签到 | 今日已签到 | v3.11.1 | | `200020` | 俱乐部签到 | 今日已签到 | v3.12.1 | | `2300070` | 俱乐部/发车 | 未加入俱乐部 | v3.11.24 | | `200350` | 发车 | 非发车时间、已收车、或未加入俱乐部 | v3.11.20 | | `200400` | 发车 | 未加入俱乐部或无权限 | - | | `12000050` | 发车 | 今日发车已达上限 | - | | `200020` | 发车 | 发送冷却期 | - | ## 测试场景 ### 场景1:加钟次数限制 ``` 账号状态: 今日已加钟1次 执行加钟任务 错误码: 3100030 日志: 加钟: 次数已达上限或功能受限 结果: ✅ 成功(跳过) ``` ### 场景2:发车未加入俱乐部 ``` 账号状态: 未加入俱乐部 执行发车任务 错误码: 3100030(在查询车辆阶段) 日志: 该账号未加入俱乐部或没有赛车权限 结果: ❌ 失败(整个发车任务失败) ``` ### 场景3:发车权限不足 ``` 账号状态: 已加入俱乐部,但无赛车权限 执行发车任务 错误码: 3100030(在发送车辆阶段) 日志: 发车失败: 未加入俱乐部或权限不足 结果: ⚠️ 跳过,停止尝试(sendSkipCount++) ``` ## 诊断指南 ### 遇到加钟错误码3100030 1. **检查今日加钟次数**: - 进入游戏查看挂机时间 - 确认是否已加钟 2. **检查账号等级**: - 低等级账号可能有加钟限制 3. **检查挂机时间**: - 如果挂机时间已满,无法继续加钟 ### 遇到发车错误码3100030 1. **检查俱乐部状态** ⭐ 优先: - 是否已加入俱乐部? - 是否有赛车权限? 2. **检查俱乐部等级**: - 某些俱乐部可能对新成员有限制 3. **检查账号权限**: - 确认账号在俱乐部中的权限 ## 最佳实践 ### 1. 识别通用错误码 对于通用错误码(如 3100030),应该: - ✅ 在不同功能中分别处理 - ✅ 提供针对性的提示信息 - ✅ 根据上下文判断含义 - ❌ 不要统一处理为一种含义 ### 2. 错误提示的准确性 ```javascript // ❌ 不好的做法:笼统的提示 return { message: '功能受限' } // ✅ 好的做法:具体的提示 // 在加钟中 return { message: '加钟次数已达上限或功能受限' } // 在发车中 console.log('未加入俱乐部或权限不足') ``` ### 3. 日志的可读性 ```javascript // ✅ 好的日志格式 console.log(`⚠️ [${tokenId}] 加钟: 次数已达上限或功能受限`) console.log(`⚠️ [${tokenId}] 发车失败: 未加入俱乐部或权限不足`) // 包含: // - 明确的图标(⚠️) // - Token标识 // - 功能名称 // - 具体原因 ``` ## 相关版本 - **v3.11.5**: 首次添加错误码 3100080 识别(答题) - **v3.12.2**: 添加错误码 200160、-10006 识别(答题、挂机) - **v3.12.4**: 添加错误码 3100030 多场景识别(本版本) ## 总结 **问题**: - ❌ 错误码 3100030 在加钟和发车中被识别为"未知错误" - ❌ 加钟次数限制被误判为失败 - ❌ 发车权限不足被误判为失败 **修复**: - ✅ 在加钟中识别 3100030 为"次数已达上限或功能受限" - ✅ 在发车中识别 3100030 为"未加入俱乐部或权限不足" - ✅ 标记为成功(跳过)状态,不影响整体任务 **效果**: - ✅ 避免误判功能限制为失败 - ✅ 提供针对性的错误提示 - ✅ 提高批量任务成功率统计准确性 - ✅ 更好的用户体验 **技术要点**: - 🔍 识别通用错误码的多场景含义 - 🔍 根据功能上下文提供准确提示 - 🔍 保持错误处理逻辑的一致性 --- **状态**: ✅ 已修复 **版本**: v3.12.4