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() 会中断当前流程并重新开始,不适合作为普通界面刷新手段。