首頁(yè) 游戲

Minecraft指令手冊(cè)

第一百零六章 屬性修飾符 下-最終倍乘和/attribute指令

Minecraft指令手冊(cè) 你好MC 2211 2020-05-08 20:19:05

  在上一章,我們了解了Operation的『屬性增量』和『倍率增量』計(jì)算模式,還有一個(gè)『最終倍乘』。那什么是最終倍乘呢?

  『最終倍乘』是這樣計(jì)算的:

  R=C?×(1+A?)×(1+A?)×......×(1+A?)

  C?=C?×(1+a?+a?+.....+a?)

  C?=C+m?+m?+.....+m?

  R······最終結(jié)果

  A??...?······計(jì)算模式為『最終倍乘』的修飾符的Amount值

  a??...?······計(jì)算模式為『倍率增量』的修飾符的Amount值

  m??...?······計(jì)算模式為『屬性增量』的修飾符的Amount值

  C?······『倍率增量』計(jì)算結(jié)果

  C?······『屬性增量』計(jì)算結(jié)果

  舉個(gè)例子,假設(shè)現(xiàn)在有這些修飾符:

  {AttributeName:'generic.max_health',Amount:5.0,Operation:0}

  {AttributeName:'generic.max_health',Amount:3.0,Operation:0}

  {AttributeName:'generic.max_health',Amount:2.0,Operation:1}

  {AttributeName:'generic.max_health',Amount:1.5,Operation:1}

  {AttributeName:'generic.max_health',Amount:1.1,Operation:2}

  {AttributeName:'generic.max_health',Amount:0.1,Operation:2}

  當(dāng)這些修飾符在一個(gè)玩家身上全部生效,且該名玩家的最大生命值僅僅受這些修飾符影響時(shí),這名玩家的生命值上限將會(huì)從20.0點(diǎn)變成291.06點(diǎn)。這個(gè)『291.06』是這樣得出來(lái)的:

  [(20+5+3)×(1+2+1.5)]×(1+1.1)×(1+0.1)

  ↓先計(jì)算『屬性增量』↓

  [28×(1+2+1.5)]×(1+1.1)×(1+0.1)

  ↓再計(jì)算『倍率增量』↓

  126×(1+1.1)×(1+0.1)

  ↓最后計(jì)算『最終倍乘』↓

  291.06

  這就是『最終倍乘』,到這Operation的全部?jī)?nèi)容也就講完了。

  但這不代表本章到此結(jié)束。還記得上一章提到的/attribute指令嗎?讓我們來(lái)了解下這指令如何使用:

  /attribute

  作用:可以更改和讀取屬性

  存在版本:Java1.16-今

  需要權(quán)限等級(jí):Java-2

  需要作弊:是

  格式:

  /attribute <目標(biāo)玩家/生物><屬性>[base] get [乘數(shù)]

  \\返回指定屬性的『總值』。如果指定了base,則返回『基值』\\

  /attribute <目標(biāo)玩家/生物><屬性> base set <值>

  \\將指定屬性的『基值』設(shè)定為指定的值\\

  /attribute <目標(biāo)玩家/生物><屬性> modifier add <UUID><名字><值>(add|multiply|multiply_base)

  \\如果沒(méi)有UUID相同的屬性修飾符,就給指定屬性添加上屬性修飾符\\

  /attribute <目標(biāo)玩家/生物><屬性> modifier remove <UUID>

  \\移除指定屬性的具有指定UUID的修飾符\\

  /attribute <目標(biāo)玩家/生物><屬性> modifier value get <UUID>[乘數(shù)]

  \\返回具有指定UUID的屬性修飾符的值\\

  使用這條指令可以很方便地修改實(shí)體的屬性,以及為實(shí)體添加上屬性修飾符。只不過(guò)由于/attribute指令是直接給實(shí)體添加上修飾符,沒(méi)有物品作為載體,所以在這邊添加的修飾符無(wú)需指定『欄位』參數(shù)。

  讓我們來(lái)試一試,直接修改屬性的值。比如,把我們的生命值上限改成40點(diǎn):

  /attribute @s generic.max_health base set 40.0

  →實(shí)體xxx的屬性最大生命值的基值已設(shè)置為40.0

  很好,這下子我們就有40點(diǎn)生命值了。只不過(guò)要注意,玩家的屬性會(huì)在死亡后重置,也就是說(shuō)如果你死一次,最大生命值就會(huì)變回20點(diǎn)。

  get子命令可以獲得我們屬性的總值或基值??傊狄簿褪墙?jīng)過(guò)修飾符修飾后最終的值,基值也就是沒(méi)有修飾過(guò)的初始值。比如:

  /attribute @s generic.max_health base get

  由于上面我們已經(jīng)把基值改成了40.0,因此這將會(huì)返回:

  →實(shí)體xxx的屬性最大生命值的基值為40.0

  等等,這個(gè)『乘數(shù)』參數(shù)有什么用?讓我們?cè)囈辉嚕?p>  /attribute @s generic.max_health base get 2.0

  →實(shí)體xxx的屬性最大生命值的基值為40.0

  不難發(fā)現(xiàn),這個(gè)乘數(shù)參數(shù)沒(méi)有任何的用處.......呃,其實(shí)有用的。

  用在哪呢?execute的store子命令:

 ?、?execute store result score @s health_max run attribute @s generic.max_health base get

 ?、?execute store result score @s health_max run attribute @s generic.max_health base get 2.0

  指令①的返回值為正常的40.0,也就是將我們自己在health_max計(jì)分項(xiàng)上的值改為40。指令②雖然給我們的消息是40.0,但實(shí)際返回的是80.0,計(jì)分項(xiàng)上的分?jǐn)?shù)也會(huì)改為80。

  所以,『乘數(shù)』參數(shù)并不是沒(méi)有用,而是它的用處在于影響指令的返回值。

  修改屬性還是很簡(jiǎn)單的。那使用/attribute給實(shí)體添加修飾符呢?讓我們?cè)僭囈辉嚕?p>  /attribute @s generic.max_health modifier add 1-1-1-1-1 A 1.0 add

  →為實(shí)體xxx的屬性最大生命值添加了修飾符00000001-0001-0001-0001-000000000001

  在上面的指令中,使用了『modifier』子命令的『add』子命令來(lái)添加一個(gè)修飾符,參數(shù)『1-1-1-1-1』指定了該修飾符的UUID,『A』指定了該修飾符的名稱,『1.0』指定了該修飾符的值,『add』指定了該修飾符的計(jì)算模式是『屬性增量』。其中得講一下的就是這個(gè)UUID參數(shù)。

  在這邊的UUID參數(shù),填寫(xiě)的是『帶連字符的十六進(jìn)制UUID』。這種形式的UUID很常見(jiàn),它長(zhǎng)下面這樣:

  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  詳細(xì)內(nèi)容會(huì)在第一百一十章講到,在這邊你只需要把這東西當(dāng)做填寫(xiě)五個(gè)用連字符『-』連在一起的整數(shù)即可:

  1-1-1-1-1

  上面的『add』參數(shù)所在的位置,也可以填寫(xiě)multiply_base(倍率增量)和multiply(最終倍乘),來(lái)改變運(yùn)算模式。

  現(xiàn)在,讓我們看看的生命值上限是不是高達(dá)41.0:

  /attribute @s generic.max_health base get

  →實(shí)體xxx的屬性最大生命值的基值為40.0

 ???怎么還是40.0?啊,是用錯(cuò)了,這獲取到的是基值,應(yīng)該把『base』參數(shù)去掉:

  /attribute @s generic.max_health get

  →實(shí)體xxx的屬性最大生命值的值為41.0

  很好,所以你現(xiàn)在會(huì)用/attribute給實(shí)體添加屬性修飾符了嗎?

  remove和value get兩個(gè)子命令的使用很簡(jiǎn)單,讓我們?cè)囈辉嚕?p>  /attribute @s minecraft:generic.max_health modifier value get 1-1-1-1-1 2.0

  →實(shí)體xxx的屬性最大生命值中修飾符00000001-0001-0001-0001-000000000001值為1.0

  上面這條指令會(huì)返回這個(gè)修飾符的值。并且由于指定了乘數(shù)為『2.0』,這條指令的返回值還會(huì)是『2.0』(1.0×2.0)。

  /attribute @s minecraft:generic.max_health modifier remove 1-1-1-1-1

  →為實(shí)體xxx的屬性最大生命值移除了修飾符00000001-0001-0001-0001-000000000001

  這樣子我們就刪掉了剛剛給我們自己添加的屬性修飾符,生命值上限回到了40.0。

  本章到此為止。

  附錄:/attribute歷史

  Java

  1.16——加入了/attribute

按 “鍵盤(pán)左鍵←” 返回上一章  按 “鍵盤(pán)右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書(shū)架
加入書(shū)架
書(shū)頁(yè)
返回書(shū)頁(yè)
指南