首页 男生 游戏竞技 Minecraft指令手册

第四十二章 players——管理变量(分数)

Minecraft指令手册 你好MC 4028 2024-07-09 15:29

  在上一章,我们了解了如何管理一个计分项。在一个计分项中存在有多个玩家(或非玩家),每个玩家(或非玩家)都有一个属于自己的变量(分数)。那么我们该如何管理这些变量(分数)呢?

  这就需要用到scoreboard的br /layers子命令,即/scoreboard br /layers ...

  /scoreboard br /layers

  作用:控制记分板上计分项的变量(分数)

  格式:

  /scoreboard br /layers ...

  ... add <目标选择器><计分项><增加的分数>[NBT(仅Java1.13之前)]——将所选玩家(或非玩家)在指定计分项中的分数增加指定值

  ... remove <目标选择器><计分项><减少的分数>[NBT(仅Java1.13之前)]——将所选玩家(或非玩家)在指定计分项中的分数减少指定值

  ... set <目标选择器><计分项><分数>[NBT(仅Java1.13之前))]——将所选玩家(或非玩家)在指定计分项中的分数设置为指定值

  ... reset <目标选择器>[计分项]——将所选玩家(或非玩家)在记分板上的全部数据(或指定计分项上的数据)完全清除(注意不是清零,而是清除)。目标选择器可用*代指所有玩家和非玩家。

  ... list [目标选择器]——列出所有正在被记分板追踪的玩家(或非玩家)。如果指定了玩家(或非玩家),那么将会列出选取的玩家(或非玩家)们在记分板上的所有数据。

  ... get <目标选择器><计分项>——[仅Java1.13及以上版本]获取指定单个玩家(或非玩家)在指定计分项上的分数

  ... test <目标选择器><计分项><最小值>[<最大值>]——[仅Java1.12.2及之前和基岩版]检测所选玩家(或非玩家)在指定计分项的分数是否大于等于最小值并且小于等于最大值。最小值和最大值均可使用*来代指-2147483648(最小值使用*)或2147483647(最大值使用*或不填)。

  ... obr /eration <目标选择器1><运算计分项1><操作><目标选择器2><运算计分项2>——将目标选择器1参数中所选玩家(或非玩家)的指定计分项的分数与目标选择器2参数中所选玩家(或非玩家)的指定计分项的分数进行一些操作

  ... enable <目标选择器><触发器类计分项>——[仅Java版]允许所选玩家(或非玩家)对指定触发器类计分项使用一次/trigger指令。

  ... random <目标选择器><计分项><最小值><最大值>——[仅基岩版]将所选玩家(或非玩家)的指定计分项分数随机设置为设定范围内的任何整数值。

  通过br /layers子命令,我们可以set(设置)、add(添加)、remove(删除)、list(列出)、get(获取)、reset(重置)、obr /eration(操作)、test(检测)、random(随机)和enable(触发器)。这些东西的内容很多,我们今天就只研究基本的,也就是上面我们提出的问题:如何管理变量(分数)。

  管理变量,就得先有变量,不然管理啥呢?我们知道,一个玩家(或非玩家)被一个计分项计入后最多只能有一个属于自己的变量(分数)。而一个计分项创建之初是什么也没有计入的,也就是说这个计分项没有一个变量,空空如也。

  为了给这个计分项添加一个变量,也就是计入一个玩家(或非玩家),我们就需要用到add这个子命令:

  ... add <目标选择器><计分项><增加的分数>[NBT(仅Java1.13之前)]

  增加的分数至少为0。当然,就算为0,这也算是计入该计分项了。

  实际上,使用remove、obr /eration和set也可以达到同样的计入效果。

  比如,你要把你自己计入到“金钱”计分项中,就需要:

  /scoreboard br /layers add/remove/set @s 金钱 0

  如果你将一个还未计入“金钱”计分项的玩家的分数增加5会怎样?

  其实不会怎么样。正如正常人的一般思维,刚刚计入计分项的玩家(或非玩家)其分数是从0开始算起。也就是说,给那名玩家添加5金钱实际上会先让他计入该计分项,此时他的分数为0,然后再将他的分数+5变成5。

  这里的“金钱”计分项是作者自己编的,你想要运行上面的例子就得先自己创建一个叫金钱的计分项。

  计入之后,我们该如何减少分数呢?这就要用到remove(删除):

  ... remove <目标选择器><计分项><减少的分数>[NBT(仅Java1.13之前)]

  比如我想要将玩家“张三666”在“金钱”计分项中的分数减少10,这就需要执行:

  /scoreboard br /layers remove 张三666 金钱 10

  假设他原本的分数是3。执行该指令过后,他的分数就变为了-7。

  需要注意。记分板的分数其值是个Int整形类变量,也就是其值的范围只能是-2147483648~2147483647。如果一个玩家的分数已经是-2147483648,你再减去个1,他的分数就会变为2147483647。关于为什么会这样,以及Int整形究竟是个什么,你以后就会了解到。

  如果你对此很感兴趣,那么你可以跳到后面135~140章尝试你是否能够理解。

  分数可以增加和减少,当然也可以快速设定为指定的值。这时候就要用到set:

  ... set <目标选择器><计分项><分数>[NBT(仅Java1.13之前)]

  设置成功后,该变量的数将会变成设置的分数。比如我想要将“张三666”的“金钱”设为2,就可以:

  /scoreboard br /layers set 张三666 金钱 2

  你可能注意到了,在本章开头列出的格式中,还有一个reset(重置)。这个reset可和set没多大关系,因为reset是重置(更准确的说是清除数据)。其格式如下:

  ... reset <目标选择器>[计分项]

  举个例子,假设我们运行了下面的指令:

  /scoreboard br /layers reset 张三666

  你就会惊奇地发现“张三666”的名字从右边侧栏的“金钱排行榜”中消失了。这并不是说他被挤出了该排行榜,或是他的分数被重置为了0,而是他的所有在记分板上的数据全部没掉并且记分板也不再跟踪他,直到他重新计入到某个计分项中。

  这哪里是reset啊,这简直是clear啊!

  如果你不信,你可以试试/scoreboard list 张三666(列出张三666在记分板上的数据)或/scoreboard get 张三666(获取张三666的分数),看看你能不能再次找到他的数据。

  这确实太狠了。如果你只想clear掉他在“金钱”计分项中的数据,在“张三666”后面加上“金钱”即可,即:/scoreboard br /layers reset 张三666 金钱

  (实际上还可以更狠。目标选择器使用*可以代指所有正在被追踪的目标,也就是说/scoreboard br /layers reset *可以完全清除整个记分板上所有玩家和非玩家的数据)

  你现在可以尝试弄一个你自己的虚拟货币用于服务器中。

  这个货币的名称自己想。作者想的是:$。

  没错,名字允许你填$等符号。我们就以这个符号为名字举例子,输入并运行下面的指令:

  /scoreboard objectives add $ dummy §a$

  (Java版:

  /scoreboard objectives add $ dummy {“text“:“$“,“color“:“yellow“})

  你就成功创建了一个叫做$的虚拟货币!

  作者现在没钱,所以作者我要给自己钱:

  /scoreboard br /layers add @s $ 1000000

  OK,现在作者有100万美元了!(当然是游戏里)。

  现在你可以尝试做一个记分板商店。我们运用clear指令和scoreboard指令结合即可建成一个收购商店(使用物品换取虚拟币)。而使用scoreboard和give指令可以建成一个用虚拟币购买实物的商店。

  但是,计分项的分数可以是负数!我们既然要搞虚拟货币,就要防止这种负数欠账的事情发生。

  此时,test子命令就派上用场了!

目录
设置
手机
书架
书页
评论