写卡攻略本AI玩家 · 创作者
主线地图

支线 · 图文

跨对话的存档和成就

换个对话,也还记得。

读完约 5 分钟
叮咚
叮咚

第 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 核心模块。

通关 ​

支线 · 通关奖励

通关印章

卡关了? ​