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

NPC・ボスの巡回

EliteMobs では、設定済みの NPC とカスタムボスを、Minecraft のネイティブナビゲーションで作成者指定のルートに沿って移動させられます。同じ仕組みから Lua の walk_toholdteleport も利用できます。

簡単な作成手順

  1. 対象の NPC またはカスタムボスをスポーン・配置します。
  2. 12 ブロック以内から対象を直接見て /em patrol edit を実行します。
  3. 各目的地に立って /em patrol add を実行します。ノード 0 は設定上のスポーン地点です。
  4. 最後のノードから最初へ戻すには /em patrol mode LOOP、リストを逆順に戻るには /em patrol mode REVERSE を使います。
  5. /em patrol save でルートを保存し、対象を更新します。

エディターには単なる直線ではなく、解決済みの歩行経路が表示されます。/em patrol undo/em patrol remove/em patrol status/em patrol cancel も使用できます。すべてプレイヤー専用で、elitemobs.patrol.admin が必要です。

1 つの NPC ファイルに複数の spawnLocations がある場合、保存時に対象地点専用の子ファイルが作成されます。これにより同じ相対座標がすべての NPC に適用されることを防ぎます。

設定

ノードは絶対ワールド座標ではなく、設定上のスポーン地点を基準にした x,y,z オフセットです。

patrol:
enabled: true
mode: LOOP
speed: 1.0
virtualSpeed: 0.2
nodes:
- 0,0,0
- 1000,0,0
- 1000,0,250
キーデフォルト説明
patrol.enabledtrue / falseノードがあれば trueルートを有効にします。
patrol.modeLOOP / REVERSELOOPLOOP は最後のノードをノード 0 へ接続し、REVERSE はリストを逆方向に戻ります。
patrol.speed正の数1.0ネイティブナビゲーションの速度倍率です。
patrol.virtualSpeed正の数観測された移動速度永続的な対象の実体がロードされていない間に、1 tick あたり進むブロック数です。通常は省略してください。
patrol.nodes2 個以上のオフセットなし順序付きの目的地です。x,y,z 文字列と xyz のマップを使用できます。

公開されている区間距離の上限はありません。1,000 ブロックの区間も有効です。旧実験用キー patrol.maxLegDistance は廃止されており、効果はありません。

長距離経路探索

長い区間は自動的に解決されます。EliteMobs は MagmaCore にロード済み地形上のローリングルートを要求し、ネイティブナビゲーション用の短い目的地に分割し、対象の進行に合わせて再計算します。

  • ロード済みチャンクのスナップショットは、MagmaCore の tick 予算付き共有ワークロードシステムによりサーバースレッドで取得されます。
  • 上限付き A* 探索は、その不変スナップショット上で非同期実行されます。
  • 最終的な短い区間は Minecraft のネイティブ経路探索で検証・移動されます。
  • 経路計画がチャンクを強制ロードすることはありません。次の地形が利用できない場合、最後に検証された経路の終端で待機し、その区域で再びエンティティが tick すると続行します。

これにより、1 tick で都市全体を走査したり、未ロードの建物を直線で通過したりせずに長距離を移動できます。飛行・水生 Mob は体積探索を使い、地上 Mob は足場と空間を確認して一般的な危険物を避けます。

対象の動作

  • NPC の巡回は実体の AI とカスタムモデルの移動同期を自動的に有効化します。syncMovement は巡回しないモデルには有効ですが、巡回用の別スイッチではありません。
  • カスタムボスには ai: true、正の移動速度、乗り物の同乗者でないことが必要です。
  • ボスは戦闘中に巡回を一時停止し、戦闘後に再開します。
  • 永続 NPC と非インスタンスの永続ボスは、チャンク切り離しやリロードをまたいで安全な位置を patrol-state.yml に保存します。
  • 対象はエンティティが tick する区域でのみ再実体化します。不明な地形ではルート時間が停止します。
  • 同乗者は巡回を所有できません。代わりに乗り物側へ設定してください。

Lua からの制御

巡回が設定された対象では、context.npccontext.boss に次のメソッドがあります。座標はスポーン地点からのオフセットで、各メソッドは要求が受理されたかを返します。

メソッド動作
patrol_pause()設定を失わずに現在のルートを停止します。
patrol_resume()スクリプトによる待機・一時移動を解除して巡回を再開します。
walk_to(x, y, z)オフセットまで歩き、その後巡回を再開します。
hold(x, y, z)オフセットまで歩き、そこで待機します。
teleport(x, y, z)目的地でエンティティが tick している場合にテレポートし、ルートを再開します。
return {
api_version = 1,
on_npc_interact = function(context)
context.npc:walk_to(40, 0, -12)
end
}

walk_to は同じ長距離ソルバーを使うため、手動で中継点へ分割する必要はありません。

診断

対象を見て /em patrol status を実行します。状態、現在・目標ノード、進捗、論理位置、仮想速度、実体の有無、停止理由が表示されます。terrain_unavailable は、エンティティが tick するロード済み地形を待っていることを示します。