网易我的世界手机版中,有一个租贷服在循环发布的服务器公告上写着如下信息:
你知道吗,在XXX服中,花费金币总量超过一定数额可以解锁更多特权!
花费金币总量超过5000,开放资源区②区
花费金币总量超过2万,开放跑酷地图-大日御舆
花费金币总量超过5万,开放主城-双料高级商店
......
更多相关信息请到主城大厅处查看
从指令方面研究这个信息,我们可以想到至少两种判定玩家是否拥有指定特权的方法:
①创建一个专门记录消费的计分项,每次玩家成功消费均增加该玩家在这个计分项上的分数。判定玩家是否拥有权限时都使用test子命令。
②创建一个专门记录消费的计分项,每次玩家成功消费均增加该玩家在这个计分项上的分数。准备一个重复执行的命令方块,每隔一段时间(或是在玩家消费完后检测一遍)给达到条件者添加特殊的tag标签。判定玩家是否拥有权限时,就根据该玩家是否拥有指定的标签来判定。
不管是第一种还是第二种方法,我们都是使用test子命令来判断玩家的分数是否达到了范围内。这样做明显效率会比较低下,而且不适用于Java1.13更新后的版本。
而且,在第二种方法中,我们该如何判断一个玩家是否拥有指定标签呢?难不成用remove试着删除一下,看看能否成功并输出红石信号激活接下来的命令方块?
这两个技术问题其实很好解决:使用目标选择器中的记分板相关参数。
在目标选择器中,检测目标在指定计分项上的分数是否满足条件的参数是score(Java1.13更新之前)和scores(Java1.13更新后和基岩版)。
虽然两者仅仅差一个“s”,但用法大径相庭。
先来说说Java1.13更新之前的score参数。这个score参数的用法如下:
score_<计分项名称>=<最大值>
score_<计分项名称>_min=<最小值>
和许多其他Java1.13更新前的参数类似(如r和rm,范围最大值和范围最小值),score参数也被分成了max和min两个细分参数。举个简单的例子:
/give @a[score_coin=20,score_coin_min=15] diamond
这条指令的意思是:给予所有在coin计分项上的分数满足大于等于15并小于等于20的在线玩家一颗钻石。如果运行这条指令时,当前服务器有五个在线玩家:老张(coin为1)、老李(coin为15)、老黄(coin为18)、老刘(coin为20)和老邓(coin为27)。那么在运行这条指令之后,老李、老黄还有老刘将会得到一颗钻石,但是老邓和老张不会得到。
现在你明白如何使用score参数了吧?
再来说说scores参数。该参数和Java1.13更新后的许多参数类似(如distance,采用典型的“两点区间法”以确定值范围)。其格式如下:
scores={计分项A=值或范围,计分项B=值或范围......}
其中的“值或范围”,我们已经很熟悉了:
0..——大于等于5
..2 ——小于等于2
0..2 ——大于等于5且小于等于2
1 ——等于1
举个例子:
/tag @a[scores={gamepoint=150..,killnumber=20..,dienumber=0..3}] add gold
这条指令的作用是:寻找gamepoint分数大于等于150,killnumber分数大于等于20且dienumber的分数大于等于0且小于等于3的所有玩家,给他们添加“gold”标签。
现在你也会用scores参数了吧?是不是很简单?
当然,目标选择器中的记分板相关参数不止这两个,还有另外两个参数:
team(队伍)和tag(标签)。
这两个的使用就更简单了。和type还有name参数类似,它们的格式是:
team=<队伍名>——选取属于指定队伍的目标
team=!<队伍名>——选取不属于指定队伍的目标
tag=<标签>——选取拥有指定标签的目标
tag=!<标签>——选取没有拥有指定标签的目标
举个例子:
/tp @a[team=yellow,tag=skywarplayer]@e[type=armor_stand,name=yellowplace,limit=1,sort=nearest]
小主,这个章节后面还有哦,请点击下一页继续阅读,后面更精彩!
喜欢Minecraft指令手册请大家收藏:(m.2yq.org)Minecraft指令手册爱言情更新速度全网最快。