9.0 KiB
9.0 KiB
问题修复 - 错误码200020俱乐部已签到 v3.12.1
版本: v3.12.1
日期: 2025-10-08
类型: 问题修复
问题描述
用户反馈俱乐部签到时遇到错误:
俱乐部签到失败
服务器错误: 200020 - 未知错误
实际情况:查看游戏内俱乐部,发现已经签到成功了。
问题分析:
- 错误码
200020实际上表示"今日已签到" - 但系统没有识别这个错误码
- 导致已签到的情况被标记为失败
- 应该像错误码
2300190一样处理为成功状态
错误码对比
已知的"已签到"错误码
| 错误码 | 含义 | 原处理方式 | 修复后处理方式 |
|---|---|---|---|
2300190 |
今日已签到 | ✅ 跳过,视为成功 | ✅ 跳过,视为成功 |
200020 |
今日已签到 | ❌ 标记为失败 | ✅ 跳过,视为成功 |
其他俱乐部相关错误码
| 错误码 | 含义 | 处理方式 |
|---|---|---|
2300070 |
未加入俱乐部 | ❌ 失败,提示加入俱乐部 |
| 超时 | 请求超时 | ⚠️ 警告,可能已成功 |
解决方案
修改内容
在俱乐部签到的错误处理中,将 200020 错误码与 2300190 合并处理:
修改前
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 2300190 表示"今日已签到",不应视为错误
if (errorMsg.includes('2300190')) {
console.log('ℹ️ 俱乐部今日已签到,跳过')
return { alreadySignedIn: true }
}
// ...其他错误处理
}
修改后
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 2300190 或 200020 表示"今日已签到",不应视为错误
if (errorMsg.includes('2300190') || errorMsg.includes('200020')) {
console.log('ℹ️ 俱乐部今日已签到,跳过')
return { alreadySignedIn: true }
}
// ...其他错误处理
}
完整的错误处理逻辑
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. 错误码识别优先级
在俱乐部签到的错误处理中,按照以下优先级检查:
- 已签到状态(200020, 2300190)→ 返回成功
- 未加入俱乐部(2300070)→ 返回失败,提示加入
- 超时错误 → 返回警告,可能已成功
- 其他错误 → 原样抛出
2. 为什么存在两个"已签到"错误码?
可能的原因:
- 2300190: 新版本的错误码(标准格式 23xxxxx)
- 200020: 旧版本的错误码(兼容保留)
- 不同服务器版本可能返回不同的错误码
- 游戏更新过程中的过渡状态
3. 处理策略
使用 || 运算符同时检查两个错误码:
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 |
今日发车已达上限 | ⚠️ 跳过 | - |
测试验证
测试场景
-
✅ 已签到的账号(错误码 200020)
- 执行俱乐部签到任务
- 应该显示"今日已签到,跳过"
- 标记为成功
-
✅ 已签到的账号(错误码 2300190)
- 执行俱乐部签到任务
- 应该显示"今日已签到,跳过"
- 标记为成功
-
✅ 未签到的账号
- 执行俱乐部签到任务
- 正常签到成功
- 标记为成功
-
✅ 未加入俱乐部的账号(错误码 2300070)
- 执行俱乐部签到任务
- 显示"未加入俱乐部,无法签到"
- 标记为失败
预期行为
场景1:100个Token批量签到,其中50个已签到(错误码200020)
执行结果:
- 总任务: 100
- 成功: 100 ← 全部成功
- 50个正常签到
- 50个已签到(跳过)
- 失败: 0
详情:
✅ Token1: 签到成功
✅ Token2: 今日已签到,跳过 (200020)
✅ Token3: 今日已签到,跳过 (2300190)
...
问题来源分析
为什么会出现200020错误?
可能的情况:
- 第二次签到:同一天内重复执行批量任务
- 游戏内手动签到:已在游戏内手动签到过
- 其他脚本签到:其他自动化工具已签到
- 定时任务重复:定时任务多次触发
为什么之前没发现?
- 大多数情况下返回的是
2300190错误码 200020错误码可能只在特定情况下返回- 用户可能在不同的游戏服务器版本
最佳实践
错误码处理原则
- 明确识别:为每个已知错误码提供明确处理
- 宽容处理:对于"已完成"类的错误,视为成功
- 友好提示:提供清晰的错误说明
- 兼容性:同时支持新旧错误码
代码示例
// ❌ 不好的做法:只检查一个错误码
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