第一百五十七章 初識(shí)NPC
2016年8月29日,Mojang發(fā)布了攜帶版Alpha 0.16.0 build 1。在這個(gè)版本中,首次出現(xiàn)了一種新的實(shí)體——NPC(Non-Player Character非玩家角色)。這種實(shí)體具有一些村民的特性,比如胸前粘在一起的手和與村民一樣的音效。但它們的外觀相當(dāng)不同,甚至還有非人哉的外觀。
在隨后的數(shù)次更新中,NPC逐漸擁有了與玩家對(duì)話、讓玩家選擇的能力。但這時(shí)候,NPC仍只能在教育版或打開(kāi)了教育版模式的基巖版中發(fā)揮作用,這就使得它的使用受到了很大的限制。直到那個(gè)改變了整個(gè)Minecraft基巖版開(kāi)發(fā)界的版本——
Minecraft:基巖版 1.16
由于GameTest(游戲測(cè)試)框架的引入、2018版腳本的放棄支持、一堆新指令的加入等等重大更改,可以肯定,基巖版1.16版本稱得上是近些年來(lái)基巖版最重大的轉(zhuǎn)折點(diǎn)。在之前你應(yīng)該也已經(jīng)注意到,許多新奇的基巖版指令往往就是在1.16版本加入。NPC雖然不是指令,但由于它和指令高度的關(guān)聯(lián)性,因此也不例外。
1.16.0版本更新后,NPC終于能夠獨(dú)自在基巖版中使用而不需要開(kāi)啟教育版模式。并且隨著官方加大力度更新GameTest框架,NPC可能將會(huì)在不久的將來(lái)成為基巖版行為包開(kāi)發(fā)的重要一部分。所以,說(shuō)了那么多,那么NPC到底如何生成、有什么用、又如何使用?
生成當(dāng)然是及其簡(jiǎn)單的,你或許已經(jīng)知道該如何生成:
?、偈褂?summon npc——直接使用summon指令生成
?、谑褂?give @s spawn_egg 1 51——獲取NPC的刷怪蛋
現(xiàn)在,你應(yīng)該已經(jīng)生成出了一個(gè)NPC。讓我們先觀察一下這個(gè)NPC(圖157-1)。
如無(wú)意外,你應(yīng)該看到的是一位留有黑色長(zhǎng)發(fā)、不知道是男是女、有大鼻子、斗雞眼、穿著土色T-shirt和青色長(zhǎng)褲、頭上飄著一串黃色NPC的人。這就是NPC,或者更準(zhǔn)確的說(shuō),這就是使用了默認(rèn)皮膚的NPC。
NPC有許多皮膚。截止基巖版1.19.51版本,NPC已經(jīng)擁有了多達(dá)60種皮膚。雖然NPC能夠更改皮膚,但這并不意味著我們能夠隨便給NPC換皮膚,NPC可不是玩家。
NPC上方顯示的名稱就是NPC自己的名稱。但NPC的名稱比較特殊——在NPC的NBT里面,NPC的名稱存儲(chǔ)在NameTag標(biāo)簽里面,而并不是CustomName標(biāo)簽里。如果你并沒(méi)有把之前章節(jié)的東西丟掉,你應(yīng)該還記得CustomName標(biāo)簽的作用,也就是用來(lái)存儲(chǔ)實(shí)體的名稱。NPC的名稱存儲(chǔ)在另一個(gè)單獨(dú)的標(biāo)簽內(nèi),就會(huì)引出一件麻煩事——使用重命名刷怪蛋或summon指令的方式都不能改變NPC自己的名稱。只不過(guò)根據(jù)網(wǎng)上一些使用NPC做浮空字的教程來(lái)看,似乎在網(wǎng)易版,NPC的名字就是實(shí)體名字,但作者畢竟不玩網(wǎng)易好久了,自然也就無(wú)從驗(yàn)證。
現(xiàn)在,讓我們打開(kāi)NPC的界面(圖157-2)。
NPC的GUI界面十分簡(jiǎn)單,僅由四個(gè)主要部分組成(順序從上到下):
-名稱輸入框:可以更改NPC的名稱,并且可以使用格式化代碼§。最大可輸入128個(gè)字符,但有效輸入(也就是真正能夠顯示出來(lái)的)只有前32個(gè)字符。
-對(duì)話編輯按鈕:這是一個(gè)按鈕,按下去可以進(jìn)入到另外一個(gè)界面,以編輯NPC與玩家的對(duì)話。
-皮膚選擇欄:可以更改NPC的皮膚,左右的按鈕可以翻頁(yè)。
-高級(jí)設(shè)置按鈕:這也是一個(gè)按鈕,按下去也是可以進(jìn)入到另外一個(gè)界面,在新的界面里可以為NPC添加指令。
需要注意,如果你發(fā)現(xiàn)你一打開(kāi)NPC就只是個(gè)空白的對(duì)話界面,則說(shuō)明你沒(méi)有Worldbuilder(世界管理員)權(quán)限。這個(gè)權(quán)限不等于OP權(quán)限,默認(rèn)情況下創(chuàng)造模式玩家會(huì)自動(dòng)擁有這個(gè)權(quán)限,在開(kāi)啟教育版模式的情況下也可以通過(guò)/ability或/worldbuilder(/wb)指令手動(dòng)賦予??偠灾?,請(qǐng)你先將你的游戲模式調(diào)成創(chuàng)造模式,然后再打開(kāi)NPC。
還需要注意,如果你左鍵(鍵鼠輸入)或點(diǎn)擊了NPC(不是長(zhǎng)按),那么NPC將會(huì)被刪除?,F(xiàn)在由于NPC沒(méi)有被編輯所以沒(méi)什么,但當(dāng)你已經(jīng)弄好時(shí)不小心將它點(diǎn)沒(méi)了,你估計(jì)會(huì)破口大罵Mojang為什么沒(méi)有給Minecraft加入Ctrl+Z。特別是觸控,十分容易誤觸!因此,我建議你勤勞一點(diǎn),指令和對(duì)話先在外面寫(xiě)再?gòu)?fù)制到游戲中。
我們本章就重點(diǎn)來(lái)了解NPC的兩部分:對(duì)話和高級(jí)設(shè)置。
按照順序,讓我們先來(lái)看看對(duì)話。
按下對(duì)話編輯按鈕,我們就進(jìn)入了一個(gè)空白的對(duì)話界面(圖157-3)。
對(duì)話界面主要由兩部分組成:NPC外貌的渲染圖像和對(duì)話框。
由于是編輯模式,所以我們可以在對(duì)話框中直接輸入一些東西。對(duì)話框最大可以輸入1000字符(1.19.51版本作者實(shí)測(cè)),但Minecraft Wiki上卻說(shuō)最大是256字或在少數(shù)情況下是337字,更加離譜的是官方文檔又說(shuō)對(duì)話框有307字符的限制(時(shí)間為2022年12月29日)。所以——實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),這句話永不過(guò)時(shí)。
回到正題,對(duì)話框就像是個(gè)文本編輯器一樣。如果超出它的顯示能力,它的右側(cè)就會(huì)出現(xiàn)滾動(dòng)條,你可以通過(guò)滾動(dòng)對(duì)話框來(lái)繼續(xù)編輯或閱讀。
讓我們嘗試輸入點(diǎn)東西,比如輸入『你好!』,然后關(guān)閉對(duì)話編輯界面。需要注意,你應(yīng)該已經(jīng)注意到右上角有兩個(gè)關(guān)閉按鈕了。上面那個(gè)關(guān)閉按鈕將會(huì)直接關(guān)閉整個(gè)界面,而下面那個(gè)關(guān)閉按鈕僅僅只會(huì)關(guān)閉對(duì)話編輯界面然后返回到最初的編輯界面而已。放心,不管是哪個(gè)按鈕,你在對(duì)話框內(nèi)所寫(xiě)的任何東西都是不會(huì)丟失的,它可是實(shí)時(shí)保存的!
這就是編輯NPC對(duì)話的方式,其實(shí)相當(dāng)簡(jiǎn)單。接下來(lái)讓我們來(lái)看看NPC的高級(jí)設(shè)置。
按下『高級(jí)設(shè)置』按鈕,你就來(lái)到了『高級(jí)NPC設(shè)置』界面(圖157-4)。
這個(gè)界面看起來(lái)特別空,就寫(xiě)著兩句話(單擊此按鈕在NPC對(duì)話框中添加命令??梢酝瑫r(shí)添加多個(gè)命令)和一個(gè)『添加命令』按鈕。那如果點(diǎn)一下按鈕呢?(圖157-5)
在『添加命令』按鈕的上方,原來(lái)的兩行文字消失了,取而代之的是一塊『命令』面板。在這個(gè)面板上,有一個(gè)命令輸入框,輸入框右邊是一個(gè)大大的『+』按鈕,下方是三個(gè)開(kāi)關(guān),從左到右分別是『按鈕模式』、『進(jìn)入時(shí)』和『退出時(shí)』,其中『退出時(shí)』已經(jīng)打開(kāi)。在面板的右上角,還有一個(gè)小型的垃圾桶按鈕。
點(diǎn)擊垃圾桶可以刪除這個(gè)面板以及上面的所有設(shè)置。面板的核心部分——命令輸入框——看起來(lái)和命令方塊的很像。但兩者有兩個(gè)重大區(qū)別。首先,NPC的命令輸入框最大只能輸入1024個(gè)字符,但命令方塊能夠輸入32767個(gè)。其次,NPC的命令輸入框可以換行,每行都可以寫(xiě)一個(gè)指令,執(zhí)行時(shí)會(huì)按照從上到下的順序執(zhí)行,而命令方塊不能換行且只能寫(xiě)入一條指令。
輸入框右邊巨大的『+』,點(diǎn)擊它可以放大輸入框。但這輸入框目前實(shí)測(cè)有一個(gè)問(wèn)題——雖然上限是1024,但寫(xiě)的內(nèi)容超出了界面之后竟然就無(wú)法往下滑,僅僅只顯示個(gè)省略號(hào)。
下方的三個(gè)按鈕,用途是設(shè)置上面的命令會(huì)在什么情況下觸發(fā)運(yùn)行。默認(rèn)是『退出時(shí)』,即在退出對(duì)話界面時(shí)會(huì)觸發(fā)運(yùn)行。需要注意,還記得剛才提到退出界面有兩個(gè)關(guān)閉按鈕嗎?如果你點(diǎn)擊下面的關(guān)閉按鈕來(lái)退出,那么指令會(huì)正常運(yùn)行(除非你處于編輯模式);如果你點(diǎn)擊上面的按鈕退出,那么指令反而不會(huì)運(yùn)行(BugJump正常在線)(1.19.51版本實(shí)測(cè))。
我們可以將指令的觸發(fā)方式改成『進(jìn)入時(shí)』或『按鈕模式』?!哼M(jìn)入時(shí)』,也就是玩家一打開(kāi)NPC對(duì)話界面,就會(huì)觸發(fā)指令運(yùn)行,除非此時(shí)你處于編輯模式?!喊粹o模式』是一個(gè)比較特殊的觸發(fā)方式,在你選擇了這個(gè)模式之后,在三個(gè)按鈕下方還會(huì)出現(xiàn)一個(gè)文本輸入框,在這里你可以輸入按鈕顯示的文本。這個(gè)文本輸入框可以輸入至多128個(gè)字符,但只有前16個(gè)字符才會(huì)真正有效顯示出來(lái)。當(dāng)你添加了觸發(fā)方式為『按鈕模式』的指令后,再打開(kāi)對(duì)話界面,在『NPC的渲染圖』和『對(duì)話框』下面將會(huì)出現(xiàn)一些按鈕,上面顯示著那些你自定義的文本(如果你啥也沒(méi)寫(xiě),按鈕將不會(huì)顯示任何文本)。點(diǎn)擊這些按鈕將會(huì)運(yùn)行相應(yīng)的指令,并且在指令運(yùn)行完后對(duì)話窗口將自動(dòng)關(guān)閉,如果此時(shí)還有設(shè)置退出時(shí)執(zhí)行的指令,那這些指令也將會(huì)執(zhí)行。
有趣的是,即使是在編輯模式下,你點(diǎn)擊那些按鈕,『按鈕模式』的指令和『退出時(shí)』的指令(如果有)也能照常運(yùn)行,這就省去了手動(dòng)更改游戲模式的麻煩。
上面說(shuō)到命令輸入框可以換行,每行可以寫(xiě)一個(gè)指令,運(yùn)行時(shí)從上到下運(yùn)行。這時(shí)候可能就有問(wèn)題了——如果有一行指令寫(xiě)錯(cuò)了會(huì)怎樣?
答案是不會(huì)怎樣,游戲會(huì)直接跳過(guò)這一行指令繼續(xù)執(zhí)行下去,直到?jīng)]有指令可以執(zhí)行。舉個(gè)栗子:
give @initiator diamond 1 0
tellraw @initiator {“rawtext“:[{“text“:“§a您獲得了一顆鉆石!§r“}]}
WTF?!
say§e @initiator§r獲得了一顆§b鉆石§r!
當(dāng)上面這些指令被運(yùn)行時(shí),你的聊天欄將會(huì)顯示:
您已被給予鉆石*1
您獲得了一顆鉆石!
[NPC]你的游戲名獲得了一顆鉆石!
NPC在運(yùn)行到『WTF?!』一行,并沒(méi)有因?yàn)椤篧TF?!』是錯(cuò)誤的指令而停止執(zhí)行,反而是連錯(cuò)誤信息都不放一個(gè)就繼續(xù)執(zhí)行下去。
你應(yīng)該注意到了,在上面的指令中,出現(xiàn)了一個(gè)奇怪的目標(biāo)選擇器:@initiator
什么是『@initiator』?它指代了什么東西?
讓我們回想一下第四章『目標(biāo)選擇器』的內(nèi)容,或許你能想起來(lái)在第四章曾講到:
『@initiator——代指正在與該NPC交互的玩家[僅基巖版],不管這名玩家是否在交互時(shí)被殺死』
@initiator指代的就是正在和運(yùn)行指令的NPC交互的玩家。這或許是目前最難記下來(lái)的目標(biāo)選擇器變量了吧。
回到這個(gè)『命令面板』上來(lái)?!好蠲姘濉徊⒉荒軣o(wú)限制添加,一個(gè)NPC最多就只能添加6個(gè)『命令面板』。但考慮到一個(gè)『命令面板』就可以放下來(lái)許多條命令,實(shí)際上沒(méi)什么影響。
現(xiàn)在,我們已經(jīng)知道了如何獲得和使用NPC。但是,如果我們要把NPC投入實(shí)踐,我們就不得不面對(duì)一個(gè)問(wèn)題:NPC會(huì)不會(huì)被擊殺?
這個(gè)問(wèn)題的答案肯定是能的,你只需要用一些方法將NPC推下虛空(它們還是會(huì)受重力影響的),然后NPC就會(huì)死亡。
我們需要對(duì)這個(gè)問(wèn)題作出一些限制,也就是:NPC能否通過(guò)正常手段擊殺?
這個(gè)問(wèn)題的答案是『不能』。NPC可以免疫幾乎一切的傷害,包括——摔落、爆炸、生物攻擊、玩家攻擊、火焰灼燒、冰凍、窒息、藥水效果等等等?;旧?,NPC對(duì)于沒(méi)有權(quán)限的玩家來(lái)說(shuō)不可擊殺。
因此,放心使用NPC,官方出品的怎么可能會(huì)是不保險(xiǎn)的呢?雖然Mojang確實(shí)搞出過(guò)很多不保險(xiǎn)的東西。
這就是本章的全部?jī)?nèi)容,但這僅僅是NPC的冰山一角。我們將在以后了解到更多有關(guān)于NPC的內(nèi)容。
————?dú)v史————
-攜帶版/基巖版
0.16.0——加入又移除了NPC,但沒(méi)有完全移除。
1.0.0——重新加入了NPC。
1.8.0——能夠使用/summon指令生成NPC了。
1.10.0——現(xiàn)在不能使用/summon指令生成NPC,但NPC現(xiàn)在有功能了。
1.12.0——現(xiàn)在NPC又沒(méi)功能了。
1.16.0——現(xiàn)在能夠獲取到NPC的刷怪蛋,也能夠使用/summon指令生成,同時(shí)NPC又有功能了。NPC也不再是只有20點(diǎn)生命值。
1.18/1.19——加入了一堆皮膚
-教育版
1.0——加入了NPC
1.14/1.18——加入了一堆皮膚