叮咚
第 9 关的想你值,只在这一段对话里算数。开一个新对话,就从 50 重新开始。想让有些东西换了对话也记得,比如听过的秘密、拿到的成就,就要用存档。
本关任务
变量和存档,有什么不一样
只用了变量
第一段对话:想你值涨到 92,叮咚说出了「开心回收站」的秘密开了个新对话
你好呀,初次见面~
| 变量(第 9 关的账本) | 长期存储 | |
|---|---|---|
| 管多久 | 只管当前这段对话 | 换了对话也在 |
| 适合放 | 好感度、心情、当前地点 | 解锁过的秘密和结局、收藏、通关次数 |
| AI 能不能直接改 | 能,靠回复末尾的小票 | 不能,只有 JS 脚本能写 |
| AI 知不知道 | 知道 | 不知道,要脚本读出来再告诉它 |
平台还有一套游戏接口:存档槽、成就和排行榜。
打比方
变量是这一局的记分牌,散场就擦掉。长期存储是你的通关相册,下次来还能翻。
先列一张清单
动手前,先把「要跨对话记住的东西」列出来:
text
数据名称:听过叮咚的秘密
用途:新对话里,叮咚会提一句「上次告诉你的事」
默认值:没听过
什么时候写入:秘密那一页被翻开以后
什么时候读取:每次打开新对话
要不要告诉 AI:要(读出来以后写进当前对话的变量)两边都当成「正本」
同一件事只能有一个正本:跨对话的记录放在长期存储里,当前对话的变量只是抄一份。别让变量反过来覆盖长期存储。
成就和存档槽
- 成就:玩家解锁时弹出提示,在成就列表里留下记录。成就靠 JS 脚本解锁:剧情走到那一步,脚本调用一次解锁。同一个成就始终用同一个 ID。
- 存档槽:保存一个进度快照,下次可以读回来。适合有章节的剧情卡。
- 排行榜:提交分数,比一比。别每条回复都提交一次。
同一个成就解锁好多次
解锁成就要能重复调用也不出错。写脚本时先查一下有没有解锁过。
交给 AI 助手
这一块需要 JS 脚本。可以试着跟 AI 助手说清楚要记住什么、什么时候记:
对 AI 助手说
帮叮咚加一个跨对话的记录:玩家听过「开心回收站」的秘密以后记下来,下次开新对话时,叮咚会提一句上次的事
把【角色名】换成你的角色
写出来的脚本,按下面「技术细节」里的清单检查一遍,再到测试页开两个对话实际试一下。
长期存储和成就的写法看不懂可以跳过
长期存储用 $charx.storage,读写都要 await;读不到的键返回 null。给存的对象加一个版本号,以后改结构也不怕:
js
async function loadProgress() {
const saved = await $charx.storage.get('progress_key')
const value = saved && typeof saved === 'object' ? saved : {}
return { version: 1, unlocked: value.unlocked === true }
}
async function saveProgress(progress) {
await $charx.storage.set('progress_key', { version: 1, unlocked: progress.unlocked === true })
}成就、存档和排行榜用 $charx.game:
js
await $charx.game.achievements.unlock('first_win') // 同一个成就始终用同一个 ID
await $charx.game.save({ slot: 1, description: '第二章开始前' })
const top = await $charx.game.ranking.getTop({ category: 'main_board', limit: 10 })检查清单:
- 不要用浏览器的
localStorage代替平台存储。 $charx.storage.clear()会清空全部数据,只能放在玩家主动点「重置」的地方。- 写入成功以后,才显示「已保存」、才解锁成就。
- 测试:新对话、刷新页面、第二个对话、重复解锁、读写失败。
完整接口见技术手册的 SDK 核心模块。
通关
支线 · 通关奖励
通关印章