1.0
This commit is contained in:
184
MD说明文件夹/月度任务系统集成记录.md
Normal file
184
MD说明文件夹/月度任务系统集成记录.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# 月度任务系统集成记录
|
||||
|
||||
## 📅 完成时间
|
||||
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. 待优化:一键完成所有(钓鱼+竞技场)
|
||||
|
||||
## 📝 备注
|
||||
- 此功能已完全正常运行
|
||||
- 所有命令响应映射已添加
|
||||
- 适用于后续类似功能的快速集成
|
||||
|
||||
Reference in New Issue
Block a user