Files
xyzw_web_helper/MD说明文件夹/问题修复-功能未开启错误码识别v3.12.2.md
2025-10-17 20:56:50 +08:00

468 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.

# 问题修复 - 功能未开启错误码识别 v3.12.2
**版本**: v3.12.2
**日期**: 2025-10-08
**类型**: 问题修复
## 问题描述
用户反馈在批量任务执行时遇到两个错误:
### 错误1一键答题失败
```
一键答题失败
服务器错误: 200160 - 未知错误
```
**实际情况**:游戏未开启答题模块(等级不够或功能未解锁)
### 错误2领取挂机奖励失败
```
领取挂机奖励失败
服务器错误: -10006 - 未知错误
```
**实际情况**:游戏未开启挂机奖励模块(等级不够或功能未解锁)
## 问题分析
这两个错误都是由于游戏功能未解锁导致的,属于正常情况:
- 新账号或等级较低的账号可能还未解锁某些功能
- 不同服务器的功能开启条件可能不同
- 这些错误不应该被标记为"失败",而应该被识别为"功能未开启,跳过"
## 错误码说明
### 一键答题相关错误码
| 错误码 | 含义 | 原处理方式 | 修复后处理方式 |
|--------|------|-----------|--------------|
| `3100080` | 答题次数已用完或功能未开启 | ✅ 跳过,视为成功 | ✅ 跳过,视为成功 |
| `200160` | 答题功能未开启 | ❌ 标记为失败 | ✅ 跳过,视为成功 |
### 领取挂机奖励相关错误码
| 错误码 | 含义 | 原处理方式 | 修复后处理方式 |
|--------|------|-----------|--------------|
| `-10006` | 挂机奖励功能未开启 | ❌ 标记为失败 | ✅ 跳过,视为成功 |
## 解决方案
### 修改1一键答题 (autoStudy)
在已有的 `3100080` 错误码处理基础上,增加对 `200160` 错误码的识别:
#### 修改前
```javascript
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 3100080 通常表示答题次数已用完或答题未开启
if (errorMsg.includes('3100080')) {
console.log(`⚠️ [${tokenId}] 答题任务: 答题次数已用完或功能未开启`)
return {
task: '一键答题',
taskId: 'auto_study',
success: true,
skipped: true,
message: '答题次数已用完或功能未开启'
}
}
throw error
}
```
#### 修改后
```javascript
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 3100080 或 200160 表示答题次数已用完或答题功能未开启
if (errorMsg.includes('3100080') || errorMsg.includes('200160')) {
console.log(`⚠️ [${tokenId}] 答题任务: 答题次数已用完或功能未开启`)
return {
task: '一键答题',
taskId: 'auto_study',
success: true, // 视为成功,不影响整体任务
skipped: true,
message: '答题次数已用完或功能未开启'
}
}
// 其他错误正常抛出
throw error
}
```
### 修改2领取挂机奖励 (claimHangupReward)
将原本简单的 `executeSubTask` 包装改为带错误处理的 try-catch 结构:
#### 修改前
```javascript
case 'claimHangupReward':
// 领取奖励(领取挂机时间)
return await executeSubTask(
tokenId,
'claim_hangup_reward',
'领取挂机奖励',
async () => await client.sendWithPromise('system_claimhangupreward', {}, 3000),
false
)
```
#### 修改后
```javascript
case 'claimHangupReward':
// 领取挂机奖励
return await executeSubTask(
tokenId,
'claim_hangup_reward',
'领取挂机奖励',
async () => {
try {
const result = await client.sendWithPromise('system_claimhangupreward', {}, 3000)
return result
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 -10006 表示挂机奖励功能未开启
if (errorMsg.includes('-10006')) {
console.log(`⚠️ [${tokenId}] 领取挂机奖励: 功能未开启`)
return {
notEnabled: true,
message: '挂机奖励功能未开启'
}
}
// 其他错误正常抛出
throw error
}
},
false
)
```
## 修改文件
### src/stores/batchTaskStore.js
**修改位置1**: Line 1206-1207 (autoStudy)
-`errorMsg.includes('3100080')` 改为 `errorMsg.includes('3100080') || errorMsg.includes('200160')`
- 更新注释说明包含两个错误码
**修改位置2**: Line 1222-1249 (claimHangupReward)
- 将简单的函数调用改为 try-catch 包装
- 添加对 `-10006` 错误码的识别
- 返回 `{ notEnabled: true }` 表示功能未开启
## 用户体验改进
### 一键答题
**修改前**
```
执行进度详情
┌─────────────────────────────┐
│ ❌ 一键答题 │
│ 服务器错误: 200160 - │
│ 未知错误 │
└─────────────────────────────┘
统计:
- 总任务: 7
- 成功: 6
- 失败: 1 ← 误判
```
**修改后**
```
执行进度详情
┌─────────────────────────────┐
│ ✅ 一键答题 │
│ 答题次数已用完或功能 │
│ 未开启 │
└─────────────────────────────┘
统计:
- 总任务: 7
- 成功: 7 ← 正确识别
- 失败: 0
```
### 领取挂机奖励
**修改前**
```
执行进度详情
┌─────────────────────────────┐
│ ❌ 领取挂机奖励 │
│ 服务器错误: -10006 - │
│ 未知错误 │
└─────────────────────────────┘
统计:
- 总任务: 7
- 成功: 6
- 失败: 1 ← 误判
```
**修改后**
```
执行进度详情
┌─────────────────────────────┐
│ ✅ 领取挂机奖励 │
│ 挂机奖励功能未开启 │
└─────────────────────────────┘
统计:
- 总任务: 7
- 成功: 7 ← 正确识别
- 失败: 0
```
### 控制台日志
**一键答题**
```
// 修改前
❌ [10694服-0-7167...] 一键答题失败: 服务器错误: 200160 - 未知错误
// 修改后
⚠️ [10694服-0-7167...] 答题任务: 答题次数已用完或功能未开启
```
**领取挂机奖励**
```
// 修改前
❌ [10694服-0-7167...] 领取挂机奖励失败: 服务器错误: -10006 - 未知错误
// 修改后
⚠️ [10694服-0-7167...] 领取挂机奖励: 功能未开启
```
## 功能开启条件
### 一键答题功能
通常需要满足以下条件之一:
- 账号等级达到一定要求如15级
- 完成特定的主线任务
- 服务器开启答题活动
### 挂机奖励功能
通常需要满足以下条件:
- 账号等级达到一定要求如10级
- 解锁挂机系统
- 完成新手引导
## 技术要点
### 1. 错误码识别优先级
在错误处理中,应优先识别"可预期的非错误状态"
```javascript
// 优先级1: 功能未开启(视为成功,跳过)
if (errorMsg.includes('200160') || errorMsg.includes('3100080')) {
return { success: true, skipped: true }
}
// 优先级2: 其他可识别错误
// ...
// 优先级3: 未知错误(抛出)
throw error
```
### 2. 返回格式统一
对于"功能未开启"的情况,统一返回格式:
```javascript
{
task: '任务名称',
taskId: 'task_id',
success: true, // 标记为成功
skipped: true, // 标记为跳过
message: '友好的提示信息'
}
```
### 3. executeSubTask 的返回处理
当 executor 函数返回一个对象时,`executeSubTask` 会将其包装为:
```javascript
{
task: taskName,
taskId: taskId,
success: true,
data: {
notEnabled: true, // executor 返回的内容
message: '...'
},
skipped: false
}
```
这样也能正确表示"成功但功能未开启"的状态。
## 特殊错误码格式
### 负数错误码
错误码 `-10006` 是一个负数,这在游戏服务器中比较少见:
- 可能表示系统级错误
- 可能表示配置未加载
- 需要使用 `errorMsg.includes('-10006')` 进行字符串匹配
## 相关错误码汇总
### 答题相关
| 错误码 | 含义 | 处理方式 | 版本 |
|--------|------|---------|------|
| `3100080` | 答题次数已用完或功能未开启 | ✅ 成功(跳过) | v3.11.5 |
| `200160` | 答题功能未开启 | ✅ 成功(跳过) | v3.12.2 |
### 挂机奖励相关
| 错误码 | 含义 | 处理方式 | 版本 |
|--------|------|---------|------|
| `-10006` | 挂机奖励功能未开启 | ✅ 成功(跳过) | v3.12.2 |
### 其他功能相关
| 错误码 | 功能 | 含义 | 处理方式 |
|--------|------|------|---------|
| `2300190` | 俱乐部签到 | 今日已签到 | ✅ 成功 |
| `200020` | 俱乐部签到 | 今日已签到 | ✅ 成功 |
| `2300070` | 俱乐部签到/发车 | 未加入俱乐部 | ❌ 失败 |
| `200350` | 发车 | 非发车时间 | ⚠️ 跳过 |
## 测试验证
### 测试场景1低等级账号功能未开启
```
账号等级: 5级
答题功能: 未解锁
挂机奖励: 未解锁
执行结果:
- ✅ 一键答题: 答题次数已用完或功能未开启(跳过)
- ✅ 领取挂机奖励: 挂机奖励功能未开启(跳过)
- 总任务: 7
- 成功: 7
- 失败: 0
```
### 测试场景2高等级账号功能已开启
```
账号等级: 50级
答题功能: 已解锁
挂机奖励: 已解锁
执行结果:
- ✅ 一键答题: 答题完成
- ✅ 领取挂机奖励: 领取成功
- 总任务: 7
- 成功: 7
- 失败: 0
```
### 测试场景3答题次数已用完
```
账号等级: 50级
答题功能: 已解锁
今日答题: 已完成
执行结果:
- ✅ 一键答题: 答题次数已用完或功能未开启(跳过)
(错误码可能是 3100080 或 200160
- 总任务: 7
- 成功: 7
- 失败: 0
```
## 最佳实践
### 1. 功能未开启的识别
对于"功能未开启"类的错误,应该:
- ✅ 识别为成功状态(不影响整体任务)
- ✅ 标记为跳过(`skipped: true`
- ✅ 提供友好的提示信息
- ❌ 不应标记为失败
### 2. 错误消息优化
```javascript
// ❌ 不好的做法:显示原始错误码
return { error: '服务器错误: 200160 - 未知错误' }
// ✅ 好的做法:提供友好的说明
return {
success: true,
skipped: true,
message: '答题功能未开启'
}
```
### 3. 批量任务中的处理
在批量任务中,应区分:
- **真正的失败**:需要重试或用户处理
- **可预期的跳过**:功能未开启、已完成等
- **成功**:正常执行成功
## 使用建议
### 对于用户
如果看到"功能未开启"的提示:
1. **不用担心**:这不是错误,而是正常的状态
2. **提升等级**:继续升级角色,解锁更多功能
3. **关注任务**:完成主线任务,通常会解锁新功能
4. **自定义模板**:可以创建不包含未解锁功能的任务模板
### 对于开发者
添加新功能时,应考虑:
1. **功能未开启的错误码**是什么
2. **如何友好地处理**这些错误
3. **是否需要区分**"未开启"和"已用完"
## 相关版本
- **v3.11.5**: 首次添加错误码 3100080 识别(答题)
- **v3.12.1**: 添加错误码 200020 识别(俱乐部签到)
- **v3.12.2**: 添加错误码 200160 和 -10006 识别(本版本)
## 总结
**问题**
- ❌ 错误码 200160答题功能未开启被识别为失败
- ❌ 错误码 -10006挂机奖励功能未开启被识别为失败
- ❌ 影响低等级账号的批量任务成功率
**修复**
- ✅ 识别错误码 200160 为"答题功能未开启"
- ✅ 识别错误码 -10006 为"挂机奖励功能未开启"
- ✅ 标记为成功(跳过)状态,不影响整体任务
**效果**
- ✅ 低等级账号也能正常执行批量任务
- ✅ 避免误判功能未开启为失败
- ✅ 提供友好的提示信息
- ✅ 提高批量任务成功率统计准确性
---
**状态**: ✅ 已修复
**版本**: v3.12.2