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

生成型ダンジョン

生成型ダンジョンには、テンプレートワールドがありません。小さなルームを一度だけ作り、それらがどうつながるかを記述すると、ジェネレーターがランごとに新しいレイアウトを組み立てます。開始ルームから、通常ルーム、宝物ルーム、秘密ルームを経て、ボスルームまでです。

固定型と生成型のダンジョンは、ラン、メニュー、チェスト、NPC、モブ、イベント、ファクトを共有します。変わるのは、ルームの出どころだけです。

構成要素​

要素エントリ内容
扉の種類Dungeon Connector Type扉の開口部の大きさ、使われない扉をふさぐブロック、そしてどの種類同士をつなげられるか。
ルームDungeon Room Template保存された構造物(アーティファクトとして保持される Paper の構造物 .nbt)。カテゴリ、扉、マーカーを持ちます。
プールDungeon Room Poolルームテンプレートの重み付きリスト。
ジェネレーターDungeon Generatorルール。どのプールを使うか、ルームの数、ボスの深さ、通路が分岐する頻度。
アフィックスDungeon Affix「素早いモブ」のように、ランダムに引かれるランの修飾。
ダンジョンDungeon Instancegenerator フィールドを設定すると、生成型ダンジョンになります。

手順を追って作る​

  1. 扉の種類。 Dungeon Connector Type を少なくとも 1 つ追加します。width と height(デフォルトは 3 × 3)、使われない扉を閉じる sealBlock(デフォルトは minecraft:stone_bricks)、そして複数の種類がある場合は compatibleWith を設定します。種類は、常に自分自身とつなげられます。
  2. ルーム。 ルームごとに Dungeon Room Template を追加し、ゲーム内エディタでブロックを取り込み、扉とマーカーを配置します。category を選びます。
  3. プール。 開始ルーム用に 1 つ、ボスルーム用に 1 つ、その他のルーム用に 1 つ(またはそれ以上)、必要なら通路用に 1 つ、Dungeon Room Pool を追加します。開始、ボス、通路のプールには、そのカテゴリのテンプレートだけが入ります。通常のプールには、NORMAL、TREASURE、SECRET のテンプレートを混ぜられます。
  4. ジェネレーター。 Dungeon Generator を追加し、startPool、bossPool、必要なら corridorPool、そして重みをそれぞれ持つ normalPools を設定します。
  5. ダンジョン。 Dungeon Instance で generator を設定します。templateWorld は空のままにします。生成型ダンジョンにはテンプレートワールドがありません。隔離は AUTO または WORLD_PER_RUN にする必要があります。
  6. ゲームロジック。 ルームテンプレートの onEnter と onClear のトリガー、TRIGGER マーカー、ルームイベント、MOB マーカー上の Dungeon Mob Spawn エントリを使い、ランは Dungeon Complete で終わらせます。

プールとテンプレートからダンジョンを作れない場合、開始は拒否され、サーバーログに理由が出ます(例えば、開始ルームのないプールや、読み取れる取り込みのないテンプレート)。ジェネレーターの messages フィールドには、作成者であるあなたに報告される理由が入ります。プレイヤーに表示されるのは、スニペット content.dungeon_generated.refusal.setup(プールとテンプレートからダンジョンを作れない)と content.dungeon_generated.refusal.paste(ルームを貼り付けられなかった)から取られる短いテキストだけで、Web パネルで編集できます。それらからは何も徴収されません。ランのアフィックスを告知する行は、スニペット content.dungeon_generated.affix.announcement です。

ルームのカテゴリ​

ルームテンプレートの category は、それが果たせる役割を示します。

カテゴリ役割
STARTランはここから始まります。ダンジョンに 1 つ。SPAWN マーカーを持つ必要があります。
NORMAL普通のルーム。
TREASURE常に分岐の先にあり、ボスへ向かう道には置かれません。
CORRIDOR直接つながれない 2 つのルームの間に挿入されます。
SECRET常に行き止まりです。
BOSS最後のルーム。ダンジョンに 1 つ。

ルームは扉どうしでつながれるため、扉のないルームは、行き止まりの START にしかなれません。required がオンの扉は、別のルームとつながっていなければなりません。必須の扉をすべて埋められないテンプレートは、使われません。誰も通らなかった扉は、その種類の sealBlock で閉じられます。

マーカー​

マーカーは、ルーム内の見どころとなる点です。それぞれに kind があります。

種類役割埋めるフィールド
SPAWNランが始まるときにプレイヤーが現れる場所。開始ルームの最初の SPAWN だけが使われます。なし
CHESTここに戦利品チェストが置かれます。その位置と向き(yaw)が、エントリの location を置き換えます。マーカーで指定されたチェストは、そのエントリが manualMode であっても、常に置かれます。chest: Dungeon Loot Chest
TRIGGERルームに到達したプレイヤーに対して、トリガーが発火します。triggers
NPCDungeon NPC Instance がここに立ち、ランのメンバーに表示されます。npc
MOBランのメンバーが初めてルームに入ったときに、Dungeon Mob Spawn のモブがここに出現します。mob

マーカーの yaw は、チェスト(yaw の方向を背にします)と NPC(その方向を向きます)の向きを決めます。マーカーは、markers リスト内での位置によって、エントリとひも付けられます。

プレイ中のルーム​

プレイヤーが生成型ダンジョンのルームに入ると、そのテンプレートの onEnter トリガー、続いて TRIGGER マーカーのトリガーと MOB マーカーのモブが発火します。enterOnce がオン(テンプレートのデフォルト)なら、ランの中でプレイヤーごとに最初にルームへ入ったときだけ発火します。

onClear トリガーは、プレイヤーがルームにいる間に Dungeon Clear Room アクションが実行されると、ランごとに一度だけ発火します。プラットフォームが、ルームがクリアされたと単独で判断することはありません。判断するのはあなたです。例えば、最後のモンスターが死んだときのモブ死亡イベントからです。

ルームのトリガーは、コンテキストから(interaction_context_variable で)次の値を読み取れます。

キー値
RUN_IDランの id。
SEEDダンジョンのシード(10 進数)。
ROOMルームの番号。0 が開始ルームで、以降はジェネレーターが配置した順です。
ROOM_TEMPLATEルームテンプレートエントリの id。
DIFFICULTYジェネレーターの difficulty。
POSITIONTRIGGER マーカーの場合はマーカーのブロック、それ以外はプレイヤーの位置。

アフィックスのトリガーが読み取れるのは、RUN_ID、SEED、DIFFICULTY だけです。固定型ダンジョンは、これらのキーをどれも提供しません。

シード、アフィックス、難易度​

同じシードからは常に同じダンジョンができるため、レイアウトを再現できます。シードは、ランごとに新しく引かれます。シードはランとともに保存されるので、リロードしても同じダンジョンがメモリ上で再構築されます。再構築できない場合、誰も知らないルームのまま引き継がれるのではなく、起動時にランが閉じられます。

アフィックスは、レイアウトの後に、ジェネレーターの affixes から weight に従って、affixCount 個が重複なしで引かれます。この抽選はシードに従いますが、レイアウトを変えることは決してありません。そのモディファイアとトリガーは、ランの開始時に各メンバーに適用されます。

difficulty は、コンテキストを通じてトリガーに渡される単なる数値です。それ自体がレイアウトを変えることはありません。

重要なジェネレーター設定​

フィールドデフォルト備考
minRooms, maxRooms6, 10開始とボスを含み、通路を除く、ルームの合計数。許容範囲は 2 から 256。
minBossDepth3ボスは、開始から少なくともこの歩数だけ離れます。
branchRatePercent40メインの道の先にあるルームが、枝道を開く確率(パーセント)。
quotasなしNORMAL、TREASURE、SECRET のルーム数の上限と下限。境界のないカテゴリは無制限です。
trialBudget, replans20000, 5失敗するまでに探索がどれだけ粘るか。試行予算 × (replans + 1) は 5 000 000 以内に収める必要があります。
baseY64ランのワールドでの、開始ルームの床の高さ。
roomsPerTick4サーバーの 1 ティックあたりに貼り付けるルーム数。低いとティックが短く保たれ、高いと速くなります。
pasteTimeoutSeconds120これを過ぎると、開始は取り消され、コストは返金され、ワールドは破棄されます。
naturalSpawningoffランのワールドで、モンスターや動物が自然にスポーンします。デフォルトはオフ。
verticalMargin1.0プレイヤーが中にいるかを判定するとき、各ルームの天井の上と床の下に加えるブロック数。
pasterSTRUCTUREPaper の構造物 API を使います。他のプラグインは不要です。

ルームテンプレートは、各辺が最大 256 ブロック、扉は最大 64、マーカーは最大 1024 です。

ゲーム内エディタ​

Web パネルで Dungeon Room Template を開き、artifactId フィールドのコンテンツエディタをクリックします。ホットバーに一式のツールが与えられます。

ツール用途
コーナーワンドブロックを左クリックでコーナー A、右クリックでコーナー B。
取り込みボックス内のブロックを、テンプレートの構造物として保存します。
扉ツール壁のブロックを右クリックして扉を追加します(そのブロックが開口部の下の中央です)。左クリックで、そこにある扉を削除します。
扉の種類右クリックで次のコネクタータイプ、左クリックで前のコネクタータイプ。
必須の切り替え次に置く扉を必須にするかどうかを切り替えます。
マーカーツールブロックを右クリックして、その手前にマーカーを追加します。左クリックで、そこにあるマーカーを削除します。
マーカーの種類右クリックで次の種類、左クリックで前の種類。
保存扉とマーカーをエントリに書き込みます。

ボスバーには、ボックスの大きさ、扉とマーカーの数、そして未保存の作業があるかが表示されます。ルームの大きさは保存された構造物から読み取られ、入力することはありません。扉を追加する前に、コネクタータイプを少なくとも 1 つ作成して Publish しておく必要があります。

取り込みはデフォルトでエンティティを無視します。生きているエンティティは、取り込みのたびにルームを変えてしまい、すべてのコピーで野良のモブとして戻ってくるためです。これらの動作とエディタのすべてのテキストは、content.dungeon_room_template. の下にある Typewriter のスニペットなので、Web パネルで変更や翻訳ができます。

スニペットデフォルト意味
capture.include_entitiesfalse取り込みでボックス内のエンティティを保存するかどうか。
capture.max_volume2621441 回の取り込みで読み取る最大ブロック数。1 つのサーバーティックで読み取られるため、非常に大きなボックスはそのティックを占有します。
capture.timeout_seconds30取り込みを諦めるまで待つ秒数。
sound.confirmentity.experience_orb.pickup取り込みまたは保存の後に鳴る音。空にすると鳴りません。

制限とグッドプラクティス​

  • 生成型ダンジョンは WORLD_PER_RUN のみを使います。ランごとにワールドを作成し、後で削除します。
  • 固定ルームのエディタ(ノード)には、content.dungeon_room. の下に専用のスニペットがあります(メッセージ node.*、save.*、editor.*、ツール tool.add、tool.remove、tool.save)。
  • つなげる 2 つの同じ種類の扉が、きちんと揃うようにルームを作ってください。開口部の幅が偶数の場合、余分なブロックはテンプレートの x または z の大きい側に付きます。偶数の開口部で必要なとき、ジェネレーターはルームを 1 ブロックずらします。
  • ダンジョン全体は、baseY から数えて、ワールドの最も低いブロックと最も高いブロックの間に収まる必要があります。
  • ルームの数が固定だと思わないでください。ルーム番号ではなく、マーカーとイベントを使ってください。