后期特效与战利品池:同一个箱子的两半
战利品池的权重决定掉落什么,/posteffect 命令决定它给人什么感觉。两者都是数字,写数据包之前就能核对,26.3 版本一共有 1,447 张战利品表,数量庞大,光靠手算权重很难做到全部面面俱到。
带权重的战利品池和 /posteffect 命令通常由不同的人写在不同文件里,而它们的翻车方式如出一辙:数据包发布之前,那些数字从来没人核对过。两者的验证成本都很低,先查一遍再说。
战利品池是算术,不是感觉
池中的每个条目都有一个 weight,而任意条目的概率等于它的权重除以该池中所有权重之和。这里没有隐藏的归一化,也没有下限——权重为 0 就意味着该条目永远不会被抽中,而权重之和无论等于多少,池的行为方式都一样。真正的坑在于多次抽取:一个 rolls: 2 的池会采样两次,所以权重只占四分之一的条目会出现在大约一半的箱子里,而不是四分之一。
| 条目 | 权重 | 单次抽取占比 |
|---|---|---|
| 铁锭 | 20 | 20 ÷ 40 = 50% |
| 金锭 | 12 | 30% |
| 钻石 | 8 | 20% |
再加一个权重为 40 的条目,上面每个数字都会减半。这就是平衡工作的全部内容,也正是为什么“钻石掉率感觉不对”几乎总是某个你忘了缩放的权重。
战利品表是游戏中较大的注册表家族之一——本站所统计的 26.3 数据中列出了 1,447 个——所以一个你无法用数字推理的池,就是一个你永远没法靠手工调完的池。
/posteffect 是 Java 26.3 的新东西
Java 的 /posteffect 在 26.3 中作为正式命令加入,在 26.2 及更早版本中并不存在。它是一条 Java 命令,Bedrock 里没有任何同名功能,所以这里的 Java 教程无法照搬过去。
该命令按标识符为一组玩家添加或移除屏幕特效——/posteffect add <targets> <effect>,另外还有 remove、clear <targets> 和 list <target>(单个玩家)。它没有强度参数:特效只有开或关。原版客户端只自带五种——blur、creeper、entity_outline、invert 和 spider——所以标识符列表短到可以手工核对,不必靠猜。指定一个并不存在的特效仍然会报告成功,因为服务端根本不检查它,这就是动手之前必须验证的第二个理由。
两者的交汇点
掉落稀有物品的箱子和掉落普通物品的箱子,看起来不该一模一样。先抽取战利品池,得到真实的分布,再挑选与玩家实际见到它的频率相匹配的后期特效。反过来做,就会得到一个不停触发的夸张特效,读起来全是噪音。
对于一座城镇建筑来说,这通常意味着给普通池配一个低调的特效,比如 blur,而把 invert 这类夸张特效留给权重最小的那个条目——用的还是你已经算过的那套比例。
在后期特效与战利品工具中构建 /posteffect 命令并抽取带权重的战利品池。