文字游戏
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.
 
 
 
 
 

4.1 KiB

任务系统改版设计 - 收集与狩猎任务

日期: 2026-04-15 状态: 已批准

概述

将每日任务从"挂机等待完成"改为"主动收集/狩猎完成"模式,收集任务收集指定数量物品完成,狩猎任务狩猎指定数量怪物完成。

后端改动

1. DailyMissionDto 新增字段

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 请求体:

{
    "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 应用于炼狱难度卡片