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

Guild

役職、招待、共有銀行、GUI メニューを備えたギルド。サーバー間で同期されます。

プライベートv0.1.0ソーシャル
必要TypeWriter0.9.0-beta-177 (BTC build)GUI (TypeWriter extension)MySQL (TypeWriter extension)任意NumericalStorage (TypeWriter extension)任意Redis or Valkey任意

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

概要​

Guild を使うと、プレイヤーはギルドを設立し、他のプレイヤーを招待し、階級を管理し、バンクを共有できます。すべては /guild コマンドで動作し、Web パネルで作ったメニューを追加すれば、プレイヤーが入力する必要はまったくなくなります。ギルドには、1 人のリーダーと、任意の数の幹部、メンバー、見習いがいます。

すべてのギルドは、1 つの Guild Artifact に保存され、高速に読み取れるようメモリ上に保持されます。MySQL ブリッジと Redis があれば、あらゆる変更がネットワーク内の他のサーバーにブロードキャストされ、ギルドのバンクはデータベース内の独立した行になるため、2 つのサーバーが同じコインを二重に使うことはありません。

メニューは GUI のメニューです。レイアウトと画面を設計し、アイテムにギルドのボタンとして印を付けると、拡張機能が、メンバーの頭と招待のバナーを追加します。

機能​

  • ギルドとロール — リーダー、幹部、メンバー、見習い。作成、招待、キック、昇格、譲渡、解散に対応します。
  • 招待 — 名前で招待し、/guild join で参加し、メニューから検索ボックスを使って承諾または辞退します。
  • ギルドメニュー — 1 つのエントリがすべての画面を持ち、メンバーの頭、ページ送り、タブに対応します。
  • 状態に応じたボタン — プレイヤーに当てはまらないボタン(ギルドに所属中の「作成」、リーダーでないときの「解散」)は、レイアウトから取り除かれます。
  • ギルドバンク — プレイヤーの NumericalStorage の残高を使って入出金します。データベースの行はアトミックに扱われます。
  • サーバー間の同期 — 作成、所属、ロール、バンク、削除が、グループ内のすべてのサーバーに反映されます。
  • プレースホルダー — 名前、ロール、リーダー、人数、オンライン数、バンク、メンバー名、プレイヤーからの検索。
  • 管理者用コマンド — ギルドの一覧、1 つの詳細表示、リーダーに代わっての解散やキック。

インストール​

  1. メニューを描画する GUI 拡張機能をインストールします。
  2. プレイヤーにバンクを使わせたい場合は、NumericalStorage 拡張機能をインストールします。入金と出金に使う残高を提供します。
  3. 任意、複数サーバーの場合: MySQL 拡張機能をインストールし、Redis(または Valkey)を有効にして、すべてのサーバーで同じ redis.group-id を設定します。ギルドバンクにも MySQL 拡張機能が必要です。ギルドバンクを参照してください。
  4. Guild の JAR を plugins/Typewriter/extensions/ に置き、サーバーを再起動します。
  5. static ページに Guild Artifact を作成し、パブリッシュします。

guild.use はデフォルトで全員に、guild.admin はオペレーターに与えられます。

はじめに​

/guild で開くギルドメニューを作成します。

  1. TypeWriter の Web パネルで、static ページに Guild Artifact を追加します。artifactId は btc_guild_data のままにします。
  2. Guild Menu エントリを追加します。/guild は、最初に見つかった Guild Menu を開きます。
  3. inventoryTitle、inventoryRows、guiType を設定し、layoutPool でレイアウトを作成して、mainLayoutId を設定します。GUI ガイドを参照してください。
  4. views で、画面を宣言します(たとえば main、members、join)。メンバーを一覧表示する画面の ID は memberListViewIds に、保留中の招待を一覧表示する画面の ID は joinListViewIds に入れます。
  5. アイテムを追加し、buttonType にギルドのボタンを設定します。GUILD_MEMBERS と GUILD_BANK は画面を開き、GUILD_LEAVE と GUILD_DISBAND はすぐに実行され、PAGE_NAV はリストのページ送りを行います。
  6. 名前の入力が必要なボタン(作成、招待、キック、昇格、譲渡)には、アイテムに input ダイアログを設定し、その onInputCommands でコマンドを実行します。たとえば guild create {input} です。
  7. パブリッシュして、/guild を実行します。
join 画面

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_MEMBERSmembers 画面を開きます(guild open members)。
GUILD_BANKbank 画面を開きます(guild open bank)。
GUILD_ALLIANCES, GUILD_WARSallies または 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
アーティファクト1

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

再起動後にギルドが消える。 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 — 他のソーシャルシステム。