# 月度任务命令修复说明 ## ❌ 问题原因 **之前的问题**: 月度任务功能没有实际发送命令,控制台没有日志。 **根本原因**: `src/utils/gameCommands.js` 中缺少月度任务相关的命令定义。 --- ## ✅ 已修复 已在 `gameCommands.js` 中添加以下5个命令(第716-805行): ### 1. activity_get - 获取月度活动信息 ```javascript 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 - 钓鱼 ```javascript 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 - 竞技场匹配对手 ```javascript 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 - 竞技场战斗 ```javascript 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 - 领取月度任务奖励 ```javascript 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. **重启开发服务器** ```bash # 停止当前服务器 (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. **命令是否正确发送** ```javascript // 在控制台测试 tokenStore.sendMessageWithPromise( tokenStore.selectedToken.id, 'activity_get', {}, 10000 ).then(result => { console.log('测试结果:', result) }) ``` 3. **服务器是否支持这些命令** - 有些服务器可能没有实现这些命令 - 检查服务器响应是否有错误码 4. **检查日志配置** ```javascript // 在控制台执行,确保日志显示 localStorage.setItem('batchTaskLogConfig', JSON.stringify({ websocket: true })) location.reload() ``` --- ## 🔍 调试技巧 ### 1. 监听所有WebSocket消息 ```javascript // 在控制台执行 window.addEventListener('message', (e) => { console.log('WebSocket消息:', e.data) }) ``` ### 2. 查看发送的命令 ```javascript // 临时添加到GameStatus.vue的fetchMonthlyActivity函数 console.log('准备发送命令: activity_get') const result = await tokenStore.sendMessageWithPromise(...) console.log('收到响应:', result) ``` ### 3. 检查gameCommands实例 ```javascript // 在控制台 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) - **返回**: 战斗结果 --- ## ✅ 完成检查清单 - [x] 添加 activity_get 命令 - [x] 添加 fishing_fish 命令 - [x] 添加 arena_matchopponent 命令 - [x] 添加 arena_battle 命令 - [x] 添加 monthlyactivity_receivereward 命令 - [ ] 重启开发服务器 - [ ] 测试刷新进度功能 - [ ] 测试钓鱼补齐功能 - [ ] 测试竞技场补齐功能 - [ ] 验证控制台日志输出 --- ## 🎯 下一步 1. **立即测试**: 重启服务器并测试月度任务功能 2. **如果正常**: 继续阶段3(身份卡系统) 3. **如果有问题**: 提供控制台日志和Network截图 --- **修复完成!现在命令应该可以正常发送了!** 🎉