ctx.dialogue 读取当前对话上下文,并控制对话框、快进和自动播放状态。
API
| 方法 | 返回值 | 说明 |
|---|
line() | DialogueLine | null | 获取当前可见对话行 |
choice() | ChoiceContext | null | 获取当前选项上下文 |
hideBox() | void | 隐藏对话框 |
showBox() | void | 显示对话框 |
getDefaultTextInterval() | number | null | 获取当前样式推荐的逐字间隔(ms) |
toggleSkipMode() | void | 切换快进状态 |
toggleAutoMode() | void | 切换自动播放状态 |
useSkipMode() | boolean | React Hook;订阅快进状态 |
useAutoMode() | boolean | React Hook;订阅自动播放状态 |
useLine() | DialogueLine | null | React Hook;订阅当前对话 |
useChoice() | ChoiceContext | null | React Hook;订阅当前选项 |
useStyle(fn) | () => void | 参与决定每句对话的样式;返回撤销函数 |
参与对话样式
useStyle() 让扩展在每句对话上屏前修改它的样式。回调拿到这句话的信息和
当前样式配置,返回想改的部分即可 —— 返回值会跟原配置深合并,没提到的字段
保持原样;返回 null 或 undefined 表示不改。
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>;
}
输出:
当对话框被隐藏、销毁或当前没有台词时,line() 与 useLine() 输出 null,组件会改为显示“当前没有对话”。
toggleSkipMode() 控制“是否正在快进”;ctx.config.get("skipMode") 控制“跳过全部内容还是只跳已读内容”。两者不是同一个状态。