首頁 游戲

Minecraft指令手冊

第一百五十六章 村莊與掠奪更新后的自定義交易

Minecraft指令手冊 你好MC 4622 2022-07-26 00:05:14

  在開始本章的主要內容之前,容我先講幾句話。

  看起來我已經有一兩個月沒更新了,但其實這些天來我一直在高強度更新。更新什么呢?以前的章節(jié)。

  為什么我要去更新以前的章節(jié)呢?因為隨著MC版本的更新,以及時間的流逝,加上我當時沒什么寫教程的經驗,以上種種因素導致以前的章節(jié)出現(xiàn)了許多錯誤和疏漏之處,因此我開始進行一次大修,我稱之為『本書第一次大修』。這個大修主要是對本書113章之前的內容進行修改,工程量十分的巨大。但好消息是,截止2022年7月25日,本書已經基本完成了從序言到第九十章的修改。因為改動巨大,所以我強烈推薦各位抽點時間重看一遍,特別是自計分板之后的內容,幾乎每章都有重寫。

  大修預計將會在8月初結束,不出意外的話,屆時我將會重新恢復相對比較高的更新頻率。另外,如果你是在一些盜版網站上閱讀本書,建議你來起點讀書或紅袖添香等正版網站來看,不然盜版網站可不會對之前的章節(jié)進行更新。

  回到正題。

  —————不華麗的分割線—————

  黑夜將至,忘記帶床和羊毛的你,雖然身披下界合金套裝,但源自內心對黑暗的恐懼仍然使你感覺到些許害怕。行走在積雪的樺樹森林中,你想起剛剛開啟這個存檔時,雖然挖三填一度過了危險的夜晚,但仍然一出來就被骷髏射死的窘迫場面。

  低頭看了看手上拿著的海洋探險家地圖,再次抬頭時,你看見前方似乎有一些亮光。你以為這是巖漿湖的亮光,但隨著你的前進,亮光背后的房子冒了出來——前方是一個村莊!興奮的你跑了過去,那房子越來越近。但奇怪的是,這房子后面并沒有任何其他房子,直到你快要到達那里時,才發(fā)現(xiàn)這個房子建在懸崖上,村莊本體其實在懸崖下面。

  一個村民從你旁邊走過——他看起來像是這棟房子的主人。此時你冒出了個點子——趁著村民不注意,把他擠下山崖。這個想法很成功付諸實現(xiàn),然后你就一覺睡到天亮。

  次日清晨,你來到山崖下的村莊,手上拿著剛剛從田里摘的胡蘿卜。突然有一位手中抱著綠寶石的農民興沖沖跑到你的面前。你打開了這個農民的交易界面,他是一位沒有任何經驗的新手農民,提供兩項交易:

  22胡蘿卜→1綠寶石

  15甜菜根→1綠寶石

  你突然來了興趣,想要和這個村民交易億下。很快你就把村莊里所有胡蘿卜給摘了,加上你背包里原有的胡蘿卜,總共215個。你和他進行了5次交易,花費110根胡蘿卜拿到5顆綠寶石,村民也剛好獲得足夠的經驗升到了『學徒』級,并附帶生命恢復效果。

  升到『學徒』級之后,村民新開放了兩個交易:

  6南瓜→1綠寶石

  1綠寶石→4南瓜派

  你先把剩下的胡蘿卜花光,然后拿著得到的9顆綠寶石加上自己原先的3顆綠寶石買了48個南瓜派,這一項交易就沒貨了,村民也成功升級到『老手』級。到了老手后,村民又開放兩個新的交易,且由于好感度的提升,交易開始打折。你繼續(xù)和村民交易,讓他繼續(xù)升級.......十幾分鐘后,村民成功升級到了『大師』級。

  升級到『大師』級別之后,村民的經驗條消失,也就是無法再次升級。你也得到了一堆的交易品和大量的經驗值。將交易品裝入潛影箱后,你繼續(xù)朝著海底神殿的方向進發(fā)。

  如上文所見加上你的經驗,可以得出,在村莊與掠奪更新后,村民的交易系統(tǒng)有這么幾個特點:

 ?、僦付ǖ拇迕衤殬I(yè)具有指定的交易項目。

 ?、谟新殬I(yè)村民具有經驗系統(tǒng)和等級系統(tǒng)。等級分為5級,從低到高分別是『新手、學徒、老手、專家和大師』。村民可以從交易中獲得經驗,經驗可以用來提升自己的等級,每提升一次等級,升級到下一級所花費的經驗值會更多。

  ③每個交易項目都可以用一到兩種物品換取指定的物品。

 ?、芡婕乙材軌驈慕灰字蝎@得一定的經驗。

 ?、萁灰醉椖烤哂写螖?shù)限制,次數(shù)限制達到后將無法使用該交易項目,需要村民前往工作站工作并補貨后,交易項目才能重新開放。

  ⑥每個交易項目的價格都會受到該村民言論以及其他因素的影響,可能會上浮也可能會打折。

  上面這六個特點其實與村民NBT標簽中的這些標簽有關:

  ①VillagerData(復合標簽)

 ?、赩illagerData內的level、Xp和一個交易項目中的xp(均為Int整形)

 ?、垡粋€交易項目中的buy、bugB和sell(均為復合標簽)

  ④一個交易項目中的rewardExp(Byte布爾值)

 ?、軧rain(復合標簽)和一個交易項目中的maxUses(Int整形)

 ?、轌ossips(復合標簽列表)和一個交易項目中的demand、specialPrice和priceMultiplier(前兩者為Int整形,后者為Float單精度浮點數(shù))

  為了在村莊與掠奪更新后也能夠使用NBT自定義交易,我們得先來看看村民職業(yè)方面的改變。

  在1.14版本之前,村民有一級職業(yè)(Profession標簽決定)和二級職業(yè)(Career標簽決定)。而在1.14版本更新后,就沒有什么一級二級之分,所有職業(yè)都有了單獨的命名空間ID,如農民就有了minecraft:farmer。并且由于職業(yè)不再分一級二級,所以在新版本只有一個標簽決定著村民的職業(yè):VillagerData復合標簽下的profession標簽。

  profession標簽的值就是該村民的職業(yè)ID。截止Java1.19版本,原版村民14個職業(yè)的ID分別是:

  minecraft:armorer——盔甲匠

  minecraft:butcher——屠夫

  minecraft:cartographer——制圖師

  minecraft:cleric——牧師

  minecraft:farmer——農民

  minecraft:fisherman——漁夫

  minecraft:fletcher——制箭師

  minecraft:leatherworker——皮匠

  minecraft:librarian——圖書管理員

  minecraft:mason——石匠

  minecraft:nitwit——傻子(這也是職業(yè)?)

  minecraft:shepherd——牧羊人

  minecraft:toolsmith——工具匠

  minecraft:weaponsmith——武器匠

  舉個例子,假設我們要生成一個農民,只需要這樣子:

  /summon villager ~~~{VillagerData:{profession:“minecraft:farmer“}}

  然后游戲就會生成一個沒有任何職業(yè)的村民。等等,怎么不是農民?

  因為我們沒有指定工作站點。村民由于沒有工作站點,所以就變成了無職業(yè)的村民。我們會在待會了解到如何解決這個問題。

  VillagerData內不僅僅有profession標簽用來決定村民職業(yè),還有另外兩個比較重要的標簽:

  level(Int整形)——村民的職業(yè)等級,新手為1級,大師為5級。如果設定的等級高于職業(yè)的最高等級,村民將不會開放新的交易項目。(沒錯,這就等同于1.14更新前的CareerLevel標簽)

  type(字符串)——村民的種類,它指定了這個村民是沙漠村民(minecraft:desert)還是平原村民(minecraft:plains)還是其他類型的村民。

  其中的type標簽不用管,除非你想要給村民弄點兒不一樣的衣服。我們重點看看level標簽。舉個例子:

  /summon villager ~~~{VillagerData:{profession:“minecraft:farmer“,level:5}}

  這將會生成一個大師級別的農民。等等,怎么不變回無職業(yè)了?

  正常情況下,level字段只能由交易改變,也就是說玩家是個關鍵因素。新版本的村民雖然有『工作站沒掉就失業(yè)』的性質,但如果游戲發(fā)現(xiàn)這個村民好像和其他玩家交易過,就不會讓這個村民失業(yè)。在這邊,由于我們改變了level標簽的值,導致游戲認為這個村民已經和玩家交易過了,所以這個村民不會失業(yè)。

  上面這些也是1.14更新后與自定義交易關系相當大的內容,接下來我們來看看同樣也是1.14更新后自定義交易的核心:Offers標簽。

  Offers標簽的內容其實變化并不大,我們在第一百五十四章所講的內容可以完美適配過來,因此這里就不細講那些重復的內容。我們就重點來看看1.14更新后,在交易項目中添加的4個新標簽:

  xp(Int整形)——村民每次交易能從該交易項目中獲取的經驗值

  demand(Int整形)——價格調整因素之一:供需關系

  specialPrice(Int整形)——價格調整因素之二:特惠

  priceMultiplier(Float單精度浮點數(shù))——價格調整因素之三:價格乘數(shù)

  xp標簽我們就不講了,做自定義交易干嘛要管村民升級。我們重點來看看后面三個標簽,這三個標簽十分重要,因為它們關系到一個非常重要的東西:價格

  在村莊與掠奪更新后,每個交易項目的第一個收購項,也就是buy復合標簽所規(guī)定的物品,其數(shù)量,也就是價格,會發(fā)生變化。所以我們有一個專門的公式來計算村民收購的第一個物品的最終數(shù)量,也就是價格的計算公式:

  (此公式更新于2022年12月28日,僅適用于Java版)

  當a≥0且V≥1時

  e=-〔(5A + B + C - D - 5E)× p〕-〔((V-1)×0.0625+0.3)×m〕+f

  y = clamp(〔a×p×m〕+m +e, 1 ,M)

  當a<0且V≥1時

  e=-〔(5A + B + C - D - 5E)× p〕-〔((V-1)×0.0625+0.3)×m〕+f

  y = clamp( m +e, 1 , M )

  當a≥0且V<1時

  e=-〔(5A + B + C - D - 5E)× p〕+f

  y = clamp(〔a×p×m〕+m +e , 1 , M )

  當a<0且V<1時

  e=-〔(5A + B + C - D - 5E)× p〕+f

  y = clamp( m +e , 1 , M )

  參數(shù)列表

  a······該交易項目demand標簽的值

  f······該交易項目specialPrice標簽在玩家打開交易界面之前的值

  p······價格乘數(shù)

  m······原價

  y·······最終價格

  e······該交易項目specialPrice標簽的值

  A······major_positive類言論強度

  B······minor_positive類言論強度

  C······trading類言論強度

  D······minor_negative類言論強度

  E······major_negative類言論強度

  M······村民收購的第一個物品的堆疊上限

  V······玩家的村莊英雄效果等級(V < 1即無村莊英雄效果)

  其中,作者自己定義的六角括號〔〕,代表此括號內的運算在得出結果后會被去除小數(shù)部分,只保留整數(shù)部分。比如〔18.5〕=18、〔-64.12〕=-65、〔0.1〕=0

  上面的clamp(a,b,c)函數(shù),則用來限制a介于b、c之間(b≤c)。比如:

  clamp(34,1,3)=3

  \\ 34超過了最大值3,所以輸出3\\

  clamp(12,8,88)=12

  \\ 12介于8和88之間,所以還是輸出12\\

  clamp(-44,9,73)=9。

  \\-44低于最小值9,所以輸出9\\

  你可能會感到疑惑:唉這個公式怎么和上一章的公式完全不一樣???

  這個問題很有趣。首先,上一章的公式僅僅只考慮了言論對價格的影響。仔細觀察,你也會發(fā)現(xiàn)這里的公式中含有上一章的公式。那這有趣究竟在哪里呢?

  上一章的公式來自Minecraft Wiki。在中文Minecraft Wiki的村民頁面上,還有另一個價格計算公式。而這個公式,對于聲望的計算,是完全不一樣的!

  y = m -〔(5A + B + C - D - 5E)× p〕

  \\僅考慮言論的價格公式\\

  y =〔a×p×m〕+〔p×D〕-〔p×C×10〕+e+m

  a······該交易項目demand標簽的值

  p······價格乘數(shù)

  e······該交易項目specialPrice標簽的值

  m······原價

  C······trading類言論強度

  D······minor_negative類言論強度

  \\ Minecraft Wiki上的計算公式\\

  于是,作者基于這兩個公式,通過一些實驗,總結出了上面的那個計算公式。

  但不管如何,這個錯誤仍是一個較為嚴重的錯誤,因為它已經存在了很長時間,并有許多教程引用了這個公式,影響范圍較大。

  需要注意的是,上述公式都有涉及到言論系統(tǒng),但言論系統(tǒng)目前(2022年12月28日)僅僅存在于Java版中,所以上述公式不一定適用于基巖版。

  PS: 2022年12月4日,Minecraft Wiki的用戶Nickid2018終于將百科的計算公式改了。新的計算公式如下:

  e =聲望影響的降價+村莊英雄效果影響的降價

  y = clamp(m×〔1+a×p〕+e,1,M)

  a······該交易項目demand標簽的值

  p······價格乘數(shù)

  e······該交易項目specialPrice標簽的值

  m······原價

  M······村民收購的第一個物品的堆疊上限

  這個公式與上面作者自己得出的公式相差不大,但仍有一個可能的問題:

  e(specialPrice)的值的計算方式可能有誤

  要說明為什么有這個問題,我們得先了解一下specialPrice的機制。

  當一名玩家打開村民的交易界面時,游戲會計算每個交易項目的實際價格。這時候,游戲會先計算言論和村莊英雄效果的影響,并將它們的值加到每個交易項目的specialPrice標簽中。第二步,游戲才會根據demand等其他標簽,綜合計算出每個交易項目的值。在這個過程中,specialPrice標簽會加到計算的值中。第三步,也就是向玩家展示這些交易項目。最后,當玩家關閉村民的交易界面時,游戲會把每個交易項目的specialPrice標簽清零。

  也就是說,如果要使得交易打折,specialPrice的值必須要為負。

  但是,如果根據Minecraft Wiki的計算方式,specialPrice為負的情況只有一種可能:村民對于玩家具有過多的負面言論。而這是不可能的。

  當然,我們也別過多糾結這個問題,該改正的總會改正,只不過是時間問題。我們更加需要關心的有兩件事情:

  1.我們肯定不希望我們自定義的商品價格被隨意改變,所以我們該怎么辦呢?

  2.specialPrice的性質可以弄出什么效果呢?

  對于第一個問題,我們的解決方法很簡單——仔細觀察上面的公式,我們不難發(fā)現(xiàn)『p價格乘數(shù)』都是一個及其重要的變量。

  既然是『乘數(shù)』,如果我們把這東西改為0,那問題是不是就解決了?

  試一試!當p=0時

  e =-〔(5A + B + C - D - 5E)× 0〕-〔((V-1)×0.0625+0.3)×m〕+f

  e =-〔((V-1)×0.0625+0.3)×m〕+f

  y = clamp(〔a×0×m〕+m -〔((V-1)×0.0625+0.3)×m〕+f, 1 ,M)

  y = clamp(m -〔((V-1)×0.0625+0.3)×m〕+f, 1 ,M)

  不難發(fā)現(xiàn),就算p=0解決了大多數(shù)問題,但村莊英雄效果和specialPrice的原始值仍然會影響到價格。但村莊英雄效果畢竟是很難得到的,specialPrice的原始值又是只能通過命令改變,所以總體上來說影響很小。

  總結下來,相比更新之前,我們在新版本中自定義村民交易,還需要注意將價格乘數(shù)priceMultiplier設為0.0(有沒有一種可能,不設置其實也默認是0)。舉個例子:

  /summon villager ~~~{VillagerData:{level:6,profession:“minecraft:farmer“},Offers:{Recipes:[{rewardExp:1,maxUses:150000,buy:{Count:1,id:“minecraft:diamond“},buyB:{Count:10,id:“minecraft:emerald“},sell:{Count:1,id:“minecraft:diamond_sword“,tag:{Enchantments:[{id:“minecraft:sharpness“,lvl:10}]}},priceMultiplier:0.0}]}}

  這個例子是我們第一百五十四章的一個舊版例子的新版寫法,只不過將暮色森林Mod的幻影騎士戰(zhàn)利品換成了普通的鉆石。

  上面這條指令將會生成一個等級為6的農民,并帶有一個『具有15萬次使用次數(shù)、每次交易返回1點經驗值、價格乘數(shù)為0.0、能夠用1鉆石加上10綠寶石買一個附魔有鋒利X的鉆石劍』的交易項目。

  那對于第二個問題呢?

  既然游戲在計算specialPrice時會將specialPrice的初始值加上,那么只要控制得當,在玩家打開交易項目之前就更改specialPrice的值,就能做到自定義折扣。

  另外,修改specialPrice的值并不會影響到村民給正在交易中的玩家的商品價格。

  村莊與掠奪更新后的自定義交易到此就結束了,你現(xiàn)在可以嘗試去自定義一個新版本的村民,看看效果如何。

  附表:新版本村民歷史

  Java

  1.14——對村民進行了大改

  1.14.3/1.14.4——優(yōu)化

  1.15——傻子村民現(xiàn)在沒有徽章,村民會被玩家趕下床

  1.16——優(yōu)化

  1.16.2——工作站點優(yōu)化

  攜帶/基巖版

  1.10.0——大改

  1.11.0——優(yōu)化

  1.13.0——村民現(xiàn)在會在戰(zhàn)勝襲擊后歡呼

  1.16.220——村民現(xiàn)在不再能夠穿墻過去睡覺

  1.18.10——村民現(xiàn)在會發(fā)射煙花火箭慶祝,交易時頭頂不會再出現(xiàn)綠寶石圖標

  1.18.30——優(yōu)化

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進入下一章  按 “空格鍵” 向下滾動
目錄
目錄
設置
設置
書架
加入書架
書頁
返回書頁
指南