Guild
概要
Guild を使うと、プレイヤーはギルドを設立し、他のプレイヤーを招待し、階級を管理し、バンクを共有できます。すべては /guild コマンドで動作し、Web パネルで作ったメニューを追加すれば、プレイヤーが入力する必要はまったくなくなります。ギルドには、1 人のリーダーと、任意の数の幹部、メンバー、見習いがいます。
すべてのギルドは、1 つの Guild Artifact に保存され、高速に読み取れるようメモリ上に保持されます。MySQL ブリッジと Redis があれば、あらゆる変更がネットワーク内の他のサーバーにブロードキャストされ、ギルドのバンクはデータベース内の独立した行になるため、2 つのサーバーが同じコインを二重に使うことはありません。
メニューは GUI のメニューです。レイアウトと画面を設計し、アイテムにギルドのボタンとして印を付けると、拡張機能が、メンバーの頭と招待のバナーを追加します。
機能
- ギルドとロール — リーダー、幹部、メンバー、見習い。作成、招待、キック、昇格、譲渡、解散に対応します。
- 招待 — 名前で招待し、
/guild joinで参加し、メニューから検索ボックスを使って承諾または辞退します。 - ギルドメニュー — 1 つのエントリがすべての画面を持ち、メンバーの頭、ページ送り、タブに対応します。
- 状態に応じたボタン — プレイヤーに当てはまらないボタン(ギルドに所属中の「作成」、リーダーでないときの「解散」)は、レイアウトから取り除かれます。
- ギルドバンク — プレイヤーの NumericalStorage の残高を使って入出金します。データベースの行はアトミックに扱われます。
- サーバー間の同期 — 作成、所属、ロール、バンク、削除が、グループ内のすべてのサーバーに反映されます。
- プレースホルダー — 名前、ロール、リーダー、人数、オンライン数、バンク、メンバー名、プレイヤーからの検索。
- 管理者用コマンド — ギルドの一覧、1 つの詳細表示、リーダーに代わっての解散やキック。
インストール
- メニューを描画する GUI 拡張機能をインストールします。
- プレイヤーにバンクを使わせたい場合は、NumericalStorage 拡張機能をインストールします。入金と出金に使う残高を提供します。
- 任意、複数サーバーの場合: MySQL 拡張機能をインストールし、Redis(または Valkey)を有効にして、すべてのサーバーで同じ
redis.group-idを設定します。ギルドバンクにも MySQL 拡張機能が必要です。ギルドバンクを参照してください。 - Guild の JAR を
plugins/Typewriter/extensions/に置き、サーバーを再起動します。 - static ページに Guild Artifact を作成し、パブリッシュします。
guild.use はデフォルトで全員に、guild.admin はオペレーターに与えられます。
はじめに
/guild で開くギルドメニューを作成します。
- TypeWriter の Web パネルで、static ページに Guild Artifact を追加します。
artifactIdはbtc_guild_dataのままにします。 - Guild Menu エントリを追加します。
/guildは、最初に見つかった Guild Menu を開きます。 inventoryTitle、inventoryRows、guiTypeを設定し、layoutPoolでレイアウトを作成して、mainLayoutIdを設定します。GUI ガイドを参照してください。viewsで、画面を宣言します(たとえばmain、members、join)。メンバーを一覧表示する画面の ID はmemberListViewIdsに、保留中の招待を一覧表示する画面の ID はjoinListViewIdsに入れます。- アイテムを追加し、
buttonTypeにギルドのボタンを設定します。GUILD_MEMBERSとGUILD_BANKは画面を開き、GUILD_LEAVEとGUILD_DISBANDはすぐに実行され、PAGE_NAVはリストのページ送りを行います。 - 名前の入力が必要なボタン(作成、招待、キック、昇格、譲渡)には、アイテムに
inputダイアログを設定し、そのonInputCommandsでコマンドを実行します。たとえばguild create {input}です。 - パブリッシュして、
/guildを実行します。
ID が join の画面は、GUILD_JOIN と GUILD_PENDING_INVITES が開くものです。views と joinListViewIds に join を追加し、guild joinsearch {input} を実行する input ダイアログを持つアイテムを追加すると、プレイヤーがギルド名で招待を絞り込めるようになります。
仕組み
ギルドは、起動時にメモリに読み込まれます。変更のたびに、ギルドはバックグラウンドでアーティファクトに保存され、他のサーバーにブロードキャストされて、そちらはコピーを置き換えます。保留中の招待はメモリ上にのみ保持され、保存されません。
メニュー
Guild Menu は、次のようなギルド固有の動作を持つ GUI のメニューです。
コンテンツパネル。 memberListViewIds に列挙された画面では、各メンバーがプレイヤーの頭として、リーダーを先頭に、ロールとオンライン状態とともに表示されます。リーダーの場合、左クリックでメンバーを昇格し、右クリックでキックします。joinListViewIds に列挙された画面では、保留中の各招待がバナーとして表示されます。左クリックで参加し、右クリックで辞退します。パネルは、contentX、contentY、contentColumns、contentRows で配置します。
ボタン。 次の buttonType の値は、そのまま動作します。
buttonType | クリック |
|---|---|
GUILD_MEMBERS | members 画面を開きます(guild open members)。 |
GUILD_BANK | bank 画面を開きます(guild open bank)。 |
GUILD_ALLIANCES, GUILD_WARS | allies または wars 画面を開きます(下の注意を参照)。 |
GUILD_LEAVE | ギルドを脱退します。 |
GUILD_DISBAND | ギルドを解散します(リーダーのみ)。 |
GUILD_JOIN, GUILD_PENDING_INVITES | 同じメニューの join ビューに切り替えます。 |
NAV_BACK, NAV_CLOSE | 戻る、メニューを閉じる。 |
PAGE_NAV | 左クリックで進み、右クリックで戻ります。名前にはページのカウンターが表示されます。1 ページで足りる場合は非表示になります。 |
次の値は、アクションを割り当てません。自分で設定するアイテム(表示テキスト、または対応するコマンドを実行する input ダイアログ)用です。GUILD_INFO、GUILD_MEMBER_MANAGE、GUILD_INVITE、GUILD_CREATE、GUILD_KICK、GUILD_PROMOTE、GUILD_DEMOTE、GUILD_TRANSFER、GUILD_ALLY_ADD、GUILD_ALLY_REMOVE、GUILD_WAR_DECLARE、GUILD_WAR_END、GUILD_BANK_DEPOSIT、GUILD_BANK_WITHDRAW、GUILD_ACCEPT_INVITE、GUILD_DECLINE_INVITE。
非表示になるボタン。 アイテムは、当てはまらない場合にレイアウトから取り除かれます。プレイヤーがギルドを持っている場合の GUILD_CREATE と GUILD_JOIN、プレイヤーがリーダーまたは幹部でない場合の GUILD_INVITE、ギルドがない場合の GUILD_LEAVE、GUILD_MEMBERS、GUILD_BANK、GUILD_ALLIANCES、GUILD_WARS、プレイヤーがリーダーでない場合の GUILD_DISBAND です。
スロットのコマンド。 アイテムは、guild open [view]、guild page next|prev|<number>、guild create <name>、guild invite <name>、guild join <guild>、guild declineinvite <guild>、guild joinsearch <text>、guild leave、guild disband、guild kick <name>、guild promote <name>、guild transfer <name> を実行できます。これらは、クリックしたプレイヤーとして実行されます。
ギルドは、同盟リスト、敵リスト、レベルを保存し、プレースホルダーでそれらを公開しますが、このバージョンでは、それらを変更するコマンドやボタンはありません。レベルは 1 のままで、降格コマンドもありません。allies と wars の画面は、自分で作った場合にのみ存在します。
メニューのデフォルトのテキスト(タイトル「Guilde」、頭のロア)と、guild admin の応答は、フランス語です。プレイヤー向けのチャットメッセージは、英語です。メニューのテキストは、レイアウトで上書きしてください。
ギルドバンク
バンクは、データベースの MySQL に自動的に作成されるテーブル btc_guild_bank(名前は table-prefix に従いません)にある、ギルドの残高に対して動作します。各操作はアトミックなので、別々のサーバーからの入金と出金で、バンクが残高以上に引き出されることはありません。
/guild deposit <amount>は、プレイヤーの NumericalStorage の残高からコインを取り、バンクに加えます。どのメンバーも入金できます。/guild withdraw <amount>は、バンクからプレイヤーにコインを移します。出金できるのは、リーダーと幹部だけです。- バンクに接続できない場合、入金は返金され、プレイヤーには、ストレージが一時的に利用できないと通知されます。
MySQL 拡張機能が有効でない場合、または NumericalStorage がない場合、バンクは使えません。
コマンド
すべてのコマンドに guild.use が必要です。エイリアス: /g、/guilde。引数なしのコマンドは、最初の Guild Menu を開き、存在しない場合は何も出力しません。
| コマンド | 説明 |
|---|---|
/guild | ギルドメニューを開きます。 |
/guild create <name> | ギルドを作成します。名前は、3〜16 文字の英数字でなければなりません。 |
/guild invite <player> | プレイヤーを招待します(リーダーまたは幹部)。 |
/guild join <guild> | 招待されたギルドに参加します。 |
/guild leave | 自分のギルドを脱退します。メンバーのいるリーダーは、先に譲渡または解散する必要があります。 |
/guild kick <player> | メンバーをキックします(リーダー、または幹部が幹部以外に対して)。 |
/guild promote <player> | 見習いをメンバーに、メンバーを幹部に昇格します(リーダーのみ)。 |
/guild transfer <player> | リーダーの座を譲ります。元のリーダーは幹部になります。 |
/guild deposit <amount> | ギルドバンクにコインを入れます。 |
/guild withdraw <amount> | バンクからコインを取り出します(リーダーまたは幹部)。 |
/guild info | 自分のギルドのリーダー、メンバー数、レベル、バンクを表示します。 |
/guild disband | 自分のギルドを解散します(リーダーのみ)。 |
/guild admin list | すべてのギルドを一覧表示します(guild.admin が必要)。 |
/guild admin info <guild> | 1 つのギルドを表示します。 |
/guild admin disband <guild> | ギルドを解散します。そのリーダーがオンラインである必要があります。 |
/guild admin kick <guild> <player> | メンバーをキックします。そのギルドのリーダーがオンラインである必要があります。 |
権限
| 権限 | デフォルト | 許可される内容 |
|---|---|---|
guild.use | 全員 | すべての /guild コマンド。メニューのクリックは、これを確認せずに、同じアクションを実行します。 |
guild.admin | オペレーター | /guild admin コマンド。 |
プレースホルダー
<guild_name> のような、MiniMessage テキスト用の MiniPlaceholders のタグです。
| プレースホルダー | 返す値 |
|---|---|
<guild_in_guild> | プレイヤーがギルドにいる場合は 1、そうでなければ 0。 |
<guild_name> | ギルド名。ギルドがない場合は空。 |
<guild_role> | LEADER、OFFICER、MEMBER、RECRUIT のいずれか。 |
<guild_leader> | リーダーの名前。 |
<guild_size>, <guild_members> | メンバー数(どちらも同じ値を返します)。 |
<guild_online_count> | このサーバーでオンラインのメンバー。 |
<guild_level> | ギルドのレベル(現時点では常に 1)。ギルドがない場合は 0。 |
<guild_bank> | このサーバーに保存されているバンクの残高。 |
<guild_allies_count>, <guild_enemies_count> | 同盟と敵の数。 |
<guild_list> | カンマ区切りのメンバー名。 |
<guild_member_name:index> | その位置(0 から開始)のメンバー名。 |
<guild_of:name> | 指定したプレイヤーのギルド。ない場合は空。 |
エントリ
2 件のエントリー(拡張機能のソースから生成)。
アクション1
- Guild MenuGuild Menu
アーティファクト1
- Guild ArtifactArtifact for storing guild data
トラブルシューティング
再起動後にギルドが消える。 Guild Artifact がパブリッシュされていないため、何も保存されません。static ページに追加して、パブリッシュしてください。
/guild create が「Guild name must be alphanumeric and between 3-16 characters.」と応答する。 名前に使えるのは、英数字だけです。スペースもアンダースコアも使えません。
/guild が何も出力しない。 Guild Menu エントリがありません。作成してパブリッシュしてください。/guild info のようなサブコマンドは、それがなくても動作します。
入金が「Insufficient funds」で失敗する。 入金は、プレイヤーの NumericalStorage の残高を読み取ります。NumericalStorage をインストールし、プレイヤーがそこに十分なコインを持っているか確認してください。
「Guild bank storage is temporarily unavailable.」と出る。 バンクのテーブルに接続できませんでした。MySQL 拡張機能を有効にし(mysql.enabled: true)、ログでデータベースの接続を確認してください。入金は返金されます。
あるサーバーで作成したギルドが、もう一方で見つからない。 各サーバーには、同じ redis.group-id、一意の redis.server-name、そしてアーティファクトを共有するための mysql.enabled: true が必要です。group-id がないと、何もブロードキャストされません。
メンバーの頭や招待のバナーが表示されない。 アクティブな画面が、memberListViewIds または joinListViewIds に列挙されていません。views が空の場合、メニューは view を使います。それを members または join に設定してください。
関連する拡張機能
- MySQL — Redis によるメッセージングと、ギルドバンクの背後にあるデータベース。
- GUI — ギルドメニューが使う、レイアウト、ビュー、
inputダイアログ。 - NumericalStorage — バンクが使うプレイヤーの残高。
- Friend と Party — 他のソーシャルシステム。