文字游戏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
4.1 KiB

# 任务系统改版设计 - 收集与狩猎任务
**日期**: 2026-04-15
**状态**: 已批准
## 概述
将每日任务从"挂机等待完成"改为"主动收集/狩猎完成"模式,收集任务收集指定数量物品完成,狩猎任务狩猎指定数量怪物完成。
## 后端改动
### 1. DailyMissionDto 新增字段
```csharp
public class DailyMissionDto
{
// 现有字段...
public MissionType MissionType { get; set; } // 任务类型:收集/狩猎
public MissionDifficulty Difficulty { get; set; } // 难度
public List<MissionProgressDto> Progresses { get; set; } // 任务目标列表
public int CurrentProgress { get; set; } // 当前完成进度
public int TargetProgress { get; set; } // 目标进度
}
public class MissionProgressDto
{
public int MissionProgressId { get; set; }
public ProgressTargetType TargetType { get; set; }
public int? TargetItemId { get; set; }
public string? TargetItemName { get; set; }
public int TargetCount { get; set; }
public int CurrentCount { get; set; }
}
```
### 2. 任务进度更新API
**API**: `POST /api/god/mission/{missionId}/progress`
**请求体**:
```json
{
"progressType": "CollectItem" | "KillMonster",
"itemId": 1, // 可选,收集物品时需要
"monsterId": 1, // 可选,狩猎怪物时需要
"count": 1
}
```
**逻辑**:
- 检查角色是否有进行中的任务需要该类型进度
- 更新 CharacterMissionProgress 表
- 如果目标达成,自动标记进度完成
- 如果所有进度完成,标记任务完成(状态变为待领取)
### 3. 每日任务生成逻辑调整
现有逻辑已包含难度分配(Normal/Hard/Purgatory),只需确保:
- 生成任务时同时生成 MissionProgress 记录
- 收集任务的 TargetType = CollectItem
- 狩猎任务的 TargetType = KillMonster
---
## 前端改动
### 1. 页面结构
移除轮播图组件,改为卡片网格布局:
- 单列卡片列表,最大宽度 480px
- 卡片高度自适应
### 2. 卡片样式
**普通/困难难度**:
- 背景: `rgba(255,255,255,0.02)`
- 边框: 1px solid,颜色根据任务类型
- 圆角: 12px
**炼狱难度**:
- 使用 ElectricBorder 组件
- 边框颜色: #dc2626
- 带发光效果
### 3. 颜色方案
| 任务类型 | 难度 | 边框颜色 |
|---------|------|---------|
| 收集任务 | 普通 | #22c55e (绿色) |
| 收集任务 | 困难 | #16a34a (深绿) |
| 收集任务 | 炼狱 | ElectricBorder #15803d |
| 狩猎任务 | 普通 | #ef4444 (红色) |
| 狩猎任务 | 困难 | #f97316 (橙色) |
| 狩猎任务 | 炼狱 | ElectricBorder #dc2626 |
### 4. 卡片内容
```
┌─────────────────────────────────────┐
│ [图标] 任务名称 [难度标签] │
│ 任务描述... │
│ ────────────────────────────────── │
│ 目标: 收集 5/10 灵草 │
│ ────────────────────────────────── │
│ 奖励: 💰100 ✨50 │
│ ────────────────────────────────── │
│ [接取] / [进行中] / [领取] │
└─────────────────────────────────────┘
```
### 5. 图标
- 收集任务: 用户提供的 SVG 图标
- 狩猎任务: 按难度区分
- 普通: 绿色怪物图标
- 困难: 橙色怪物图标
- 炼狱: 红色怪物图标(带发光)
### 6. 状态按钮
- 待接取: "接取" 按钮
- 进行中: "进行中" 按钮(禁用状态)
- 待领取: "领取" 按钮
- 已领取: "已完成" 按钮(禁用状态)
---
## 实施顺序
1. 后端: 修改 DailyMissionDto,添加新字段
2. 后端: 添加任务进度更新 API
3. 后端: 调整每日任务生成逻辑,关联 MissionProgress
4. 前端: 更新 API 类型定义
5. 前端: 重写 DailyMissionView,移除轮播图,使用卡片布局
6. 前端: 添加 ElectricBorder 应用于炼狱难度卡片