第四十三章 players——記分板商店
test,之前見過,意為“探測”、“檢測”。通過test,可以探測一個變量的分數(shù)是否在一個區(qū)間內(nèi)。我們就得通過它,來防止欠賬的事情發(fā)生。
?。ㄗ⒁猓瑃est子命令在Java1.13更新中被移除?,F(xiàn)在僅Java1.12.2及以下版本和基巖版擁有該子命令)
現(xiàn)在已經(jīng)有了“$”這個貨幣,并且作者有100萬$(游戲里)。假設現(xiàn)在有一個物品,價值120萬$(什么東東這么貴)。如果這個記分板商店就是一個scoreboard—players—remove加上/give,那么作者也會買成功,但是$變成了-20萬$(欠了20萬美元)。
但是,Minecraft里可沒有自帶還債機制,所以作者能夠一直扣下去。
為了防止這種事情的發(fā)生,我們就需要用到test子命令。其格式是:
... test <目標選擇器><計分項><最小值>[<最大值>]
注意,在Java版有test的時候,格式確實如上,“最大值”參數(shù)是選填的。但在基巖版中,“最大值”參數(shù)是必填的。
假設我們要使用test檢測玩家“李四250”是否能夠購買這個120萬美元的東西,我們就需要執(zhí)行指令:
/scoreboard players test 李四250 $ 1200000 *
其中,最大值被替換為了星號。這個“星號”是什么意思呢?
當最小值填*時,代指-2147483648;當最大值填*時,代指2147483647。
也就是說,這個/scoreboard players test 李四250 $ 1200000 *,實際上是/scoreboard players test 李四250 $ 1200000 2147483647。
所以這條指令的意思是:
檢測玩家“李四250”在$計分項上的分數(shù)是否大于等于1200000(并小于2147483647)。
如果成功,那么游戲會提示“分數(shù)xxx在1200000到2147483647范圍內(nèi)”。
如果失敗,則會在“在”字前加個“不”字,并將整個消息的顏色改為紅色。
在命令方塊中檢測成功也會輸出信號,進而激活接下來的命令方塊。
我們記分板商店的原理之一就是這個。命令方塊如下擺放即可做成簡單的記分板商店:
A→B→C
A(脈沖,不受制約/無條件,紅石控制/需要紅石):
/scoreboard players test @p $<物品單價>*
B(連鎖,條件制約/有條件的,保持開啟/始終活動):
/scoreboard players remove @p $<物品單價>
C(連鎖,條件制約/有條件的,保持開啟/始終活動):
/give @p <物品id> 1
這是最簡單的記分板商店,其購買流程如下:
玩家按下拉桿激活A→A執(zhí)行指令,檢測玩家是否能夠購買→如果能,激活B/如果不能,結(jié)束購買→B執(zhí)行指令,扣除玩家虛擬幣,并激活C→C執(zhí)行指令,給予物品給玩家→購買成功
這種記分板商店還有許多待完善之處:
?、儆捎谑褂聾p選取最近玩家,B和C可能將指令執(zhí)行到錯誤的玩家上
?、谶h處的玩家也可以碰到拉桿,但命令方塊可能不會將指令執(zhí)行到該玩家身上
③成功和失敗都沒有消息提示
解決辦法也很簡單:
一、目標選擇器加上x、y、z參數(shù)指定執(zhí)行中心,加上r或dx、dy、dz指定執(zhí)行范圍。
二、將每個購買項目單獨做成一間1×1的鐵門間,門內(nèi)放測重壓力板(如有裝mod,可以使用夸克模組內(nèi)的黑曜石壓力板,更加安全)。
三、可以在A前面再加上兩個命令方塊D和E,在C后面加上F,即D→E→A→B→C→F。把A改為連鎖,不受制約/無條件,保持開啟/始終活動。D、E和F如下:
D(脈沖,不受制約/無條件,紅石控制/需要紅石):
/scoreboard players test @p $*<物品單價-1>
E(連鎖,條件制約/有條件的,保持開啟/始終活動):
/tellraw @p {“text“:“購買失敗“,“color“:“red“}
F(連鎖,條件制約/有條件的,保持開啟/始終活動):
/tellraw @p {“text“:“購買成功“,“color“:“green“}
其原理就是在檢測檢測玩家是否能夠購買前檢測玩家是否不能購買。如果確實不能,發(fā)出消息“購買失敗”。以及在玩家購買成功后發(fā)送“購買成功”的消息。
注意,在這里,D和E不能放在A、B、C、F之后,即不能:
A→B→C→F→D→E
這主要是因為這是就變成了在檢測玩家是否能購買后再檢測一遍是否不能購買。不要小看這一前一后的問題,如果這名玩家能購買,購買成功后就不能再購買一個了,那么這個商店就會先后發(fā)出“購買成功”、“購買失敗”兩條消息。
現(xiàn)在,你知道如何做一個最基礎的記分板商店了吧?這東西在網(wǎng)易租貸服中可大有用處。(畢竟網(wǎng)易租貸服可加不了什么mod或插件,只能靠指令)
記分板簡要歷史:
Java
1.5——加入了記分板
1.7.2——計分項的準則現(xiàn)在可以使用統(tǒng)計菜單中的數(shù)據(jù)了
1.8——現(xiàn)在非玩家也能被記分板追蹤并擁有分數(shù)了;為players下的reset子命令加入了“計分項”參數(shù);統(tǒng)計類準則可以使用ID名了;加入了隊伍擊殺相關(guān)準則以及其他的一堆準則;為players下的add、set和remove子命令加入了NBT參數(shù);為operation加入了=、>、<和><操作。
1.8.2——又加入了一堆準則
1.9——加入了stat.sneakTime、xp、food、armor、level和air等準則。
1.13——準則大改;加入了/scoreboard objectives modify子命令。
基巖版
1.7.0——加入了被閹割的記分板和dummy準則。