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

MiniGame

ミニゲームフレームワーク:26 のゲームモード、アリーナ、ロビーメニュー、パルクール、記録、クエスト連携。

プライベートv0.1.0戦闘とモブ
必要TypeWriter0.9.0-beta-177 (BTC build)GUIQuestRegionMiniPlaceholders任意

BornToCraft ネットワーク向けに作られた拡張機能です。参照用にドキュメント化されており、配布されていません。

概要​

MiniGame は、TypeWriter のエントリーから、さまざまな種類のミニゲームを実行する単一のフレームワークです。Web パネルでアリーナ(ゲームモード、ロビーとゲームのスポーン地点、プレイヤー数の上限、チーム、キット、ラウンド、メッセージ)を記述します。プレイヤーは、アクションエントリーとメニューから参加します。エクステンションは、ロビー、準備完了の確認、カウントダウン、ゲーム本体、表彰台、後片付けを処理します。

すべてのゲームは、同じフェーズの順序(ロビー、カウントダウン、プレイ中、終了、クリーンアップ)で進行します。実行中の各ゲームは、プレイヤー、チーム、スコア、状態を保持する 1 つのコンテキストを持つため、ラウンド、チーム、スコアボードは、どのモードでも同じように動作します。インベントリはゲームの前に保存され、後で復元されます。プレイヤーの変更にはリージョンセーフなスケジューリングが使われるため、このエクステンションは Paper と Folia で動作します。

結果(勝利数、スコア、ベストタイム、ランキング)はアーティファクトに保存され、クエスト目標、ファクト、トリガー、プレースホルダーを通じて、サーバーの他の部分に公開されます。以前は別のエクステンションだったパルクールは、現在はゲームモードの 1 つです。このエクステンションは参考情報として文書化されており、TypeWriter の BTC ビルド上で動作します。

機能​

  • 26 のゲームモード — PvP、パルクールと移動、サバイバル、戦略、パーティー、アーケードのモードがあり、すべてアリーナの gameType フィールドで選択します。
  • フェーズエンジン — ロビー、カウントダウン、プレイ中、終了、クリーンアップ。準備完了の確認、最小プレイヤー数、途中参加、観戦者に対応します。
  • チーム — NONE、SOLO、RED_BLUE、または独自の名前を持つカスタムチーム。ロビーメニューから選ぶか、自動的にバランスが取られます。
  • ラウンドとパワーアップ — ラウンド間でプレイヤーを復活させる任意のラウンドと、ルールベースのモード向けの、時間経過によるパワーアップのドロップ。
  • パルクール — スタート地点、順序付きのチェックポイント、パーティクル付きのゴール地点、失敗時のアクション、タイマー、個人記録とアリーナ記録。
  • 専用アリーナ — パルクール、Dé à Coudre、アーチェリー向けの追加の設定エントリー。
  • メニュー — ゲームブラウザー、アリーナ選択、ロビー、チーム選択、統計、結果のメニュー。
  • 永続化 — 勝利数、敗北数、スコア、ベストタイム、上位タイムをアーティファクトに保存し、非同期で書き込みます。
  • クエスト連携 — 完了目標とファクト、そして、ゲーム開始、終了、参加、脱落、ラウンド開始、記録のトリガー。
  • スコアボードとメッセージ — 設定可能なスコアボードの行と、ゲームのプレースホルダーを使った、参加、退出、脱落、勝利のメッセージ。

インストール​

  1. TypeWriter の BTC ビルド(BTC Core、Paper または Folia)を実行します。
  2. MiniGame が依存するエクステンションをインストールします。BTC の GUI エクステンション(すべてのメニューが使用)、Quest、Region です。
  3. MiniGame の JAR を plugins/Typewriter/extensions/ に配置し、サーバーを再起動します。
  4. スコアボード以外で <minigame_...> プレースホルダーを使いたい場合は、MiniPlaceholders をインストールします。これらは、PlaceholderAPI ではなく、BTC MiniPlaceholders ブリッジを通じて公開されます。
  5. ワールドにアリーナを作成し、エントリーが要求する場所(たとえば Dé à Coudre アリーナのプール)に保護リージョンを作成してから、Web パネルでエントリーを設定します。

はじめに​

この手順では、永続的な統計を持つ Spleef アリーナを設定します。

  1. TypeWriter の Web パネルでマニフェストページを開き、Wins statistics アーティファクトを追加します。artifactId(たとえば spleef_wins)を付けます。
  2. 同じページに Minigame Arena エントリーを追加します。gameType を SPLEEF に設定し、位置ピッカーで lobbySpawn、gameSpawn、spectatorSpawn、endTeleport を設定します。
  3. minPlayers と maxPlayers、autoStartCountdown(ゲーム開始までの秒数)、maxGameDuration(秒)を設定します。
  4. 複数のラウンドにしたい場合は、useRounds を有効にして maxRounds を設定します(プレイヤーは復活し、ラウンドごとに gameSpawn に戻されます)。kitItems にアイテムを追加し、giveKit はオンのままにします。
  5. winStatArtifact を、手順 1 のアーティファクトにリンクします。
  6. シーケンスページを開きます。Open the minigame browser アクションを追加し、NPC のダイアログ、アイテム、コマンドからトリガーします。または、arena にアリーナを設定した Join a minigame を使うと、プレイヤーをそのままロビーに入れられます。
  7. Publish し、アリーナに参加して、ロビーメニューで Ready をクリックし、カウントダウンを待ちます。ゲームが終了すると、勝者が発表され、統計が保存されます。
1 人で始める

ロビーがカウントダウンを始めるのは、少なくとも minPlayers 人のプレイヤーが Ready をクリックしたときのみです。1 人でテストするあいだは、minPlayers を 1 に設定してください。

仕組み​

  1. ロビー。 プレイヤーは lobbySpawn で待機します。準備完了とマークしたプレイヤーの数が minPlayers に達すると、数秒後にカウントダウンが始まります。途中参加は、allowLateJoin がオンの場合にのみ、ロビーの後に可能です。
  2. カウントダウン。 autoStartCountdown 秒間続き、チャットにメッセージが表示されます。プレイヤーが退出して人数が最小を下回ると、ゲームはロビーに戻ります。
  3. プレイ中。 プレイヤーは gameSpawn にテレポートされ、インベントリが保存されて、キットが渡されます。フェーズは、遅くとも maxGameDuration 秒後に終了します。onGameStart が発火します。
  4. 終了。 勝者と上位 3 名が発表されます。このフェーズは、maxGameDuration のおよそ 60 分の 1 の長さで、5 秒から 60 秒の範囲に制限されます。
  5. クリーンアップ。 インベントリ、ゲームモード、体力が復元され、結果がアーティファクトに書き込まれ、onGameEnd が発火し、プレイヤーは endTeleport に戻ります。

脱落したプレイヤーは観戦者になり、allowSpectate がオンで、観戦者のスポーン地点が設定されている場合は、spectatorSpawn に移動されます。

ゲームモード​

アリーナの gameType フィールドは、以下の 26 の値を受け付けます。3 つのモードには専用のコードがあります。残りの 23 はルールベースで、脱落モードと勝利条件で動く 1 つのエンジンを共有します。ルールベースのモードでは、ルール、ロビー、ラウンド、スコアリングが提供されます。ゲーム名に固有のコンテンツ(旗、モブのウェーブ、上昇する溶岩の床、TNT ブロック、ディスペンサー)は生成されません。ワールド内に自分で作成し、キット、リージョン、トリガーで連携させてください。

モードカテゴリーデフォルトの人数脱落勝利条件
SumoPvP / 戦闘2-8落下最後の生存者
GladiatorPvP / 戦闘2-12キル最後の生存者、20 秒ごとにパワーアップ
DuelsPvP / 戦闘2キル最後の生存者
KOTHPvP / 戦闘2-16タイムアウト最初に得点した人、パワーアップあり
PaintballPvP / 戦闘2-16キル最高得点
One in the ChamberPvP / 戦闘2-12キル最高得点
Parkourパルクール / 移動1専用コードゴール地点に到達
Block Partyパルクール / 移動2-16床の消失最後の生存者、最大 5 ラウンド
TNT Runパルクール / 移動2-16落下最後の生存者
Floor is Lavaパルクール / 移動2-16落下最後の生存者、最大 3 ラウンド
Falling BlocksPvE / サバイバル1-16落下120 秒間生き残る
Wave SurvivalPvE / サバイバル1-8キル180 秒間生き残る、パワーアップあり
Zombie ApocalypsePvE / サバイバル1-8キル300 秒間生き残る、パワーアップあり
Dodge the ArrowsPvE / サバイバル1-16キル最後の生存者
Defend the CorePvE / サバイバル1-8キル最後に生き残ったチーム、240 秒
Capture the Flag戦略4-16キル最初に得点したチーム、300 秒
Infection戦略2-16タッチ最後の生存者
Spleef戦略2-16床の消失最後の生存者、最大 5 ラウンド
Sheep Hunt戦略4-16タッチ最多タッチ数、180 秒
TPP (Tag)パーティー / お楽しみ2-16タッチ最後の生存者
Freeze Tagパーティー / お楽しみ2-16タッチ最後の生存者
Hot Potatoパーティー / お楽しみ2-16タイムアウト最後の生存者、60 秒
Dé à Coudreパーティー / お楽しみ2-16専用コード最後に生き残ったプレイヤーまたはチーム
Musical Chairsパーティー / お楽しみ2-16タイムアウト最後の生存者、最大 10 ラウンド
Archery反射神経 / アーケード1-16専用コード目標数に最初に到達、または制限時間内の最高得点
Quake反射神経 / アーケード2-16キル最高得点

デフォルトの最小人数は、アリーナの minPlayers が 0 より大きくない場合にのみ使用されます。最大人数は、常にアリーナの maxPlayers から決まります。

ルールベースのモードの判定方法​

  • キル: 他のプレイヤーからの 1 回の攻撃で、ダメージ量にかかわらず被害者が脱落し、攻撃者に 1 ポイントが入ります。飛び道具の射手も対象です。
  • タッチ: 他のプレイヤーからの 1 回の攻撃で被害者が脱落し、タッチした側に 1 ポイントが入ります。フレンドリーファイアがオフの場合、チームメイトは保護されます。
  • 落下: gameSpawn の 10 ブロック下に落ちたプレイヤーは脱落します。
  • 床の消失: 足元のブロックが空気になったプレイヤーは脱落します。
  • タイムアウト: タイマーだけでプレイヤーが脱落することはありません。時間制限のあるラウンドは、時間切れで終了し、スコアまたは生存者によって勝者が決まります。
  • パワーアップ: powerUpEnabled がオンの場合、powerUpInterval 秒ごと(最低 5 秒)に、ランダムなパワーアップアイテムがドロップします。8 種類は、Speed、Jump、Invisibility、Heal、Shield、Explosive Snowball、Double Jump、Super Strength です。
  • ラウンド: useRounds がオンの場合、脱落したプレイヤーは復活し、ラウンドごとに全員が gameSpawn に戻されます(maxRounds まで)。エクステンションは、ラウンド間でブロックを再構築しません。壊れた床は自分で復元してください。onRoundStart はラウンドごとに発火します。

パルクール​

パルクールは、専用の設定エントリーを持つソロモードです。Parkour Arena は、タイプが PARKOUR の Minigame Arena にリンクし、そのスタート地点、チェックポイント、ゴール地点を列挙します。プレイヤーはスタート地点に立ってランを開始し、order の昇順でチェックポイントを通過して、ゴール地点に到達する必要があります。

  • failAction は、失敗したときの動作を決めます。START はスタート地点へ、LAST_CHECKPOINT は最後のチェックポイントへテレポートし、QUIT はランを放棄します。
  • timerType は、NONE、GLOBAL(秒単位の固定 time)、CHECKPOINT(time に、各チェックポイントで checkpointBonus 秒を加算)のいずれかです。時間切れは失敗です。
  • プレイヤーがワールドを移動したとき、スタート地点より 5 ブロック以上下に落ちたとき、最後のチェックポイントから 10 ブロック以上離れたときも、ランは失敗します。
  • 完了すると、タイムが記録のために送信されます。個人ベスト、アリーナのランキング、そしてアリーナの onPersonalBest と onWorldRecord のトリガーです。その後、走っている人が誰もいなくなるため、アリーナは終了します。

Dé à Coudre​

Dé à Coudre Arena は、プールのリージョン、ジャンプ地点、スポーン地点を追加します。mode は、SINGLE(プレイヤーが順番にジャンプ)、CONCURRENT(全員が同時にジャンプ)、TEAM のいずれかです。プレイヤーは予備のライフなしで始まり、ジャンプを外すと脱落し、完璧なジャンプ(すでに使用された 4 つのブロックの間に着地)で 1 ライフを得ます。lives、turn、queue のプレースホルダーが状態を表示します。

アーチェリー​

Archery Arena は、的の位置と射撃ゾーンを列挙します。mode は、MAX_TARGET(targetsToWin 回命中した人が最初)、または TIME_ATTACK(timeLimitSeconds 以内の最高得点)のいずれかです。エクステンションは targetBlock を設置し、命中すると hitBlock に置き換え、bowItem と arrowItem を渡します。

メニュー​

メニューは、GUI エクステンションが描画する、54 スロットのチェストメニューです。それらを開くアクションエントリーを追加するまで、空のままです。

メニュー開く方法内容
ゲームブラウザーOpen the minigame browser6 つのカテゴリーの行と、選択したカテゴリーのゲーム。ゲームが利用できるのは、そのタイプのアリーナが存在する場合のみです。
アリーナ選択Open arena selection、またはブラウザーでのクリックゲームタイプのアリーナと、その状態(空き、待機中、満員、ゲーム中)とプレイヤー数。クリックすると参加します。
ロビーOpen the lobby menu、またはメニューから参加した後に自動でアリーナの説明、準備完了の状態とチームを含むプレイヤーリスト、Ready、Team、Start the game、Leave のボタンと、カスタムボタン。
チーム選択Team ボタンチームを選ぶか、ランダムに割り当てられます。
統計Open statistics勝利数、敗北数、プレイしたゲーム数と上位 10 名。アリーナごと、またはアリーナ全体。アリーナに winStatArtifact が必要です。
結果Open the results screen勝者、所要時間、プレイヤー数、表彰台。アクションを、アリーナの onGameEnd トリガーに接続します。

Start the game ボタンは、minigame.start パーミッションを持つプレイヤーにのみ表示されます。Lobby Menu エントリーで、タイトルのカスタマイズ、メニューの一部の非表示、0 から 53 の slot と showCondition を持つボタンの追加ができます。

永続化と記録​

アーティファクトは起動時に読み込まれ、非同期で書き込まれるため、保存がゲームの tick をブロックすることはありません。保存されるデータは、アリーナごと、プレイヤーごとに保持されます。

  • Wins statistics は、勝利数、敗北数、プレイしたゲーム数を保存し、クリーンアップ時に、ゲームの全プレイヤー分が保存されます。
  • Scores statistics は、クリーンアップ時に、各プレイヤーのスコアが 0 より大きい場合に、それを加算します。
  • Minigame state は、クリーンアップ時に、最終フェーズ、プレイヤー数、勝者とともに書き込まれます。
  • Best time と Top times は、個人ベストとランキングを保存します。topTimesLimit で、保持するタイムの数を設定します。現時点でタイムを生成するのは、パルクールのみです。

Reset records は、トリガーしたプレイヤー(PLAYER)または全員(ARENA)の、アリーナの記録をクリアします。

クエスト連携​

Complete minigames 目標は、完了したタイム制のランをカウントします。arena を空にするとすべてのアリーナをカウントし、設定すると 1 つのアリーナだけをカウントします。進行状況は、指定したファクトに保存され、onComplete をトリガーできます。Minigame completions ファクトは、プレイヤーが参加しているアリーナごとに、完了数を別々にカウントするため、1 つのファクトで、アリーナのネットワーク全体を扱えます。どちらも、現時点ではパルクールの完了にのみ反応します。

パーミッション​

パーミッション許可される内容
minigame.startロビーメニューの Start the game ボタンを表示し、使用できるようにします。

コマンドはありません。すべてエントリーとメニューで操作します。

プレースホルダー​

ゲームのプレースホルダーは、2 つの形式で利用できます。アリーナのメッセージとスコアボードの行では、%name% トークンを使用できます。サーバーの他の場所では、BTC MiniPlaceholders ブリッジが、ゲーム中のプレイヤーに対して、同じ値を <minigame_name> として公開します。

プレースホルダー戻り値
arena と arena_idアリーナ名とエントリー ID。
game_id実行中のゲームの ID。
phase現在のフェーズ名。
players と aliveゲーム内のプレイヤー数と、まだ生存しているプレイヤー数。
max_playersアリーナのプレイヤー数の上限。
winner勝者の名前。まだいない間は "Personne"。
scoreプレイヤーのスコア。
alive_statusalive または eliminated。
rankスコアによるプレイヤーの順位。ない場合は -。
lives, turn and queueDé à Coudre のみで、ライフ、現在のジャンパー、ジャンプの順番。他のモードでは -。
%player%(メッセージのみ)参加、退出、脱落のメッセージ内の、プレイヤー名。

エントリー​

24 件のエントリー(拡張機能のソースから生成)。

アクション9
目標1
ファクト1
アーティファクト5
マニフェスト5
定義3

トラブルシューティング​

メニューが何も起こさない、または空になる。 メニューには GUI エクステンションと、それを開くアクションエントリーが必要です。正しい gameType のアリーナが存在することを確認してください。ブラウザーは、どのアリーナも使用していないゲームタイプを、利用不可としてマークします。

ゲームがずっとロビーのままになる。 カウントダウンが始まるのは、少なくとも minPlayers 人のプレイヤーが Ready をクリックしたときのみで、単に在席しているだけでは始まりません。minPlayers を下げるか、Force start a minigame を使ってカウントダウンを開始してください。

"Vous êtes déjà dans une partie"。 プレイヤーは、1 つのゲームにしか参加できません。まず Leave a minigame を使用してください。退出、切断、ゲームの終了は、いずれもプレイヤーを解放します。

KILL モードや TAG モードで、誰も脱落しない。 ダメージを受けられるプレイヤーで、サバイバルモードでテストしてください。クリエイティブモードのプレイヤーは無敵です。これらのモードでの脱落は、矢や雪玉を含む、他のプレイヤーによるダメージから生じます。

統計、キル数、状態アーティファクトが空のままになる。 アリーナは、参照しているアーティファクトにのみ書き込みます。winStatArtifact、scoreArtifact、stateArtifact を設定し、各アーティファクトに artifactId を付けてください。現在のコードでは、キル数とデス数は記録されず、0 と表示されます。ベストタイムと上位タイムを書き込むのは、パルクールのみです。

パルクールのランが失敗し続ける。 各チェックポイントは、前のチェックポイントから 10 ブロック以内にある必要があり、スタート地点の 5 ブロック下で、ランは失敗します。チェックポイントは order の昇順に到達する必要があり、ゴール地点は最後のチェックポイントの後にのみカウントされます。radius が 0 の場合、プレイヤーはちょうどそのブロックの上に立つ必要があります。

プレイヤーがロビーのエリアから出られない。 待機中(Lobby フェーズと Countdown フェーズ)は、lobbyRadius(デフォルトは lobbySpawn の周囲 10 ブロック)がプレイヤーの離脱を妨げます。テレポートはせず、すでに外にいるプレイヤーはいつでも戻れます。制限をなくすには 0 にします。

プレイヤーが理由もなく脱落する。 region はルールベースのモードのプレイゾーンです。ゲーム中にそこから出るとプレイヤーは脱落します(独自のフェーズを持つ Archery、Parkour、Dé à Coudre では適用されません)。床が消えるモード(Spleef、Block Party)では、floorMaterial に床として扱う Bukkit のマテリアル名をカンマ区切りで並べます。足元のブロックがそのどれでもなくなった時点でプレイヤーは脱落します。空の場合は空気以外のブロックがすべて床になり、不明な名前は無視されてコンソールに警告が出ます。床は floorMaterial から生成されないため、自分で作ります。

勝利メッセージが想定と違う。 winMessage はゲーム終了時に告知され、%winner% は勝者に置き換えられます。

プレイヤーがアリーナに参加できない。 アリーナの開いているロビーがすべて maxPlayers 人でいっぱいの場合、アリーナは満員となり参加は拒否されます。並行して 2 つ目のゲームが開かれることはありません。その場合、Join a minigame アクションは fullMessage を送信します。

関連エクステンション​