天才一秒记住【第一中文网】地址:www.dyzww.cc
test,之前见过,意为“探测”、“检测”。通过test,可以探测一个变量的分数是否在一个区间内。我们就得通过它,来防止欠账的事情发生。
(注意,test子命令在Java1.13更新中被移除。现在仅Java1.12.2及以下版本和基岩版拥有该子命令)
现在已经有了“$”这个货币,并且作者有100万$(游戏里)。假设现在有一个物品,价值120万$(什么东东这么贵)。如果这个记分板商店就是一个scoreboard—players—remove加上\/give,那么作者也会买成功,但是$变成了-20万$(欠了20万美元)。
但是,minecraft里可没有自带还债机制,所以作者能够一直扣下去。
为了防止这种事情的发生,我们就需要用到test子命令。其格式是:
... test <目标选择器><计分项><最小值>[<最大值>]
注意,在Java版有test的时候,格式确实如上,“最大值”参数是选填的。但在基岩版中,“最大值”参数是必填的。
假设我们要使用test检测玩家“李四250”是否能够购买这个120万美元的东西,我们就需要执行指令:
\/scoreboard players test 李四250 $
*
其中,最大值被替换为了星号。这个“星号”是什么意思呢?
当最小值填*时,代指-;当最大值填*时,代指。
也就是说,这个\/scoreboard players test 李四250 $
*,实际上是\/scoreboard players test 李四250 $
。
所以这条指令的意思是:
检测玩家“李四250”在$计分项上的分数是否大于等于(并小于)。
如果成功,那么游戏会提示“分数xxx在到范围内”。
如果失败,则会在“在”字前加个“不”字,并将整个消息的颜色改为红色。
在命令方块中检测成功也会输出信号,进而激活接下来的命令方块。
我们记分板商店的原理之一就是这个。命令方块如下摆放即可做成简单的记分板商店:
A→b→c
A(脉冲,不受制约\/无条件,红石控制\/需要红石):
\/scoreboard players test @p $<物品单价>*
b(连锁,条件制约\/有条件的,保持开启\/始终活动):
\/scoreboard players remove @p $<物品单价>
c(连锁,条件制约\/有条件的,保持开启\/始终活动):
\/give @p <物品id> 1
这是最简单的记分板商店,其购买流程如下:
玩家按下拉杆激活A→A执行指令,检测玩家是否能够购买→如果能,激活b\/如果不能,结束购买→b执行指令,扣除玩家虚拟币,并激活c→c执行指令,给予物品给玩家→购买成功
这种记分板商店还有许多待完善之处:
1由于使用@p选取最近玩家,b和c可能将指令执行到错误的玩家上
2远处的玩家也可以碰到拉杆,但命令方块可能不会将指令执行到该玩家身上
3成功和失败都没有消息提示
解决办法也很简单:
一、目标选择器加上x、y、z参数指定执行中心,加上r或dx
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!