建立世界 Boss
世界Boss 有時也被稱為區域型 Boss(Regional Boss)。
它們是什麼?
世界Boss 是設定為在特定位置、以特定延遲生成的自訂 Boss。這些也是在地城中使用的 Boss。不過在本章節中,我們會特別討論製作用於地城之外的世界Boss。
它們的用途是什麼?
世界Boss 讓玩家能夠面對一個固定的挑戰,同時知道戰利品會很豐厚。
我需要什麼才能製作一個世界 Boss?
- 一個地點。建議設置一個 Boss 房間,由於 Minecraft 的仇恨範圍,半徑約 15 格(直徑 30 格)為佳。此外,請確保地形透過 WorldGuard 區域受到保護(這樣玩家就不能建造陷阱),並確保地形無法被利用於戰鬥。
- 一個重生時間。重生計時器至關重要。我不建議設定少於 30 分鐘的重生計時器,否則 Boss 的重生就不太像是一個事件了。1 小時是相當不錯的時間,但你也可能會想讓 Boss 每天重生一次,甚至每週重生一次。
- 一個逃脫時間。重生時間越長,逃脫時間就應該越長。同時也要考量到逃脫時間應該夠長,讓玩家能夠從容地挑戰 Boss。如果你不想讓玩家以自殺式攻擊把 Boss 磨死,逃脫計時器就很重要。這並非強制,如果你想製作大規模的、長達一週重生的 Boss,甚至不建議使用。
- 一個自訂 Boss。世界Boss 其實就是具有自訂生成規則的自訂 Boss。請務必選擇對團隊規模戰鬥相容性良好的 powers。
- 有趣的戰利品。世界Boss 的最大吸引力,除了挑戰本身之外,就是戰利品。請確保玩家能從中獲得他們在其他地方根本無法取得的東西。
- 一個主題。一個優秀的區域型 Boss 應該要有主題,搭配符合主題的地點與符合主題的戰利品。
世界 Boss 的自訂 Boss 設定選項
這些設定會加入到一般的自訂 Boss 設定檔中。關於這些設定的詳盡 Wiki 頁面可在此處找到。
isRegionalBoss
設定該 Boss 是否為區域型 Boss。區域型 Boss 是世界Boss 的另一個名稱,因此你會想把它設定為 true。
| 鍵 | 值 | 預設值 |
|---|---|---|
isRegionalBoss | 布林值 | false |
範例
isRegionalBoss: true
spawnLocations
生成位置應在遊戲內使用 /em place boss <filename.yml> 指令來設定。
載入含有 isRegionalBoss: true 的 Boss 設定後,由擁有 elitemobs.place.admin 的玩家執行。每次使用都會為同一個 Boss 新增一個放置位置。指令將位置置於方塊中心,再向上尋找可通行的地方。請確認空間足以容納 Boss。
雖然可以手動從設定檔中加入位置,但我不建議嘗試這麼做,因為實在太容易出錯了。
| 鍵 | 值 | 預設值 |
|---|---|---|
spawnLocations | 字串列表 | 無 |
範例
設定檔中的位置(適用於進階使用者)。區域型 Boss 的設定檔會將該區域型 Boss 的所有實例存放在單一檔案中,方式是儲存多個生成位置以及重生計時器。
實際上,這表示這個條目:
spawnLocations:
- elitemobs_sewer_maze,-70.17178578884845,168.2,-173.17112099568718,-271.24023,64.19999:1610710903931
- elitemobs_sewer_maze,-135.02262355317436,168.2,-153.28849346821508,-98.53906,60.750263:1609026066482
- elitemobs_sewer_maze,-70.43846307626053,168.2,-174.13499832314378,-271.24023,64.19999:1610710886530
- elitemobs_sewer_maze,-130.39762674971664,168.2,-171.67396911490718,-47.532227,51.900173:1609026066482
- elitemobs_sewer_maze,-117.12782160766056,162.2,-166.40989416757444,-71.37402,-1.4997427:1610710974882
- elitemobs_sewer_maze,-105.13138759611667,168.2,-169.85898023126538,-124.34766,41.24988:1610710945331
- elitemobs_sewer_maze,-106.21847515732084,169.2,-152.3609257554766,-170.86523,21.450315:1610537606222
包含 7 個不同的區域型 Boss,位於不同位置,並具有不同的重生計時器。
讓我們來逐一拆解細節,看看第一個區域型 Boss:
- elitemobs_sewer_maze,-70.17178578884845,168.2,-173.17112099568718,-271.24023,64.19999:1610710903931
格式為 world,x,y,z,yaw,pitch:unixTimeStamp。此 Boss 在 elitemobs_sewer_maze 世界生成,x = -70.17178578884845,y = 168.2,z = -173.17112099568718,yaw = -271.24023,pitch = 64.19999。
時間戳記以 Unix 紀元以來的毫秒數儲存重生期限,重新啟動後仍保留。查看時請使用支援毫秒的轉換工具。
若要移除儲存的期限,請先停止伺服器,再刪除含冒號的 :unixTimeStamp 後綴。條目變成 world,x,y,z,yaw,pitch。執行中的外掛會定期儲存放置資訊,可能覆蓋手動編輯。沒有期限的 Boss 會在世界與區塊允許生成時還原,不發送生成公告。
spawnCooldown
設定死亡或逾時後到下一次生成嘗試的間隔,以分鐘計。0 安排立即嘗試,負數停用排程重生。世界和區塊必須可用,才會出現實體。巡邏 Boss 還需要處於會更新實體的位置。
注意:建議大型 Boss 使用較長的重生時間!
| 鍵 | 值 | 預設值 |
|---|---|---|
spawnCooldown | 整數 | 0 |
範例
spawnCooldown: 20
timeout
設定從生成到逃脫的時間,以分鐘計,而非從戰鬥開始計時。小於 1 時停用。區域 Boss 在區塊、世界載入或伺服器重新啟動後還原時,會重新開始完整計時,不儲存絕對期限。階段切換保留目前遭遇戰的計時器。
注意:這應該夠長,讓玩家能夠從容地完成戰鬥。
| 鍵 | 值 | 預設值 |
|---|---|---|
timeout | 整數 | 0 |
範例
timeout: 60
設定 Boss 在 60 分鐘後若未被擊敗就逃脫。
leashRadius
設定放置位置周圍的返回邊界。使用原生尋路時,相容的生物在半徑的一半開始柔性返回,強制返回使用完整半徑。如果無法抵達目的地,Boss 可能被傳送。終界龍不使用這些原生返回目標。沒有原生尋路時,每 3 秒檢查並送回超出完整半徑的 Boss;這個替代方式只適用於至少為 1 的半徑。原生返回完成時,只有在 MobCombatSettings.yml 中啟用 regenerateCustomBossHealthOnCombatEnd(預設為 true)的情況下,Boss 才會回復至滿血。
注意:請盡量避免製作需要短於 20 格牽引(leash)的戰鬥區域,因為這會讓戰鬥體驗變差。
| 鍵 | 值 | 預設值 |
|---|---|---|
leashRadius | 雙精度浮點數 | 0(停用) |
範例
leashRadius: 30
escapeMessage
設定 Boss 因逾時逃脫時,發送給其所在世界玩家的訊息。需要非空訊息及至少為 1 的 announcementPriority。優先級為 3 或以上時,也透過已設定的 Discord 整合發送。逃脫會移除 Boss 並開始重生等待;若 removeAfterDeath: true,則永久刪除該放置位置。
| 鍵 | 值 | 預設值 |
|---|---|---|
escapeMessage | 字串 | 無 |
範例
escapeMessage: "&cThe World Boss has escaped!"
announcementPriority
控制公告與玩家追蹤資格。必須設定訊息。追蹤也需要 MobCombatSettings.yml 的 showCustomBossLocation;locationMessage 為選填。
| 等級 | 行為 |
|---|---|
0 | 無生成、逃脫公告或追蹤;已設定的死亡訊息仍可能發送給攻擊者 |
1 | 已設定的生成、死亡、逃脫訊息,以及啟用後的 /em 追蹤 |
2 | 與第 1 級完全相同(沒有額外行為) |
3 | 第 1 級 + Discord 通知(若已設定) |
生成公告遵循 events.yml 的 announcementBroadcastWorldOnly。正優先級的死亡公告發送至全服,且需要 MobCombatSettings.yml 中的 doCustomEliteMobsDeathMessages。逃脫公告僅發往 Boss 所在世界。還原的 Boss 可以被追蹤而不重複生成公告。請明確設定優先級;新增訊息不會自動改變預設值 0。
| 鍵 | 值 | 預設值 |
|---|---|---|
announcementPriority | 整數 | 0 |
範例
announcementPriority: 3
設定 Boss 在聊天欄與 Discord 中公告,並允許玩家追蹤它。
isPersistent
保存 Boss 以便在區塊卸載後還原。卸載期間會移除實際實體,在相關區塊載入時還原。這不會保持區塊載入,也不會讓 Boss 繼續戰鬥。
已放置的區域 Boss 會透過自身生命週期啟用持久化,不依賴一般自訂 Boss 的這項設定。
注意:太多持久性 Boss(數百個)可能會導致效能問題。
| 鍵 | 值 | 預設值 |
|---|---|---|
isPersistent | 布林值 | false |
範例
isPersistent: true
removeAfterDeath
決定世界Boss 在被擊敗後是否永久移除。對於一次性的事件 Boss 或不應重生的特殊遭遇戰很有用。
預設的 false 會在死亡或逾時後安排等待 spawnCooldown 再生成,負數則不安排。
設為 true 時,死亡或逾時都會從生成位置清單永久刪除該 Boss 的放置紀錄。
| 鍵 | 值 | 預設值 |
|---|---|---|
removeAfterDeath | 布林值 | false |
範例
removeAfterDeath: true
過渡方塊(Transitive Blocks)
過渡方塊透過 onSpawnBlockStates 和 onRemoveBlockStates 設定,分別儲存下文所述 ON_SPAWN 和 ON_REMOVE 狀態的方塊變更。
這就是你能讓 Boss 開啟或關閉門/區域的方式,如果搭配階段型 Boss 使用,甚至能在戰鬥中改造競技場!
| 鍵 | 值 | 預設值 |
|---|---|---|
onSpawnBlockStates | 參閱詳細說明 | 無 |
| 鍵 | 值 | 預設值 |
|---|---|---|
onRemoveBlockStates | 參閱詳細說明 | 無 |
詳細說明
所有方塊都是相對於生成位置的。在開始設定任何方塊之前,請確保你已確定最終的生成位置。
編輯器需要由擁有 elitemobs.transitiveblocks 的玩家使用。記錄時只放置一個該區域 Boss;同一設定有多個放置位置時會被拒絕。階段設定可使用所屬的區域 Boss。儲存的是方塊資料,不含容器物品或其他方塊實體內容,也不會隨 Boss 的 yaw 旋轉。
如果你已經製作了一個大型的過渡方塊區域,但現在需要移動 Boss,又不想重做過渡方塊,那麼你可以使用 EliteScript 的傳送(Teleport)動作,在 Boss 生成後將它移動到正確的位置。但請記住,你必須相應地調整你的牽引(leash)。
由於設定方塊的複雜性,不建議你手動進行。你應該使用以下指令來完成:
- /em transitiveBlocks register
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks edit
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks registerArea
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks editArea
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks cancel
讓我們來逐一拆解。
/em transitiveBlocks register <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
執行一次開始新的 ON_SPAWN 或 ON_REMOVE 選取,再次執行以儲存。新註冊會取代該狀態原有的清單。開始其他檔案或狀態前,請先完成或取消目前選取;選取期間執行另一個有效的註冊或編輯指令,會提交目前工作階段。
ON_SPAWN 在生成或重生時套用儲存的方塊。ON_REMOVE 在死亡、擊殺指令,以及進入下一階段、取代方塊設定之前套用。逾時、滿血造成的階段重設、重新載入與關服不會套用擊敗後的狀態。
記錄時右鍵點擊方塊,儲存其目前狀態;左鍵則在該位置儲存空氣。這些點擊會被取消,因此只選取狀態,不會放置或破壞方塊。每個位置只會儲存一次:用另一個按鍵點擊已儲存的位置,會將它從選取中移除。在 Boss 所在世界以外的點擊會被拒絕並顯示訊息。再次執行指令以儲存。
/em transitiveBlocks edit <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
如果你想修改已設定的方塊,可以使用此指令。運作方式與 /em transitiveBlocks register <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE> 非常類似。
/em transitiveBlocks registerArea <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
和 /em transitiveBlocks register <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE> 一樣,這讓你能夠註冊方塊,但它允許透過選取兩個對角頂點(與 worldedit/worldguard 的區域選取相同)來選取方塊,而非逐一選取方塊。
以左鍵選一個角點,右鍵選對角點,再次執行指令儲存區域。兩個角點都必須位於 Boss 所在世界,而且儲存時你必須站在該世界中。否則 EliteMobs 會拒絕儲存並顯示訊息,同時保留你的選取。區域中的方塊會取代同一位置上已選取的方塊。
config.yml 的 defaultTransitiveBlockLimiter 預設為 500,但目前只發出警告,仍會儲存過大的選取範圍。請自行保持範圍小。套用狀態會載入目標區塊,並在同一 tick 修改全部方塊,大範圍可能造成卡頓。
/em transitiveBlocks editArea <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
載入已儲存的狀態,再加入選取區域的目前方塊狀態。角點選取與大小警告和 registerArea 相同。
/em transitiveBlocks cancel
捨棄尚未儲存的選取。不會還原世界中的實際建築變更,也不會還原已存入 Boss 設定的修改。
設計大型區域 Boss 戰的建議
-
真正思考你的自訂 Boss 上的 powers 如何互補。你不會希望你的 Boss 大部分時間都停在原地,因為它正在施放某個技能,因為那實際上會讓戰鬥變得很簡單。除非你正在設計某種非常特定的東西,否則你也不會希望 Boss 全是遠程攻擊而沒有近戰 powers,或是反過來。試玩測試很重要。
-
設定生命值時考慮上限。 生命值受伺服器目前的
settings.attribute.maxHealth.max限制,通常是 2048。healthMultiplier: 10.0的 Boss 在 33 級達到上限。繼續升級會改變戰鬥計算,卻不增加生命值。組合高倍率與高level前,請參閱 healthMultiplier。 -
傷害 —— 別太多。EliteMobs 預設就已經極度致命,而 powers 往往致命程度呈指數級增長。與其把傷害衝破天際,不如考慮使用 powers 來讓 Boss 打得更痛。
-
漏洞,無處不在。請格外確保地形無法被利用。把 Boss 放在一個封閉的房間裡,以防止人們試圖從遠處狙擊它。箭矢無敵 power 對於許多世界Boss 而言大概極為重要,因為 Minecraft 怪物無法應付從好幾個區塊外被狙擊,所以如果你想允許弓箭攻擊,請確保弓不會被利用。
-
了解外掛。擊敗 EliteMobs 有許多小技巧,例如某些 powers 可以用盾牌格擋來反制,而其他的則應該透過閃避,甚至暫時遠離 Boss 來反制。你越了解 powers 如何運作以及如何反制,你所製作的 Boss 就會越好。
完整世界 Boss 範例
此範例組合主要設定。請替換世界與座標,並確認列出的 powers 與自訂物品已啟用。競技場的方塊變更應在遊戲內記錄;這裡的單一方塊只示範格式。
isEnabled: true
entityType: ZOMBIE
name: "&cThe Zombie King"
level: 30
healthMultiplier: 10.0
damageMultiplier: 2.0
# World Boss specific settings
isRegionalBoss: true
isPersistent: true
# Spawn settings
spawnLocations:
- world,100,64,100,0,0
spawnCooldown: 60
# Combat boundaries
leashRadius: 30
timeout: 20
# Messages and announcements
spawnMessage: "&cThe Zombie King has risen!"
deathMessage: "&aThe Zombie King has been defeated by $players!"
escapeMessage: "&eThe Zombie King has escaped..."
announcementPriority: 2
# Arena modification
onSpawnBlockStates:
- 0,0,0/minecraft:barrier
onRemoveBlockStates:
- 0,0,0/minecraft:air
# Boss features
powers:
- zombie_friends.lua
- ground_pound.lua
uniqueLootList:
- filename=magmaguys_toothpick.yml:chance=1.0
這個 Boss 會:
- 死亡或逾時 60 分鐘後安排生成,世界與區塊可用時出現
- 若未被擊敗,則從生成或還原起 20 分鐘後逃脫
- 在聊天欄中公告生成/死亡/逃脫,並允許玩家追蹤
- 在區塊重新載入時還原
- 在生成與死亡時改造競技場方塊
- 在被擊敗時掉落獨特戰利品
在預設上限下,範例的 30 級與 healthMultiplier: 10.0 對應 1400 生命值,33 級達到 2048。基礎生命值在乘倍率前先限制一次,乘後的結果再次限制。因此,基礎生命值已達上限後,降低倍率也無法恢復隨等級成長的生命值。請參閱 healthMultiplier。