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
135 lines
4.1 KiB
|
1 month ago
|
# 任务系统改版设计 - 收集与狩猎任务
|
||
|
|
|
||
|
|
**日期**: 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 应用于炼狱难度卡片
|