338 lines
9.0 KiB
Markdown
338 lines
9.0 KiB
Markdown
|
|
# 问题修复 - 错误码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)**
|
|||
|
|
- 执行俱乐部签到任务
|
|||
|
|
- 显示"未加入俱乐部,无法签到"
|
|||
|
|
- 标记为失败
|
|||
|
|
|
|||
|
|
### 预期行为
|
|||
|
|
|
|||
|
|
**场景1:100个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
|
|||
|
|
|