跳到主要内容

PRD-027 任务系统

文档编号:PRD-027
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:ScenesServer、Lua 任务脚本、tbl/Quest.xml

1. 背景与目标​

任务系统承担新手引导、主线叙事、日常活跃与资源投放。当前任务脚本分散、进度统计重复、链式任务断链后无法恢复。本 PRD 统一任务模板、进度事件与提交校验。

目标

  • 支持主线、支线、日常、周常、活动、引导六类任务。
  • 任务进度由统一事件驱动,避免每个任务单独写统计逻辑。
  • 支持放弃、重新接取、自动寻路、批量提交。

2. 核心规则​

2.1 任务类型​

类型可放弃可重复进度重置
主线否否不重置
支线是否不重置
日常是每日每日 0 点
周常是每周周一 0 点
活动按配置按活动活动周期
引导强制否不重置

2.2 任务结构​

  • 前置任务 / 前置等级 / 前置物品。
  • 目标列表:杀怪、采集、对话、护送、使用物品、到达坐标、击杀 BOSS、完成副本。
  • 奖励:经验、金币、绑定货币、物品、称号、声望。
  • 后续任务:支持一键接取下一环。

2.3 进度规则​

  • 杀怪:同地图、同队伍范围内计数;召唤物击杀计入主人。
  • 采集/使用:以服务端确认的物品消耗为准。
  • 对话/到达:以服务端坐标校验为准,客户端寻路不作为完成依据。
  • 副本:以副本结算事件为准,中途退出不计。
  • 日常进度跨天保留未领取奖励,但不再累计新进度。

3. 服务端设计​

3.1 模块职责​

模块职责
QuestManager接取、进度、提交、放弃、重置
EventBus接收杀怪/采集/对话/进入地图等事件
QuestScriptLua 条件与奖励逻辑
RecordServer任务状态持久化

3.2 数据结构​

struct QuestState {
uint32_t quest_id;
uint8_t status; // 可接/进行中/可提交/已完成
uint32_t accept_time;
std::vector<ObjectiveProgress> objectives;
};

struct ObjectiveProgress {
uint32_t objective_id;
uint32_t current;
uint32_t required;
};

3.3 协议​

方向协议说明
C→SCS_QuestAccept接取任务
C→SCS_QuestSubmit提交任务
C→SCS_QuestAbandon放弃任务
C→SCS_QuestTrack设置追踪
S→CSC_QuestList全量任务列表
S→CSC_QuestUpdate进度变化
S→CSC_QuestComplete可提交/已完成
S→CSC_QuestDialogNPC 对话与选项

3.4 事件驱动​

杀怪/采集/对话/进图事件
→ EventBus 分发
→ 遍历玩家进行中的任务
→ 匹配 objective_type + target_id
→ 增加进度(上限 = required)
→ 进度满 → 标记可提交 → SC_QuestUpdate/SC_QuestComplete

3.5 持久化与重置​

  • 任务状态写 RecordServer,登录时恢复。
  • 日常/周常在跨天/跨周时重置进度与完成标记。
  • 任务链断链(前置被删除)时,登录校验并补接当前可接任务。
  • 提交奖励使用事务:扣任务状态、发奖、写日志同时成功。

4. 客户端设计​

  • 任务追踪栏:显示 3–5 条,可展开全部、取消追踪。
  • 任务面板:可接/进行中/已完成分页,显示奖励预览。
  • NPC 对话:支持选项、打字机效果、自动接取下一环。
  • 自动寻路:点击任务目标自动寻路到 NPC/坐标,到达后由服务端校验。
  • 提交提示:任务完成时头像旁显示可提交图标,点击自动寻路到交付 NPC。

5. 配置与数值​

tbl/Quest.xml 字段:

字段说明
id任务 ID
type主线/支线/日常/周常/活动/引导
pre_quest前置任务
level_min / level_max等级范围
objectives目标列表(类型、目标 ID、数量)
rewards奖励列表
next_quest后续任务
can_abandon是否可放弃
reset_typedaily/weekly/activity/none

6. 边界与异常​

场景处理
重复接取幂等,返回已接取
背包满时提交拒绝提交并提示清理背包,不扣任务状态
任务目标怪物被删除登录校验,自动替换为可完成目标或标记异常
跨天时正在打怪以事件结算时间判断归属日期
放弃后重新接取进度清零,已消耗物品不返还
组队击杀范围内队员均计数,距离超过 30 格不计

7. 埋点与运营​

  • 任务接取/完成/放弃率,卡点任务与平均耗时。
  • 奖励产出统计,防止单人刷任务破坏经济。
  • 后台可配置任务上下架、奖励倍率、重置时间。

8. 验收标准​

  • 六类任务均可接取、追踪、提交、放弃(按配置)。
  • 杀怪/采集/对话/副本进度准确,不重复计数。
  • 日常/周常跨天跨周正确重置。
  • 背包满、断线、跨地图时任务状态不丢失。
  • 任务链断链后可恢复或给出明确提示。
  • 提交奖励与扣状态在同一事务内。