UU看書

第四十二章 players——管理變數(分數)

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

在上一章,我們瞭解瞭如何管理一個計分項。在一個計分項中存在有多個玩家(或非玩家),每個玩家(或非玩家)都有一個屬於自己的變數(分數)。那麼我們該如何管理這些變數(分數)呢?

這就需要用到scoreboard的players子命令,即scoreboardplayers

scoreboardplayers

作用:控制記分板上計分項的變數(分數)

格式:

scoreboardplayers

addlt目標選擇器gtlt計分項gtlt增加的分數gtNBT(僅Java113之前)——將所選玩家(或非玩家)在指定計分項中的分數增加指定值

removelt目標選擇器gtlt計分項gtlt減少的分數gtNBT(僅Java113之前)——將所選玩家(或非玩家)在指定計分項中的分數減少指定值

setlt目標選擇器gtlt計分項gtlt分數gtNBT(僅Java113之前))——將所選玩家(或非玩家)在指定計分項中的分數設定為指定值

resetlt目標選擇器gt計分項——將所選玩家(或非玩家)在記分板上的全部資料(或指定計分項上的資料)完全清除(注意不是清零,而是清除)。目標選擇器可用代指所有玩家和非玩家。

list目標選擇器——列出所有正在被記分板追蹤的玩家(或非玩家)。如果指定了玩家(或非玩家),那麼將會列出選取的玩家(或非玩家)們在記分板上的所有資料。

getlt目標選擇器gtlt計分項gt——僅Java113及以上版本獲取指定單個玩家(或非玩家)在指定計分項上的分數

testlt目標選擇器gtlt計分項gtlt最小值gtlt最大值gt——僅Java1122及之前和基岩版檢測所選玩家(或非玩家)在指定計分項的分數是否大於等於最小值並且小於等於最大值。最小值和最大值均可使用來代指2147483648(最小值使用)或2147483647(最大值使用或不填)。

operationlt目標選擇器1gtlt運算計分項1gtlt操作gtlt目標選擇器2gtlt運算計分項2gt——將目標選擇器1引數中所選玩家(或非玩家)的指定計分項的分數與目標選擇器2引數中所選玩家(或非玩家)的指定計分項的分數進行一些操作

enablelt目標選擇器gtlt觸發器類計分項gt——僅Java版允許所選玩家(或非玩家)對指定觸發器類計分項使用一次trigger指令。

randomlt目標選擇器gtlt計分項gtlt最小值gtlt最大值gt——僅基岩版將所選玩家(或非玩家)的指定計分項分數隨機設定為設定範圍內的任何整數值。

透過players子命令,我們可以set(設定)、add(新增)、remove(刪除)、list(列出)、get(獲取)、reset(重置)、operation(操作)、test(檢測)、random(隨機)和enable(觸發器)。這些東西的內容很多,我們今天就只研究基本的,也就是上面我們提出的問題:如何管理變數(分數)。

管理變數,就得先有變數,不然管理啥呢?我們知道,一個玩家(或非玩家)被一個計分項計入後最多隻能有一個屬於自己的變數(分數)。而一個計分項建立之初是什麼也沒有計入的,也就是說這個計分項沒有一個變數,空空如也。

為了給這個計分項新增一個變數,也就是計入一個玩家(或非玩家),我們就需要用到add這個子命令:

addlt目標選擇器gtlt計分項gtlt增加的分數gtNBT(僅Java113之前)

增加的分數至少為0。當然,就算為0,這也算是計入該計分項了。

實際上,使用remove、operation和set也可以達到同樣的計入效果。

比如,你要把你自己計入到“金錢”計分項中,就需要:

scoreboardplayersaddremovesets金錢0

如果你將一個還未計入“金錢”計分項的玩家的分數增加5會怎樣?

其實不會怎麼樣。正如正常人的一般思維,剛剛計入計分項的玩家(或非玩家)其分數是從0開始算起。也就是說,給那名玩家新增5金錢實際上會先讓他計入該計分項,此時他的分數為0,然後再將他的分數5變成5。

這裡的“金錢”計分項是作者自己編的,你想要執行上面的例子就得先自己建立一個叫金錢的計分項。

計入之後,我們該如何減少分數呢?這就要用到remove(刪除):

removelt目標選擇器gtlt計分項gtlt減少的分數gtNBT(僅Java113之前)

比如我想要將玩家“張三666”在“金錢”計分項中的分數減少10,這就需要執行:

scoreboardplayersremove張三666金錢10

假設他原本的分數是3。執行該指令過後,他的分數就變為了7。

需要注意。記分板的分數其值是個Int整形類變數,也就是其值的範圍只能是21474836482147483647。如果一個玩家的分數已經是2147483648,你再減去個1,他的分數就會變為2147483647。關於為什麼會這樣,以及Int整形究竟是個什麼,你以後就會了解到。

如果你對此很感興趣,那麼你可以跳到後面135140章嘗試你是否能夠理解。

分數可以增加和減少,當然也可以快速設定為指定的值。這時候就要用到set:

setlt目標選擇器gtlt計分項gtlt分數gtNBT(僅Java113之前)

設定成功後,該變數的數將會變成設定的分數。比如我想要將“張三666”的“金錢”設為2,就可以:

scoreboardplayersset張三666金錢2

你可能注意到了,在本章開頭列出的格式中,還有一個reset(重置)。這個reset可和set沒多大關係,因為reset是重置(更準確的說是清除資料)。其格式如下:

resetlt目標選擇器gt計分項

舉個例子,假設我們執行了下面的指令:

scoreboardplayersreset張三666

你就會驚奇地發現“張三666”的名字從右邊側欄的“金錢排行榜”中消失了。這並不是說他被擠出了該排行榜,或是他的分數被重置為了0,而是他的所有在記分板上的資料全部沒掉並且記分板也不再跟蹤他,直到他重新計入到某個計分項中。

這哪裡是reset啊,這簡直是clear啊!

如果你不信,你可以試試scoreboardlist張三666(列出張三666在記分板上的資料)或scoreboardget張三666(獲取張三666的分數),看看你能不能再次找到他的資料。

這確實太狠了。如果你只想clear掉他在“金錢”計分項中的資料,在“張三666”後面加上“金錢”即可,即:scoreboardplayersreset張三666金錢

(實際上還可以更狠。目標選擇器使用可以代指所有正在被追蹤的目標,也就是說scoreboardplayersreset可以完全清除整個記分板上所有玩家和非玩家的資料)

你現在可以嘗試弄一個你自己的虛擬貨幣用於伺服器中。

這個貨幣的名稱自己想。作者想的是:。

沒錯,名字允許你填等符號。我們就以這個符號為名字舉例子,輸入並執行下面的指令:

scoreboardobjectivesadddummy§a

(Java版:

scoreboardobjectivesadddummy“text“““,“color““yellow“)

你就成功建立了一個叫做的虛擬貨幣!

作者現在沒錢,所以作者我要給自己錢:

scoreboardplayersadds1000000

OK,現在作者有100萬美元了!(當然是遊戲裡)。

現在你可以嘗試做一個記分板商店。我們運用clear指令和scoreboard指令結合即可建成一個收購商店(使用物品換取虛擬幣)。而使用scoreboard和give指令可以建成一個用虛擬幣購買實物的商店。

但是,計分項的分數可以是負數!我們既然要搞虛擬貨幣,就要防止這種負數欠賬的事情發生。

此時,test子命令就派上用場了!

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

新書推薦

NBA:奇蹟締造者 冠軍從和女解說雙排開始 LOL:我真的是職業選手 黑籃,我復刻青峰大輝球技和喬丹 莫瑟的日常 直播抽球星卡 這個海洋領主有點強