跳至主要內容

飛行網路

飛行網路是同一個世界中的一組節點,並以雙向連結相連。有名稱的節點就是目的地。玩家在飛行管理員 NPC 或飛行傳送門挑選目的地後,坐騎會沿著通往該處的最短連結鏈帶著他們飛行。網路儲存在 plugins/EliteMobs/transport_networks/,並使用與運輸路線相同的坐騎和旅程規則。

每次飛行都在玩家提出要求時才建立。EliteMobs 會以節點之間的直線距離,對連結執行 A* 搜尋,坐騎則沿著一條穿過結果中每個節點的平滑曲線前進。你不必為每一組目的地分別製作路線:新增的節點或連結,會被所有因它而縮短的航程用上。

玩家如何飛行​

  1. 玩家在飛行管理員 NPC 上按右鍵,或踏入飛行傳送門。
  2. Flight paths(飛行路線)選單會列出從該 NPC 或傳送門所在節點可抵達的每個目的地,沿連結由近到遠排列,最多 54 個。玩家尚未解鎖的目的地會顯示為灰色染料,並附上其鎖定提示。
  3. 點擊目的地後會開始倒數(預設為 60 tick,也就是 3 秒),倒數結束時,坐騎會在出發點接走玩家。
  4. 坐騎沿路徑飛行,並讓玩家降落在目的地,面向該處的 arrivalYaw。

飛行管理員或傳送門也可以略過選單,直接飛往某一個目的地。請參閱飛行管理員與飛行傳送門。

點擊目的地時,玩家必須待在 NPC 或傳送門 8 格以內,否則點擊不會有任何作用。在 NPC 處,倒數期間任何移動都會取消出發。在傳送門處,只有當玩家離開傳送門範圍(距其中心 1.5 × sizeMultiplier + 2 格)時,倒數才會取消。

潛行無法讓乘客在飛行途中下來。死亡、傳送、切換世界、離開副本實例,或坐騎被移除,都會提前結束飛行。如果飛行連續 5 秒沒有進展,會讓乘客降落在目的地。在副本實例之外飛行途中斷線的乘客,會在下次登入時被安置在目的地;停止或重新載入伺服器時,已登乘的乘客同樣會被安置在目的地。

在遊戲內建立網路​

編輯指令僅供玩家使用,需要 elitemobs.transport.admin。

  1. 站在網路所在的世界,執行 /em transport network edit harbor_flights。尚無檔案的網路會從空白草稿開始。
  2. 站在希望玩家登乘的位置,執行 /em transport node add harbor。
  3. 飛到高處,執行 /em transport node add harbor_sky。沒有列出相鄰節點時,新節點會連結到已選取的節點,並且新節點會成為已選取的節點,因此連續執行 add 指令就能建出一條路徑。
  4. 繼續前往下一個目的地,以同樣方式新增。使用 /em transport node link <a> <b> 連接各分支。
  5. 用 /em transport node destination harbor &6Harbor 為每個目的地命名。
  6. 站在目的地,面向希望玩家抵達時朝向的方向,執行 /em transport node yaw harbor。
  7. 用 /em transport network preview harbor mine 檢查路徑,並用 /em transport network ride harbor mine 試飛。
  8. 執行 /em transport network save。

節點與網路 ID 長度為 1 至 64 個字元,只使用小寫字母、數字、底線或連字號。草稿會把你目前所在的世界記錄為網路的世界;在副本實例內,則改為記錄該副本的藍圖世界。既有的網路只能在它自己的世界中編輯。

編輯指令​

指令操作
/em transport network edit <network>開啟既有網路的草稿,或開始新的網路
/em transport network list列出已載入的網路
/em transport network status顯示草稿的節點數與已選取的節點
/em transport network preview [from] [to]顯示兩個節點之間的路徑;不指定節點時,清除預覽
/em transport network ride <from> <to>不儲存,直接在兩個草稿節點之間飛行
/em transport network generate <first> <second>將兩個節點之間的連結,替換為自動產生、能越過地形的節點
/em transport network undo復原上一次節點或連結的編輯,最多保留 32 次編輯
/em transport network save儲存草稿
/em transport network cancel捨棄草稿
/em transport node add <id> [neighbors...]在你站立處新增節點,連結到列出的節點,否則連結到已選取的節點
/em transport node select [node]選取節點;不指定節點時,選取離你最近的節點
/em transport node link <first> <second>將兩個節點雙向連結
/em transport node unlink <first> <second>移除兩個節點之間的連結
/em transport node move <node>將節點移到你站立處
/em transport node remove <node>移除節點及其連結
/em transport node destination <node> [name]以該選單名稱將節點設為目的地;不指定名稱時,將它變回一般的途經點
/em transport node permission <node> <permission>要求擁有某項權限才能從這個節點出發或飛往這個節點;none 會清除它
/em transport node hint <node> [text]設定節點鎖定時顯示的訊息;不指定文字或使用 none 會清除它
/em transport node yaw <node>將抵達方向設為你目前面對的方向

Tab 補全會為 edit 建議網路 ID,並為節點參數建議草稿的節點 ID。除了 edit、list、save、cancel 與 status 之外,所有指令都要求你位於草稿所在的世界。你一次只能編輯一個網路。草稿會保留在記憶體中,直到你儲存或取消、斷線、其世界卸載,或 EliteMobs 重新載入。

/em transport network ride 會先把你移到第一個節點,並從那裡出發,即使你原本在別處也一樣。它不會檢查節點權限,而目的地可以是任何節點,無論有沒有名稱。

/em transport reload 會連同路線檔案一起重新載入網路檔案。已經在空中的飛行會維持原本的路徑。

編輯檢視​

只有正在編輯的玩家看得到草稿。128 格內的每個節點上方都會顯示它的 ID,目的地名稱則顯示在第二行。已選取節點的標籤為黃色。連結以淺藍色線條繪出。執行 preview 之後,路徑會以綠色繪出。否則,會有一條黃色曲線穿過已選取的節點延伸到你站立處,顯示如果你在那裡新增節點,航線會如何彎折。

產生佔位節點​

兩個相距遙遠的節點之間的直線連結,可能會穿過山丘。/em transport network generate <first> <second> 則會沿著地形建出一條節點鏈:

  • 它會沿著兩個節點之間的連線,每 4 格讀取一次地面高度,讀取範圍寬三格。它只讀取已經生成的區塊,且每個 tick 最多載入其中兩個,因此絕不會產生新地形。
  • 節點鏈上的每個點,都會飛在其前後約 32 格範圍內最高地面的上方 12 格處,且絕不低於兩個節點之間的直線。它與建築高度上限至少保持 4 格的距離。
  • 它大約每 48 格放置一個節點;當節點鏈比任一端點高出超過 2 格時,還會在該端點的正上方多放置一個節點。
  • 它會移除直接連結,並透過這條節點鏈連接兩個節點。

兩個節點的水平距離至少須為 16 格。產生的節點命名為 <first>_<second>_1、<first>_<second>_2,依此類推,並以 placeholder: true 儲存,方便你日後找到它們。一次 undo 會移除整條節點鏈。儲存前請先試飛結果:產生器只看地形,不會考慮建築物或樹木。

網路 YAML​

以 harbor_flights.yml 為例:

isEnabled: true
world: my_world
transportEntity: transport_cannon_seat.yml
speed: 24.0
acceleration: 16.0
countdownTicks: 60
nodes:
harbor:
location: 120.5,64.0,-340.5
name: '&6Harbor'
arrivalYaw: 90.0
neighbors:
- harbor_sky
harbor_sky:
location: 120.5,96.0,-340.5
neighbors:
- harbor
- ridge_pass
ridge_pass:
location: 310.0,110.0,-180.0
neighbors:
- harbor_sky
- mine_sky
- watchtower_sky
watchtower_sky:
location: 455.5,102.0,-60.5
neighbors:
- ridge_pass
- watchtower
watchtower:
location: 455.5,81.0,-60.5
name: '&6Watchtower'
arrivalYaw: -45.0
permission: elitequest.watchtower_supplies.yml
lockedHint: '&7Finish the quest "Watchtower Supplies" to unlock this flight point.'
neighbors:
- watchtower_sky
mine_sky:
location: 260.0,95.0,20.0
neighbors:
- mine
- ridge_pass
mine:
location: 262.5,70.0,24.5
name: '&6Old Mine'
arrivalYaw: 180.0
neighbors:
- mine_sky
鍵預設值說明
isEnabledtrue載入此網路
world無節點所在的世界。必填
transportEntitytransport_cannon_seat.ymlcustombosses/ 中已啟用、作為坐騎使用的檔案。其實體類型、模型與技能都在該檔案中設定
speed24最高速度,單位為每秒格數。必須為正數
acceleration16每秒增加的每秒格數,直到達到最高速度。必須為正數
countdownTicks60從選擇目的地到登乘之間的 tick 數。必須大於或等於零
nodes無節點 ID 對應到節點區段的映射

網路若沒有 world、transportEntity 不是 .yml 檔名,或速度、加速度或倒數無效,會記錄警告且不會載入。

節點鍵​

鍵說明
location網路所在世界中的 x,y,z。必填
name選單名稱。有名稱的節點是目的地;沒有名稱的是航班會經過的途經點。可使用顏色代碼
arrivalYaw玩家抵達此目的地時面對的方向。預設為 0
permission從這個節點出發或飛往這個節點所需的權限
lockedHint此節點鎖定時顯示的文字。預設為 &7You have not unlocked this flight point.
neighbors此節點連結到的節點 ID
placeholder由產生器建立的節點為 true。飛行對待它們與其他節點相同

連結是雙向的,因此只要在其中一側列出相鄰節點就足夠了。EliteMobs 會對指向不存在節點、或指向與自身位置相同節點的連結發出警告並捨棄該連結,略過無效的節點,並對沒有任何相鄰節點的節點發出警告;在擁有多個目的地的網路中,也會對無法抵達任何其他目的地的目的地發出警告。

從編輯器儲存時,只會改寫 nodes 區段,並在仍然存在的節點內保留註解與未知的鍵。新檔案還會寫入上述的網路設定及其預設值。如果網路檔案已停用或載入失敗,編輯器會拒絕覆寫;請先修正或移除該檔案。

坐騎會精確地沿著曲線飛行,不會繞開障礙物,因此請讓節點之間的空間對坐騎與乘客保持暢通。實體類型為雞或鸚鵡的坐騎,在飛行時會掉落羽毛並拍動翅膀。坐騎無法生成時的情況,請參閱路線淨空與中斷。

飛行管理員​

飛行管理員是設有 interactionType: TRANSPORT 和網路的 NPC:

interactionType: TRANSPORT
transportNetwork: harbor_flights
transportNode: harbor

將這些欄位加入其他部分皆有效的 NPC 定義。transportNode 是該 NPC 的航班出發所在的節點。坐騎會在該節點接走玩家,因此請把它放在 NPC 旁邊。加上 transportDestination: mine 可以不經選單,直接飛往該目的地。設定 transportNetwork 後,NPC 會忽略 transportRoutes。

飛行傳送門​

帶有 flight 區段的蟲洞會開啟飛行選單,而不是進行傳送:

isEnabled: true
location1: my_world,120.5,66,-336.5,90,0
style: ICOSAHEDRON
particleColor: 0xf0c060
sizeMultiplier: 2.0
flight:
network: harbor_flights
node: harbor

flight.node 是出發節點,坐騎會在那裡接走玩家,因此請把該節點放在傳送門處。flight.destination 會不經選單,直接飛往該目的地。飛行傳送門只需要 location1;同時設定 location2 時,兩端都會開啟同一個選單。它不會收取 coinCost,也不會套用 blindPlayer,但 permission 仍然有效。若要重新開啟選單,請走出傳送門範圍再走回來,且至少要在選單上次開啟的 5 秒之後。

正在搭乘航班飛行的玩家不會觸發蟲洞。降落在傳送門內的玩家,必須先走出傳送門,並等待 5 秒,傳送門才會再次觸發。

已鎖定的飛行點​

設有 permission 的節點,對沒有該權限的玩家而言是鎖定的。飛行只會檢查它的出發節點與目的地節點,因此路徑可以經過已鎖定的途經點。若要用任務解鎖某個目的地,請把該任務的 questLockoutPermission 標記(例如 elitequest.watchtower_supplies.yml)作為節點的權限。玩家完成任務後就會取得它。

出發節點被鎖定時,玩家會收到它的 lockedHint,而不是選單。已鎖定的目的地仍會留在選單中並呈現灰色,點擊時會顯示它的提示。

開啟 /em quest bypass 的玩家會通過所有節點權限檢查。

實例副本內的飛行​

將 world 設為副本的藍圖世界。在副本實例內開始的飛行,會穿過該玩家自己的世界複本。請使用帶有 flight 區段的實例蟲洞,或實例 NPC,作為飛行點。在實例內飛行途中斷線的乘客,不會在登入時被安置在目的地;此時適用該副本自己針對返回玩家的規則。