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

9.0 KiB
Raw Blame History

问题修复 - 错误码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. 错误码识别优先级

在俱乐部签到的错误处理中,按照以下优先级检查:

  1. 已签到状态200020, 2300190→ 返回成功
  2. 未加入俱乐部2300070→ 返回失败,提示加入
  3. 超时错误 → 返回警告,可能已成功
  4. 其他错误 → 原样抛出

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 今日发车已达上限 ⚠️ 跳过 -

测试验证

测试场景

  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. 兼容性:同时支持新旧错误码

代码示例

// ❌ 不好的做法:只检查一个错误码
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