Party
概要
Party を使うと、プレイヤーは短期間のグループを作れます。リーダーがパーティを作成して名前でプレイヤーを招待し、招待されたプレイヤーは /party join <leader> で承諾します。クエスト、ダンジョン、HUD のシステムは、「このプレイヤーと同じパーティにいるのは誰か」を問い合わせられるようになります。リーダーは、パーティ全員をネットワーク内の別のサーバーにワープさせることもできます。
パーティはデータベースには保存されません。メモリ上に存在し、Redis を通じて、ネットワーク内の他のサーバーに複製されます。切断したメンバーはパーティに残るため、サーバーを移動してもパーティは維持され、パーティが終了するのは、メンバーが退出する、キックされる、またはリーダーが解散したときだけです。すべてのサーバーを再起動すると、すべてのパーティが解消されます。
パーティメニューは、Web パネルで作る GUI のメニューです。メンバーはプレイヤーの頭として、保留中の招待はクリックできる頭として表示されます。
機能
- 作成、招待、参加、脱退、キック、解散 — コマンド、TypeWriter のアクション、メニューのボタンで利用できます。
- パーティメニュー — メンバーと招待の画面、ページ送り、タブを備えた 1 つのエントリ。
- 招待 — チャットでの名前入力、検索フィルター付きの参加画面、60 秒での失効。
- サイズの制限 — デフォルトの最大人数と、
typewriter.party.vipなどの権限によるより高い上限。 - サーバーへのワープ — リーダーが、ネットワーク内のどこにいても、全メンバーを別のバックエンドに送ります。
- サーバー間のパーティ — 所属、招待、パーティチャットのメッセージが、グループ内のすべてのサーバーに届きます。
- ストーリーのフック — ファクトで、プレイヤーがパーティにいるかがわかります。
- プレースホルダー — HUD 向けの、リーダー、ロール、人数、メンバー名、メンバーの体力。
- 連携 — 協力の島やダンジョンなど、BTC の他の拡張機能が、パーティを作成し、読み取ります。
インストール
- メニューを描画する GUI 拡張機能と、Party が依存関係として宣言している Quest 拡張機能をインストールします。
- 任意、複数サーバーの場合: MySQL 拡張機能をインストールし、Redis(または Valkey)を有効にして、すべてのサーバーで同じ
redis.group-idと、一意のredis.server-nameを設定します。ワープには、プロキシがbtc:bridgeチャンネルを処理する必要があります。 - Party の JAR を
plugins/Typewriter/extensions/に置き、サーバーを再起動します。
party.use はデフォルトで全員に、party.admin はオペレーターに与えられます。
はじめに
パーティメニューとサイズの制限を作成します。
- TypeWriter の Web パネルでページを開き、Party Menu Config エントリを追加します。使われるのはその制限だけです(設定を参照)。
maxPartySizeを設定し、必要に応じてmaxPartySizePermissionsも設定します。 - Party Menu エントリを追加します。
/partyは、最初に見つかったものを開きます。 inventoryTitle、inventoryRows、guiTypeを設定し、layoutPoolでレイアウトを作成して、mainLayoutIdを設定します。GUI ガイドを参照してください。viewsで画面を宣言します(たとえばmembersとjoin)。メンバー画面の ID はmemberListViewIdsに、招待画面の ID はjoinListViewIdsに列挙します。buttonTypeを持つアイテムを追加します。PARTY_MEMBERS、PARTY_JOIN、PAGE_NAV、そして、コマンドを実行するボタンです(メニューを参照)。- パブリッシュして、
/partyを実行します。
クエストからパーティを開始するには、Create Party アクションを使います。プレイヤーを集めるには、プレースホルダーを使える targetName を指定した Invite Player と、leaderName を指定した Join Party を使います。
targetServer に、プロキシが認識しているバックエンド名(たとえば dungeon-1)を設定した Warp Party to Server を使います。トリガーできるのは、リーダーだけです。In Party ファクトを criteria として組み合わせると、パーティにいるプレイヤーにだけワープを提供できます。
仕組み
パーティの変更はすべて、他のサーバーに送られ、そちらはコピーを置き換えます。招待は 60 秒で失効しますが、チェックは 1 分に 1 回なので、招待が持続するのは 60〜120 秒です。リーダーが退出すると、残っている最初のメンバーがリーダーになります。メンバーのいないパーティは削除されます。
設定
Party Menu Config エントリは任意です。保持するのはパーティのサイズ制限だけで、次のフィールドを使います。
maxPartySize— メンバーの最大数のデフォルト。デフォルトは5です。maxPartySizePermissions— 権限と最大サイズの対応。リーダーが持つ、一致する最も高いサイズが適用されます。デフォルトは、typewriter.party.vipが 8、typewriter.party.mvpが 12 です。
このエントリがない場合、サイズの制限はありません。パーティメニュー自体はここでは設定せず、Party Menu エントリから提供されます。
Party Artifact は、このバージョンでは、パーティサービスによって読み書きされないため、作成する必要はありません。
メニュー
Party Menu エントリは、次のようなパーティ固有の動作を持つ GUI のメニューです。
コンテンツパネル。 memberListViewIds に列挙された画面では、各メンバーが、ロールとオンライン状態を示すプレイヤーの頭として表示されます。リーダーの場合、他のメンバーを左クリックするとキックされます。joinListViewIds に列挙された画面では、保留中の各招待が、招待したリーダーの頭として表示されます。左クリックで参加し、右クリックで辞退します。パネルは、contentX(デフォルトは 5)、contentY、contentColumns(デフォルトは 4)、contentRows(デフォルトは 7)で配置します。
ボタン。 次の buttonType の値は、そのまま動作します。
buttonType | クリック |
|---|---|
PARTY_MEMBERS | members 画面を開きます(party open members)。 |
PARTY_JOIN | 同じメニューの join ビューに切り替えます。 |
PAGE_NAV | 左クリックで進み、右クリックで戻ります。名前にはページのカウンターが表示されます。1 ページで足りる場合は非表示になります。 |
次の値は、アクションを割り当てません。自分でアイテムを設定し、コマンドを与えてください。PARTY_INFO、PARTY_CREATE、PARTY_LEAVE、PARTY_DISBAND、PARTY_INVITE、PARTY_CLOSE、PARTY_ACCEPT_INVITE、PARTY_DECLINE_INVITE。たとえば、対応するアイテムで、party create、party leave、party disband を実行します。招待ボタンには、入力された名前が必要です。onInputCommands で party invite {input} を実行する input ダイアログを設定してください。
スロットのコマンド。 アイテムは、party open [view]、party page next|prev|<number>、party info、party create、party leave、party disband、party kick <name>、party invite <name>、party join <leader>、party declineinvite <leader>、party joinsearch <text> を実行できます。これらは、クリックしたプレイヤーとして実行されます。
頭のロアと、一部の管理者向けメッセージは、フランス語です。プレースホルダー <party_role> は、フランス語の Chef、Moderateur、Membre を返します。識別子の LEADER、MODERATOR、MEMBER が必要な場合は、<party_role_raw> を使ってください。
コマンド
すべてのコマンドに party.use が必要です。エイリアス: /p。引数なしのコマンドは、最初の Party Menu を開き、存在しない場合は何も出力しません。
| コマンド | 説明 |
|---|---|
/party | パーティメニューを開きます。 |
/party create | パーティを作成し、そのリーダーになります。 |
/party invite | インベントリを閉じ、チャットにプレイヤー名を入力します。 |
/party invite <player> | プレイヤーを招待します(リーダーのみ)。 |
/party join <leader> | 招待されている場合、そのリーダーのパーティに参加します。 |
/party accept <leader> | join と同じです。 |
/party leave | 自分のパーティを脱退します。 |
/party kick <player> | メンバーをキックします(リーダーのみ)。 |
/party disband | パーティを解散します(リーダーのみ)。 |
/party info | リーダーとメンバーを表示します。 |
/party admin list | アクティブなすべてのパーティを一覧表示します(party.admin が必要)。 |
/party admin info <player> | プレイヤーのパーティを表示します。 |
/party admin disband <player> | プレイヤーのパーティを解散します。そのリーダーがオンラインである必要があります。 |
/party admin kick <player> | プレイヤーを、そのパーティから外します。パーティのリーダーがオンラインである必要があります。 |
権限
| 権限 | デフォルト | 許可される内容 |
|---|---|---|
party.use | 全員 | すべての /party コマンド。メニューのクリックは、これを確認せずに、同じアクションを実行します。 |
party.admin | オペレーター | /party admin コマンド。 |
typewriter.party.vip, typewriter.party.mvp | なし | より大きなパーティのサイズ。設定エントリの maxPartySizePermissions に列挙されている場合にのみ有効です。これらの名前はデフォルトで、変更できます。 |
プレースホルダー
<party_leader> のような、MiniMessage テキスト用の MiniPlaceholders のタグです。インデックスは 0 から始まります。
| プレースホルダー | 返す値 |
|---|---|
<party_in_party> | プレイヤーがパーティにいる場合は 1、そうでなければ 0。 |
<party_leader> | リーダーの名前。 |
<party_role> | Chef、Moderateur、Membre のいずれか。 |
<party_role_raw> | LEADER、MODERATOR、MEMBER のいずれか。 |
<party_size> | メンバー数。 |
<party_members> | メンバー数。 |
<party_members:index> | その位置のメンバー名。 |
<party_members_exclude:index> | その位置のメンバー名(閲覧者を除く)。 |
<party_list> | カンマ区切りのメンバー名。 |
<party_member_name:index> | その位置のメンバー名。 |
<party_member_uuid:index> | そのメンバーの UUID。 |
<party_member_health:index> | このサーバーにオンラインの場合の、そのメンバーの現在の体力。それ以外は 0.0。 |
<party_member_health_max:index> | 最大体力。不明な場合は 20.0。 |
<party_member_health_percent:index> | パーセンテージでの体力。 |
エントリ
10 件のエントリー(拡張機能のソースから生成)。
アクション7
- Create PartyCreate a new party
- Invite PlayerInvite a player to your party
- Join PartyJoin a party
- Kick Party MemberKick a member from your party
- Leave PartyLeave your current party
- Party MenuOpen Party Menu
- Warp Party to ServerWarp the player's party to a server
ファクト1
- In PartyCheck if player is in a party
アーティファクト1
- Party ArtifactArtifact for storing party and friend data
マニフェスト1
- Party size limitsMaximum party size, with optional permission-based overrides
トラブルシューティング
/party が何もしない。 Party Menu エントリがパブリッシュされていません。/party create のようなサブコマンドは、それがなくても動作します。
「You do not have an invite to this party.」と出る。 招待が 60〜120 秒で失効したか、リーダーの名前のつづりが間違っています。リーダーにもう一度招待してもらい、/party join <leader> を使ってください。
「Party is full! Limit: N」と出る。 リーダーが、Party Menu Config の maxPartySize に達しました。引き上げるか、maxPartySizePermissions に列挙された権限をリーダーに付与してください。設定エントリがない場合、制限はありません。
他のサーバーのメンバーが表示されない。 すべてのサーバーに、空でない同じ redis.group-id、一意の redis.server-name、そして接続された Redis が必要です。group-id がないと、何もブロードキャストされません。
ワープが「Cross-server transport is unavailable.」で失敗する。 Redis が接続されていません。MySQL 拡張機能の設定を確認してください。targetServer は、プロキシが認識しているバックエンド名でなければならず、プロキシが btc:bridge チャンネルを受け付ける必要があります。
Party Menu Config の変更(スロット、ボタン、メッセージ)が効果を持たない。 それらのフィールドは、すでに登録されていない以前のメニューのものです。メニューを設計するには、Party Menu エントリを使ってください。
/party invite の次のチャットメッセージが表示されない。 これは仕様です。名前なしのコマンドは、1 件のチャットメッセージを待ち、それをプレイヤー名として使って、そのプレイヤーを招待します。名前が間違っていると、単にエラーになります。