Skip to content

线索

在探索冒险故事的过程中,玩家会不断收集到各种碎片化的信息。线索系统帮助玩家理清思路——它允许作者在游戏中为不同的专题添加文字记录(支持 HTML),玩家可以在菜单 → 故事 → 线索分栏中随时查阅。

声明线索专题

所有线索专题需要预先在 game.config.ts 中声明。空专题不会在菜单中展示,只有添加了线索的专题才会出现。

typescript
export default Adv.defineConfig({
    // ... 其他配置
    clue: {
        main: {
            name: '主线线索',
        },
        side: {
            name: '支线线索',
        },
        character: {
            name: '人物线索',
        },
        event: {
            name: '事件线索',
        },
    },
});
  • 外层的 mainsidecharacterevent 是专题的唯一 ID。
  • name 字段指定专题在菜单中的显示名称。若不指定则使用 ID。

操作线索

所有操作通过 Adv.clue.[专题ID] 进行,每个专题提供三个方法:

add — 添加一条线索

typescript
Adv.clue.main.add(content, id?)
  • content:线索内容,允许使用 HTML。
  • id(可选):线索的唯一标识。若不提供则自动生成。
typescript
// 自动生成 id
Adv.clue.main.add('受害者最后出现在<b>老图书馆</b>附近');

// 指定 id(方便后续修改或删除)
Adv.clue.main.add('凶器是一把银质匕首', 'weapon');

set — 修改一条线索

typescript
Adv.clue.main.set(id, content);
  • id:要修改的线索 ID。
  • content:新的线索内容。
typescript
// 修改之前添加的线索
Adv.clue.main.set('weapon', '凶器是一把<b>镀金</b>匕首,握柄处刻有奇怪符号');

rm — 删除一条线索

typescript
Adv.clue.main.rm(id);
  • id:要删除的线索 ID。
  • 返回 true 表示删除成功,false 表示该线索不存在。
typescript
if (Adv.clue.main.rm('weapon')) {
    // 删除成功
}

在剧情中使用

典型的用法是在剧情推进到关键节点时,将重要信息以线索形式记录下来:

xml
<ADialog>
    <ALine>
        你在书房里发现了一封泛黄的信件,上面的字迹已经模糊不清,但你依稀
        辨认出了几个关键词。
    </ALine>
    <ARun
        :run="
            () => {
                Adv.clue.event.add(
                    '信件中提到<b>月圆之夜</b>和<b>地窖</b>两个关键词。',
                    'letter_clue'
                );
            }
        "
    />
    <ALine>将这些线索记录在案后,你继续搜索房间。</ALine>
</ADialog>

在菜单中查看

玩家打开菜单 → 故事 → 线索分栏,即可看到所有已收集的线索。线索按专题分组展示,只有包含线索的专题才会出现,空专题自动隐藏。

每个专题显示为可折叠面板,标题包含专题名称和线索数量,例如:主线线索(3)。点击展开后逐条显示线索内容,HTML 格式会被正确渲染。