线索
在探索冒险故事的过程中,玩家会不断收集到各种碎片化的信息。线索系统帮助玩家理清思路——它允许作者在游戏中为不同的专题添加文字记录(支持 HTML),玩家可以在菜单 → 故事 → 线索分栏中随时查阅。
声明线索专题
所有线索专题需要预先在 game.config.ts 中声明。空专题不会在菜单中展示,只有添加了线索的专题才会出现。
typescript
export default Adv.defineConfig({
// ... 其他配置
clue: {
main: {
name: '主线线索',
},
side: {
name: '支线线索',
},
character: {
name: '人物线索',
},
event: {
name: '事件线索',
},
},
});- 外层的
main、side、character、event是专题的唯一 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 格式会被正确渲染。