373 lines
11 KiB
Markdown
373 lines
11 KiB
Markdown
|
|
# 更新日志 - 添加任务状态诊断 v3.3.0
|
|||
|
|
|
|||
|
|
## 📅 更新日期
|
|||
|
|
2025年10月7日
|
|||
|
|
|
|||
|
|
## 🎯 更新背景
|
|||
|
|
|
|||
|
|
用户反馈:
|
|||
|
|
> "我发现有时候分享一次游戏这一项每日任务并未被领取成功,我想知道领取任务奖励1,是否就代表领取分享一次游戏,因为我第二次运行的时候,他就领取成功了,这是什么原因导致有时候领取失败的?"
|
|||
|
|
|
|||
|
|
经过分析,发现问题的根源可能是:
|
|||
|
|
- ✅ 某些任务ID对应的任务在一键补差中**没有被执行**
|
|||
|
|
- ✅ 如果任务没有完成,即使添加延迟也无法领取任务奖励
|
|||
|
|
- ✅ 需要确定任务ID 1-10分别对应哪些具体任务
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✨ 主要更新
|
|||
|
|
|
|||
|
|
### 1. 新增功能:任务状态自动诊断
|
|||
|
|
|
|||
|
|
在批量自动化的"一键补差"中,添加了**任务完成状态诊断功能**:
|
|||
|
|
|
|||
|
|
**执行前状态获取**:
|
|||
|
|
```javascript
|
|||
|
|
// 获取执行前的任务完成状态
|
|||
|
|
const beforeRoleInfo = await client.sendWithPromise('role_getroleinfo', {}, 1000)
|
|||
|
|
const beforeTaskStatus = beforeRoleInfo?.role?.dailyTask?.complete || {}
|
|||
|
|
console.log('📊 执行前任务状态:', JSON.stringify(beforeTaskStatus, null, 2))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**执行后状态获取**:
|
|||
|
|
```javascript
|
|||
|
|
// 获取执行后的任务完成状态
|
|||
|
|
const afterRoleInfo = await client.sendWithPromise('role_getroleinfo', {}, 1000)
|
|||
|
|
const afterTaskStatus = afterRoleInfo?.role?.dailyTask?.complete || {}
|
|||
|
|
console.log('📊 执行后任务状态:', JSON.stringify(afterTaskStatus, null, 2))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**状态对比分析**:
|
|||
|
|
```javascript
|
|||
|
|
// 对比执行前后的任务状态变化
|
|||
|
|
for (const taskId of allTaskIds) {
|
|||
|
|
const before = beforeTaskStatus[taskId] || 0
|
|||
|
|
const after = afterTaskStatus[taskId] || 0
|
|||
|
|
const changed = before !== after
|
|||
|
|
|
|||
|
|
if (changed) {
|
|||
|
|
console.log(`任务${taskId}: ${before} → ${after} ✅`)
|
|||
|
|
} else {
|
|||
|
|
console.log(`任务${taskId}: ${after} (无变化)`)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 控制台输出示例
|
|||
|
|
|
|||
|
|
运行一键补差后,控制台会显示:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
🔍 正在获取执行前的任务完成状态...
|
|||
|
|
📊 执行前任务状态: {
|
|||
|
|
"1": 0,
|
|||
|
|
"2": -1,
|
|||
|
|
"3": 0,
|
|||
|
|
"4": -1,
|
|||
|
|
"5": 0,
|
|||
|
|
"6": 0,
|
|||
|
|
"7": 0,
|
|||
|
|
"12": 0,
|
|||
|
|
"13": 0,
|
|||
|
|
"14": 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
📋 一键补差包含以下子任务:
|
|||
|
|
1. 分享游戏
|
|||
|
|
2. 赠送好友金币
|
|||
|
|
...(所有子任务执行过程)...
|
|||
|
|
|
|||
|
|
🔍 正在获取执行后的任务完成状态...
|
|||
|
|
📊 执行后任务状态: {
|
|||
|
|
"1": 0,
|
|||
|
|
"2": -1,
|
|||
|
|
"3": -1,
|
|||
|
|
"4": -1,
|
|||
|
|
"5": 0,
|
|||
|
|
"6": -1,
|
|||
|
|
"7": -1,
|
|||
|
|
"12": -1,
|
|||
|
|
"13": -1,
|
|||
|
|
"14": -1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
📋 每日任务完成状态对比分析
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
任务1: 未完成 (无变化) ❌ 未完成 ← 问题任务!
|
|||
|
|
任务2: 已完成 (无变化) ✅ 已完成
|
|||
|
|
任务3: 未完成 → 已完成 ✅ 已完成 ← 本次完成
|
|||
|
|
任务4: 已完成 (无变化) ✅ 已完成
|
|||
|
|
任务5: 未完成 (无变化) ❌ 未完成 ← 问题任务!
|
|||
|
|
任务6: 未完成 → 已完成 ✅ 已完成 ← 本次完成
|
|||
|
|
任务7: 未完成 → 已完成 ✅ 已完成 ← 本次完成
|
|||
|
|
任务12: 未完成 → 已完成 ✅ 已完成 ← 本次完成
|
|||
|
|
任务13: 未完成 → 已完成 ✅ 已完成 ← 本次完成
|
|||
|
|
任务14: 未完成 → 已完成 ✅ 已完成 ← 本次完成
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
📊 统计: 已完成 8/10,本次改变 6 个任务
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 状态值说明
|
|||
|
|
|
|||
|
|
| 值 | 含义 |
|
|||
|
|
|---|---|
|
|||
|
|
| **-1** | 任务已完成 |
|
|||
|
|
| **0** | 任务未完成 |
|
|||
|
|
| **其他数字** | 任务进行中(进度值)|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 代码修改
|
|||
|
|
|
|||
|
|
### 修改文件
|
|||
|
|
|
|||
|
|
**文件**: `src/stores/batchTaskStore.js`
|
|||
|
|
**位置**: `executeTask` 函数 → `case 'dailyFix'`
|
|||
|
|
|
|||
|
|
### 修改内容
|
|||
|
|
|
|||
|
|
1. **在一键补差开头添加**(第430-440行):
|
|||
|
|
```javascript
|
|||
|
|
// 🔍 【新增】获取执行前的任务完成状态
|
|||
|
|
console.log('🔍 正在获取执行前的任务完成状态...')
|
|||
|
|
let beforeTaskStatus = {}
|
|||
|
|
try {
|
|||
|
|
const beforeRoleInfo = await client.sendWithPromise('role_getroleinfo', {}, 1000)
|
|||
|
|
beforeTaskStatus = beforeRoleInfo?.role?.dailyTask?.complete || {}
|
|||
|
|
console.log('📊 执行前任务状态:', JSON.stringify(beforeTaskStatus, null, 2))
|
|||
|
|
} catch (error) {
|
|||
|
|
console.warn('⚠️ 获取执行前任务状态失败:', error.message)
|
|||
|
|
}
|
|||
|
|
await new Promise(resolve => setTimeout(resolve, 200))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **在一键补差结尾添加**(第810-881行):
|
|||
|
|
```javascript
|
|||
|
|
// 🔍 【新增】获取执行后的任务完成状态
|
|||
|
|
console.log('🔍 正在获取执行后的任务完成状态...')
|
|||
|
|
let afterTaskStatus = {}
|
|||
|
|
try {
|
|||
|
|
const afterRoleInfo = await client.sendWithPromise('role_getroleinfo', {}, 1000)
|
|||
|
|
afterTaskStatus = afterRoleInfo?.role?.dailyTask?.complete || {}
|
|||
|
|
console.log('📊 执行后任务状态:', JSON.stringify(afterTaskStatus, null, 2))
|
|||
|
|
} catch (error) {
|
|||
|
|
console.warn('⚠️ 获取执行后任务状态失败:', error.message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 🔍 【新增】对比任务状态变化
|
|||
|
|
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
|
|||
|
|
console.log('📋 每日任务完成状态对比分析')
|
|||
|
|
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
|
|||
|
|
|
|||
|
|
const taskStatusComparison = []
|
|||
|
|
const allTaskIds = new Set([
|
|||
|
|
...Object.keys(beforeTaskStatus),
|
|||
|
|
...Object.keys(afterTaskStatus)
|
|||
|
|
])
|
|||
|
|
|
|||
|
|
for (const taskId of Array.from(allTaskIds).sort((a, b) => Number(a) - Number(b))) {
|
|||
|
|
const before = beforeTaskStatus[taskId] || 0
|
|||
|
|
const after = afterTaskStatus[taskId] || 0
|
|||
|
|
const changed = before !== after
|
|||
|
|
const status = after === -1 ? '✅ 已完成' : (after === 0 ? '❌ 未完成' : `⏳ 进行中(${after})`)
|
|||
|
|
|
|||
|
|
const comparison = {
|
|||
|
|
taskId: Number(taskId),
|
|||
|
|
before: before === -1 ? '已完成' : (before === 0 ? '未完成' : `进行中(${before})`),
|
|||
|
|
after: after === -1 ? '已完成' : (after === 0 ? '未完成' : `进行中(${after})`),
|
|||
|
|
changed: changed,
|
|||
|
|
status: status
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
taskStatusComparison.push(comparison)
|
|||
|
|
|
|||
|
|
if (changed) {
|
|||
|
|
console.log(`任务${taskId}: ${comparison.before} → ${comparison.after} ${status}`)
|
|||
|
|
} else {
|
|||
|
|
console.log(`任务${taskId}: ${comparison.after} (无变化) ${status}`)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
|
|||
|
|
|
|||
|
|
// 统计信息
|
|||
|
|
const completedCount = Object.values(afterTaskStatus).filter(v => v === -1).length
|
|||
|
|
const totalCount = Object.keys(afterTaskStatus).length
|
|||
|
|
const changedCount = taskStatusComparison.filter(t => t.changed).length
|
|||
|
|
|
|||
|
|
console.log(`📊 统计: 已完成 ${completedCount}/${totalCount},本次改变 ${changedCount} 个任务`)
|
|||
|
|
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
|
|||
|
|
|
|||
|
|
// 将任务状态对比结果添加到返回数据中
|
|||
|
|
fixResults.push({
|
|||
|
|
task: '任务状态分析',
|
|||
|
|
success: true,
|
|||
|
|
data: {
|
|||
|
|
beforeTaskStatus,
|
|||
|
|
afterTaskStatus,
|
|||
|
|
taskStatusComparison,
|
|||
|
|
statistics: {
|
|||
|
|
completedCount,
|
|||
|
|
totalCount,
|
|||
|
|
changedCount
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📚 新增文档
|
|||
|
|
|
|||
|
|
### 1. 功能更新-任务状态诊断.md
|
|||
|
|
|
|||
|
|
详细说明:
|
|||
|
|
- 新功能介绍
|
|||
|
|
- 如何使用诊断功能
|
|||
|
|
- 如何解读诊断结果
|
|||
|
|
- 如何根据诊断结果定位问题
|
|||
|
|
- 完整示例解读
|
|||
|
|
|
|||
|
|
### 2. 游戏内每日任务ID对应表.md
|
|||
|
|
|
|||
|
|
包含:
|
|||
|
|
- 已知的任务ID对应关系
|
|||
|
|
- 待确认的任务ID
|
|||
|
|
- 使用诊断功能的步骤指引
|
|||
|
|
- 如何反馈诊断结果
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 使用方法
|
|||
|
|
|
|||
|
|
### 步骤1:运行一键补差
|
|||
|
|
|
|||
|
|
1. 打开批量任务面板
|
|||
|
|
2. 勾选"一键补差"任务
|
|||
|
|
3. **打开浏览器控制台(F12)**← 重要!
|
|||
|
|
4. 点击"开始执行"
|
|||
|
|
|
|||
|
|
### 步骤2:查看诊断输出
|
|||
|
|
|
|||
|
|
在控制台中查看:
|
|||
|
|
- 📊 执行前任务状态
|
|||
|
|
- 📊 执行后任务状态
|
|||
|
|
- 📋 任务状态对比分析
|
|||
|
|
- 📊 统计信息
|
|||
|
|
|
|||
|
|
### 步骤3:分析未完成的任务
|
|||
|
|
|
|||
|
|
找出"未完成 (无变化)"的任务:
|
|||
|
|
- 查看游戏内这些任务是什么
|
|||
|
|
- 检查一键补差是否包含相应操作
|
|||
|
|
- 反馈缺失的任务信息
|
|||
|
|
|
|||
|
|
### 步骤4:反馈结果
|
|||
|
|
|
|||
|
|
请提供:
|
|||
|
|
1. 哪些任务执行前后都是"未完成"
|
|||
|
|
2. 这些任务在游戏内的具体名称和要求
|
|||
|
|
3. 完整的诊断输出(从"📊 执行前任务状态"到"📊 统计")
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ 注意事项
|
|||
|
|
|
|||
|
|
### 1. 必须打开控制台
|
|||
|
|
|
|||
|
|
诊断信息只会输出到浏览器控制台,不会显示在界面上。
|
|||
|
|
|
|||
|
|
**如何打开控制台**:
|
|||
|
|
- Windows/Linux: 按 `F12` 或 `Ctrl+Shift+I`
|
|||
|
|
- Mac: 按 `Cmd+Option+I`
|
|||
|
|
|
|||
|
|
### 2. 任务ID可能不连续
|
|||
|
|
|
|||
|
|
游戏内的任务ID可能不是连续的(如1, 2, 3, 4, 5, 6, 7, 12, 13, 14),这是正常的。
|
|||
|
|
|
|||
|
|
### 3. 执行时间略微增加
|
|||
|
|
|
|||
|
|
由于需要在执行前后获取角色信息,一键补差的执行时间会增加约2秒:
|
|||
|
|
- 执行前获取:约1秒
|
|||
|
|
- 执行后获取和分析:约1秒
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 预期效果
|
|||
|
|
|
|||
|
|
通过本次更新,我们可以:
|
|||
|
|
|
|||
|
|
1. **精准定位问题**
|
|||
|
|
- 不再猜测哪些任务没有完成
|
|||
|
|
- 直接看到哪些任务ID是问题
|
|||
|
|
|
|||
|
|
2. **快速修复**
|
|||
|
|
- 确定任务ID对应的具体任务
|
|||
|
|
- 在一键补差中补充缺失的操作
|
|||
|
|
|
|||
|
|
3. **避免重复运行**
|
|||
|
|
- 一次性完成所有应该完成的任务
|
|||
|
|
- 确保所有任务奖励都能成功领取
|
|||
|
|
|
|||
|
|
4. **提升成功率**
|
|||
|
|
- 从目前的"有时失败"提升到"稳定成功"
|
|||
|
|
- 用户体验更好
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 版本信息
|
|||
|
|
|
|||
|
|
**版本号**: v3.3.0
|
|||
|
|
**更新日期**: 2025-10-07
|
|||
|
|
**更新类型**: 功能增强
|
|||
|
|
**影响范围**: 批量自动化 - 一键补差
|
|||
|
|
**向后兼容**: ✅ 是(不影响现有功能)
|
|||
|
|
**测试状态**: ✅ 已完成代码编写,等待用户测试反馈
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔄 与其他更新的关系
|
|||
|
|
|
|||
|
|
**本次更新**与之前的更新配合使用:
|
|||
|
|
|
|||
|
|
1. **v3.2.0** - 添加1000ms延迟
|
|||
|
|
- 解决服务器状态同步问题
|
|||
|
|
- 但如果任务本身没完成,延迟也没用
|
|||
|
|
|
|||
|
|
2. **v3.2.1** - 扩展资源消耗任务
|
|||
|
|
- 避免重复消耗资源
|
|||
|
|
- 提升效率
|
|||
|
|
|
|||
|
|
3. **v3.3.0** - 任务状态诊断(本次)
|
|||
|
|
- 找出未完成的任务
|
|||
|
|
- 确定任务ID对应关系
|
|||
|
|
- 为后续修复提供数据支持
|
|||
|
|
|
|||
|
|
**下一步**(待用户反馈诊断结果):
|
|||
|
|
- **v3.4.0** - 补充缺失的任务操作
|
|||
|
|
- 根据诊断结果添加缺失的任务
|
|||
|
|
- 确保所有任务ID都能正确完成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 检查清单
|
|||
|
|
|
|||
|
|
- [x] 代码实现完成
|
|||
|
|
- [x] 无语法错误(已通过 linter 检查)
|
|||
|
|
- [x] 功能文档完成(功能更新-任务状态诊断.md)
|
|||
|
|
- [x] 任务ID对应表文档完成(游戏内每日任务ID对应表.md)
|
|||
|
|
- [x] 更新日志完成(本文档)
|
|||
|
|
- [ ] 用户测试(等待用户反馈)
|
|||
|
|
- [ ] 根据反馈修复(待定)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**更新完成时间**: 2025-10-07
|
|||
|
|
**下一步**: 等待用户运行一键补差并反馈诊断结果
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|