记分板变量

本文采用以下译名:

  • Objective->变量
  • Criteria->判据

在本文中,对象指的是玩家名称(真实玩家及假名)与UUID
同时,本文前部以概念介绍为主,具体的命令与应用在后部介绍。

变量 是记分板系统的基本组成部分。记分板系统上可以同时存在多个变量。

一个变量包含以下内容:

  • 名称(Name)。名称是一个变量在系统内部使用的名称。不同变量之间的名称不能重复,且名称区分大小写。也就是说,名称为"name"的变量和名称为"NAME"的变量是不同的。名称最长可为16个字符。为了便于他人阅读命令,我们建议用CamelCase原则命名,即单词第一个字母大写。(当然,这不是游戏的必须要求)
  • 显示名称(Display name)。显示名称是一个变量用于展示的名称。与名称相反,不同变量之间的显示名称可以重复。
  • 判据(Criterion)。判据是一个变量的分数改变方式。不同变量之间的判据可以重复。
  • 追踪的对象与其分数(Target and Score)。变量可以同时追踪多个对象,并记录对象的相应分数。

下面让我们具体了解变量的各个组成部分。

判据

判据作为变量分数的改变方式,一般是针对于玩家而言的。当玩家以外的实体等对象与变量关联起来时,判据效果都与dummy等同,即只能通过命令修改。

判据分为简单判据和复合判据。简单判据只有一个单词,复合判据则是在基础判据之上加入次级判据。下面先介绍简单判据。

在简单判据中,有一种判据称为只读型判据。它们是根据一些系统内部的数值来确定相关分数的,因而不可修改。同时只读型判据与玩家信息相关,因此玩家之外的对象不适用只读型判据。在只读型判据外,其它类型的判据只是在条件满足时增加分数,不对应内部数值,所以都能通过命令修改分数。复合判据没有只读型,即只读型判据都是简单判据。
在下文中,粗体的判据就是只读型判据。

以下是简单判据略表:

  • dummy: 虚拟型,只能由命令修改
  • trigger: 触发型,配合/trigger命令使用
  • deathCount: 统计死亡次数
  • playerKillCount: 统计你的击杀次数
  • totalKillCount: 统计你的杀怪次数
  • health: 对应你的生命值
  • xp: 对应你的经验值
  • level: 对应你的等级
  • food: 对应你的饱食度
  • air: 对应你潜水时的空气值
  • armor: 对应你的盔甲值

相比于简单判据,复合判据(Compound criteria)能够更精细地检测玩家行为。复合判据的结构为:基础判据.次级判据,例如stat.craftItem.minecraft.stone。不同部分之间以.分隔。所有的复合判据都可以通过命令进行分数的修改。

以下是复合判据可用的基础判据略表:

  • stat: 当玩家完成指定的统计项目时,加上对应的分数。不会从内部的统计中拉取数据
  • stat.craftItem: 玩家合成指定的物品时分数+1
  • stat.useItem: 玩家使用指定物品时分数+1
  • stat.breakItem: 玩家因耐久度耗尽而破坏指定物品时分数+1
  • stat.mineBlock: 玩家挖掘指定方块时分数+1
  • stat.killEntity: 玩家杀死指定生物时分数+1
  • stat.entityKilledBy: 玩家指定生物杀死时分数+1
  • stat.drop: 玩家丢出指定物品时分数+1
  • stat.pickup: 玩家拾取指定物品时分数+1
  • teamkill: 玩家杀死指定队伍的成员时分数+1
  • killedByTeam: 玩家指定队伍的成员杀死时分数+1

全部的次级准则请参见Wiki的Criteria部分

使用复合判据时应当注意:

  1. 在基础准则后加ID名时,需要添加.minecraft前缀。例如:stat.craftItem.minecraft.stone。而
  2. 使用物品有着很详细的规则。一般来说,与生物的互动都不属于使用,例如驯服、喂养、繁殖、挤奶、剪羊毛等。

显示位置

记分板的分数是可以在游戏画面中显示出来的。显示位置共有三处:名称下方,侧边栏,在线玩家菜单。在显示变量名称时,使用的是显示名称(若添加变量时未填写显示名称,则默认使用名称)。一个显示位置只能显示一个目标,但一个目标可以显示在多个位置上。不同的显示位置,分数的显示方式是不同的。各个显示位置的具体介绍如下:

  • list: 分数显示于在线玩家菜单中玩家名称的后面,颜色为黄色。这个显示位置不显示变量名。
  • sidebar: 在侧边栏显示变量名、对象名称(UUID/玩家名),及对象对应的分数。
    • sidebar.team.队伍颜色: 在指定队伍成员的侧边栏显示分数,形式如上。
  • belowName: 在玩家名称牌的下方显示变量名与分数。分数在变量名之前。

在下面这张图片中,listbelownamesidebar在这里是玩家的名称,同时也对应显示位置的名称;03是不带变量名的分数;1是分数值;MortsScore是变量名。

对象、分数与检测

前面已经说到,对象指的是玩家名称或UUID。UUID是记录实体的,而玩家名就是记录玩家的。玩家不需要在线,甚至不需要存在,也可以在记分板上有分数。如果使用了不存在的玩家名,我们就把这种玩家名称为 假名(Fake name)

一般我们会使用假名来显示分数。如果是记录分数作探测之用,一般我们会使用实体marker,因为我们能够以选择器选择实体marker,但不能选择假名。

使用假名时,只需要按照一般的方法在命令中输入假名即可,不需要进行声明操作。例如,设置分数的命令为:

scoreboard players set <玩家名> <变量的名称> <分数值> [数据标签]

现在有一个虚拟型变量obj,给一个叫Faker的假名设置分数为10,则命令为:

scoreboard players set Faker obj 10

如果不希望假名出现在侧边栏,则可以在假名前添加#前缀:

scoreboard players set #Faker obj 10

不过玩家名的长度也是有限制的,不能长于40个字符。


在填写玩家名的参数中,可以用*代表所有对象(所有被记分板系统追踪的对象)。不过此写法只适用于记分板命令


如果实体有分数,那么可以通过目标选择器,利用相关参数进行检测。具体的参数有两个,分别是score_namescore_name_min。其中name是变量名称。前者代表大于等于,后者代表小于等于。例如,设变量deaths的判据为deathCount,则如果要选出至少死亡一次,至多死亡5次的玩家,则目标选择器的写法为@p[score_deaths=5,score_deaths_min=1]

除了分数,我们也能使用记分板的 标签(tag) 对实体进行标记,这会在之后的章节讲解。

记分板分数有限制的,范围为-2147483648到2147483647。
如果分数在加减的过程中超出范围则会溢出,这方面请自行搜寻,不建议使用这个特性。

记分板中分数为0没有分数是两个概念:前者能被检测分数,而后者不能被检测分数,即不在记分板系统上。(然而分数+0 -0也能自动把没有分数变为0分。)
我们可以使用score_obj_min=-2147483648或者score_obj=2147483647检查有没有分数。由于分数范围的限制,没有分数则必然不会被此参数选中。

results matching ""

    No results matching ""