本文范围
上一篇文章记录到随机副本 1.4.8。此后两个插件累计有以下变化,本文按插件分别说明:
- 随机副本(NWNDungeon):1.4.9 → 1.4.12,两处修复与一处新指令;
- 幽灵(TheGhost):1.5.1 → 1.5.2,新增对话记忆,并改掉两处会浪费开销的配置。
两篇文章都不讲玩法本身;玩法说明见服务器页面的玩法特色一节。
随机副本:掉落附魔书曾经是废纸
问题
掉落表 loot.yml 原先只能写物品 ID。生成掉落物时,代码直接按材质构造物品:
new ItemStack(材质, 数量)
这样造出来的附魔书没有任何附魔数据:名字照常显示「附魔书」,但一条附魔都没有,放进铁砧也用不了。原版正常玩法里拿不到这种书,所以它在玩家手里等同于废纸。三个难度的最终奖励箱各有一条这样的条目,因此通关首领后经常掉出废书。
处理
掉落表新增两个键,语法与 mobs.yml 里怪物装备的附魔写法保持一致:
enchants: { SHARPNESS: 3, UNBREAKING: 2 }—— 写死附魔,等级不做夹取(写 6 就按 6 生成);random-enchants: 2或[1, 3]—— 随机附魔条数,附魔名与等级从该难度对应的池子中抽取,随机出的等级按原版上限夹取。
附魔写入 EnchantmentStorageMeta(存储附魔)而非普通附魔 —— 普通附魔挂在书上铁砧读不到。此外增加了兜底:两个键都没写、物品又是附魔书时,插件自动补上随机附魔,空附魔书不会再出现;附魔名写错时只在日志中警告一次并跳过,既不静默丢弃附魔,也不刷屏。
三张奖励表按难度递进重排:普通 1 条低级(等级 12)、困难 12 条中级(23)、噩梦 23 条高级(3~4);另各加一条小概率的经验修补写死附魔书,同时作为两种语法的示例。
补上会被自己锁住的命令白名单
1.4.11 引入「副本内禁止使用其它命令」时,白名单漏掉了 verification —— 它是登录插件验证码命令 /captcha 的另一个名字。玩家连续登录失败被要求输入验证码、又恰好在副本内掉线重连时,会被这条规则拦在副本里出不来。
本次把名单改成照服务器上真实存在的命令逐个核对:login / l / log、register / reg、unregister / unreg、changepassword / cp、captcha / verification、email(其子命令只需认根命令名)。实测不存在的别名(verify / addemail / changeemail / setemail)不再写入;/logout 虽然存在但故意不放行,因为它只会把玩家变成未登录状态,拦掉不影响自救。
服务器上的配置已同步并执行过 /dungeon reload,无需重启即已生效;本版 jar 的作用是让打包的默认配置与内置兜底名单一起跟上,覆盖新装与旧配置升级两种场景。
新增:查找最近的副本入口
新增 /dungeon locate [难度|any],列出离玩家最近的三个副本入口(距离、方位、坐标,跨世界会标注)。副本入口的生成密度约为每 400 区块一处,靠扫区块寻找需要加载上万区块、会拖垮服务器,因此改为生成入口时登记一份轻量清单 plugins/NWNDungeon/entrances.yml(世界、坐标、难度、是否有效),指令直接查表;门被破坏时登记表里也会标记失效。
此外 1.4.9 起提供 PlaceholderAPI 接口(安装后自动注册):当前体力、上限、下一点回复秒数与文字版、进度条、是否已满,以及各难度的进本消耗与通关金币。
幽灵:记得住话了,也学会省钱
新增短期对话记忆
此前每次调用都是独立的「system 提示 + 一句 user」,它接不住「刚才那句什么意思」这类追问。1.5.2 新增对话记忆:被点名或 /ghost ask 时,前几轮对话会作为上下文一起发送,最多 8 轮、空闲 300 秒后忘记。
消息形状刻意固定为「system → 历史 → 本次消息」,每轮都在上一轮前缀之后追加 —— 这样模型的输入前缀缓存才有机会命中。实测 8 轮历史只让单次成本从约 0.00030 元涨到 0.00031 元(约 +4%);最坏情况(缓存完全未命中)也只到 1.7 倍。system 提示词一个字都不改,同样是出于这个原因。
只有真正的对话计入记忆:定时发言、/ghost poke、引导接话的台词都不进历史,免得它把自己找乐子的话当成玩家聊过的内容;玩家下线即清空。另新增 /ghost forget [玩家] 用于清空某个人或所有人的记忆,/ghost reload 也会顺带清空。
两处会浪费开销的配置
- 关闭思考模式(
deepseek.thinking,默认 false):新模型默认开启思考,开启时temperature失效,思维链还会额外消耗输出 token,把max-tokens吃光导致回复为空; - 模型改为
deepseek-flash(旧配置里的deepseek-chat已不在官方价目表上),并把max-tokens从 180 降到 80 —— 回复本体约 60 token,输出才是账单的主要部分(缓存命中时占单次成本 66%),压缩它比压缩上下文更有效。
现在可以查看真实开销:插件解析响应的 usage 字段,累计缓存命中、未命中与输出的 token 数,/ghost status 显示累计量与按当前价目估算的花费;deepseek.log-usage: true 可让每次调用往控制台写一行用量。
其他
1.5.1 清掉了全部旧的 mcbot 兼容:移除 /mcbot 命令别名与 mcbot.admin / mcbot.talk 权限节点,现在只有 /ghost 一条命令与 theghost.admin / theghost.talk 两个权限节点。另外为幽灵补了一套离线自测(47 项断言,覆盖记忆环形缓冲、空闲过期、token 裁剪、请求体顺序、思考模式开关、usage 解析与回复解析),不需要启动服务器即可运行。
获取与安装
两个插件均按 MIT 许可开源,可直接下载 jar 后部署到 Paper / Purpur 1.21 及以上的服务端:
- 随机副本 1.4.12 —— 下载本文所述历史版本 jar;最新版见插件页
- 幽灵 1.5.2 —— 下载 jar
完整的指令表、权限节点与配置说明在各仓库的 README 中;更新记录见各仓库的 CHANGELOG。安装方式均为将 jar 放入服务端的 plugins/ 目录后重启服务器。下载入口同时列在插件页面。