Files
xyzw_web_helper/MD说明文件夹/月度任务命令修复说明.md
2025-10-17 20:56:50 +08:00

5.3 KiB
Raw Blame History

月度任务命令修复说明

问题原因

之前的问题: 月度任务功能没有实际发送命令,控制台没有日志。

根本原因: src/utils/gameCommands.js 中缺少月度任务相关的命令定义。


已修复

已在 gameCommands.js 中添加以下5个命令第716-805行

1. activity_get - 获取月度活动信息

activity_get(ack = 0, seq = 0, params = {}) {
  return {
    ack,
    body: this.g_utils.bon.encode({ ...params }),
    cmd: "activity_get",
    seq,
    rtt: randomInt(0, 500),
    code: 0,
    time: Date.now()
  }
}

2. fishing_fish - 钓鱼

fishing_fish(ack = 0, seq = 0, params = {}) {
  return {
    ack,
    body: this.g_utils.bon.encode({
      fishingType: 1,  // 1=普通鱼竿, 2=金鱼竿
      ...params
    }),
    cmd: "fishing_fish",
    seq,
    rtt: randomInt(0, 500),
    code: 0,
    time: Date.now()
  }
}

3. arena_matchopponent - 竞技场匹配对手

arena_matchopponent(ack = 0, seq = 0, params = {}) {
  return {
    ack,
    body: this.g_utils.bon.encode({ ...params }),
    cmd: "arena_matchopponent",
    seq,
    rtt: randomInt(0, 500),
    code: 0,
    time: Date.now()
  }
}

4. arena_battle - 竞技场战斗

arena_battle(ack = 0, seq = 0, params = {}) {
  return {
    ack,
    body: this.g_utils.bon.encode({
      battleType: 1,
      ...params
    }),
    cmd: "arena_battle",
    seq,
    rtt: randomInt(0, 500),
    code: 0,
    time: Date.now()
  }
}

5. monthlyactivity_receivereward - 领取月度任务奖励

monthlyactivity_receivereward(ack = 0, seq = 0, params = {}) {
  return {
    ack,
    body: this.g_utils.bon.encode({
      rewardId: 1,
      ...params
    }),
    cmd: "monthlyactivity_receivereward",
    seq,
    rtt: randomInt(0, 500),
    code: 0,
    time: Date.now()
  }
}

🧪 现在可以测试

测试步骤:

  1. 重启开发服务器

    # 停止当前服务器 (Ctrl+C)
    # 重新启动
    npm run dev
    
  2. 刷新浏览器页面 (F5 或 Ctrl+R)

  3. 打开浏览器控制台 (F12)

  4. 测试月度任务功能:

    • 点击"刷新进度"按钮
    • 观察控制台是否有日志输出
    • 查看Network标签是否有WebSocket消息

📊 预期效果

控制台应该显示:

🔗 [WS] WebSocket连接: token_xxx
📤 [TOKEN] 发送消息: activity_get
📨 [TOKEN] 收到响应: activity_get
月度任务进度已更新

Network标签应该显示

  • WebSocket连接活动
  • 发送的消息帧activity_get
  • 接收的响应帧

⚠️ 如果还是没有日志

检查以下几点:

  1. WebSocket是否连接

    • 确认已选择Token
    • 查看WebSocket连接状态
    • 控制台是否显示"WebSocket连接成功"
  2. 命令是否正确发送

    // 在控制台测试
    tokenStore.sendMessageWithPromise(
      tokenStore.selectedToken.id,
      'activity_get',
      {},
      10000
    ).then(result => {
      console.log('测试结果:', result)
    })
    
  3. 服务器是否支持这些命令

    • 有些服务器可能没有实现这些命令
    • 检查服务器响应是否有错误码
  4. 检查日志配置

    // 在控制台执行,确保日志显示
    localStorage.setItem('batchTaskLogConfig', JSON.stringify({
      websocket: true
    }))
    location.reload()
    

🔍 调试技巧

1. 监听所有WebSocket消息

// 在控制台执行
window.addEventListener('message', (e) => {
  console.log('WebSocket消息:', e.data)
})

2. 查看发送的命令

// 临时添加到GameStatus.vue的fetchMonthlyActivity函数
console.log('准备发送命令: activity_get')
const result = await tokenStore.sendMessageWithPromise(...)
console.log('收到响应:', result)

3. 检查gameCommands实例

// 在控制台
import { gameCommands } from '@/utils/gameCommands.js'
console.log(gameCommands)
console.log(typeof gameCommands.activity_get)  // 应该是 'function'

📝 命令参数说明

activity_get

  • 作用: 获取月度活动信息
  • 参数: 无(或服务器特定参数)
  • 返回: 包含myMonthInfo和myArenaInfo的对象

fishing_fish

  • 作用: 执行钓鱼操作
  • 参数:
    • fishingType: 1=普通鱼竿, 2=金鱼竿
  • 返回: 钓鱼结果

arena_matchopponent

  • 作用: 匹配竞技场对手
  • 参数: 无
  • 返回: 对手信息 { opponent: { roleId, name, power } }

arena_battle

  • 作用: 进行竞技场战斗
  • 参数:
    • targetRoleId: 对手的角色ID
    • battleType: 战斗类型默认1
  • 返回: 战斗结果

完成检查清单

  • 添加 activity_get 命令
  • 添加 fishing_fish 命令
  • 添加 arena_matchopponent 命令
  • 添加 arena_battle 命令
  • 添加 monthlyactivity_receivereward 命令
  • 重启开发服务器
  • 测试刷新进度功能
  • 测试钓鱼补齐功能
  • 测试竞技场补齐功能
  • 验证控制台日志输出

🎯 下一步

  1. 立即测试: 重启服务器并测试月度任务功能
  2. 如果正常: 继续阶段3身份卡系统
  3. 如果有问题: 提供控制台日志和Network截图

修复完成!现在命令应该可以正常发送了! 🎉