QuestPlus
概要
QuestPlus は、TypeWriter の Quest エクステンションを拡張し、護衛目標、クエストの毎日のローテーション、戦闘ステータスファクトを追加します。護衛では、NPC が道路ネットワークに沿ってチェックポイントからチェックポイントへ歩き、プレイヤーは、その NPC を生かしたまま、近くにいなければなりません。一時的なクエストデフィニションが、クエストのセットがいつ利用可能になるか、その日にどのクエストが選ばれるかを決めます。
護衛は、Quest、Basic、RoadNetwork、Entity の各エクステンションを使用します。経路は道路ネットワークから、NPC はエンティティインスタンスから取得され、護衛目標はロケート可能であるため、プレイヤー向けのコンパスや道筋の表示は、QuestCodex の Quest コンパスから提供されます。
NPC の頭上のクエストステータスインジケーター(npc_status_override)は、QuestPlus には含まれません。これらは、UiCore とそのネームプレートが提供します。
機能
- 護衛目標 — NPC が道路ノードの経路をたどり、各チェックポイントで一時停止して、終点まで到達しなければなりません。
- 失敗とリセットのルール — プレイヤーは護衛半径内にとどまる必要があり、NPC はモブから傷を負うことがあり、制限時間を設けることもできます。
- チェックポイントのトリガー — 開始、チェックポイント、見失った、再会、リセット、完了、失敗のトリガーと、チェックポイントごとの待ち伏せトリガー。
- 護衛の表示 — チェックポイント、時間、体力を表示する、任意のスコアボードとボスバー。
- 護衛のアクション — 任意のシーケンスから、護衛の開始、進行、リセット、停止ができます。
- 一時的なクエスト — ローテーションするプール。曜日、時間帯、cron による利用可能期間、毎日選ばれるクエストの数、完了の上限。
- 戦闘ステータス — プレイヤーが攻撃したか、攻撃を受けてから数秒間
1になるファクト。 - 非表示にできる目標 — クエストが追跡されるまで、目標を非表示にします。
- プレースホルダー — 護衛の進行状況、体力、時間、次のローテーションまでのカウントダウン付きの、その日のクエスト。
インストール
- QuestPlus が依存関係として宣言している、TypeWriter エクステンションの Quest、Basic、RoadNetwork、Entity をインストールします。
- 任意: 護衛のウェイポイントをプレイヤーに表示するには、QuestCodex をインストールします。
- QuestPlus の JAR を
plugins/Typewriter/extensions/に配置し、サーバーを再起動します。 - RoadNetwork エクステンションで、護衛の経路用の道路ネットワークを構築します。はじめにを参照してください。
はじめに
護衛ミッションを作成します。
- TypeWriter の Web パネルで、RoadNetwork エクステンションを使って道路ネットワークを作成し、NPC が通るノードを配置します。エッジは最新の状態に保ってください。経路を計算できない場合、NPC はそのノードに到達しません。
- Path Escort Activity エントリーを追加します。
roadNetworkを設定し、nodesに歩く順にノード ID を列挙し、idleActivityに、経路が終了した後に NPC が行うことを設定します。 - 護衛 NPC のエンティティインスタンスを作成し、その
activityをこの Path Escort Activity に設定します。QuestPlus は TypeWriter がすでに実行しているディスプレイを使用するため、インスタンスはアクティブなオーディエンスに属している必要があります。 - Escort Objective エントリーを追加します。
quest、npc(エンティティインスタンス)、displayを設定します。maxHealth、guardRadius、loseToleranceSec、spawnRadius、startRadius、そして任意でglobalTimeLimitSecを調整します。 - トリガーをリンクします。
onEscortCompleteを、成功時に起こすこと(たとえば、次のクエストステップのファクトを設定するアクション)に、onEscortFailを失敗時の処理にリンクします。 - プレイヤーを護衛対象のもとへ向かわせます。護衛は、目標のオーディエンスにいるプレイヤーが、最初のノードの
startRadius以内に入ると、自動的に始まります。代わりにダイアログやイベントから開始するには、objectiveを指定した Escort Start を使用します。 - NPC がチェックポイントで止まるたびに、Escort Next(たとえば、ダイアログの行の後や、待ち伏せを片付けた後)を使って、次のチェックポイントまで歩かせます。
- Publish してテストします。NPC は最初のノードの近くに現れ、
startRadius以内に近づくと、護衛が始まります。
最初のノードと半径が解決されていることを確認するには、/escort debug resolve <objective> を使用します。
ambushes に、checkpointIndex と triggers を設定します。護衛がそのチェックポイントに到達すると、トリガーが 1 回発火します。たとえば、別のエクステンションでモブを出現させるのに使えます。
仕組み
護衛が始まると、QuestPlus は、NPC のために、護衛されるプレイヤーにのみ見える透明な体力ホルダーを作成します。guardRadius 内の近くのモブは、それをターゲットにします。NPC は、モブの攻撃(mobHitDamage)で体力を失い、回復する(regenPerSec)こともできます。プレイヤーは NPC を傷つけられません。invulnerable がオンの場合は、完全に保護されます。
NPC は次の道路ノードまで歩きます(NPC がそのノードから nodeReachRadius 以内に入った時点で到達とみなされます)。その後、Escort Next アクションが解放するまで待機します。チェックポイントに到達すると、onCheckpoint と、対応する待ち伏せのトリガーが発火します。最後のノードの後に、onEscortComplete が発火します。
リセット。 護衛は、NPC が死亡したとき、プレイヤーが死亡したとき、またはプレイヤーが loseToleranceSec 秒間、guardRadius より遠くにいたときに、NPC の体力が全回復した状態で、最後のチェックポイントに戻ります。onEscortLost はプレイヤーが範囲外に出たときに、onEscortRecovered は戻ってきたときに発火します。onEscortReset はリセット時に発火します。
失敗。 護衛は、globalTimeLimitSec が尽きたとき、プレイヤーが退出したとき、NPC が消えたとき、または Escort Stop のときに失敗します。onEscortFail が発火します。
Escort Reset アクションは、失敗トリガーを発火せずに、護衛をキャンセルします。
一時的なクエスト
Temporary Quest Definition は、オーディエンスフィルターです。その children は、有効な間だけ、プレイヤーに表示されます。
- 利用可能期間。 列挙された
daysOfWeekに、設定されている場合はstartTimeとendTime(HH:mm)の間に、そして設定されている場合はcronExpressionが一致するときに、有効になります。 - 毎日の選出。
questsから、毎日questsPerDay個のクエストがランダムに選ばれます。選出は、ある日とエントリーに対して決定的で、resetTimeに変わり、artifactで参照される Temporary Quest Artifact に保存されます。 - 完了の上限。
maxCompletedが0より大きい場合、その日のクエストをその数だけ完了したプレイヤーには、子の要素が表示されなくなります。カウンターはアーティファクトに保存され、日が変わるとリセットされます。
毎日の選出は、プレースホルダーと完了のカウントを通じて公開されます。フィルター自体は、選ばれなかったクエストを非表示にしません。メニューでプレースホルダーを使うか、表示するクエストだけに到達できるように、クエストの利用可能条件を設計してください。
戦闘ステータス
Combat Status Fact は、プレイヤーが直近の thresholdSeconds(デフォルトは 10)以内に、エンティティを攻撃したか、エンティティから攻撃を受けた間は 1、それ以外は 0 になります。戦闘中に、ファストトラベル、ダイアログ、ログアウト時の報酬をブロックするために、クライテリアで使用します。プレイヤーが関わる戦闘のみを追跡します。
プレースホルダー
MiniMessage テキスト用の MiniPlaceholders のタグです。
護衛。 護衛されているプレイヤー向けです。護衛が有効でない場合、値は中立的なものになります。
| プレースホルダー | 戻り値 |
|---|---|
<escort_checkpoint> | 現在のチェックポイントを n/total 形式で。無効な場合は 0/0。 |
<escort_time> | 経過秒数。目標に制限時間がある場合は、残り秒数。 |
<escort_health>, <escort_health_max> | 護衛 NPC の体力とその最大値。無効な場合は 0。 |
<escort_is> | 護衛が有効な場合は 1。 |
<escort_is_max> | 最後のチェックポイントに到達した場合は 1。 |
一時的なクエスト。 id は、Temporary Quest Definition エントリーの ID です。
| プレースホルダー | 戻り値 |
|---|---|
<tempquest_active_quests:id> | 今日のクエストの ID。カンマで区切られます。 |
<tempquest_time_remaining:id> | 次のローテーションまでの時間。HH:MM:SS 形式。 |
<tempquest_quests_per_day:id> | 1 日に選ばれるクエストの数。 |
<tempquest_quest_name:id:n> | その日の n 番目のクエストの表示名。1 から始まります。 |
<tempquest_quest_desc:id:n> | n 番目のクエストの表示テキスト。 |
コマンド
| コマンド | 説明 |
|---|---|
/escort debug start <objective> | 自分のために護衛を開始します(プレイヤーのみ)。 |
/escort debug stop | 自分の護衛を停止します。 |
/escort debug skipnode | 自分の護衛を、次のチェックポイントまで進めます。 |
/escort debug scan | 自動開始のスキャンを今すぐ実行します。 |
/escort debug resolve <objective> | 目標の最初のノードと半径を出力します。 |
<objective> は、Escort Objective の ID または名前です。このコマンドには questplus.escort.debug が必要です。
パーミッション
| パーミッション | 許可される内容 |
|---|---|
questplus.escort.debug | /escort debug。デフォルトはないため、付与しない限り、オペレーターのみが持っています。 |
エントリー
9 件のエントリー(拡張機能のソースから生成)。
アクション4
- Escort NextAdvance escort to next checkpoint
- Escort ResetReset escort objective
- Escort StartStart an escort objective
- Escort StopStop the current escort objective
目標1
- Escort ObjectiveEscort an NPC along a route
ファクト1
- Combat Status FactCombat Status Fact
オーディエンス1
- Temporary Quest DefinitionActivates a rotating subset of quests each day
アクティビティ1
- Path Escort ActivityMoving along a path for escort
アーティファクト1
- Temporary Quest ArtifactStores today's quests and reset time
トラブルシューティング
NPC が現れない。 ログに "npc instance missing" または "has no display registered in the AudienceManager" と表示されます。目標の npc は、アクティブなオーディエンスに属するエンティティインスタンスでなければなりません。/escort debug resolve <objective> を実行し、インスタンスが存在することを確認してください。
ログに "is missing a path_escort_activity" と表示される。 npc として使用するエンティティインスタンスは、その activity に Path Escort Activity を持っている必要があります。
"node ... not found" または "has no nodes"。 アクティビティの nodes が、選択した roadNetwork に存在しない ID を列挙しているか、リストが空です。ネットワークを編集した後は、ノードを選び直してください。
"navigation ... ended N blocks away from the node. The road network could not produce a walkable path; recalculate its edges." NPC がそのノードまで歩けません。道路ネットワークのエッジを再計算し、ノード間の地形を確認してください。
護衛が自動で始まらない。 プレイヤーは、目標のオーディエンスにいて(クエストが進行中で、目標の criteria が真)、最初のノードと同じワールドにいて、そのノードの startRadius 以内にいる必要があります。そうでない場合は、Escort Start で開始してください。NPC は、プレイヤーが最初のノードの spawnRadius 以内にいるときにのみ出現します。
護衛がすぐにリセットされる。 プレイヤーが loseToleranceSec より長く guardRadius より遠くにいるか、NPC がモブの攻撃で瀕死になっています。半径または許容時間を上げるか、mobHitDamage を下げるか、invulnerable をオンにしてください。
NPC がすべてのノードで止まり、先に進まない。 これは仕様です。各チェックポイントで、Escort Next を待ちます。
一時的なクエストがすべて非表示になる。 このデフィニションが有効なのは、その daysOfWeek、startTime と endTime の間、そして cronExpression が一致するときのみです。それらと、maxCompleted の上限を確認してください。
関連エクステンション
- QuestCodex — 護衛のウェイポイントへの、コンパスと道筋。
- UiCore — NPC の頭上のクエストステータスインジケーター(
npc_status_override)。