SuperAPI AI 工具集

bevy-quest-system

智能体与模型

查看项目

更新于 10-16 10:40

技能介绍

用途

当任务目标需要推进(例如击杀、拾取后进度计数变化)时使用本技能。它负责把任务定义、运行进度和阶段变化组织成 Bevy ECS 结构,让目标可以在不引入额外任务 crate 的前提下按阶段推进。请注意:授予任务的对话逻辑由 bevy-dialogue-system 处理,本技能只关注目标推进。

主要能力

  • 用 Resource 保存整局运行期使用的任务定义表 QuestCatalog,每个任务定义为 id 加一组目标(objectives)。
  • 用 Component(QuestProgress)挂到队伍实体上,记录当前激活哪些任务、每个目标已计数多少、当前处于哪个阶段。
  • 用 Message 表示一次性的客观事实(命中、拾取、任务推进),通过 MessageReader<ObjectiveFact> 读取并累加目标计数。
  • 阶段变化:当目标计数达到要求后,将 QuestProgress 的 stage 从 Active 改为 Complete。完成后的奖励数据留给其他技能(如库存或经济技能)读取。
  • 系统调度:在 Update 或固定时间步中修改组件;当顺序必须保证(例如伤害必须先于死亡结算)时使用 .chain() 排序。

使用方式

依赖为 bevy = "0.20"。典型结构如下:定义 QuestId、QuestStage、ObjectiveDef、QuestDef 以及 QuestCatalog(Resource);队伍实体上挂 QuestProgress(Component),其中包含 quest 与 objectives。接受任务时(例如在 Startup)通过 Commands 为队伍实体插入 QuestProgress。随后在 Update 中运行 apply_facts,读取 ObjectiveFact 消息并累加对应目标计数,达到 required 后把阶段改为 Complete。

一个完整的 QuestPlugin 示例会:初始化 QuestCatalog 资源、注册 ObjectiveFact 消息、在 Startup 接受任务、在 Update 运行 apply_facts。

适用场景

  • 需要按阶段推进的任务目标系统。
  • 希望任务定义与运行进度分离(定义在 Resource,进度在 Component)。
  • 需要唯一的任务进度写入者,避免多个系统并发修改同一组件产生竞态。

限制与约束

  • 目标版本为 Bevy 0.20+,核心类型包括 Component、Resource、Query、Commands、Startup、Update、Fixed / FixedMain、.chain()、Plugin、DefaultPlugins、MinimalPlugins。消息与观察者 API 见 bevy-events-messaging。
  • 不得让两个无序系统同时可变查询同一组件;如冲突必须用 .chain() 排序或拆分,只保留一个写入者。
  • 本技能只命名官方文档中已有的 Bevy crate 与模块,不虚构 API 或未具名的第三方 crate。
  • 不要把进度计数写回 QuestCatalog;不要让对话系统写入 QuestProgress。
  • 文档链接保持在不带版本号的 latest 页面。

相关技能

前置:bevy-master、bevy-ecs-composition、bevy-dialogue-system、bevy-data-resources、bevy-events-messaging。互补:bevy-state-machines、godot-quest-system。主入口:bevy-master。下游消费者:暂未提供。