# 月度任务命令修复说明

## ❌ 问题原因

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

**根本原因**: `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截图

---

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

