Files
xyzw_web_helper/MD说明文件夹/问题修复-错误码3100030多场景识别v3.12.4.md
2025-10-17 20:56:50 +08:00

472 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 问题修复 - 错误码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