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

12 KiB
Raw Permalink Blame History

问题修复 - 功能未开启错误码识别 v3.12.2

版本: v3.12.2
日期: 2025-10-08
类型: 问题修复

问题描述

用户反馈在批量任务执行时遇到两个错误:

错误1一键答题失败

一键答题失败
服务器错误: 200160 - 未知错误

实际情况:游戏未开启答题模块(等级不够或功能未解锁)

错误2领取挂机奖励失败

领取挂机奖励失败
服务器错误: -10006 - 未知错误

实际情况:游戏未开启挂机奖励模块(等级不够或功能未解锁)

问题分析

这两个错误都是由于游戏功能未解锁导致的,属于正常情况:

  • 新账号或等级较低的账号可能还未解锁某些功能
  • 不同服务器的功能开启条件可能不同
  • 这些错误不应该被标记为"失败",而应该被识别为"功能未开启,跳过"

错误码说明

一键答题相关错误码

错误码 含义 原处理方式 修复后处理方式
3100080 答题次数已用完或功能未开启 跳过,视为成功 跳过,视为成功
200160 答题功能未开启 标记为失败 跳过,视为成功

领取挂机奖励相关错误码

错误码 含义 原处理方式 修复后处理方式
-10006 挂机奖励功能未开启 标记为失败 跳过,视为成功

解决方案

修改1一键答题 (autoStudy)

在已有的 3100080 错误码处理基础上,增加对 200160 错误码的识别:

修改前

} 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
}

修改后

} 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 结构:

修改前

case 'claimHangupReward':
  // 领取奖励(领取挂机时间)
  return await executeSubTask(
    tokenId,
    'claim_hangup_reward',
    '领取挂机奖励',
    async () => await client.sendWithPromise('system_claimhangupreward', {}, 3000),
    false
  )

修改后

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

在错误处理中,应优先识别"可预期的非错误状态"

// 优先级1: 功能未开启(视为成功,跳过)
if (errorMsg.includes('200160') || errorMsg.includes('3100080')) {
  return { success: true, skipped: true }
}

// 优先级2: 其他可识别错误
// ...

// 优先级3: 未知错误(抛出)
throw error

2. 返回格式统一

对于"功能未开启"的情况,统一返回格式:

{
  task: '任务名称',
  taskId: 'task_id',
  success: true,      // 标记为成功
  skipped: true,      // 标记为跳过
  message: '友好的提示信息'
}

3. executeSubTask 的返回处理

当 executor 函数返回一个对象时,executeSubTask 会将其包装为:

{
  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. 错误消息优化

// ❌ 不好的做法:显示原始错误码
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