12 KiB
12 KiB
问题修复 - 错误码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 的识别和处理:
修改前
case 'addClock':
return await executeSubTask(
tokenId,
'add_clock',
'加钟',
async () => await client.sendWithPromise('system_mysharecallback', {
type: 3,
isSkipShareCard: true
}, 3000),
false
)
修改后
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 的识别:
修改前
} catch (error) {
const errorMsg = error.message || String(error)
// 检查是否是未加入俱乐部的错误
if (errorMsg.includes('200400') || errorMsg.includes('2300070')) {
throw new Error('该账号未加入俱乐部或没有赛车权限')
}
throw error
}
修改后
} 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 的识别:
修改前
} else if (errorMsg.includes('2300070')) {
// 错误码2300070:未加入俱乐部
console.log(`⚠️ [${tokenId}] 发车失败: 该账号未加入俱乐部`)
sendSkipCount++
break
} else {
console.error(`❌ [${tokenId}] 发送车辆失败: ${carId} - ${errorMsg}`)
}
修改后
} 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. 上下文相关的错误码处理
对于"一码多义"的错误码,需要根据功能上下文来判断:
// 在加钟功能中
if (errorMsg.includes('3100030')) {
return { message: '加钟次数已达上限或功能受限' }
}
// 在发车功能中
if (errorMsg.includes('3100030')) {
console.log('未加入俱乐部或权限不足')
sendSkipCount++
break
}
2. 通用错误码 vs 具体错误码
| 类型 | 示例 | 特点 | 处理策略 |
|---|---|---|---|
| 通用错误码 | 3100030 |
在多个功能中使用,含义不同 | 根据上下文判断 |
| 具体错误码 | 2300070 |
含义明确,只表示一种情况 | 统一处理 |
3. 加钟次数限制说明
根据用户反馈,加钟功能的限制:
- 理想情况:可以加钟4次
- 实际情况:可能只加钟了1-3次就达到限制
- 可能原因:
- 每日次数限制
- 游戏版本差异
- 账号等级限制
- 挂机时间已满
4. 返回格式的一致性
对于"功能受限"类的情况,统一返回格式:
{
limitReached: true, // 或 notEnabled: true
message: '友好的提示信息'
}
executeSubTask 会将其包装为成功状态:
{
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
-
检查今日加钟次数:
- 进入游戏查看挂机时间
- 确认是否已加钟
-
检查账号等级:
- 低等级账号可能有加钟限制
-
检查挂机时间:
- 如果挂机时间已满,无法继续加钟
遇到发车错误码3100030
-
检查俱乐部状态 ⭐ 优先:
- 是否已加入俱乐部?
- 是否有赛车权限?
-
检查俱乐部等级:
- 某些俱乐部可能对新成员有限制
-
检查账号权限:
- 确认账号在俱乐部中的权限
最佳实践
1. 识别通用错误码
对于通用错误码(如 3100030),应该:
- ✅ 在不同功能中分别处理
- ✅ 提供针对性的提示信息
- ✅ 根据上下文判断含义
- ❌ 不要统一处理为一种含义
2. 错误提示的准确性
// ❌ 不好的做法:笼统的提示
return { message: '功能受限' }
// ✅ 好的做法:具体的提示
// 在加钟中
return { message: '加钟次数已达上限或功能受限' }
// 在发车中
console.log('未加入俱乐部或权限不足')
3. 日志的可读性
// ✅ 好的日志格式
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