语言
Anvil · 面向棋盘搭建者阅读约 8 分钟

做一块会自己记账的棋盘

一个格子,是「某件事会被注意到」的承诺。这里讲的是每种格子究竟能看到什么、怎样写出两百个而不搭上整个晚上,以及那少数几种会无声失败的错误 —— 格子干脆永远不触发,而没人会在第四天之前发现。

15 种类型 每格一种,绝不混用1000 个格子 每块棋盘,用表格编写无声地 一个坏格子就是这样失败的
这份简体中文译文还没有母语者校对过。如果某句话读起来不对,英文页面 才是原文 —— 而告诉我们才能让它被修正。
步骤 1

一个格子,一种类型

#

每个格子都恰好属于一类型,而类型就是全部问题所在:它决定插件或 hiscores 扫描盯着什么,因而也决定这个格子究竟能不能自行完成。把两种类型的字段混在一起会在门口就被拒绝,而不是先收下再放着坏掉。

这些类型分为三个家族,而家族比标签更重要:

手动由人看一眼截图然后说通过。永远可用、永远有效、永远要搭上某个人的一个晚上。用它来处理软件看不见的东西。
从 Hiscores 读取技能经验与 boss 击杀数,每 15 分钟从官方 Hiscores 扫描读取。不需要插件,对名单上的所有人都有效 —— 但它只能看到 Hiscores 统计的东西,而且要等玩家退出登录之后。
由插件识别其余的一切:掉落、NPC 击杀、限时通关、日记、combat tasks、跑圈、战利品价值。几秒内记账,并把凭证截图合进去 —— 但只对真正在跑插件的玩家有效。

完整列表,顺序与类型选择器一致:

标准手动格子 —— 由队长标记为完成。没有任何自动记录。
技能当某项技能达到经验目标时自动完成(从 hiscores 读取)。
Boss 击杀数当某个 boss 达到击杀数目标时自动完成(从 hiscores 读取)。
掉落某件物品(或某个物品池中任意一件)掉落 N 次 —— 由插件识别,附带合成的截图。
物品套装多件物品,各有各自需要的数量 —— 每种一件即为完整套装。
击杀数击杀某种 NPC N 次 —— 连 hiscores 从不统计的也算(鸡、牛)。由插件识别。
敏捷跑圈在某条敏捷路线上跑 N 圈,或在 Hallowed Sepulchre 完成 N 层 / N 次完整通关 —— 依据游戏内计数器实时统计。只有活动期间跑的圈数才算。
PvP 击杀击杀玩家 —— 任何人、敌对队伍,或指定的悬赏目标 —— 在荒野或 PvP 世界里。安全的小游戏永远不算。
物品获取捕捉、烹饪或采集某物品 N 个 —— 依据进入背包的数量统计。由插件识别。
限时在时间上限内完成某项活动(Inferno、团本、Colosseum)。由插件计时。
零死亡以队伍零死亡完成一次团本,共 N 次。插件会统计副本内的每一次死亡。
LMS在 Last Man Standing 中进入前 N 名(1 = 获胜),共 M 次。由插件在对局结束时识别。
战利品价值价值 X 金币的战利品 —— 单次收获,或多次收获累计达到目标。由插件估价。
日记在活动期间完成成就日记的层级。由插件依据完成提示识别。
Combat task在活动期间完成 Combat Achievement 任务。由插件依据完成提示识别。
关于插件的问题,只问一次

由插件识别的格子,对不跑插件的玩家来说是不存在的。这不是能靠配置绕过去的缺陷 —— 根本没有任何东西在看。如果你氏族里有一部分人在手机或官方客户端上玩,那就要么让这些格子远离通往胜利的关键路径,要么给它们配一个手动的替代方案,并做好审核截图的准备。

步骤 2

挑那个真的会触发的类型

#

大多数行为古怪的格子,都是把正确的想法用错了类型表达。最常绊倒人的四个:

Boss 击杀数目标不是 kill 类型的格子。kill 格子通过插件监视 NPC 死亡;击杀数目标是个 hiscores 数字,需要 trackedStat + statType=boss + statGoal。kill 格子留给 Hiscores 从来不统计的东西 —— 牛、鸡、某个特定的 slayer 怪。
收藏日志的一个格位属于掉落格子。解锁日志条目即可记账,所以即便玩家早就有的重复品也能触发这个格子 —— 而这通常正是你想要的。
「每样来一个」是一个带物品列表、且不带 requiredAmount 的掉落格子。加上 requiredAmount,它就会悄悄变成「这些里面随便凑 N 个」—— 同一行,完全不同的格子。
日记或 combat task只依据游戏内的完成提示记账,而那条提示只在层级或任务完成的那一刻出现。玩家已经拥有的东西无法再次触发 —— 但 combat task 例外,Settings → Combat Achievements → Repeat completion 能让他们重新触发一次。
组合式的 boss 格子

一个 boss 格子所追踪的字段里可以放多个 hiscores 键,用逗号分隔,进度会跨键累加。chambersOfXeric,chambersOfXericChallengeMode 就是一个把 CoX 和 CM 一起计数的格子 —— 而这几乎总是团本格子想表达的意思。

步骤 3

批量编写,别在浏览器里点

#

手点一块 25 格的网格没问题。手点一块 200 项任务的 Leagues 棋盘就不行了,事后校对更不行。Tiles 标签页里有一条正为此而设的往返通道。

  1. 在活动的 Tiles 标签页点 Download spreadsheet。你会拿到一份反映棋盘当前状态的 .xlsx,下拉选项、物品清单和字段说明各占一个工作表。
  2. 编辑它。一行一个格子;行的顺序就是格子的顺序。
  3. 在同一个标签页点 Upload CSV / Excel。只有 Tiles 工作表会被读取。
这趟往返不丢任何东西下载后原封不动传回去,什么都不会发生 —— 完全一致的行会被报告为未变更,连时间戳都不会重打。这让导出成为大改之前一份可靠的备份。
行对应位置第 1 行就是第 1 个格子。已有的格子会就地更新,而你省略掉的列会被原样保留、而不是被清空 —— 所以你可以只发一份两列的表来单独改分值。
只有动态棋盘会变大多出来的行会在 Leagues 棋盘或格子竞速上创建新格子,前提是活动尚未开始,上限 1000。经典 N×N 网格形状固定,会直接忽略它们。要生成几百项任务,就把它做成 Leagues 活动。
要么全成,要么全不成所有行会先被校验。哪怕只有一个物品名无法解析,整次导入都会失败、点名指出问题所在,并且什么都不改 —— 你永远不会得到半块棋盘。
有些字段会在开赛时锁定名称、类型、所需数量和物品配置只在活动开始前生效。描述、分值、类别和「可选」标记则全程都能改,所以你可以在活动中途改掉一个错别字,而不必重开棋盘。
步骤 4

那些会无声失败的错误

#

下面每一种都能干干净净地导入,摆在棋盘上看着也对,然后永远不会触发。它们值得在上传之前读一遍,而不是之后。

技能与 boss 格子写的是 type=standard并不存在 type=skill。类型来自一行在其他方面都很普通的 standard 行上的 trackedStat + statType + statGoal。写成 type=boss 会被拒绝;但写成 type=standard 却忘了填 stat 列不会被拒绝 —— 你会得到一个永远没人会去批准的手动格子。
分隔符逐列不同items 用分号(逗号是 CSV 的分隔符)。targetNpcs 用竖线。在 combat task 行里,竖线是唯一选择,因为真实的任务名里含有逗号 —— Nylocas, On the Rocks 是一个任务。
团本名称按字面匹配零死亡或限时格子所填的模式必须与游戏里的写法完全一致:Chambers of Xeric: Challenge ModeTheatre of Blood: Hard ModeTombs of Amascut: Expert Mode。差一点的拼写,就是一个永远不会完成的格子。Entry Mode 的通关永远不会为基础团本格子记账;更高难度则会。
物品名必须精确必须是游戏里的写法,否则导入会失败并列出无法解析的名字。名字有歧义时,就用 Name#id 把它钉死,别再猜。
timeThresholdSeconds 有四种含义在限时格子上是时间上限,在 LMS 格子上是名次上限(1 = 获胜),在零死亡格子上是精确的队伍人数,在掉落格子上是精确的团本队伍人数。同一列,四种含义 —— 请确认你填的是你这个类型真正会读的那一种。
把所需数量填到了错的类型上它属于掉落、击杀、获取、跑圈、PvP、零死亡和 LMS 这些行。填在 stat 行或限时行上什么也不会发生,而填在掉落行上会把一个物品套装变成「任意 N 个」的池子。
写两百个之前先试一个

就你不确定的那种类型写一个格子,在一个用完就扔的活动里公布它,然后真的去把那件事做一遍。花在那里的五分钟,胜过在氏族宾果夜发现整整一个类别是死的。

步骤 5

分值、档位,以及公不公平

#

在按分数计的棋盘上,每个格子都带有自己的分值,而这些分值会映射到有名字的难度档位 —— easy 到 elite —— 如果你的氏族分级方式不同,可以在 Advanced settings 里修改这些档位。玩家读的是档位;计分的是数字。

把一个格子标记为 optional,它就不再计入棋盘总分 —— 你可以借此加入进阶目标,同时又不会让全盘通关变得不可能。

棋盘填满之后,从 Tiles 标签页跑一次平衡审核器。它会检查结构和投入的分布,告诉你棋盘在哪里偏了 —— 某个没人做得完的类别、某个每小时收益远高于邻居的档位 —— 赶在玩家替你发现这些问题、并绕着走之前。

步骤 6

在你发话之前没人看得见

#

新棋盘一开始是隐藏的。管理层始终看得到;玩家在你公布之前什么都看不到 —— 所以棋盘可以在明面上、花好几天、在成员看得到的频道里搭建,而不会剧透任何东西。

那个总开关是其他一切的地基。在带有公布策略的棋盘上 —— 定时、间隔、悬赏、轮换 —— 引擎只有在棋盘本身被公布之后才会开始翻开单个格子,所以让一块棋盘「上膛」永远是一次刻意的动作。该选哪种策略有自己的页面:赛制,以及格子如何开放

任务是值得了解的例外:预先写好但压着不放的格子,在活动中途从它们自己的池子里公布,而棋盘的其余部分始终可见。

步骤 7

公布之前

#

每块棋盘值得走一遍。大部分只要五分钟。

  • 每个格子的类型都是你想要的那个,而不是那个刚好能干净导入的
  • 团本模式、物品名和任务名与游戏里的写法逐字一致
  • 如果你氏族里有一部分人不用插件,由插件识别的格子并不是通往胜利的唯一路径
  • 分值已设定且平衡审核器满意,或者你是有意与它意见相左
  • 可选格子已标记为可选
  • 你已经下载过一次表格,作为可以再传回去的备份
谁能做这件事

编写格子是唯一一个拥有专属角色的管理工作。editor 只能编写格子、别的什么都不能做,而且可以被限定到特定棋盘 —— 这样来自别的氏族的受邀搭建者,拿到的就恰好是你交给他的那一场活动,无法接触你运营的任何其他东西。

表格格式在 docs/tile-authoring.md 里有完整说明,那份文档是写给生成这些行的人(或程序)的。本页是属于人的那一半:该挑哪种类型,以及哪里会出岔子。