ctx.flow 用来改变当前剧情执行位置。

API

方法返回值说明
callFragment(id, options?)Promise<void>调用 Fragment,执行结束后返回当前位置
unsafe_goToFragment(id, options?)void放弃当前剩余流程并跳转到 Fragment
restart()void重新开始游戏
options.chapterId 用于指定目标片段所属章节。跨章节调用时建议始终传入;同一项目存在重复 Fragment id 时必须传入。

案例:从回忆录进入剧情片段

输入: 项目中存在 id 为 memory-summer-festival 的 Fragment,玩家点击“夏日祭”条目。
function MemoryButton() {
  const ctx = useExtensionContext();

  return (
    <button
      onClick={() =>
        ctx.flow.unsafe_goToFragment("memory-summer-festival", {
          chapterId: "chapter-summer",
        })
      }
    >
      夏日祭
    </button>
  );
}
输出: unsafe_goToFragment() 本身返回 undefined;引擎保留当前舞台、角色、音乐、UI 和扩展状态,放弃当前脚本剩余内容,并从目标 Fragment 的第一条指令开始运行。 如果只是复用一段剧情并在结束后继续当前流程,使用可等待的调用:
await ctx.flow.callFragment("shared-conversation", {
  chapterId: "chapter-common",
});
unsafe_goToFragment() 不会返回调用位置,所以名称带有 unsafe_ 前缀。目标不存在时不会取消当前流程,但会在控制台记录错误。restart() 会中断当前流程并重新开始,不适合作为普通界面刷新手段。