ctx.dialogue 读取当前对话上下文,并控制对话框、快进和自动播放状态。

API

方法返回值说明
line()DialogueLine | null获取当前可见对话行
choice()ChoiceContext | null获取当前选项上下文
hideBox()void隐藏对话框
showBox()void显示对话框
getDefaultTextInterval()number | null获取当前样式推荐的逐字间隔(ms)
toggleSkipMode()void切换快进状态
toggleAutoMode()void切换自动播放状态
useSkipMode()booleanReact Hook;订阅快进状态
useAutoMode()booleanReact Hook;订阅自动播放状态
useLine()DialogueLine | nullReact Hook;订阅当前对话
useChoice()ChoiceContext | nullReact Hook;订阅当前选项
useStyle(fn)() => void参与决定每句对话的样式;返回撤销函数

参与对话样式

useStyle() 让扩展在每句对话上屏前修改它的样式。回调拿到这句话的信息和 当前样式配置,返回想改的部分即可 —— 返回值会跟原配置深合并,没提到的字段 保持原样;返回 nullundefined 表示不改。
static onRegister(ctx: ExtensionContext) {
  const dispose = ctx.dialogue.useStyle((line, _style) => {
    if (line.characterId !== "char_yuki") return null;   // 别的角色不动
    return { styles: { name_card: { text_styles: { color: "#8ecae6" } } } };
  });
  // 扩展卸载时调 dispose() 摘掉自己这一份
}
常用的样式路径:
路径作用
styles.name_card.text_styles.color名字牌文字颜色
styles.dialogue.text_styles.color对话正文颜色
回调在每句对话上屏前同步执行,不要在里面做耗时操作 —— 会拖慢每一句话。
几个要点:
  • 多个扩展可以同时用,互不覆盖;改同一字段时后注册的赢。
  • 单个回调抛错只跳过它自己,不会影响别的扩展或搞垮对话框。
  • 它在写名字和正文之前执行,所以颜色和文字是同一帧出现的,不会闪。

案例:显示当前台词摘要

输入: 游戏正在显示角色 alice 的台词“今晚也能看到星星呢。”。
function DialogueSummary() {
  const ctx = useExtensionContext();
  const line = ctx.dialogue.useLine();

  if (!line) return <span>当前没有对话</span>;

  return <span>{line.characterId ?? "旁白"}{line.text}</span>;
}
输出:
alice:今晚也能看到星星呢。
当对话框被隐藏、销毁或当前没有台词时,line()useLine() 输出 null,组件会改为显示“当前没有对话”。
toggleSkipMode() 控制“是否正在快进”;ctx.config.get("skipMode") 控制“跳过全部内容还是只跳已读内容”。两者不是同一个状态。