MiniGame
概要
MiniGame は、TypeWriter のエントリーから、さまざまな種類のミニゲームを実行する単一のフレームワークです。Web パネルでアリーナ(ゲームモード、ロビーとゲームのスポーン地点、プレイヤー数の上限、チーム、キット、ラウンド、メッセージ)を記述します。プレイヤーは、アクションエントリーとメニューから参加します。エクステンションは、ロビー、準備完了の確認、カウントダウン、ゲーム本体、表彰台、後片付けを処理します。
すべてのゲームは、同じフェーズの順序(ロビー、カウントダウン、プレイ中、終了、クリーンアップ)で進行します。実行中の各ゲームは、プレイヤー、チーム、スコア、状態を保持する 1 つのコンテキストを持つため、ラウンド、チーム、スコアボードは、どのモードでも同じように動作します。インベントリはゲームの前に保存され、後で復元されます。プレイヤーの変更にはリージョンセーフなスケジューリングが使われるため、このエクステンションは Paper と Folia で動作します。
結果(勝利数、スコア、ベストタイム、ランキング)はアーティファクトに保存され、クエスト目標、ファクト、トリガー、プレースホルダーを通じて、サーバーの他の部分に公開されます。以前は別のエクステンションだったパルクールは、現在はゲームモードの 1 つです。このエクステンションは参考情報として文書化されており、TypeWriter の BTC ビルド上で動作します。
機能
- 26 のゲームモード — PvP、パルクールと移動、サバイバル、戦略、パーティー、アーケードのモードがあり、すべてアリーナの
gameTypeフィールドで選択します。 - フェーズエンジン — ロビー、カウントダウン、プレイ中、終了、クリーンアップ。準備完了の確認、最小プレイヤー数、途中参加、観戦者に対応します。
- チーム —
NONE、SOLO、RED_BLUE、または独自の名前を持つカスタムチーム。ロビーメニューから選ぶか、自動的にバランスが取られます。 - ラウンドとパワーアップ — ラウンド間でプレイヤーを復活させる任意のラウンドと、ルールベースのモード向けの、時間経過によるパワーアップのドロップ。
- パルクール — スタート地点、順序付きのチェックポイント、パーティクル付きのゴール地点、失敗時のアクション、タイマー、個人記録とアリーナ記録。
- 専用アリーナ — パルクール、Dé à Coudre、アーチェリー向けの追加の設定エントリー。
- メニュー — ゲームブラウザー、アリーナ選択、ロビー、チーム選択、統計、結果のメニュー。
- 永続化 — 勝利数、敗北数、スコア、ベストタイム、上位タイムをアーティファクトに保存し、非同期で書き込みます。
- クエスト連携 — 完了目標とファクト、そして、ゲーム開始、終了、参加、脱落、ラウンド開始、記録のトリガー。
- スコアボードとメッセージ — 設定可能なスコアボードの行と、ゲームのプレースホルダーを使った、参加、退出、脱落、勝利のメッセージ。
インストール
- TypeWriter の BTC ビルド(BTC Core、Paper または Folia)を実行します。
- MiniGame が依存するエクステンションをインストールします。BTC の GUI エクステンション(すべてのメニューが使用)、Quest、Region です。
- MiniGame の JAR を
plugins/Typewriter/extensions/に配置し、サーバーを再起動します。 - スコアボード以外で
<minigame_...>プレースホルダーを使いたい場合は、MiniPlaceholders をインストールします。これらは、PlaceholderAPI ではなく、BTC MiniPlaceholders ブリッジを通じて公開されます。 - ワールドにアリーナを作成し、エントリーが要求する場所(たとえば Dé à Coudre アリーナのプール)に保護リージョンを作成してから、Web パネルでエントリーを設定します。
はじめに
この手順では、永続的な統計を持つ Spleef アリーナを設定します。
- TypeWriter の Web パネルでマニフェストページを開き、Wins statistics アーティファクトを追加します。
artifactId(たとえばspleef_wins)を付けます。 - 同じページに Minigame Arena エントリーを追加します。
gameTypeをSPLEEFに設定し、位置ピッカーでlobbySpawn、gameSpawn、spectatorSpawn、endTeleportを設定します。 minPlayersとmaxPlayers、autoStartCountdown(ゲーム開始までの秒数)、maxGameDuration(秒)を設定します。- 複数のラウンドにしたい場合は、
useRoundsを有効にしてmaxRoundsを設定します(プレイヤーは復活し、ラウンドごとにgameSpawnに戻されます)。kitItemsにアイテムを追加し、giveKitはオンのままにします。 winStatArtifactを、手順 1 のアーティファクトにリンクします。- シーケンスページを開きます。Open the minigame browser アクションを追加し、NPC のダイアログ、アイテム、コマンドからトリガーします。または、
arenaにアリーナを設定した Join a minigame を使うと、プレイヤーをそのままロビーに入れられます。 - Publish し、アリーナに参加して、ロビーメニューで Ready をクリックし、カウントダウンを待ちます。ゲームが終了すると、勝者が発表され、統計が保存されます。
ロビーがカウントダウンを始めるのは、少なくとも minPlayers 人のプレイヤーが Ready をクリックしたときのみです。1 人でテストするあいだは、minPlayers を 1 に設定してください。
仕組み
- ロビー。 プレイヤーは
lobbySpawnで待機します。準備完了とマークしたプレイヤーの数がminPlayersに達すると、数秒後にカウントダウンが始まります。途中参加は、allowLateJoinがオンの場合にのみ、ロビーの後に可能です。 - カウントダウン。
autoStartCountdown秒間続き、チャットにメッセージが表示されます。プレイヤーが退出して人数が最小を下回ると、ゲームはロビーに戻ります。 - プレイ中。 プレイヤーは
gameSpawnにテレポートされ、インベントリが保存されて、キットが渡されます。フェーズは、遅くともmaxGameDuration秒後に終了します。onGameStartが発火します。 - 終了。 勝者と上位 3 名が発表されます。このフェーズは、
maxGameDurationのおよそ 60 分の 1 の長さで、5 秒から 60 秒の範囲に制限されます。 - クリーンアップ。 インベントリ、ゲームモード、体力が復元され、結果がアーティファクトに書き込まれ、
onGameEndが発火し、プレイヤーはendTeleportに戻ります。
脱落したプレイヤーは観戦者になり、allowSpectate がオンで、観戦者のスポーン地点が設定されている場合は、spectatorSpawn に移動されます。
ゲームモード
アリーナの gameType フィールドは、以下の 26 の値を受け付けます。3 つのモードには専用のコードがあります。残りの 23 はルールベースで、脱落モードと勝利条件で動く 1 つのエンジンを共有します。ルールベースのモードでは、ルール、ロビー、ラウンド、スコアリングが提供されます。ゲーム名に固有のコンテンツ(旗、モブのウェーブ、上昇する溶岩の床、TNT ブロック、ディスペンサー)は生成されません。ワールド内に自分で作成し、キット、リージョン、トリガーで連携させてください。
| モード | カテゴリー | デフォルトの人数 | 脱落 | 勝利条件 |
|---|---|---|---|---|
| Sumo | PvP / 戦闘 | 2-8 | 落下 | 最後の生存者 |
| Gladiator | PvP / 戦闘 | 2-12 | キル | 最後の生存者、20 秒ごとにパワーアップ |
| Duels | PvP / 戦闘 | 2 | キル | 最後の生存者 |
| KOTH | PvP / 戦闘 | 2-16 | タイムアウト | 最初に得点した人、パワーアップあり |
| Paintball | PvP / 戦闘 | 2-16 | キル | 最高得点 |
| One in the Chamber | PvP / 戦闘 | 2-12 | キル | 最高得点 |
| Parkour | パルクール / 移動 | 1 | 専用コード | ゴール地点に到達 |
| Block Party | パルクール / 移動 | 2-16 | 床の消失 | 最後の生存者、最大 5 ラウンド |
| TNT Run | パルクール / 移動 | 2-16 | 落下 | 最後の生存者 |
| Floor is Lava | パルクール / 移動 | 2-16 | 落下 | 最後の生存者、最大 3 ラウンド |
| Falling Blocks | PvE / サバイバル | 1-16 | 落下 | 120 秒間生き残る |
| Wave Survival | PvE / サバイバル | 1-8 | キル | 180 秒間生き残る、パワーアップあり |
| Zombie Apocalypse | PvE / サバイバル | 1-8 | キル | 300 秒間生き残る、パワーアップあり |
| Dodge the Arrows | PvE / サバイバル | 1-16 | キル | 最後の生存者 |
| Defend the Core | PvE / サバイバル | 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 browser | 6 つのカテゴリーの行と、選択したカテゴリーのゲーム。ゲームが利用できるのは、そのタイプのアリーナが存在する場合のみです。 |
| アリーナ選択 | 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_status | alive または eliminated。 |
rank | スコアによるプレイヤーの順位。ない場合は -。 |
lives, turn and queue | Dé à Coudre のみで、ライフ、現在のジャンパー、ジャンプの順番。他のモードでは -。 |
%player%(メッセージのみ) | 参加、退出、脱落のメッセージ内の、プレイヤー名。 |
エントリー
24 件のエントリー(拡張機能のソースから生成)。
アクション9
- Minigame ForcestartForcer le démarrage d'un mini-jeu
- Minigame JoinRejoindre un mini-jeu
- Minigame LeaveQuitter un mini-jeu
- Minigame Open ArenasOuvrir la sélection d'arène
- Minigame Open BrowserOuvrir le navigateur de mini-jeux
- Minigame Open LobbyOuvrir le menu du lobby
- Minigame Open ResultsOuvrir les résultats de la partie
- Minigame Open StatsOuvrir les statistiques de mini-jeux
- Minigame Reset RecordsRéinitialiser les records d'une arène
目標1
- Minigame Completion ObjectiveTerminer des mini-jeux
ファクト1
- Minigame Completion FactCompte les complétions d'un joueur, par arène
アーティファクト5
- Minigame Best Time ArtifactStocke le meilleur temps personnel de chaque joueur par arène
- Minigame ScoresStatistiques de scores
- Minigame StateÉtat d'un mini-jeu
- Minigame Top Times ArtifactStocke le classement des meilleurs temps d'une arène
- Minigame WinsStatistiques de victoires
マニフェスト5
- Archery ArenaArène de tir à l'arc
- Deacoudre ArenaDé à Coudre Arena
- Minigame ArenaArène de mini-jeu
- Minigame Lobby MenuMenu du lobby
- Parkour ArenaArène de Parkour
定義3
- Parkour CheckpointCheckpoint du parkour
- Parkour End PointPoint d'arrivée du parkour
- Parkour Start PointPoint de départ du parkour
トラブルシューティング
メニューが何も起こさない、または空になる。 メニューには 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 を送信します。