メインコンテンツまでスキップ

フライトネットワーク

フライトネットワークは、1 つのワールド内にあるノードの集まりを、双方向のリンクでつないだものです。名前のあるノードが目的地になります。プレイヤーがフライトマスター NPC またはフライトポータルで目的地を選ぶと、乗り物がリンクをたどる最短の経路でそこまで飛ばしてくれます。ネットワークは plugins/EliteMobs/transport_networks/ に置き、移動ルートと同じ乗り物と移動のルールを使います。

フライトは、プレイヤーが要求した時点で組み立てられます。EliteMobs はノード間の直線距離を使ってリンク上で A* 探索を行い、乗り物は結果に含まれるすべてのノードを通る滑らかな曲線をたどります。目的地の組み合わせごとにルートを作る必要はありません。新しいノードやリンクは、それによって短くなるすべてのフライトで使われます。

プレイヤーの飛び方​

  1. プレイヤーがフライトマスター NPC を右クリックするか、フライトポータルに踏み込みます。
  2. Flight paths メニューに、NPC またはポータルのノードから行けるすべての目的地が、リンクをたどった近い順に最大 54 件表示されます。プレイヤーがまだ解放していない目的地は、ロック時のヒントとともに灰色の染料として表示されます。
  3. 目的地をクリックするとカウントダウン(デフォルトは 60 ティック、つまり 3 秒)が始まり、終わると乗り物が出発地点でプレイヤーを乗せます。
  4. 乗り物は経路を飛び、目的地の arrivalYaw の向きにプレイヤーを降ろします。

フライトマスターやポータルは、メニューを開かずに 1 つの目的地へ直接飛ばすこともできます。フライトマスターとフライトポータルを参照してください。

目的地をクリックするときは、プレイヤーが 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 とネットワーク ID は、英小文字、数字、アンダースコア、ハイフンを使った 1~64 文字にします。下書きには、現在のワールドがネットワークのワールドとして記録されます。ダンジョンインスタンスの中では、代わりにダンジョンの原本ワールドが記録されます。既存のネットワークは、そのネットワークのワールドからしか編集できません。

エディターのコマンド​

コマンド操作
/em transport network edit <network>既存ネットワークの下書きを開く、または新しいネットワークを始める
/em transport network list読み込まれたネットワークを一覧表示
/em transport network status下書きのノード数と選択中のノードを表示
/em transport network preview [from] [to]2 つのノード間の経路を表示。ノードを指定しない場合はプレビューを消す
/em transport network ride <from> <to>保存せずに、下書きの 2 つのノード間を飛ぶ
/em transport network generate <first> <second>2 つのノード間のリンクを、地形の上を通る生成ノードに置き換える
/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>2 つのノードを双方向にリンクする
/em transport node unlink <first> <second>2 つのノード間のリンクを削除する
/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>到着時の向きを、現在向いている方向に設定する

タブ補完は、edit にはネットワーク ID を、ノード引数には下書きのノード ID を提案します。edit、list、save、cancel、status 以外のコマンドは、下書きのワールドにいる必要があります。編集できるネットワークは一度に 1 つです。下書きは、保存またはキャンセルするか、切断するか、ワールドがアンロードされるか、EliteMobs がリロードされるまで、メモリ内に残ります。

/em transport network ride は、別の場所にいても最初のノードへ移動させ、そこから出発します。ノードの権限は確認せず、目的地には名前の有無にかかわらず任意のノードを指定できます。

/em transport reload は、ルートファイルと一緒にネットワークファイルも再読み込みします。すでに飛行中のフライトは、元の経路を維持します。

エディターの表示​

下書きが見えるのは、編集しているプレイヤーだけです。128 ブロック以内のすべてのノードの上に ID が表示され、2 行目に目的地の名前が表示されます。選択中のノードのラベルは黄色です。リンクは水色の線で描かれます。preview の後は、経路が緑色で描かれます。それ以外のときは、選択中のノードを通ってあなたが立っている場所まで黄色の曲線が描かれ、そこにノードを追加した場合にフライトがどのように曲がるかを示します。

仮のノードを生成する​

離れた 2 つのノード間の直線リンクは、丘を突き抜けてしまうことがあります。代わりに /em transport network generate <first> <second> を使うと、地形の上を通るノードの連なりを作ります。

  • 2 つのノードを結ぶ線に沿って、4 ブロックごとに、幅 3 列の地面の高さを読み取ります。すでに生成済みのチャンクだけを読み取り、1 ティックに最大 2 つまでしか読み込まないため、新しい地形が作られることはありません。
  • 連なりの各点は、前後およそ 32 ブロック以内で最も高い地面より 12 ブロック上を飛び、2 つのノードを結ぶ直線より下には下がりません。また、建築限界より少なくとも 4 ブロック下にとどまります。
  • おおよそ 48 ブロックごとにノードを置き、連なりが一方の端より 2 ブロックを超えて高く飛ぶ場合は、その端の真上にもノードを置きます。
  • 2 つのノード間の直接のリンクを削除し、代わりにこの連なりを通して 2 つのノードをつなぎます。

ノードは水平方向に少なくとも 16 ブロック離れている必要があります。生成されたノードは <first>_<second>_1、<first>_<second>_2 のように名付けられ、あとで見つけられるよう placeholder: true 付きで保存されます。undo を 1 回実行すると、連なり全体が削除されます。保存する前に、結果を実際に飛んで確認してください。ジェネレーターが見るのは地形だけで、建物や木は見ません。

ネットワークの 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.yml乗り物として使う、custombosses/ 内の有効なファイル。エンティティの種類、モデル、パワーはそこで設定する
speed24最高速度(ブロック/秒)。正の数にする
acceleration16最高速度に達するまで、1 秒ごとに増える速度(ブロック/秒)。正の数にする
countdownTicks60目的地を選んでから乗車するまでのティック数。0 以上
nodesなしノード ID からノードのセクションへのマップ

world がないネットワーク、.yml のファイル名でない transportEntity、無効な速度・加速度・カウントダウンを指定したネットワークは、警告をログに出力し、読み込まれません。

ノードのキー​

キー説明
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 を持つノードは、その権限を持たないプレイヤーに対してロックされます。フライトが確認するのは出発ノードと目的地ノードだけなので、経路はロックされた経由地点を通過できます。クエストで目的地を解放するには、elitequest.watchtower_supplies.yml のような、そのクエストの questLockoutPermission マーカーを、ノードの権限として使います。プレイヤーは、クエストを完了するとそれを受け取ります。

出発ノードがロックされている場合、プレイヤーにはメニューの代わりにその lockedHint が表示されます。ロックされた目的地はメニューに灰色で残り、クリックするとそのヒントが表示されます。

/em quest bypass を有効にしているプレイヤーは、すべてのノードの権限チェックを通過します。

インスタンスダンジョン内のフライト​

world にはダンジョンの原本ワールドを設定します。ダンジョンインスタンス内で開始したフライトは、そのプレイヤー専用のワールドのコピーの中を飛びます。フライトポイントには、flight セクションを持つインスタンスワームホールか、インスタンス NPC を使ってください。インスタンス内で飛行中に切断した乗客は、ログイン時に目的地へ配置されません。ダンジョン自体の、戻ってきたプレイヤーに関するルールが適用されます。