Files
xyzw_web_helper/MD说明文件夹/问题修复-错误码200020俱乐部已签到v3.12.1.md
2025-10-17 20:56:50 +08:00

338 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# 问题修复 - 错误码200020俱乐部已签到 v3.12.1
**版本**: v3.12.1
**日期**: 2025-10-08
**类型**: 问题修复
## 问题描述
用户反馈俱乐部签到时遇到错误:
```
俱乐部签到失败
服务器错误: 200020 - 未知错误
```
**实际情况**:查看游戏内俱乐部,发现已经签到成功了。
**问题分析**
- 错误码 `200020` 实际上表示"今日已签到"
- 但系统没有识别这个错误码
- 导致已签到的情况被标记为失败
- 应该像错误码 `2300190` 一样处理为成功状态
## 错误码对比
### 已知的"已签到"错误码
| 错误码 | 含义 | 原处理方式 | 修复后处理方式 |
|--------|------|-----------|--------------|
| `2300190` | 今日已签到 | ✅ 跳过,视为成功 | ✅ 跳过,视为成功 |
| `200020` | 今日已签到 | ❌ 标记为失败 | ✅ 跳过,视为成功 |
### 其他俱乐部相关错误码
| 错误码 | 含义 | 处理方式 |
|--------|------|---------|
| `2300070` | 未加入俱乐部 | ❌ 失败,提示加入俱乐部 |
| 超时 | 请求超时 | ⚠️ 警告,可能已成功 |
## 解决方案
### 修改内容
在俱乐部签到的错误处理中,将 `200020` 错误码与 `2300190` 合并处理:
#### 修改前
```javascript
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 2300190 表示"今日已签到",不应视为错误
if (errorMsg.includes('2300190')) {
console.log(' 俱乐部今日已签到,跳过')
return { alreadySignedIn: true }
}
// ...其他错误处理
}
```
#### 修改后
```javascript
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 2300190 或 200020 表示"今日已签到",不应视为错误
if (errorMsg.includes('2300190') || errorMsg.includes('200020')) {
console.log(' 俱乐部今日已签到,跳过')
return { alreadySignedIn: true }
}
// ...其他错误处理
}
```
### 完整的错误处理逻辑
```javascript
case 'legionSignIn':
// 俱乐部签到
return await executeSubTask(
tokenId,
'legion_signin',
'俱乐部签到',
async () => {
try {
const result = await client.sendWithPromise('legion_signin', {}, 5000)
return result
} catch (error) {
const errorMsg = error.message || String(error)
// 1. 错误码 2300190 或 200020 表示"今日已签到"
if (errorMsg.includes('2300190') || errorMsg.includes('200020')) {
console.log(' 俱乐部今日已签到,跳过')
return { alreadySignedIn: true } // 返回成功
}
// 2. 错误码 2300070 表示"未加入俱乐部"
if (errorMsg.includes('2300070')) {
console.log('⚠️ 俱乐部签到失败:该账号未加入俱乐部')
throw new Error('该账号未加入俱乐部,无法签到') // 抛出错误
}
// 3. 超时错误:可能已成功
if (errorMsg.includes('请求超时') || errorMsg.includes('timeout')) {
console.warn('⚠️ 俱乐部签到超时,请检查游戏内是否已签到')
return { timeout: true, message: '超时(可能已成功,请检查游戏内状态)' }
}
// 4. 其他错误正常抛出
throw error
}
},
false
)
```
## 修改文件
### src/stores/batchTaskStore.js
**修改位置**: Line 1169-1172
**修改内容**:
-`errorMsg.includes('2300190')` 改为 `errorMsg.includes('2300190') || errorMsg.includes('200020')`
- 更新注释说明包含两个错误码
## 用户体验改进
### 修改前
```
执行进度详情
┌─────────────────────────────┐
│ ❌ 俱乐部签到 │
│ 服务器错误: 200020 - │
│ 未知错误 │
└─────────────────────────────┘
统计:
- 总任务: 7
- 成功: 6
- 失败: 1 ← 误判
```
### 修改后
```
执行进度详情
┌─────────────────────────────┐
│ ✅ 俱乐部签到 │
│ 今日已签到,跳过 │
└─────────────────────────────┘
统计:
- 总任务: 7
- 成功: 7 ← 正确识别
- 失败: 0
```
### 控制台日志
**修改前**
```
❌ [10608服-2-7145...] 俱乐部签到失败: 服务器错误: 200020 - 未知错误
```
**修改后**
```
俱乐部今日已签到,跳过
```
## 技术要点
### 1. 错误码识别优先级
在俱乐部签到的错误处理中,按照以下优先级检查:
1. **已签到状态**200020, 2300190→ 返回成功
2. **未加入俱乐部**2300070→ 返回失败,提示加入
3. **超时错误** → 返回警告,可能已成功
4. **其他错误** → 原样抛出
### 2. 为什么存在两个"已签到"错误码?
可能的原因:
- **2300190**: 新版本的错误码(标准格式 23xxxxx
- **200020**: 旧版本的错误码(兼容保留)
- 不同服务器版本可能返回不同的错误码
- 游戏更新过程中的过渡状态
### 3. 处理策略
使用 `||` 运算符同时检查两个错误码:
```javascript
if (errorMsg.includes('2300190') || errorMsg.includes('200020')) {
// 任意一个错误码匹配,都视为已签到
return { alreadySignedIn: true }
}
```
**优点**
- ✅ 兼容新旧版本
- ✅ 覆盖所有"已签到"的情况
- ✅ 避免误判为失败
## 相关错误码汇总
### 俱乐部签到相关
| 错误码 | 含义 | 处理方式 | 版本 |
|--------|------|---------|------|
| `2300190` | 今日已签到 | ✅ 成功 | v3.11.1 |
| `200020` | 今日已签到 | ✅ 成功 | v3.12.1 |
| `2300070` | 未加入俱乐部 | ❌ 失败 | v3.11.24 |
| 超时 | 请求超时 | ⚠️ 警告 | v3.11.15 |
### 发车相关
| 错误码 | 含义 | 处理方式 | 版本 |
|--------|------|---------|------|
| `200350` | 非发车时间或已收车 | ⚠️ 跳过 | v3.11.20 |
| `200020` | 发送冷却期 | ⚠️ 跳过 | - |
| `2300070` | 未加入俱乐部 | ⚠️ 跳过 | v3.11.24 |
| `12000050` | 今日发车已达上限 | ⚠️ 跳过 | - |
## 测试验证
### 测试场景
1.**已签到的账号(错误码 200020**
- 执行俱乐部签到任务
- 应该显示"今日已签到,跳过"
- 标记为成功
2.**已签到的账号(错误码 2300190**
- 执行俱乐部签到任务
- 应该显示"今日已签到,跳过"
- 标记为成功
3.**未签到的账号**
- 执行俱乐部签到任务
- 正常签到成功
- 标记为成功
4.**未加入俱乐部的账号(错误码 2300070**
- 执行俱乐部签到任务
- 显示"未加入俱乐部,无法签到"
- 标记为失败
### 预期行为
**场景1100个Token批量签到其中50个已签到错误码200020**
```
执行结果:
- 总任务: 100
- 成功: 100 ← 全部成功
- 50个正常签到
- 50个已签到跳过
- 失败: 0
详情:
✅ Token1: 签到成功
✅ Token2: 今日已签到,跳过 (200020)
✅ Token3: 今日已签到,跳过 (2300190)
...
```
## 问题来源分析
### 为什么会出现200020错误
可能的情况:
1. **第二次签到**:同一天内重复执行批量任务
2. **游戏内手动签到**:已在游戏内手动签到过
3. **其他脚本签到**:其他自动化工具已签到
4. **定时任务重复**:定时任务多次触发
### 为什么之前没发现?
- 大多数情况下返回的是 `2300190` 错误码
- `200020` 错误码可能只在特定情况下返回
- 用户可能在不同的游戏服务器版本
## 最佳实践
### 错误码处理原则
1. **明确识别**:为每个已知错误码提供明确处理
2. **宽容处理**:对于"已完成"类的错误,视为成功
3. **友好提示**:提供清晰的错误说明
4. **兼容性**:同时支持新旧错误码
### 代码示例
```javascript
// ❌ 不好的做法:只检查一个错误码
if (errorMsg.includes('2300190')) {
return { alreadySignedIn: true }
}
// ✅ 好的做法:检查所有可能的"已签到"错误码
if (errorMsg.includes('2300190') || errorMsg.includes('200020')) {
return { alreadySignedIn: true }
}
```
## 相关版本
- **v3.11.1**: 首次添加错误码 2300190 识别
- **v3.11.15**: 添加超时错误处理
- **v3.11.24**: 添加错误码 2300070 识别
- **v3.12.1**: 添加错误码 200020 识别(本版本)
## 总结
**问题**
- ❌ 错误码 200020 被识别为"未知错误"
- ❌ 已签到的情况被标记为失败
- ❌ 影响批量任务的成功率统计
**修复**
- ✅ 识别错误码 200020 为"今日已签到"
- ✅ 与错误码 2300190 合并处理
- ✅ 正确标记为成功状态
**效果**
- ✅ 避免误判已签到为失败
- ✅ 提高批量任务成功率
- ✅ 兼容新旧错误码
- ✅ 更准确的执行统计
---
**状态**: ✅ 已修复
**版本**: v3.12.1