UU看書

第四十九章 目標選擇器中的記分板

天才一秒記住【UU看書】地址:www.uukanshu.co

網易我的世界手機版中,有一個租貸服在迴圈釋出的伺服器公告上寫著如下資訊:

你知道嗎,在XXX服中,花費金幣總量超過一定數額可以解鎖更多特權!

花費金幣總量超過5000,開放資源區②區

花費金幣總量超過2萬,開放跑酷地圖大日御輿

花費金幣總量超過5萬,開放主城雙料高階商店

更多相關資訊請到主城大廳處檢視

從指令方面研究這個資訊,我們可以想到至少兩種判定玩家是否擁有指定特權的方法:

①建立一個專門記錄消費的計分項,每次玩家成功消費均增加該玩家在這個計分項上的分數。判定玩家是否擁有許可權時都使用test子命令。

②建立一個專門記錄消費的計分項,每次玩家成功消費均增加該玩家在這個計分項上的分數。準備一個重複執行的命令方塊,每隔一段時間(或是在玩家消費完後檢測一遍)給達到條件者新增特殊的tag標籤。判定玩家是否擁有許可權時,就根據該玩家是否擁有指定的標籤來判定。

不管是第一種還是第二種方法,我們都是使用test子命令來判斷玩家的分數是否達到了範圍內。這樣做明顯效率會比較低下,而且不適用於Java113更新後的版本。

而且,在第二種方法中,我們該如何判斷一個玩家是否擁有指定標籤呢?難不成用remove試著刪除一下,看看能否成功並輸出紅石訊號啟用接下來的命令方塊?

這兩個技術問題其實很好解決:使用目標選擇器中的記分板相關引數。

在目標選擇器中,檢測目標在指定計分項上的分數是否滿足條件的引數是score(Java113更新之前)和scores(Java113更新後和基岩版)。

雖然兩者僅僅差一個“s”,但用法大徑相庭。

先來說說Java113更新之前的score引數。這個score引數的用法如下:

scorelt計分項名稱gtlt最大值gt

scorelt計分項名稱gtminlt最小值gt

和許多其他Java113更新前的引數類似(如r和rm,範圍最大值和範圍最小值),score引數也被分成了max和min兩個細分引數。舉個簡單的例子:

giveascorecoin20,scorecoinmin15diamond

這條指令的意思是:給予所有在coin計分項上的分數滿足大於等於15並小於等於20的線上玩家一顆鑽石。如果執行這條指令時,當前伺服器有五個線上玩家:老張(coin為1)、老李(coin為15)、老黃(coin為18)、老劉(coin為20)和老鄧(coin為27)。那麼在執行這條指令之後,老李、老黃還有老劉將會得到一顆鑽石,但是老鄧和老張不會得到。

現在你明白如何使用score引數了吧?

再來說說scores引數。該引數和Java113更新後的許多引數類似(如distance,採用典型的“兩點區間法”以確定值範圍)。其格式如下:

scores計分項A值或範圍,計分項B值或範圍

其中的“值或範圍”,我們已經很熟悉了:

0——大於等於5

2——小於等於2

02——大於等於5且小於等於2

1——等於1

舉個例子:

tagascoresgamepoint150,killnumber20,dienumber03addgold

這條指令的作用是:尋找gamepoint分數大於等於150,killnumber分數大於等於20且dienumber的分數大於等於0且小於等於3的所有玩家,給他們新增“gold”標籤。

現在你也會用scores引數了吧?是不是很簡單?

當然,目標選擇器中的記分板相關引數不止這兩個,還有另外兩個引數:

team(隊伍)和tag(標籤)。

這兩個的使用就更簡單了。和type還有name引數類似,它們的格式是:

teamlt隊伍名gt——選取屬於指定隊伍的目標

teamlt隊伍名gt——選取不屬於指定隊伍的目標

taglt標籤gt——選取擁有指定標籤的目標

taglt標籤gt——選取沒有擁有指定標籤的目標

舉個例子:

tpateamyellow,tagskywarplayeretypearmorstand,nameyellowplace,limit1,sortnearest

這條指令的作用是:尋找屬於隊伍yellow且持有skywarplayer標籤的所有玩家,並將他們傳送到距離執行地點最近的叫做yellowplace的盔甲架處。

需要注意一點。在一個目標選擇器中,只能有一個“team指定隊伍”。原因相信你是知道的:一個玩家或非玩家在同一時間同一存檔的情況下最多隻能在一個隊伍中。因此,Minecraft中是不會出現一個玩家同時在兩個隊伍中的情況。如果出現了,那就是Bug(特性)!

team、tag兩個引數和type、name兩個引數類似,但是也只是類似。由於隊伍功能和標籤功能的特殊性,並不是所有實體和玩家必須要屬於一個隊伍或掛著一個標籤。那麼如何選取那些不屬於任何隊伍或者是沒有任何標籤的玩家、實體呢?更進一步的話,如何選取所有有隊伍歸屬或者是有標籤的玩家、實體呢?

其實很簡單。team和tag引數還有兩個特殊格式:

team——選取所有無隊伍歸屬的目標

team——選取所有有隊伍歸屬的目標

tag——選取所有沒有標籤的目標

tag——選取所有有任意標籤的目標

是不是很特殊?我們來嘗試用一用:

spawnpointateam

這條指令的作用是:選取所有無隊伍歸屬的玩家,並將他們的出生點設定在指令執行處。

這就是記分板的所有基礎內容了。本卷也到此結束。

如遇章節錯誤,請點選報錯(無需登陸)

新書推薦

全民遠征:副職也能帶贏全人類 傳奇幽影 惡魔系統之坑坑更有愛 訓練嗎朋友,玩命的那種 方舟日記 林夕煜宸妖夫在上免費閱讀全文 無限入侵,一人一刀滅一界