Skip to content

Releases: Max-Null/dsh-jubensha

Release list

v0.1.0 · 首发

Choose a tag to compare

@Max-Null Max-Null released this 07 Oct 17:20

首发:一个人也能开局的剧本杀

AI 当 DM,AI 填满整张桌子。 剧本杀的真实门槛不是钱是人——四到六个玩家加一个 DM,凑齐一次比票价难得多。这个插件把那个门槛拆掉:你一个人就能开局。

它长什么样

  • 一个叫「团队」的会话标签:左边是这一局的人(座位、人物关系、时间线),中间是桌上说了什么,右边是剧本与阶段页。名字是刻意的——对话形态唯一给不了的东西,就是「看起来在干别的」。
  • 打不开的真相保险箱:真凶、手法、整段线索封存到复盘,角色本走引用(全文留在插件里,上桌时由程序解开)。DM 的上下文里过不到答案。
  • 演员与角色是两层:角色来自本子(自带七本),「人」来自一个跨会话活着的演员池(自带六位)。同一个人下一局换座位、换本子,但他记得前面几局被谁骗过。
  • 玩家「只能说话」由机制保证,不靠提示词纪律:tools.restrict 管看不看得见,tools/pre-execute 管准不准执行。

这一版里几件值得说的事

桌上说话不再是主持人转达的。 真人与 AI 玩家说的每一句话,由宿主逐句原样广播给桌上其余人(署名准确、原文一字不改)。在这之前它靠 DM 手打 relay,而那种转述实测出过四种错:署名不准、地址被摘(真人说「回阿May:你说你进门的时候我才走」,广播版成了「你说你进门的时候我才走」,而另一个也进过门的人会以为在说她)、「你可以接」、以及最要命的忘了转。四条判据都验过:338 对逐字一致。代价也量了——玩家会话涨到约两倍,而主会话每请求的成本降到一半(DM 不再逐句转达了)。

几条闸,都长在「它必然经过的地方」。 人齐了才开场;自述完了每个座位都得有行踪(房间页左栏读的就是它);搜证那一页不能空着过去;桌上连着说了八条而真人一句没说,主持人的下一个动作会被拦下来,并被告知「光停下不算,他在对话页看不见你停了」。最后那条的来由是用户的原话:「演员们玩的挺嗨啊,又把我无视了,DM不干预吗?」——那一局真人说了 2 次、玩家说了 647 次。

一个会话只能开一局。 Team 名册的条目不可移除(上限 8,来自 profile patch),所以重开一局要换会话。那条闸是一次实测逼出来的:同一个会话里 start 被调了三次(07 → 01 → 07),每次重置局面、把已经上桌的人丢在原地。

装

dsh plugin add @max-null/dsh-jubensha

开第一局:新会话里在标题上连点三下(它会往输入框里填一句「来一局剧本杀」),回车——那排标签这时才出现,「团队」在最右边。入口刻意不显眼,而它只填一句话,发送与否、开哪一本都由你决定。

本子

自带七本:01 拾光照相馆 / 02 深夜电台 / 03 没拆的那封信 / 04 三支药 / 05 金库的铜带 / 06 年会那晚(四座)+ 07 夜场(六座)。格式见 schema/case.schema.yml,写新本子读 skill jubensha-write-case。

已知边界

  • 玩家经 Team 上桌,所以看得见的工具比能用的多(模型请求里 10 个,实际能用的只有 send_message)——「进 roster」与「工具面绝对干净」在机制上不可兼得。
  • teammate 名字跨进程持久:一个名字在一个 DM 会话里用过一次,重启后也不能再用。
  • 共享工作目录:所有玩家与 DM 看同一个 cwd,所以本子的真相手册不得落在工作区内。
  • 封存挡的是顺手泄漏,不是「DM 看不到」——它真要 read 那个文件谁也拦不住。

完整说明见仓库的 README。