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

クエストの作成

webapp_banner.jpg

クエスト例

EliteMobs には test_quest.yml が標準で同梱されており、ここではそれを、これから従うべきシンプルなクエスト形式として解説します。

カスタムクエストは ~plugins/EliteMobs/customquests フォルダにあります!

test_quest.yml

isEnabled: true
customObjectives:
Objective1:
amount: '1'
filename: test_boss.yml
objectiveType: KILL_CUSTOM
customRewards:
- filename=magmaguys_toothpick.yml:amount=1:chance=1
name: "&aKill the Test Boss"
questLore:
- "&cEnd the test boss'' reign of terror!"

create_quest_quest.jpg

クエストの UI がこのように表示されない場合は、/em alt を使って一致するように変更できます。

このクエスト例では、プレイヤーに test_boss.yml を 1 体倒すという課題が与えられます。(クエストトラッカーに表示されるボスの実際の名前は、test_boss.yml に設定された name: になります。)そしてクエスト達成の報酬として、Magmaguy's Toothpick が 1 つ与えられます。

カスタムクエストの作成

isEnabled

クエストが有効かどうかを設定します。

KeyValuesDefault
isEnabledBooleantrue
isEnabled: true

customObjectives

クエストの目標を設定します。

KeyValuesDefault
customObjectivesSpecial [1]none

注意: 目標としてマルチフェーズボスを使用する場合、目標は最初のフェーズをターゲットとして使用する必要があります。

KILL_CUSTOM:

customObjectives:
Objective1:
amount: '1'
filename: my_cool_boss.yml
objectiveType: KILL_CUSTOM

DIALOG:

customObjectives:
Objective1:
dialog:
- "&a[Dialog NPC] &fCome here often?"
- "&7&oI should eat more apples."
filename: dialog_npc.yml
npcName: Dialog NPC
location: at dialog location.
objectiveType: DIALOG

FETCH_ITEM:

customObjectives:
Objective1:
amount: '99'
itemName: Red Apples
filename: my_quest_item_red_apples.yml
objectiveType: FETCH_ITEM

ARENA:

customObjectives:
Objective1:
objectiveType: ARENA
filename: my_arena.yml
name: "Complete the Arena"

create_quest_objective.jpg

Special [1]

テーブルを展開

カスタム目標は以下の値を使って構成します:

KeyDescription
objectiveTypeこの目標がどの種類を表すかを設定するために使用します。有効な値は KILL_CUSTOMFETCH_ITEMDIALOGARENA です。KILL_CUSTOM はクエストが特定のカスタムボスを倒すものであることを示し、FETCH_ITEM はクエストが特定のカスタムアイテムを入手するものであることを示し、DIALOG はクエストが NPC との会話を含むものであることを示し、ARENA はクエストが特定のアリーナの攻略を含むものであることを示します。
filenameプレイヤーが倒す/入手すべきカスタムボスやカスタムアイテム、会話すべき NPC、攻略すべきアリーナのファイル名を設定するために使用します。必須ですfilename のない目標は、コンソールに警告を出したうえで破棄されます。
amount倒すべきカスタムボスの数、または入手すべきアイテムの数を設定するために使用します。指定しない場合は 1 になります。DIALOG(常に 1)と ARENA では無視されます。
dialogDIALOG 専用 — プレイヤーが会話したときに NPC が言うセリフです。
locationDIALOG 専用 — NPC がどこにいるかの自由記述のヒントで、クエストメニューの要約行に $location として表示されます。
name / npcName / itemName同じフィールドに対する 3 つの互換的な名前です。クエストトラッカーやメニューに表示される目標対象の表示名で、表示目的のみです。目標の種類に合わせて読みやすいものを使ってください。FETCH_ITEM で省略した場合は、カスタムアイテムファイルに設定された name にフォールバックします。

各目標は customObjectives の中の独自のキー(Objective1Objective2、…)の下に置かれ、そのフィールドは通常の YAML キーです。単一行の KILL_CUSTOM:filename=X.yml:amount=Y 文字列形式を使っていた古いクエストファイルは、初回読み込み時に自動的にこのレイアウトへ変換され、ディスクに保存し直されます。

FETCH_ITEM の挙動

FETCH_ITEM の進捗は、プレイヤーがアイテムを拾ったり落としたりしたとき、クエストを受注したとき、そして納品しようとしたときに、プレイヤーのインベントリから数え直されます — そのため、クエストを受ける前に入手したアイテムもカウントされます。納品時点でも必要数を所持している必要があり、所持していない場合は納品がキャンセルされます。納品に成功すると、クエストアイテムはプレイヤーのインベントリから消費されます


customRewards

クエストの報酬を設定します。

KeyValuesDefault
customRewardsEliteMobs 共通ルート形式none
customRewards:
- currencyAmount=50:amount=1:chance=0.05
- material=COOKED_COD:amount=3:chance=1.0
- filename=magmaguys_toothpick.yml:amount=1:chance=1.0

create_quest_rewards.jpg

注意: カスタムクエストは報酬を自動生成しません。customRewards を空のままにすると、クエストは達成しても何も与えないため、必ず報酬を明示的に定義してください。(クエストの難易度に基づく通貨とアイテムの自動的なレベルスケーリング報酬は、手続き生成されるダイナミッククエストにのみ適用され、設定ファイルで定義するカスタムクエストには適用されません。)

クエスト報酬は直接配られます。アイテムはプレイヤーのインベントリへ直接入り(入りきらないものは足元にドロップされます)、通貨は残高に加算されます。達成時にコマンドを実行したい場合は、command= のルートエントリではなく questCompleteCommands を使ってください。


questAcceptPermission

プレイヤーがクエストを受注するために必要なパーミッションを設定します。

KeyValuesDefault
questAcceptPermissionStringnone
questAcceptPermission: elitequest.my_permission

questAcceptPermissions

プレイヤーがクエストを受注するために必要なパーミッション(複数)を設定します。

KeyValuesDefault
questAcceptPermissionsString Listnone
questAcceptPermissions: 
- elitequest.my_previous_quest_one.yml
- elitequest.my_previous_quest_two.yml

questLockoutPermission

クエスト達成時にプレイヤーが取得し、そのクエストを再び実行できないようにロックするパーミッションを設定します。指定しない場合、ロックアウトパーミッションは割り当てられず、クエストは開いたままになります。

KeyValuesDefault
questLockoutPermissionStringなし
questLockoutPermission: elitequest.my_quest.yml

questLockoutMinutes

プレイヤーが再びそのクエストを実行できるようになるまで待たなければならない時間を分単位で設定します。

ロックアウトのシステムは 2 つあり、このキーがどちらを使うかを決めます。

  • 0 より大きい値の場合は、時間指定のロックアウトトラッカーが使われます。プレイヤーは納品後その分数だけこのクエストからロックアウトされ、再度受けようとすると残り時間が伝えられます。可用性のチェックでは questLockoutPermission は無視されます。
  • 0 以下の場合は、レガシーな questLockoutPermission のマーカーにフォールバックし、達成時に恒久的に付与されます。questLockoutPermission も設定されていない場合、そのクエストは繰り返し可能なままです。
KeyValuesDefault
questLockoutMinutesInteger-1(決して繰り返さない)
questLockoutMinutes: 60

name

クエストの名前を設定します。カラーコード を受け付けます。

KeyValuesDefault
nameString[filename]
name: "&aMy Great Quest Name"

questLore

ゲーム内のクエストメニューに表示されるクエストのロア(説明文)を設定します。

KeyValuesDefault
questLoreString Listnone
questLore:
- "Interesting lore sentence."
- "Yet another interesting lore sentence."

create_quest_lore.jpg


temporaryPermissions

クエストを提出するまでプレイヤーに付与されるパーミッションを設定します。

この設定を使って、プレイヤーが特定のクエストを進行中のときにのみアイテムがドロップするようにする場合は、アイテムの設定ファイルでも同じパーミッションを設定する必要があります。

KeyValuesDefault
temporaryPermissionsString Listnone
temporaryPermissions:
- elitequest.item_that_should_drop_only_during_quest.yml

questAcceptDialog

クエスト受注時にチャットに表示されるダイアログを設定します。

KeyValuesDefault
questAcceptDialogString Listnone
questAcceptDialog:
- "My hero! You are so helpful!"
- "I wish you the best of luck!"

create_quest_accept.jpg


questCompleteMessage

クエスト達成時にチャットに表示されるダイアログを設定します。

KeyValuesDefault
questCompleteMessageString Listnone
questCompleteMessage:
- "My hero! You have completed my difficult quest!"
- "As a reward you can have this loaf of bread!"

create_quest_complete.jpg


questCompleteCommands

クエスト達成時に実行されるコマンドを設定します。コマンドはコンソールからディスパッチされるため、先頭のスラッシュは含めず、プレイヤーがその権限を持っていることを前提にしないでください。

サポートされるプレースホルダー: プレイヤー名には $player、プレイヤーのいるワールド名には $getWorld、位置座標には $getX$getY$getZ

KeyValuesDefault
questCompleteCommandsString Listnone
questCompleteCommands:
- say $player has finished a quest at $getX, $getY, $getZ!
- give $player diamond 1

create_quest_commands.jpg


turnInNPC

クエストを達成するためにプレイヤーが会話/対話する必要がある NPC のファイル名を設定します。これは、クエストを渡した NPC と同じである必要はありません

KeyValuesDefault
turnInNPCFilenamenone
turnInNPC: my_cool_quest_npc.yml

クエスト付与者

クエストをプレイヤーに渡す NPC に割り当てるには、クエストファイルではなく NPC ファイルを設定する必要があります。

NPC 設定ファイル(~/plugins/EliteMobs/npcs/)に、以下を追加します:

questFileName: my_quest.yml

複数のクエストを付与する NPC の場合:

questFileName:
- quest_one.yml
- quest_two.yml

NPC の設定に関する詳細は、NPC 作成のドキュメントを参照してください。


trackable

クエストがクエストトラッカーを使用するかどうかを設定します。

KeyValuesDefault
trackableBooleantrue
trackable: true

questLevel

クエストのレベルを設定します。これはプレイヤーがクエストの難易度を把握できるようにするための視覚的な目安にすぎません。ボス、アイテム、その他のレベルを変更することは一切ありません

KeyValuesDefault
questLevelInteger0
questLevel: 10

create_quest_level.jpg


questAcceptSound

クエストが受注されたときに再生されるサウンドを設定します。Minecraft のサウンドの再生と、リソースパックからのサウンドの再生の両方が可能です。

KeyValuesDefault
questAcceptSoundStringnone
questAcceptSound: entity.experience_orb.pickup

create_quest_level.jpg


questCompleteSound

クエストが達成(提出)されたときに再生されるサウンドを設定します。Minecraft のサウンドの再生と、リソースパックからのサウンドの再生の両方が可能です。

KeyValuesDefault
questCompleteSoundStringnone
questCompleteSound: entity.player.levelup

create_quest_level.jpg


ローカリゼーションサポート

以下のフィールドは、多言語サーバー向けのローカリゼーションをサポートしています:

  • name
  • questLore
  • questAcceptDialog
  • questCompleteMessage

これにより、サーバー上のさまざまな言語向けに翻訳を提供できます。


パーミッション

上記の表で述べたように、パーミッションは通常 String または String List です。しかしここでは、クエストをロック・アンロックするためにこれらをどのように使用するか、もう少し詳しく説明します。

たとえば、あなたが計画した一連のクエストの中で quest_3 を作成しているとし、プレイヤーが quest_2 を終える前に quest_3 を受注できないようにしたいとします。その場合、クエストファイルを次のように設定します:

questAcceptPermission: elitequest.quest_2.yml
questLockoutPermission: elitequest.quest_3.yml

questAcceptPermissionselitequest.quest_2.yml に設定することで、プレイヤーが quest_2.yml を終える前に quest_3.yml を受注できないようにしました。
questLockoutPermissionelitequest.quest_3.yml に設定することで、プレイヤーがすでにそのクエストをトラッカーに持っている場合、またはすでにそのクエストを終えている場合に、そのクエストを再び受け取れないようにしました。これにより、プレイヤーがクエストを繰り返すことができなくなります。

プレイヤーが一連のクエストを完了した後にのみ利用可能になるクエストを作成したい場合は、クエストファイルを次のように設定します:

questAcceptPermissions: 
- elitequest.quest_2.yml
- elitequest.quest_3.yml
- elitequest.quest_4.yml

正しいクエストが進行中のときにのみ、プレイヤーが特定のアイテムを入手できるようにしたい場合は、temporaryPermissions を使ってそれを実現できます。クエストファイルで temporaryPermissions を使ってパーミッションを作成し、アイテムファイルで permission を使って一致するパーミッションを作成します。

たとえば、クエストファイルを開いて以下を追加します:

temporaryPermissions: 
- elitequest.my_cool_item.yml

次にアイテムファイル、この場合は my_cool_item.yml を開いて以下を追加します:

permission: elitequest.my_cool_item.yml

両方のファイルのパーミッションが一致するようになり、これでプレイヤーが正しいクエストを進行中のときにのみアイテムがドロップするようになります。

ダイナミッククエスト

ダイナミッククエストは、EliteMobs によって自動的に作成・更新される、手続き的に生成されるクエストです。設定ファイルで定義されるカスタムクエストとは異なり、ダイナミッククエストは手動でのセットアップを必要とせず、各プレイヤーの進行状況に適応します。

仕組み

  • クエストティア: プレイヤーのダイナミッククエストティアは戦闘レベルから導き出されます: tier = combatLevel / 5 で、1〜20 の範囲にクランプされます。たとえば、戦闘レベル 45 のプレイヤーはティア 9 のダイナミッククエストを受け取ります。クエスト自体(およびその報酬)はプレイヤーの実際の戦闘レベルに合わせてスケールされ、これは 1〜100 の範囲にクランプされます。
  • ティアごとに 3 つのクエスト: 20 のクエストティアそれぞれに対して、システムは一度に正確に 3 つのランダムなクエスト目標を生成します。プレイヤーには、現在のティアに一致する 3 つのクエストが提供されます。
  • 自動更新サイクル: ダイナミッククエスト目標のプールは 60 秒ごと(1200 ティックごと)に再生成されます。プールが更新されると、新しい目標が古いものと入れ替わり、プレイヤーに入れ替わり立ち替わりのタスクの選択肢が提供されます。
  • ダイナミックダンジョンへの適応: プレイヤーが特定のレベル選択でダイナミックダンジョンに入ると、進行中のすべてのダイナミッククエストがダンジョンの Mob レベルに合わせて適応します。クエストレベル、目標、表示名がそれに応じて更新され、クエストがダンジョンのコンテンツに対して引き続き適切なものになります。

パーティーと共有討伐クレジット

クエストは常に個人所有ですが、メンバーが討伐クレジットを得ると、同じワールドで sharedProgressRange の範囲内(Party.yml で既定128ブロック)のオンラインメンバーも、一致する進行中の討伐目標を進められます。収集アイテム、NPC 会話、アリーナ目標は共有されず、無関係なアクティブインスタンス内のプレイヤーは対象外です。パーティーシステムも参照してください。