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

ダンジョンパッケージャー

webapp_banner.jpg

ダンジョンとは?​

プリメイドダンジョンに関する情報を含む、ダンジョンに関する情報はこちらで確認できます。


ダンジョンパッケージャーとは?

パッケージ形式では、ダンジョン、イベント、モデル、アリーナ、NPC、アイテムなどのEliteMobsコンテンツを配布できます。エクスポートコマンドが集めるのは、インポーターが受け付けるフォルダの一部です。残りの必要なファイルは配布前に手動で追加してください。

なぜダンジョンパッケージを使うのか?
  • インスタンスダンジョン! インスタンスダンジョンは、ダンジョンパッケージシステムを通じてのみ作成できます。
  • ミニダンジョンの安全なバックアップ! ダンジョンパッケージを作成すれば、いつでもどんな理由でも、好きなサーバーに展開・再展開できます。
  • オン/オフが簡単! いつでも/em setupを実行して、ダンジョンパッケージを一時的または永続的にオン/オフにできます。
  • 共有が簡単! 自分の作品を共有したい場合、ダンジョンパッケージはzipにまとめて他の人に送るだけです。興味があれば、コミュニティの作品専用のDiscordルームもあります!
  • テレポート! インストール済みの戦闘コンテンツでlistedInTeleports: trueを設定すると、/emのテレポートページに表示されます。エンチャントチャレンジは対象外です。移動先の座標は自分で設定する必要があります。

ダンジョンの作成

以下の設定は、content_packagesフォルダに入れる必要のある設定ファイルを作成するために使用されます。これらの設定は特にダンジョンを作成するために使用されるもので、アイテムやイベントのパックなどの非ダンジョンコンテンツを配布するためだけにダンジョンパッケージャーを使用したい場合は必要ありません。

必要なプラグイン​

追加のプラグインは不要です。protect: trueを設定すると、EliteMobsがパッケージのワールドを保護します。リージョンプラグインは必要ありません。

WorldGuard は今も任意のソフト依存関係です。インストールされている場合は EliteMobs 固有のリージョンフラグが利用できるようになりますが、ダンジョンパッケージが保護されるために必須ではありません。

ダンジョンを作成する手順​

EliteMobsには以前、2つの主要なダンジョンタイプがありました:ワールドベースとスキーマティックベース。

スキーマティックベースのダンジョンはスキーマティックビルドに関連付けられていました。これらは現在段階的に廃止され、もうサポートされていません。

すべてのEliteMobsダンジョンは現在ワールドベースです。

必要なpack.metaファイル​

ダンジョンパッケージには、.txtファイルの拡張子を.metaに変更しただけのpack.metaファイルを含める必要があります。このファイルには、パッケージがどのプラグイン用かを示す単語(例:「elitemobs」、小文字で記述)を1つだけ含める必要があります。pack.metaファイルは、他のすべてのフォルダと並んで、パッケージのルートディレクトリに配置する必要があります。


グローバル値​

以下の値はすべてのダンジョンに適用されます

isEnabled​

ダンジョンパッケージを有効にするかを設定します。

キー値既定値必須
isEnabled真偽値true✅
例
isEnabled: true

name​

コンテンツ名を設定します。カラーコードを使用できます。

キー値既定値必須
name文字列なし✅
例
name: '&c[lvl 999] &aThe Green Dungeon'

create_packager_name.jpg


contentType​

ダンジョンのタイプを設定します。

キー値既定値必須
contentTypeOPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGEなし✅
例
contentType: INSTANCED_DUNGEON

SCHEMATIC_DUNGEONは現在利用できません

設定はこの旧値を認識しますが、ローダーはそこからダンジョンを作成しません。上記のワールド形式のタイプを使用してください。

customInfo​

読み込み、保存、翻訳のために残されている旧情報フィールドです。現在の/em setupメニューはsetupMenuDescriptionを使用するため、customInfoを変更してもその説明は変わりません。

キー値既定値必須
customInfo文字列リストなし✅
例
customInfo:
- '&aThe best dungeon.'
- '&aMade by: CoolPlayer'

create_packager_custominfo.jpg


setupMenuDescription​

このパッケージの/em setupメニューに表示する説明です。カラーコードを使用できます。

キー値既定値必須
setupMenuDescription文字列リストなし❌
例
setupMenuDescription:
- '&2A cool dungeon for levels 10-20!'
- '&2Features 3 bosses and custom loot!'

コンテンツが未取得でNightbreakのパッケージ識別子がない場合に、/em setupが表示する手動ダウンロード用リンクです。この設定だけでは、独自パッケージのNightbreak自動ダウンロードや更新は有効になりません。

キー値既定値必須
downloadLink文字列空文字列❌
例
downloadLink: http://www.example.org

create_packager_downloadlink.jpg


dungeonSizeCategory​

パッケージの規模を表すラベルです。インスタンス化の有無はcontentTypeが決めます。このカテゴリは動作方式を変更しません。

キー値既定値必須
dungeonSizeCategory特殊 [1]LAIR❌
例
dungeonSizeCategory: MINIDUNGEON

create_packager_size.jpg

特殊 [1]

テーブルを展開
キー説明
LAIRレアは、1つの大きなボス戦に焦点を当てた小さなダンジョンの一種です。
SANCTUMサンクタムはインスタンス化されたレアに相当します。つまり、1つの巨大なボス戦に焦点を当てています。
MINIDUNGEONミニダンジョンは中型のダンジョンの一種で、通常3-15体のミニボスと大きなボス、それにプレイヤーがコインやギアを「ファーミング」するための多数の「トラッシュ」Mobが含まれます。
DUNGEONダンジョンはインスタンス化されたミニダンジョンに相当します。これは最も伝統的なMMORPG型ダンジョンで、プレイヤーがパーティを組み、トラッシュMobとミニボスのガントレットを通って最終ボスと戦います。
RAID認識される規模ラベルです。独立したレイドシステムやコンテンツタイプを有効にするものではありません。
ADVENTUREアドベンチャーは完全なアドベンチャーマップです。クエストライン、NPC、大量のミニボスとボス、さらにアリーナやダンジョンを内部に持つこともあります。
ARENAアリーナはウェーブベースのサバイバルエリアで、プレイヤーはウェーブを倒すことで報酬を得ます。
OTHER上記のカテゴリに当てはまらないその他のもの。
REALMコンテンツの多い大規模ワールドのラベルです。共有ワールドかインスタンスかはcontentTypeが決めます。

詳細な説明についてはダンジョンを参照してください


protect​

EliteMobsがワールドをMagmaCoreの保護システムに登録するかを設定します。プレイヤーによるブロック破壊と設置、燃焼、着火、大半のブロック消滅、葉の消滅、骨粉、バケツの中身を出す操作、看板編集、登録済み宝箱を除く対応コンテナへのアクセス、ドア・トラップドア・フェンスゲートの開放、ドラゴンの卵や植木鉢の操作、額縁や防具立ての変更、エンティティによるブロック変更、理由がCUSTOMではない生物のスポーンを防ぎます。薄氷は引き続き溶けます。プレイヤーが投げる巣張りのスプラッシュポーションと残留ポーションも防ぎます。allowExplosionBlockDamage、allowLiquidFlow、allowElytraはそれぞれの保護を調整します。味方への攻撃と環境ダメージ倍率はダンジョン共通設定で制御します。CombatTag.yml の preventFlyToggleInDungeons: true(デフォルト)では、保護によってオペレーター以外のプレイヤーが飛行を開始することも防ぎます。管理者は、対応するプレイヤー操作について/em protection bypassで保護を回避できます。

protect: falseでは、この保護システムを登録しません。ワールドは引き続きEliteMobsの管理下にあり、ダンジョンへの所属、インスタンスのライフサイクル、戦闘などは有効です。保護を無効にしても通常のサバイバルワールドにはなりません。

キー値既定値必須
protect真偽値true❌
例
protect: true

dungeonVersion​

パッケージのバージョンです。更新版に同梱する設定で値を増やしてください。Nightbreakのバージョン確認は、対象となるインストール済みパッケージのこの値を比較します。/em packageのバージョン引数はこのフィールドを書き換えません。

キー値既定値必須
dungeonVersion整数0❌
例
dungeonVersion: 1

playerInfo​

本、インベントリ、ダイアログ形式のテレポートメニューに表示する説明です。カラーコードと$bossCount、$lowestTier、$highestTierのプレースホルダーを使用できます。パッケージがメニューの対象であり、listedInTeleports: trueである必要があります。

キー値既定値必須
playerInfo文字列なし❌
例
playerInfo: 'Difficulty: &a1-man easy content!'

create_packager_playerinfo.jpg


regionEnterMessage​

読み込み、保存、翻訳のために残されている旧入場メッセージです。現在の入場リスナーは参照しないため、設定してもメッセージは送信されません。

キー値既定値必須
regionEnterMessage文字列なし❌
例
regionEnterMessage: '&aYou have entered the dungeon!'

create_packager_enter.jpg


regionLeaveMessage​

読み込み、保存、翻訳のために残されている旧退場メッセージです。現在の退場リスナーは参照しないため、設定してもメッセージは送信されません。

キー値既定値必須
regionLeaveMessage文字列なし❌
例
regionLeaveMessage: '&aYou have left the dungeon!'

create_packager_leave.jpg


hasCustomModels​

ダンジョンパッケージがカスタムモデル(ModelEngine または FreeMinecraftModels 用)を同梱していることを示すフラグです。このキーは読み書きされますが、現在 EliteMobs はこれに基づいて何も行いません — モデルは、パッケージ内に models フォルダが存在するというだけの理由でインストールされます。ドキュメント上のマーカーだと考えてください。

キー値既定値必須
hasCustomModels真偽値false❌
例
hasCustomModels: false

dungeonConfigFolderName​

このダンジョンに関連するファイル用のフォルダ名を設定します。

インスタンスダンジョンには必須です!

キー値既定値必須
dungeonConfigFolderName文字列なし❌
例
dungeonConfigFolderName: my_dungeon_folder

anchorPoint​

スキーマティック時代の相対座標用の基準点です。パッケージのパーサーは今もanchorPointとcalculatedRotationを読み取りますが、現在それらを使うコマンドや機能はありません。アンカーからの距離を測っていた/em relativecoordsコマンドはEliteMobs 9.0.5で削除されました。ボス、宝箱、NPCの配置には、それぞれのファイルにある位置を使用してください。

キー値既定値必須
anchorPoint位置なし❌
calculatedRotation整数(度)0❌
例
anchorPoint: my_dungeon_world,100,64,100,0,0
calculatedRotation: 0

contentLevel​

ダンジョンがEMメニューに表示されるべきコンテンツレベルを設定します。

キー値既定値必須
contentLevel整数0❌
例
contentLevel: 20

enchantmentChallenge​

パッケージを1人用のエンチャントチャレンジとして登録します。専用リストに入り、通常のテレポートメニューには表示されません。有効なインスタンス設定、ワールドのテンプレート、開始地点、達成可能な目標が必要です。

キー値既定値必須
enchantmentChallenge真偽値false❌
例
enchantmentChallenge: false

song​

ダンジョンにサウンドトラックを持たせるかを設定します。

キー値既定値必須
song文字列なし❌

name= クライアントが再生するサウンドIDです。例はelitemobs:dark_cathedral.ambientで、音声ファイルのパスではありません。 length= サウンドトラックの長さ(ミリ秒)。EliteMobs は内部でこれをティックに変換するため、実際のサウンドの長さでなければトラックが早すぎたり遅すぎたりして再生し直されます。

2つの部分はスペースで区切ります。1曲だけなら繰り返し再生します。->で2曲を指定すると、1曲目を1回再生した後で2曲目を繰り返します。どちらもname=/length=を指定します。クライアントのリソースパックにそのサウンドが必要です。この設定はパックを配信しません。

例
song: name=elitemobs:dark_cathedral.ambient length=93830

2 トラック形式:

song: name=elitemobs:intro length=12000->name=elitemobs:dark_cathedral.ambient length=93830

dungeonLockoutMinutes​

インスタンスのボスごとに、プレイヤーと対象パーティメンバーに適用する報酬ロックアウトを分単位で設定します。ダンジョンへの入場は禁止しません。既定値は4320、つまり72時間です。0でこのパッケージのロックアウトを無効にします。対象プレイヤーは期間中、そのボスからスキルXPも得られません。

キー値既定値必須
dungeonLockoutMinutes整数4320❌
例
dungeonLockoutMinutes: 1440

containedPackages​

メタパッケージ内に含まれるダンジョンパッケージのリストを設定します。これはcontentTypeがMETA_PACKAGEに設定されているときに、より大きなダンジョンに属するすべてのサブパッケージをリストするために使用されます。

キー値既定値必須
containedPackages文字列リストなし❌
例
containedPackages:
- my_dungeon_adventure.yml
- my_dungeon_sanctum.yml
- my_dungeon_boss_fight.yml

customItemFilenames​

アイテムパッケージのファイル一覧です。nullでないリストは、空でもcontentTypeをITEMS_PACKAGEに変更します。その後にイベントとモデルのリストを確認するため、それらがタイプを上書きする場合があります。パッケージに適したリストだけを設定してください。

キー値既定値必須
customItemFilenames文字列リストなし❌
例
customItemFilenames:
- my_custom_sword.yml
- my_custom_armor.yml

customEventFilenames​

イベントパッケージのファイル一覧です。nullでないリストは、空でもアイテムの確認後にcontentTypeをEVENTS_PACKAGEに変更します。モデルのリストがさらに上書きする場合があります。

キー値既定値必須
customEventFilenames文字列リストなし❌
例
customEventFilenames:
- my_custom_event.yml

modelNames​

モデルパッケージのモデル名一覧です。nullでないリストは、空でもアイテムとイベントの確認後にcontentTypeをMODELS_PACKAGEに変更します。

キー値既定値必須
modelNames文字列リストなし❌
例
modelNames:
- my_custom_model

旧スキーマティック形式のために残されたフィールド​

relativeBossLocations、relativeTreasureChestLocations、schematicName、defaultSchematicRotation、corner1、corner2は旧ファイル用にパーサーに残っています。現在の共有ワールドやインスタンスのコンテンツ配置には使いません。ボスと宝箱の定義にある位置と、ワールドのテンプレートを使用してください。anchorPointとcalculatedRotationも同様に残されています。anchorPointを参照してください。

翻訳対象のキー​

上記の値のうち6つは、パッケージの読み込み時に翻訳システムへ登録されます: name、customInfo、playerInfo、regionEnterMessage、regionLeaveMessage、および difficulties の各エントリーの name です。英語以外の言語で動作しているサーバーでは、これらはその言語のCSVから検索され、YAMLに書いたテキストが英語列との突き合わせに使われます。パッケージを翻訳可能にしたい場合は、これらを英語で書いてください。


ワールドベースのダンジョンパッケージ​

以下の値はワールドベースのダンジョンのみに適用されます。


worldName​

パッケージ化すべきワールドの名前を設定します。

キー値既定値必須
worldName文字列なし✅
例
worldName: my_minecraft_world

wormholeWorldName​

主ワールドと同じ環境・保護設定で読み込む副ワールドを指定します。ワールド間の移動経路は別途作成してください。この名前を設定してもポータルは作成されません。

キー値既定値必須
wormholeWorldName文字列なし❌
例
wormholeWorldName: my_minecraft_world_wormhole

environment​

ワールドの環境を設定します。

キー値既定値必須
environment環境NORMAL❌
例
environment: NORMAL

teleportLocation​

共有ダンジョンの入口、またはインスタンスの待機地点です。インスタンスでは位置のワールドを複製先に置き換えます。待機地点がなければ開始地点を使用します。形式はworld,x,y,z,yaw,pitchです。

キー値既定値必須
teleportLocation文字列なし✅
例
teleportLocation: my_minecraft_world,-1.5,68,0.5,0.0,0.0

allowExplosionBlockDamage​

保護されたダンジョンワールドで、爆発によるブロック破壊を許可するかを設定します。有効にしてもバニラの爆発がエリート爆発になるわけではありません。doExplosionRegenが有効な場合、EliteMobsは追跡対象のエリート爆発を復元します。1分後に復元を開始し、記録したブロックを1ティックに1個ずつ処理するため、完了までの時間は破壊範囲によって変わります。それ以外の爆発では破壊が残る場合があります。

キー値既定値必須
allowExplosionBlockDamage真偽値false❌
例
allowExplosionBlockDamage: true

allowLiquidFlow​

ワールド保護が有効な場合に、水や溶岩が流れることを許可するかを設定します。バケツの中身を出す操作は別の保護対象であり、この値では許可されません。

キー値既定値必須
allowLiquidFlow真偽値true❌
例
allowLiquidFlow: false

allowElytra​

保護されたパッケージのワールドでエリトラの滑空を許可するかを設定します。falseでは滑空開始をキャンセルし、ワールドへの入場時や移動時にも滑空を停止します。毎ティックのタイマーではありません。保護回避が有効な管理者は対象外です。

キー値既定値必須
allowElytra真偽値false❌
例
allowElytra: true

listedInTeleports​

インストール済みの戦闘パッケージを/emのテレポートメニューに表示するかを設定します。falseは項目を隠しますが、他の経路やコマンドでの入場は禁止しません。エンチャントチャレンジはこの値にかかわらず対象外です。

キー値既定値必須
listedInTeleports真偽値true❌
例
listedInTeleports: false

teleportLocationOffset​

ダンジョンパッケージのテレポート場所のオフセットを設定します。

このキーは解析されますが現在使用されていません — 結果として得られるオフセットを EliteMobs のどの部分も読まないため、設定してもプレイヤーの着地位置には影響しません。代わりに teleportLocation 自体を調整してください。

キー値既定値必須
teleportLocationOffset文字列なし❌
例
teleportLocationOffset: my_minecraft_world,0.5,2,0.5,0.0,0.0

インスタンスダンジョン​

インスタンスダンジョンは、プレイヤーのグループがダンジョンを完了したいたびに新しいワールドを作成し、完了したら削除します。これが正しく機能するためには、EliteMobsのworld_blueprints設定フォルダにdungeonConfigFolderNameに従ったフォルダを置く必要があります。

書き出した1つのディメンションをworld_blueprints/<dungeonConfigFolderName>/<worldName>/に配置します。検証では、リージョンの.mcaファイルを含む地形保存先が1か所だけ必要です。ルート、または対応する旧形式のDIM-1/DIM1配下を使用できます。完全な旧形式ワールド、地形のみの書き出し、新形式のディメンション書き出しを受け付けます。すべての形式でlevel.datが必須ではありません。サーバー全体のdimensionsコンテナ、混在した構造、リンクや通常ファイルでないエントリは拒否します。新形式の書き出しには新形式の保存方法を使うサーバーが必要です。

アンロード済みの書き出し用コピーで作業し、そのディメンションの地形、エンティティ、POI、データを保持してください。複製時はuid.dat、session.lock、Paperのディメンション識別メタデータを除外します。元のテンプレートは変更しません。インスタンスワールドは<worldName>_<number>形式の名前を使います。起動時にはクラッシュ後の残存ワールドを保持し、各インスタンスのライフサイクルは自身が作成したワールドだけを片付けます。手動で削除する前に、その作成元と、稼働中のインスタンスが使用していないことを確認してください。

以下の値はインスタンスダンジョンのみに適用されます。すべてのインスタンスダンジョンはワールドダンジョンなので、ワールドダンジョンの値も使用することに注意してください。


startLocation​

インスタンスダンジョンの開始地点のテレポート場所を設定します。これは、プレイヤーが/em startでインスタンスダンジョンを開始するときにテレポートされる場所です。有効なstartLocationがないインスタンスまたはダイナミックのパッケージは読み込まれません。

キー値既定値必須
startLocation文字列なし✅
例
startLocation: my_minecraft_world,10.5,70,10.5,0.0,0.0

permission​

ダンジョンインスタンスに入るために必要な権限を設定します。

キー値既定値必須
permission文字列なし❌
例
permission: elitedungeon.mypermission

minPlayerCount​

ダンジョンを開始するために必要な最小プレイヤー数を設定します。

キー値既定値必須
minPlayerCount整数1❌
例
minPlayerCount: 1

maxPlayerCount​

ダンジョンに許可される最大プレイヤー数を設定します。

キー値既定値必須
maxPlayerCount整数5❌
例
maxPlayerCount: 5

dungeonObjectives​

ダンジョンが完了したと見なされるために必要なダンジョン目標のリストを設定します。

キー値既定値必須
dungeonObjectives文字列リストなし✅
例

討伐目標filename=boss.yml:amount=Xを使用してください。amountの既定値は1です。このインスタンス内で一致するボスの死亡を数え、フェーズボスでは最初のフェーズのファイル名とも照合します。ダンジョンが進行中に、登録した目標をすべて達成する必要があります。

dungeonObjectives:
- filename=dungeon_final_boss.yml
- filename=dungeon_miniboss_one.yml
- filename=dungeon_miniboss_two.yml
dungeonObjectives:
- filename=dungeon_guard.yml:amount=5

旧パッケージとの互換性のため、filename=なしのboss.ymlもfilename=boss.ymlとして受け付けます。新規パッケージでは明示的な形式を使用してください。

ファイル名は.ymlで終わる必要があり、amountは1以上の整数である必要があります。各フィールドは1回だけ指定できます。不明なフィールド、ファイル名の欠落、無効な数量があるとパッケージは読み込まれず、コンソールのエラーにファイルと目標が表示されます。

割合目標はサポートされていません

割合目標はサポートされておらず、ダンジョン定義の読み込み時に拒否されます。filename=boss.yml:amount=2のような明示的な討伐目標を使ってください。必須の目標が無効な場合は定義全体が拒否されます。完了条件から黙って除外されることはありません。


difficulties​

インスタンスダンジョンの難易度のリストを設定します。

インスタンスダンジョンには必須!

キー値既定値必須
difficulties特殊 [1]なし❌
例
difficulties:
- levelSync: 25
id: 0
name: normal
- levelSync: 20
id: 1
name: hard
- levelSync: 15
id: 2
name: mythic

create_packager_difficulty.jpg

特殊 [1]

テーブルを展開

インスタンスダンジョンの難易度を設定すると、ダンジョンに入るときに自動的に異なる難易度オプションが作成されます。

パワーや戦利品の難易度フィルターにはidを使用します。nameはプレイヤー向けの翻訳可能な表示名です。Normal、Hard、Mythicには明示的なID0、1、2を推奨します。パッケージがEasy/Medium/Hardという名前を使う場合も、この3段階として認識します。不明なIDは完全一致で比較します。idを省略すると、翻訳前の設定名から推定します。

難易度は次のフィールドを持つリスト形式です:

キー説明値必須
nameプレイヤー向けの難易度名。文字列✅
idカスタムボスやアイテムの難易度機能で使うID。文字列❌
levelSyncキャッシュされたプレイヤーアイテムの処理でアイテム階級に上限を設けます。装備を書き換えたり、すべての攻撃・防御計算に上限を設けたりはしません。絶対レベル(25)または引用符で囲んだcontentLevelからの相対値('+5'、'-3')❌

相対レベル同期: +または-で始まるlevelSyncはcontentLevelに加算され、最低値は1になります。例えばcontentLevel: 40とlevelSync: '-5'なら、キャッシュ内の階級上限は35です。相対値は引用符で囲んでください。引用符なしの+5はYAMLが先頭のプラスを削除し、絶対レベル5になります。ダイナミックダンジョンでは選択されたレベルを基準に計算します。無効な値は警告を記録し、0として同期を無効にします。

現在の近接攻撃、鎧の防御、射撃武器の計算では、元のアイテムレベルを読む場合があります。装備のエンチャントによる寄与にも、この設定の上限は適用されません。戦闘バランスを同期に依存させる前に、インスタンスダンジョンの難易度を確認してください。

ダイナミックダンジョン​

ダイナミックダンジョンは、選択したレベルに内容を合わせるインスタンスダンジョンです。選択メニューはプレイヤーの現在の戦闘レベルを基準にします。5と戦闘レベルから5を引いた値の大きい方から始まり、5刻みで戦闘レベル+5まで表示します。上限は200です。ギルドランクによる解放ではありません。

ダイナミックダンジョンのボスにはlevel: dynamicを使用します。選択レベルが適用されるのはインスタンス内のEliteMobsボスであり、すべてのバニラエンティティや報酬ではありません。報酬レベルを受け取るカスタムアイテムにはscalability: scalableを設定し、実際の戦利品処理を確認してください。重み付きボス戦利品や明示的な固定報酬は、設定済みのレベルを維持する場合があります。

以下の値はダイナミックダンジョンに必要です。
すべてのダイナミックダンジョンはインスタンスダンジョンでもあるので、インスタンスダンジョンのすべての値と設定も追加で使用します。


contentType​

ダンジョンのタイプを設定します。これはDYNAMIC_DUNGEONに設定する必要があります。

キー値既定値必須
contentTypeOPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGEなし✅
例
contentType: DYNAMIC_DUNGEON

contentLevel​

既製のダイナミックダンジョンではこれを-1に設定しています。ダイナミックダンジョンはこの値を使いません。contentType: DYNAMIC_DUNGEONでパッケージがダイナミックになり、$lowestTierと$highestTierのプレースホルダーは5と200を表示し、相対的なlevelSyncの値はプレイヤーが選択したレベルを使います。

キー値既定値必須
contentLevel整数0❌
例
contentLevel: -1

difficulties​

ダイナミックダンジョンの利用可能な難易度とレベル同期のリストを設定します。

インスタンスダンジョンには必須!

キー値既定値必須
difficulties特殊 [1]なし✅
例
difficulties:
- levelSync: '+5'
name: normal
id: 0
- levelSync: '+0'
name: hard
id: 1
- levelSync: '-5'
name: mythic
id: 2

create_packager_difficulty.jpg

特殊 [1]

テーブルを展開

インスタンスダンジョンの難易度を設定すると、ダンジョンに入るときに自動的に異なる難易度オプションが作成されます。

パワーや戦利品の難易度フィルターにはidを使用します。nameはプレイヤー向けの翻訳可能な表示名です。Normal、Hard、Mythicには明示的なID0、1、2を推奨します。パッケージがEasy/Medium/Hardという名前を使う場合も、この3段階として認識します。不明なIDは完全一致で比較します。idを省略すると、翻訳前の設定名から推定します。

符号付きで引用符に囲まれたlevelSyncは、キャッシュされたプレイヤーアイテムの処理に相対上限を設けます。選択済みのボスレベルを変えたり、低レベル装備を強化したり、すべての戦闘計算を制限したりはしません。

例えば"+0"は選択したダンジョンレベルを上限にし、"+5"は5レベル上、"-5"は5レベル下を上限にします。最低値は1です。インスタンスダンジョンの節で説明した制約も適用されます。

難易度は次のフィールドを持つリスト形式です:

キー説明値必須
nameプレイヤー向けの難易度名。文字列✅
idカスタムボスやアイテムの難易度機能で使うID。文字列❌
levelSyncキャッシュ内のアイテム階級を制限します。装備全般の上限ではありません。絶対上限は整数、相対値は'+5'など符号と引用符付き❌

大きなダンジョンでのmeta_pack.ymlの使用​

時には、内部により小さな他のダンジョンを含む大きなダンジョンで作業し、プレイヤーがメインダンジョンワールドを通じてそれらの間を移動できるようにすることがあります。これの優れた例はEliteMobs Adventure Dungeon Primisです。

Primisは、プレイヤーが探索しクエストを完了できる広大なワールドを特徴としていますが、そのワールド内には2つのインスタンスダンジョンも含まれており、そのうちの1つは最終ボス戦として機能しています。このような場合、複数のダンジョンパッケージファイルがあり、すべて同じ包括的なダンジョンに属しています。

これを管理するために、メタダンジョンパッケージファイルを使用します。このファイルは中央ディレクトリとして機能し、プライマリダンジョンを指定し、それに関連付けられたすべての追加ダンジョンコンテンツを一覧表示します。

次の例はPrimisのパッケージ構成を示します。バージョン番号は例であり、現在公開されているPrimisのバージョンではありません。

isEnabled: true
name: '&2[000-020] The Primis Adventure!'
customInfo:
- The tutorial adventure for players
- new to EliteMobs!
downloadLink: https://discord.gg/9f5QSka
dungeonSizeCategory: LAIR
environment: NORMAL
protect: true
contentType: META_PACKAGE
containedPackages:
- primis_adventure.yml
- primis_blood_temple_sanctum.yml
- primis_gladius_invasion_dungeon.yml
setupMenuDescription:
- '&2A soft tutorial adventure for players between levels 0-20!'
- '&2Adventures are massive maps with quests,'
- '&2many bosses and npcs, among other things!'
- '&2Also has custom models!'
dungeonVersion: 1

ご覧の通り、メタダンジョンパッケージファイルは通常のダンジョンパッケージと非常によく似ていますが、いくつかの重要な違いがあります。contentType:はMETA_PACKAGEに設定されており、containedPackages:という追加設定があります。この設定は、より大きなダンジョンの一部であるすべての他のダンジョンパッケージをリストします。

各子パッケージの正確なファイル名をcontainedPackagesに列挙し、その設定とコンテンツをアーカイブに含めてください。メタパッケージは読み込み済みの定義を参照し、存在しない項目はスキップします。このリスト自体がファイルを同梱したりダウンロードしたりすることはありません。

まとめて配布する版にはメタパッケージのdungeonVersionを使用します。Nightbreakのバージョン確認は列挙された子をスキップし、対象となる親パッケージのバージョンを比較します。独自YAMLのメタパッケージに子を指定しても、Nightbreakのダウンロードや更新に対応するわけではありません。

子ダンジョンは、管理者用/em setupとは別の、プレイヤー用/emテレポートメニューに表示される場合があります。隠したい子の設定でlistedInTeleports: falseを指定してください。

例えば、Primisダンジョンの場合:

primis_blood_temple_sanctum.ymlとprimis_gladius_invasion_dungeon.ymlのメニューでのテレポートエントリを無効にします。 primis_adventure.ymlのテレポートオプションは有効のままにします。これは、プレイヤーが旅を始め、他のダンジョンにアクセスするメインハブとして機能するためです。 プレイヤーはアドベンチャーのテレポート項目から入り、そこで設定された経路で子ダンジョンへ移動します。

ファイルを命名するときは、次の命名規則をおすすめします:

your_dungeon_name_meta_pack.yml


Normal、Hard、Mythicの戦利品の目標値は、 自動クラス戦利品とエンチャントの調整を参照してください。 そのガイドでは、遭遇ランクごとの装備構成、実際のエンチャント予算、 再利用できる報酬表示、管理者の確認コマンドを説明しています。 以下の体力とダメージは、報酬の品質とは別に戦闘を調整する値です。

平均的なダンジョンMobの作成​

正規化戦闘を使うにはnormalizedCombat: trueを設定します。体力とダメージは引き続きレベル、倍率、プレイヤーの装備やスキル、戦闘設定に依存します。例は調整の出発点であり、倒すのに必要な攻撃回数を固定するものではありません。

ダンジョンでは、MobCombatSettings.yml の normalizeRegionalBosses: true(デフォルト)がリージョナルボスの正規化戦闘を有効にします。インスタンスダンジョンのボスも正規化戦闘を使用します。ボスファイルに明示した scaledCombat: true は、スケーリング戦闘の計算で優先されます。以下の推奨値は、この上書きがない正規化戦闘を前提としています。

normalizedCombat: true
healthMultiplier: 1.0 #Starting point; verify with intended player loadouts.
damageMultiplier: 1.0 #Damage scales with the player's health and defenses; playtest this value.

注意:1.0は体力とダメージのデフォルト値なので、healthMultiplierまたはdamageMultiplierの定義を単純に省略し、normalizedCombatをtrueに設定するだけで構いません。

トラッシュパックの作成​

トラッシュパックは数が多いがあまり危険ではありません:

normalizedCombat: true
healthMultiplier: 0.7 #Starting point for weaker mobs.
damageMultiplier: 0.5 #Damage scales with the player's health and defenses; playtest this value.

増援の作成​

増援は非常に簡単に死ぬべきですが、ダメージの面で危険を伴います(これらの値は4+の近接エンティティに推奨されますが、実際の使用は異なる場合があります):

normalizedCombat: true
healthMultiplier: 0.25 #Starting point for fragile reinforcements.
damageMultiplier: 0.6 #Damage scales with the player's health and defenses; playtest this value.

ミニボスの作成​

ミニボスは持ちこたえ、プレイヤーにメカニクスのチャレンジをもたらすべきです。少しの間続くスキルテストであるべきですが、極端に致死的なものではありません:

normalizedCombat: true
healthMultiplier: 3.0 #Starting point for minibosses.
damageMultiplier: 1.2 #Damage scales with the player's health and defenses; playtest this value.

ボスの作成​

ボスは本物のチャレンジで、ダンジョンの盛り上がりの結末であり、すべてを賭けた本物のスキルテストです。遭遇は長く、死は常に存在する脅威であるべきです。

normalizedCombat: true
healthMultiplier: 7.0 #Starting point for bosses; check the health ceiling.
damageMultiplier: 1.4 #Damage scales with the player's health and defenses; playtest this value.

これらの推奨値は単なる大まかな見積もりであり、最終的な値は特定の遭遇に応じて調整するべきです。

最終ボスではhealthMultiplierを増やす前に、想定する人数、装備、スキルで戦闘時間を確認してください。

healthMultiplier を上げる前に体力の上限に注意してください

基礎体力と体力倍率を適用した結果には、サーバーのsettings.attribute.maxHealth.maxによる上限があり、既定では2048です。この上限では7.0がレベル36、10.0が33、40.0が23で最大値に達します。インスタンスの人数補正はその後に結果へ乗算され、同じ上限が適用されます。そのため、すでに上限に達しているボスは、パーティの人数が増えても体力が増えません。ダメージには体力とは別の計算と上限があります。基礎計算とサーバー上限の変更方法はhealthMultiplierを参照してください。


配布用EliteMobsコンテンツのパッケージ化

最後に、保管または配布のためにダンジョンをパッケージ化したいでしょう。

EliteMobsには、管理者がコンテンツを迅速にインポート、インストール、アンインストールできるインポートシステムがあります。こちらでその仕組みを確認できます。

ダンジョンリソースパックの配布​

EliteMobs 9.6.0より、ダンジョンは独自のリソースパックと一緒にパッケージ化して配布できます!これにより、ダンジョンでドロップされたルート用のカスタムテクスチャやモデルを使ったり、私たちがダンジョンThe Hallowed Hauntで行ったようにカスタムサウンドを追加するなどのクールなことができます。

ダンジョンとリソースパックを配布するには、標準のリソースパックと同じように作成してください。テンプレートが必要な場合は、EliteMobsのデフォルトリソースパックを参照できます。これはEliteMobsが起動時にplugins/EliteMobs/resource_pack/em_rsp_defaults/へ書き出すものです。リソースパックはzip解凍された状態で配布する必要があるので、ダンジョンの名前を付けたフォルダ(例:my_cool_dungeon_rsp)を作成してください。通常zipに入るすべてのリソースパックファイルをこのフォルダ内に配置します。次に、このフォルダをresource_packという新しいフォルダ内に配置します — これはEliteMobsがデフォルトのリソースパックを保存するのと同じフォルダです。

変更は別のパックに保存してください。起動時にEliteMobsは同梱パックのチェックサムを.rsp_checksumと比較し、同梱パックが変わった場合や保存済みチェックサム・フォルダがない場合にem_rsp_defaultsを置き換えます。編集したファイルのハッシュは計算しません。変更が再起動後に残っても、後の再書き出しで置き換わります。

ファイルを整理した後、ディレクトリ構造は次のようになるはずです:

resource_pack
└── my_cool_dungeon_rsp
└── [resource pack files]

インポーターはこのフォルダをplugins/EliteMobs/resource_pack/に配置します。インポートだけではクライアントへ送信しません。サーバーのリソースパック配信元が送るパックに含めてください。

ワールドのトリミング​

未使用チャンクを削るとダウンロードサイズを減らせます。この例ではWorldBorderプラグインを使います。使用前にサーバーのバージョンが対応しているか確認してください。チャンクは永久に削除されるため、バックアップを取り、書き出し用コピーで作業してください。

Details

ヒント これを初めて行う場合は、何かが間違った場合に備えてワールドのバックアップを作成することをおすすめします。

プラグインがインストールされたら、ワールドの中央またはトリムしたい特定のエリアに移動します。次に、コマンド/wb set xを実行します。xはエリアのおおよその半径サイズを表します。

Details

ヒント /wbが機能しない場合は、/worldborder:wbを試してください。

このコマンドを実行した後、ワールドの端まで飛んでワールドボーダーが適切に設定され、意図したサイズをカバーしていることを確認します。ワールドボーダーの端に到達すると押し戻され、チャットにメッセージが表示されることでわかります。

trim_pic_1.jpg

上の画像では、紫のブロックの周りのワールドをトリミングし、それらの周りに数チャンクだけ残すことを目指しています。これを達成するために、紫のエリアの中央にある赤い四角の上に立ち、/wb set 50を実行し、紫のエリアのすぐ外側にワールドボーダーを設定します。

次に/wb trim [freq] [pad]を使います。頻度は1秒あたりの処理チャンク数、余白はチャンクではなくブロック単位です。コマンドの実装でも確認できます。/wb trim 200 20は毎秒200チャンクを処理し、境界の周囲に20ブロックの余白を残します。処理内容を確認してから/wb trim confirmを実行し、完了後にコピーを点検してください。

/wb clearでこのワールドの境界を削除できます。必要なら残しても構いません。

ワールドフォルダのトリミング​

バックアップを作成し、元のワールドをアンロードした状態で別のエクスポート用コピーを編集してください。地形、エンティティ、POI、ワールドデータを含むディレクトリ構造全体を保持します。最小限のファイルだけを残すと、地形、額縁、防具立てなどの制作物が失われる場合があります。

構造はMinecraftとサーバーのバージョンによって異なります。旧形式ではネザーにDIM-1、エンドにDIM1を使う場合があり、新形式ではdimensions/<namespace>/<key>/コンテナを使う場合もあります。インスタンスのテンプレートには複数ディメンションのコンテナ全体ではなく、1つのディメンションをWorldBlueprintが受け付ける形式で書き出してください。その構造を保ち、配布前に別サーバーで確認します。一時ロックや非公開データは、該当バージョンの保存先を特定してから書き出し用コピーだけから削除してください。

packageコマンドの実行​

EliteMobsには**/em package <dungeonName> <version>**コマンドがあり、elitemobs.package権限が必要です。以下の各フォルダからdungeonNameというサブフォルダを探し、内容をexports/<dungeonName>/へコピーしてexports/<dungeonName>_packaged.zipに圧縮します。

走査されるフォルダは順に次のとおりです。

custombosses、customevents、npcs、npc_scripts、transport_routes、customitems、customquests、customarenas、customspawns、customtreasurechests、wormholes、world_blueprints、powers、behaviors

見つからないものは「no subdirectory」の通知を出してスキップされます。すべてのコンテンツタイプを使わないパッケージではこれは正常です。

そのため、パッケージ化したいコンテンツをパッケージ名と同じ名前のフォルダに保管することを強くおすすめします。 そうしないと、配布用のファイル構造にファイルを手動で収集してパッケージ化する必要があります。

コマンドはcontent_packages、worldcontainer、models、scripts、enchantments、resource_packを収集せず、pack.metaも作りません。必要なファイルを手動で追加してから最終ZIPを作成してください。<version>引数は整数である必要がありますが、dungeonVersionは更新しません。そのフィールドは手動で変更してください。

コピー前に、一致する読み込み済みパッケージ定義が参照する既存のワールドテンプレートを検証します。無効な構造やサーバー形式の不一致があると中止する場合があります。この確認は、必要な設定、ボス、素材がすべて含まれていることを保証しません。

各実行では、まず一時フォルダに書き出し内容を作成します。成功するとexports/<dungeonName>/とexports/<dungeonName>_packaged.zipを置き換えるため、以前の書き出しフォルダに手動で追加したファイルは削除されます。追加したファイルは別の場所に保管し、実行のたびにコピーし直してください。コンテンツフォルダが1つも存在しない場合や、コンテンツフォルダまたはファイルがシンボリックリンクの場合、コマンドはFailed to zip package!を表示し、理由をコンソールに記録して、以前の書き出し内容には手を加えません。

ダンジョンパッケージファイルの追加​

ダンジョンを作る場合は、生成された書き出しフォルダにパッケージ設定を手動で追加してください。上記の形式に従い、content_packagesフォルダに配置します。詳細は次のファイル構造を参照してください。

完了したらダンジョンをzipに圧縮することを忘れずに!

ファイル構造​

すべてを正しく行った場合、ダンジョンをmy_cool_dungeonと呼んだこの例のようなファイル構造になるはずです:

my_cool_dungeon ファイル構造の例
  • my_cool_dungeon.zip
    • pack.meta(elitemobsと記載)
    • content_packages
      • my_cool_dungeon.yml <- ダンジョンパッケージ設定ファイルがここに入ります
    • worldcontainer
      • [ワールドフォルダがここに入ります]
    • wormholes
      • my_cool_dungeon
        • [ワームホールがここに入ります]
    • npcs
      • my_cool_dungeon
        • [NPCがここに入ります]
    • customtreasurechests
      • my_cool_dungeon
        • [宝箱がここに入ります]
    • customquests
      • my_cool_dungeon
        • [クエストがここに入ります]
    • customitems
      • my_cool_dungeon
        • [カスタムアイテムがここに入ります]
    • custombosses
      • my_cool_dungeon
        • [カスタムボスがここに入ります]
    • customarenas
      • my_cool_dungeon
        • [カスタムアリーナがここに入ります]
    • powers
      • my_cool_dungeon
        • [カスタムパワーがここに入ります]
    • world_blueprints
      • my_cool_dungeon
        • [ワールドフォルダがここに入ります。インスタンスダンジョン用]
    • customevents
      • my_cool_dungeon
        • [カスタムイベントがここに入ります]
    • customspawns
      • my_cool_dungeon
        • [カスタムスポーンがここに入ります]
    • models
      • [bbmodel形式のモデルがここに入ります。フォルダを受け付けます]
    • scripts
      • [FreeMinecraftModels の Lua スクリプトがここに入ります]
    • resource_pack
      • my_cool_dungeon_rsp
        • [リソースパックファイルがここに入ります]

完成したZIPはplugins/EliteMobs/imports/から取り込み、リロードして/em setupを確認します。共有前に新規インストールを試し、参照されるボス、クエスト、Luaファイル、モデル、ワールドテンプレートを確認してください。

認識されるトップレベルフォルダ​

インポーターは固定された一連のトップレベル名しか理解しません。EliteMobs のパッケージ(elitemobs を含む pack.meta)の場合、次のとおりです。

フォルダインストール先
content_packagesplugins/EliteMobs/content_packages
dungeonpackagesplugins/EliteMobs/content_packages(レガシーのエイリアス)
custombossesplugins/EliteMobs/custombosses
customitemsplugins/EliteMobs/customitems
customtreasurechestsplugins/EliteMobs/customtreasurechests
customeventsplugins/EliteMobs/customevents
customspawnsplugins/EliteMobs/customspawns
customquestsplugins/EliteMobs/customquests
customarenasplugins/EliteMobs/customarenas
npcsplugins/EliteMobs/npcs
npc_scriptsplugins/EliteMobs/npc_scripts
transport_routesplugins/EliteMobs/transport_routes
behaviorsplugins/EliteMobs/behaviors
enchantmentsplugins/EliteMobs/enchantments
wormholesplugins/EliteMobs/wormholes
powersplugins/EliteMobs/powers
world_blueprintsplugins/EliteMobs/world_blueprints
resource_packplugins/EliteMobs/resource_pack
worldcontainerサーバーのワールドコンテナ
models または modelengineFreeMinecraftModelsが有効ならそのモデルフォルダ。それ以外でModelEngineが有効ならblueprints。どちらも有効でなければFreeMinecraftModelsのモデルフォルダ
scriptsplugins/FreeMinecraftModels/scripts
elitemobsplugins/EliteMobs。そのデータフォルダと同じ構成でマージされます
freeminecraftmodelsplugins/FreeMinecraftModels。そのデータフォルダと同じ構成でマージされます。内部の models フォルダは、FreeMinecraftModels が読み込むモデルフォルダに配置されます
betterstructuresplugins/BetterStructures。そのデータフォルダと同じ構成でマージされます
pack.metaどこにもインストールされません — パッケージを識別するために読まれるだけです

専用のトップレベル名がないファイルには、elitemobs、freeminecraftmodels、betterstructures フォルダを使ってください。たとえば、アイテムで使う FreeMinecraftModels のエンチャントは freeminecraftmodels/enchantments に入れます。インポートでそのフォルダにファイルが配置されると、FreeMinecraftModels はインポートされたコンテンツを再読み込みします。BetterStructures は自身の起動処理が完了した後に一度再読み込みします。この再読み込みの仕組みがないビルドでは、/bs reload の実行を求める警告がログに出力されます。

トップレベルに未対応の項目があるとパッケージ全体を拒否し、修正用にアーカイブを残します。単独のreadme、スクリーンショット、__MACOSXをルートに入れないでください。書き込みに失敗すると、そのアーカイブが変更したすべての保存先を元に戻そうとします。再試行前にロールバックの警告を確認してください。

schematicsもEliteMobsアーカイブ全体を拒否し、スキーマティックダンジョンがEliteMobs 9.0で削除されたという警告を追加します。

管理者が/em setupでインストールする場合、ダンジョン設定はisEnabled: falseで配布してください。各ワールドのアンロード済み書き出し用コピーを用意して確認します。制作サーバーのファイルは保持し、書き出した設定を確認してください。パッケージコマンドがインストール状態をリセットすると考えないでください。

作成したダンジョンパッケージをコミュニティと共有する

Discordには#community_dungeonsセクションがあり、人々が自分のミニダンジョン作品を共有できます。ぜひ貢献してください!