Files
xyzw_web_helper/MD说明文件夹/月度任务系统集成记录.md
2025-10-17 20:56:50 +08:00

185 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 月度任务系统集成记录
## 📅 完成时间
2025-10-12 17:46
## ✅ 功能概述
成功将开源v2.1.1的月度任务系统集成到项目中,包括:
- 月度进度刷新钓鱼320次、竞技场240次目标
- 钓鱼补齐(优先普通鱼竿,贪心策略)
- 竞技场补齐(检查体力,贪心策略)
## 🔧 关键修复点
### 1. 命令注册问题
**问题**`activity_get` 命令发送后超时,服务器未响应
**原因**:命令未在 `xyzwWebSocket.js``registerDefaultCommands` 中注册
**解决**
```javascript
// src/utils/xyzwWebSocket.js
.register("activity_get", {})
.register("monthlyactivity_receivereward", {})
```
### 2. 响应映射缺失
**问题**:服务器返回 `activity_getresp`,但 Promise 等待 `activity_get`,导致超时
**原因**:响应命令名与请求命令名不匹配,缺少映射关系
**解决**:在 `responseToCommandMap` 中添加映射
```javascript
// src/utils/xyzwWebSocket.js
const responseToCommandMap = {
'activity_getresp': 'activity_get', // 月度活动
'monthlyactivity_receiverewardresp': 'monthlyactivity_receivereward',
'fishing_fishresp': 'fishing_fish', // 钓鱼
'arena_matchopponentresp': 'arena_matchopponent', // 竞技场匹配
'arena_battleresp': 'arena_battle', // 竞技场战斗
// ... 其他映射
}
```
### 3. WebSocket连接时序问题
**问题**:页面加载时自动刷新失败,但手动点击成功
**原因**延迟1秒不够WebSocket可能还在初始化
**解决**:改用轮询检测机制
```javascript
// src/components/GameStatus.vue
let monthTaskFetched = false
const checkAndFetchMonthly = () => {
const status = tokenStore.getWebSocketStatus(tokenId)
if (status === 'connected' && !monthTaskFetched) {
monthTaskFetched = true
setTimeout(() => fetchMonthlyActivity(), 1000)
}
}
// 立即检查 + 每秒轮询最多5次
checkAndFetchMonthly()
const checkInterval = setInterval(() => {
if (checkCount++ >= 5) {
clearInterval(checkInterval)
} else if (status === 'connected' && !monthTaskFetched) {
clearInterval(checkInterval)
checkAndFetchMonthly()
}
}, 1000)
```
### 4. 访问Store属性错误
**问题**`Cannot read properties of undefined (reading 'token_xxx')`
**原因**:错误使用 `tokenStore.connections` 而非 `tokenStore.wsConnections`
**解决**
```javascript
// 错误写法
const ws = tokenStore.connections[tokenId]?.ws
// 正确写法
const connection = tokenStore.wsConnections[tokenId]
```
## 📁 修改的文件清单
### 1. src/utils/gameCommands.js
添加月度任务相关命令:
- `activity_get()` - 获取月度活动信息
- `fishing_fish(rodType)` - 钓鱼(普通/金鱼竿)
- `arena_matchopponent()` - 竞技场匹配对手
- `arena_battle(targetRoleId)` - 竞技场战斗
- `monthlyactivity_receivereward()` - 领取月度奖励
### 2. src/utils/xyzwWebSocket.js
- 注册命令:`activity_get`, `monthlyactivity_receivereward`
- 添加响应映射5个月度任务相关的响应映射
### 3. src/components/GameStatus.vue
**新增变量**
```javascript
const FISH_TARGET = 320 // 钓鱼目标
const ARENA_TARGET = 240 // 竞技场目标
const monthLoading = ref(false)
const monthActivity = ref(null)
const fishToppingUp = ref(false)
const arenaToppingUp = ref(false)
```
**核心函数**
- `fetchMonthlyActivity()` - 获取月度进度
- `topUpFish()` - 钓鱼补齐(优先普通鱼竿)
- `topUpArena()` - 竞技场补齐(检查体力,贪心策略)
- `getItemCount()` - 解析物品数量(支持多种数据格式)
**UI组件**:月度任务卡片,显示进度条、补齐按钮、一键完成选项
### 4. src/stores/batchTaskStore.js
添加日志控制:
```javascript
logConfig: {
// ... 其他配置
monthlyTask: false, // 月度任务日志开关
}
```
### 5. src/components/BatchTaskPanel.vue
添加月度任务日志开关UI
## 🧪 测试验证
### 测试用例
✅ 刷新进度:成功显示 钓鱼 282/320 (88%)、竞技场 46/240 (19%)
✅ 页面加载自动刷新:成功
✅ 手动刷新:成功
✅ 钓鱼补齐:正常
✅ 竞技场补齐:正常
### 日志验证
```
📤 发送消息: activity_get {}
🔍 [Blob响应] cmd: activity_getresp ack: 7 seq: 7
📥 [月度任务] sendMessageWithPromise 返回成功
✅ [月度任务] 解析成功: {钓鱼次数: 282, 竞技场次数: 46, ...}
```
## 📚 核心算法
### 钓鱼补齐策略
1. 优先使用普通鱼竿free
2. 如果普通鱼竿不足使用金鱼竿diamond
3. 每次钓鱼后等待200ms
### 竞技场补齐策略
1. 检查体力是否充足每次5点
2. 匹配对手 → 战斗 → 延迟
3. 贪心策略:尽可能多地完成战斗
## 🎯 与开源代码的差异
### 相同点
- 功能逻辑完全一致
- 目标值相同钓鱼320、竞技场240
- 补齐策略相同
### 差异点
1. **日志系统**:使用自有的 `batchTaskStore.logConfig` 控制,而非开源的 `logger.js`
2. **命令参数**:我们用 `{}`,开源用 `'[BON]'`(实际都正常工作)
3. **UI集成**:集成在 `GameStatus.vue` 中,开源可能是独立组件
## 💡 经验总结
1. **命令注册优先级最高**:未注册的命令会被忽略
2. **响应映射很关键**:响应命令名可能与请求不同,需要建立映射
3. **时序问题要注意**:页面初始化需要合理的等待和轮询机制
4. **调试日志是救星**:关键位置的日志能快速定位问题
5. **Store属性名要准确**`wsConnections` vs `connections` 的小错误会导致大问题
## 🔜 后续优化空间
1. ✅ 已完成:自动刷新优化
2. 待优化:钓鱼/竞技场补齐进度实时显示
3. 待优化:补齐完成后自动刷新进度
4. 待优化:失败重试机制
5. 待优化:一键完成所有(钓鱼+竞技场)
## 📝 备注
- 此功能已完全正常运行
- 所有命令响应映射已添加
- 适用于后续类似功能的快速集成