# 功能更新 - 爬塔任务 v3.2.0

## 📅 更新日期
2025年10月7日

---

## 🎯 更新概述

在批量自动化任务中新增**爬塔功能**，支持设置爬塔次数（0-100次），并扩展了子任务详情显示，现在可以查看所有批量任务的执行状态。

---

## ✨ 新增功能

### 1. 爬塔任务

**功能描述**：
- 支持自动执行爬塔任务
- 可配置爬塔次数：0-100次
- 设置为0时自动跳过爬塔任务
- 超时时间：1000ms（1秒）

**使用场景**：
- 每日爬塔任务自动化
- 快速提升爬塔进度
- 批量角色爬塔

---

### 2. 爬塔次数配置

**配置位置**：
在批量任务面板的配置区域

**配置方式**：
- 使用滑块调整次数（0-100）
- 实时显示当前设置的次数
- 配置保存在浏览器本地存储

**默认值**：
- 默认为 0 次（跳过爬塔）

---

### 3. 扩展子任务详情显示

**新增功能**：
子任务详情现在显示所有批量任务的执行情况，包括：

#### 一键补差子任务（46个）
- 分享游戏
- 赠送好友金币
- 免费招募 / 付费招募
- 免费点金（3次）
- 开启木质宝箱
- 福利签到
- 领取各类礼包
- 领取邮件
- 免费钓鱼（3次）
- 灯神扫荡（4国）
- 领取扫荡卷（3次）
- 黑市购买
- 竞技场战斗（3次）
- 军团BOSS
- 每日BOSS（3次）
- 盐罐机器人操作
- 领取任务奖励（10个）
- 领取日常/周常任务奖励

#### 其他批量任务（5个）
- 俱乐部签到
- 一键答题
- 领取挂机奖励
- 加钟
- 爬塔

**查看方式**：
- 点击角色卡片的"子任务"按钮
- 切换视图：全部任务 / 一键补差 / 其他任务
- 查看每个任务的完成状态

---

## 🎨 用户界面

### 1. 批量任务面板

**新增配置项**：
```
┌────────────────────────────────────────┐
│ 选择任务模板 | 并发数量  | 爬塔次数     │
│ [完整套餐▼]  | [━━●━━━] | [━━━━━●]   │
│              |   5次    |   0次        │
└────────────────────────────────────────┘
```

**爬塔次数滑块**：
- 范围：0-100
- 显示当前设置值
- 0 = 跳过爬塔任务

---

### 2. 子任务详情弹窗

**视图切换**：
```
┌──────────────────────────────────────┐
│ [全部任务] [一键补差] [其他任务]  [重置所有] │
└──────────────────────────────────────┘
```

**统计信息**：
```
总计: 51  已完成: 30  失败: 2  待执行: 19
```

**任务列表**：
- 显示所有任务的执行状态
- 标记消耗资源的任务
- 显示完成时间和错误信息

---

## 🔧 技术实现

### 1. 新增配置

**batchTaskStore.js**：
```javascript
// 爬塔配置
const climbTowerCount = ref(
  parseInt(localStorage.getItem('climbTowerCount') || '0')
) // 爬塔次数（0-100，0表示跳过）

// 设置爬塔次数
const setClimbTowerCount = (count) => {
  if (count < 0 || count > 100) {
    console.warn('⚠️ 爬塔次数必须在0-100之间')
    return
  }
  climbTowerCount.value = count
  localStorage.setItem('climbTowerCount', count.toString())
  console.log(`🗼 爬塔次数已设置为: ${count}`)
}
```

---

### 2. 爬塔任务执行

**执行逻辑**：
```javascript
case 'climbTower':
  // 爬塔任务
  const climbResults = []
  const count = climbTowerCount.value
  
  if (count === 0) {
    return { 
      task: '爬塔', 
      skipped: true, 
      success: true, 
      message: `爬塔次数设置为0，跳过执行` 
    }
  }
  
  console.log(`开始爬塔，设置次数：${count}`)
  
  for (let i = 1; i <= count; i++) {
    try {
      const towerResult = await client.sendWithPromise('tower_climb', {}, 1000)
      climbResults.push({ 
        task: `爬塔 ${i}/${count}`, 
        success: true, 
        data: towerResult 
      })
      await new Promise(resolve => setTimeout(resolve, 200))
    } catch (error) {
      climbResults.push({ 
        task: `爬塔 ${i}/${count}`, 
        success: false, 
        error: error.message 
      })
      // 如果失败，继续尝试剩余次数
    }
  }
  
  // 标记爬塔任务完成
  dailyTaskStateStore.markTaskCompleted(tokenId, 'climb_tower', true, null)
  
  return {
    task: '爬塔',
    taskId: 'climb_tower',
    success: true,
    data: climbResults,
    message: `完成${count}次爬塔`
  }
```

**特点**：
- ✅ 超时时间：1000ms
- ✅ 每次爬塔间隔200ms
- ✅ 失败后继续执行剩余次数
- ✅ 记录每次爬塔结果
- ✅ 标记任务完成状态

---

### 3. 扩展任务状态管理

**dailyTaskState.js**：
```javascript
// 所有批量任务定义
const DAILY_FIX_TASKS = [/* 46个一键补差子任务 */]

const OTHER_TASKS = [
  { id: 'legion_signin', name: '俱乐部签到', consumesResources: false },
  { id: 'auto_study', name: '一键答题', consumesResources: false },
  { id: 'claim_hangup_reward', name: '领取挂机奖励', consumesResources: false },
  { id: 'add_clock', name: '加钟', consumesResources: false },
  { id: 'climb_tower', name: '爬塔', consumesResources: false }
]

const ALL_TASKS = [...DAILY_FIX_TASKS, ...OTHER_TASKS]
```

**新增方法**：
```javascript
// 获取详细任务列表（支持分类）
getDetailedTaskList(tokenId, category = 'all') // 'all' | 'dailyFix' | 'other'

// 获取一键补差任务列表
getDailyFixTaskList(tokenId)

// 获取其他任务列表
getOtherTaskList(tokenId)
```

---

### 4. 任务状态跟踪

**其他任务现在也使用 executeSubTask 跟踪状态**：

```javascript
case 'legionSignIn':
  return await executeSubTask(
    tokenId,
    'legion_signin',
    '俱乐部签到',
    async () => await client.sendWithPromise('legion_signin', {}, 1000),
    false
  )

case 'autoStudy':
  return await executeSubTask(
    tokenId,
    'auto_study',
    '一键答题',
    async () => await client.sendWithPromise('study_startgame', {}, 1000),
    false
  )

// ... 其他任务类似
```

**优势**：
- ✅ 统一的状态管理
- ✅ 完整的执行记录
- ✅ 详细的错误信息
- ✅ 一致的用户体验

---

## 📖 使用指南

### 场景1：配置爬塔次数

**步骤**：
1. 打开批量任务面板
2. 找到"爬塔次数"配置项
3. 拖动滑块调整次数（0-100）
4. 系统自动保存配置

**示例**：
```
爬塔次数: 20次
[━━━●━━━━━━━] (滑块位置)
```

**提示**：
- 设置为 0 = 跳过爬塔
- 建议根据账号情况设置合适次数
- 次数越多，执行时间越长

---

### 场景2：执行爬塔任务

**步骤**：
1. 确保任务模板包含"爬塔"任务（默认包含在完整套餐和快速套餐中）
2. 设置爬塔次数（大于0）
3. 点击"开始执行"
4. 等待任务完成

**执行日志**：
```
开始爬塔，设置次数：20
✅ 爬塔 1/20 - 成功
✅ 爬塔 2/20 - 成功
...
✅ 爬塔 20/20 - 成功
完成20次爬塔
```

**如果设置为0**：
```
⏭️ 爬塔次数设置为0，跳过执行
```

---

### 场景3：查看所有任务状态

**步骤**：
1. 任务执行后，点击角色卡片的"子任务"按钮
2. 在弹窗中切换视图：
   - **全部任务**：显示所有51个任务
   - **一键补差**：只显示46个一键补差子任务
   - **其他任务**：显示5个其他批量任务
3. 查看每个任务的状态

**示例视图**：

**全部任务（51个）**：
```
✅ 分享游戏        [未执行]
✅ 付费招募        [消耗资源] [已完成]
...
✅ 俱乐部签到      [已完成]
✅ 爬塔           [已完成]
   完成时间: 2025-10-07 09:15:30
```

**其他任务（5个）**：
```
✅ 俱乐部签到      [已完成]
✅ 一键答题        [已完成]
✅ 领取挂机奖励    [已完成]
✅ 加钟           [已完成]
✅ 爬塔           [已完成]
```

---

## 📊 性能数据

### 爬塔执行时间

| 次数 | 预计时间 | 说明 |
|-----|---------|------|
| 10次 | 12秒 | 10 × (1秒超时 + 0.2秒间隔) |
| 20次 | 24秒 | 20 × 1.2秒 |
| 50次 | 60秒 | 50 × 1.2秒 |
| 100次 | 120秒 | 100 × 1.2秒（2分钟） |

**注意**：
- 实际时间可能更短（如果服务器响应快）
- 失败的任务不会增加额外时间（已计入超时）

---

### 100角色批量爬塔

**场景**：100个角色，每个爬塔20次

**计算**：
- 并发数5：约 100/5 × 24秒 = 480秒（8分钟）
- 并发数6：约 100/6 × 24秒 = 400秒（6.7分钟）

**优势**：
- 自动化，无需手动操作
- 批量处理，节省大量时间
- 可配置，灵活调整次数

---

## ⚠️ 注意事项

### 1. 爬塔次数设置

**建议**：
- 根据账号实际情况设置
- 不确定时先设置较小值测试
- 观察执行结果后调整

**风险**：
- 设置过高可能导致执行时间过长
- 如果爬塔失败率高，建议降低次数

---

### 2. 任务模板

**爬塔任务包含在以下模板中**：
- ✅ 完整套餐
- ✅ 快速套餐
- ❌ 仅一键补差

**自定义模板**：
- 可以自己创建包含/不包含爬塔的模板
- 使用"自定义模板"功能

---

### 3. 执行失败处理

**爬塔失败的可能原因**：
- 已达爬塔上限
- 体力不足
- 网络超时
- 服务器错误

**系统行为**：
- 失败后继续尝试剩余次数
- 记录失败原因
- 在详情中可查看具体错误

---

## 🆕 模板更新

### 更新后的模板

**完整套餐**：
```javascript
tasks: [
  'dailyFix',           // 一键补差
  'legionSignIn',       // 俱乐部签到
  'autoStudy',          // 一键答题
  'claimHangupReward',  // 领取挂机奖励
  'addClock',           // 加钟
  'climbTower'          // 爬塔（新增）
]
```

**快速套餐**：
```javascript
tasks: [
  'legionSignIn',       // 俱乐部签到
  'autoStudy',          // 一键答题
  'claimHangupReward',  // 领取挂机奖励
  'addClock',           // 加钟
  'climbTower'          // 爬塔（新增）
]
```

---

## 🎯 使用建议

### 1. 日常爬塔

**推荐配置**：
- 爬塔次数：10-20次
- 任务模板：完整套餐或快速套餐
- 并发数：5-6

**适合**：
- 每日例行爬塔
- 维持爬塔进度
- 领取爬塔奖励

---

### 2. 快速推进

**推荐配置**：
- 爬塔次数：50-100次
- 任务模板：仅爬塔（自定义）
- 并发数：6

**适合**：
- 快速提升爬塔层数
- 活动期间冲榜
- 批量角色爬塔

---

### 3. 跳过爬塔

**配置**：
- 爬塔次数：0

**适合**：
- 不需要爬塔时
- 节省执行时间
- 专注其他任务

---

## 📝 总结

### 主要特性

1. **灵活配置**
   - 爬塔次数可调（0-100）
   - 设置为0自动跳过
   - 配置持久化保存

2. **完整跟踪**
   - 所有任务状态记录
   - 详细的执行日志
   - 失败原因追踪

3. **统一管理**
   - 所有批量任务统一显示
   - 支持视图切换
   - 便于查看和管理

4. **用户友好**
   - 直观的UI界面
   - 实时反馈
   - 详细的提示信息

---

### 版本信息

**版本**: v3.2.0  
**更新日期**: 2025-10-07  
**主要内容**:
- 新增爬塔任务
- 扩展子任务详情显示
- 所有批量任务状态跟踪
- 优化用户界面

---

**相关文档**: 
- [批量任务使用说明.md](./批量任务使用说明.md)
- [功能更新-任务状态跟踪.md](./功能更新-任务状态跟踪.md)
- [一键补差完整子任务清单.md](./一键补差完整子任务清单.md)

