Guild
Überblick
Mit Guild gründen Spieler eine Gilde, laden andere ein, verwalten Ränge und teilen eine Bank. Alles funktioniert mit /guild-Befehlen, und du kannst ein im Web-Panel gebautes Menü hinzufügen, sodass Spieler nie tippen müssen. Eine Gilde hat einen Anführer und beliebig viele Offiziere, Mitglieder und Rekruten.
Alle Gilden werden in einem einzigen Guild Artifact gespeichert und für schnelle Lesezugriffe im Speicher gehalten. Mit der MySQL-Brücke und Redis wird jede Änderung an die anderen Server des Netzwerks übertragen, und die Gildenbank ist eine eigene Zeile in der Datenbank, sodass zwei Server dieselben Münzen nie zweimal ausgeben können.
Das Menü ist ein GUI-Menü. Du gestaltest sein Layout und seine Bildschirme, markierst Items als Gilden-Buttons, und die Erweiterung fügt die Mitgliederköpfe und Einladungsbanner hinzu.
Funktionen
- Gilden und Rollen — Anführer, Offizier, Mitglied und Rekrut, mit Erstellen, Einladen, Kicken, Befördern, Übertragen und Auflösen.
- Einladungen — lade per Name ein, tritt mit
/guild joinbei, nimm Einladungen im Menü mit einem Suchfeld an oder lehne sie ab. - Gildenmenü — ein Entry trägt jeden Bildschirm, mit Mitgliederköpfen, Seiten und Tabs.
- Zustandsabhängige Buttons — Buttons, die für den Spieler nicht zutreffen können (Erstellen, solange er in einer Gilde ist, Auflösen, wenn er nicht Anführer ist), werden aus dem Layout entfernt.
- Gildenbank — einzahlen und abheben mit dem NumericalStorage-Guthaben des Spielers, mit atomaren Datenbankzeilen.
- Serverübergreifende Synchronisierung — Erstellung, Mitgliedschaft, Rollen, Bank und Entfernung erreichen jeden Server der Gruppe.
- Platzhalter — Name, Rolle, Anführer, Größe, Online-Anzahl, Bank, Mitgliedsnamen und eine Suche nach Spieler.
- Admin-Befehle — Gilden auflisten, eine untersuchen, im Namen eines Anführers auflösen oder kicken.
Installation
- Installiere die GUI-Erweiterung, die das Menü zeichnet.
- Installiere die NumericalStorage-Erweiterung, wenn Spieler die Bank nutzen sollen. Sie liefert das Guthaben, das Ein- und Auszahlungen verwenden.
- Optional, für mehrere Server: Installiere die MySQL-Erweiterung, aktiviere Redis (oder Valkey) und setze auf jedem Server dieselbe
redis.group-id. Die Gildenbank erfordert ebenfalls die MySQL-Erweiterung, siehe Gildenbank. - Lege die Guild-JAR in
plugins/Typewriter/extensions/ab und starte den Server neu. - Erstelle ein Guild Artifact auf einer Static-Seite und veröffentliche sie.
guild.use wird standardmäßig an alle vergeben und guild.admin an Operatoren.
Erste Schritte
So baust du ein Gildenmenü, das sich mit /guild öffnet:
- Füge im TypeWriter-Web-Panel auf einer Static-Seite ein Guild Artifact hinzu. Lass
artifactIdaufbtc_guild_data. - Füge einen Guild Menu-Entry hinzu.
/guildöffnet das erste gefundene Guild Menu. - Setze
inventoryTitle,inventoryRowsundguiType, baue das Layout inlayoutPoolund setzemainLayoutId. Siehe die GUI-Anleitungen. - Deklariere deine Bildschirme in
views(zum Beispielmain,members,join). Trage die IDs der Bildschirme, die Mitglieder auflisten, inmemberListViewIdsein und die ID des Bildschirms, der ausstehende Einladungen auflistet, injoinListViewIds. - Füge Items hinzu und setze
buttonTypeauf Gilden-Buttons:GUILD_MEMBERSundGUILD_BANKöffnen Bildschirme,GUILD_LEAVEundGUILD_DISBANDwerden sofort ausgeführt, undPAGE_NAVblättert durch eine Liste. - Gib Buttons, die einen eingetippten Namen benötigen (erstellen, einladen, kicken, befördern, übertragen), dem Item einen
input-Dialog, dessenonInputCommandsden Befehl ausführt, zum Beispielguild create {input}. - Veröffentliche und führe
/guildaus.
Ein Bildschirm mit der ID join ist der, den GUILD_JOIN und GUILD_PENDING_INVITES öffnen. Füge join zu views und zu joinListViewIds hinzu und gib ihm ein Item mit einem input-Dialog, der guild joinsearch {input} ausführt, damit Spieler die Einladungen nach Gildennamen filtern können.
So funktioniert es
Gilden werden beim Start in den Speicher geladen. Nach jeder Änderung wird die Gilde im Hintergrund im Artifact gespeichert und an andere Server gesendet, die ihre Kopie ersetzen. Ausstehende Einladungen werden nur im Speicher gehalten und nicht gespeichert.
Menüs
Das Guild Menu ist ein GUI-Menü mit diesen gildenspezifischen Verhaltensweisen.
Inhaltsbereich. Auf einem in memberListViewIds aufgeführten Bildschirm ist jedes Mitglied ein Spielerkopf, der Anführer zuerst, mit Rolle und Online-Status. Bist du der Anführer, befördert ein Linksklick ein Mitglied und ein Rechtsklick kickt es. Auf einem in joinListViewIds aufgeführten Bildschirm ist jede ausstehende Einladung ein Banner: Linksklick tritt bei, Rechtsklick lehnt ab. Der Bereich wird mit contentX, contentY, contentColumns und contentRows platziert.
Buttons. Diese buttonType-Werte funktionieren von Haus aus:
buttonType | Klick |
|---|---|
GUILD_MEMBERS | Öffnet den Bildschirm members (guild open members). |
GUILD_BANK | Öffnet den Bildschirm bank (guild open bank). |
GUILD_ALLIANCES, GUILD_WARS | Öffnen die Bildschirme allies oder wars (siehe den Hinweis unten). |
GUILD_LEAVE | Verlässt die Gilde. |
GUILD_DISBAND | Löst die Gilde auf (nur Anführer). |
GUILD_JOIN, GUILD_PENDING_INVITES | Wechseln zur View join desselben Menüs. |
NAV_BACK, NAV_CLOSE | Zurückgehen, Menü schließen. |
PAGE_NAV | Linksklick vorwärts, Rechtsklick zurück; der Name zeigt den Seitenzähler. Ausgeblendet, wenn eine Seite genügt. |
Diese Werte hängen keine Aktion an. Sie sind für Items gedacht, die du selbst konfigurierst (Anzeigetext oder ein input-Dialog, der den passenden Befehl ausführt): 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.
Ausgeblendete Buttons. Items werden aus dem Layout entfernt, wenn sie nicht zutreffen: GUILD_CREATE und GUILD_JOIN, sobald der Spieler eine Gilde hat; GUILD_INVITE, außer der Spieler ist Anführer oder Offizier; GUILD_LEAVE, GUILD_MEMBERS, GUILD_BANK, GUILD_ALLIANCES und GUILD_WARS ohne Gilde; GUILD_DISBAND, außer der Spieler ist Anführer.
Slot-Befehle. Items können 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> und guild transfer <name> ausführen. Sie werden als der Spieler ausgeführt, der geklickt hat.
Gilden speichern eine Verbündetenliste, eine Feindesliste und eine Stufe, und die Platzhalter geben sie aus, aber in dieser Version ändert sie kein Befehl und kein Button: Die Stufe bleibt bei 1, und es gibt keinen Degradierungsbefehl. Die Bildschirme allies und wars existieren nur, wenn du sie baust.
Die Standardtexte des Menüs (Titel „Guilde“, Kopf-Lore) sind auf Französisch, ebenso die Antworten von guild admin. Chatnachrichten für Spieler sind auf Englisch. Überschreibe Menütexte in deinem Layout.
Gildenbank
Die Bank arbeitet mit dem Guthaben der Gilde in der Tabelle btc_guild_bank (der Name folgt nicht table-prefix), die automatisch in der MySQL-Datenbank erstellt wird. Jede Operation ist atomar, sodass Ein- und Auszahlungen von verschiedenen Servern die Bank nicht überziehen können.
/guild deposit <amount>nimmt Münzen vom Guthaben des Spielers in NumericalStorage und fügt sie der Bank hinzu. Jedes Mitglied kann einzahlen./guild withdraw <amount>verschiebt Münzen von der Bank zum Spieler. Nur der Anführer und Offiziere können abheben.- Ist die Bank nicht erreichbar, wird eine Einzahlung zurückerstattet, und dem Spieler wird mitgeteilt, dass der Speicher vorübergehend nicht verfügbar ist.
Ohne aktivierte MySQL-Erweiterung oder ohne NumericalStorage kann die Bank nicht genutzt werden.
Befehle
Alle Befehle erfordern guild.use. Aliase: /g, /guilde. Der bloße Befehl öffnet das erste Guild Menu und gibt nichts aus, wenn keines existiert.
| Befehl | Beschreibung |
|---|---|
/guild | Öffnet das Gildenmenü. |
/guild create <name> | Erstellt eine Gilde. Der Name muss aus 3 bis 16 Buchstaben oder Ziffern bestehen. |
/guild invite <player> | Lädt einen Spieler ein (Anführer oder Offizier). |
/guild join <guild> | Tritt einer Gilde bei, zu der du eingeladen wurdest. |
/guild leave | Verlässt deine Gilde. Ein Anführer mit Mitgliedern muss zuerst übertragen oder auflösen. |
/guild kick <player> | Kickt ein Mitglied (Anführer, oder Offizier bei Nicht-Offizieren). |
/guild promote <player> | Rekrut zum Mitglied, Mitglied zum Offizier (nur Anführer). |
/guild transfer <player> | Übergibt die Anführerschaft. Der frühere Anführer wird Offizier. |
/guild deposit <amount> | Legt Münzen in die Gildenbank. |
/guild withdraw <amount> | Entnimmt Münzen aus der Bank (Anführer oder Offizier). |
/guild info | Gibt Anführer, Mitgliederzahl, Stufe und Bank deiner Gilde aus. |
/guild disband | Löst deine Gilde auf (nur Anführer). |
/guild admin list | Listet alle Gilden auf (erfordert guild.admin). |
/guild admin info <guild> | Zeigt eine Gilde an. |
/guild admin disband <guild> | Löst eine Gilde auf. Ihr Anführer muss online sein. |
/guild admin kick <guild> <player> | Kickt ein Mitglied. Der Anführer der Gilde muss online sein. |
Berechtigungen
| Berechtigung | Standard | Erlaubt |
|---|---|---|
guild.use | Alle | Jeden /guild-Befehl. Menüklicks führen dieselben Aktionen aus, ohne sie zu prüfen. |
guild.admin | Operatoren | Die /guild admin-Befehle. |
Platzhalter
MiniPlaceholders-Tags für MiniMessage-Text, etwa <guild_name>.
| Platzhalter | Liefert |
|---|---|
<guild_in_guild> | 1, wenn der Spieler in einer Gilde ist, sonst 0. |
<guild_name> | Gildenname, leer ohne Gilde. |
<guild_role> | LEADER, OFFICER, MEMBER oder RECRUIT. |
<guild_leader> | Name des Anführers. |
<guild_size>, <guild_members> | Anzahl der Mitglieder (beide liefern denselben Wert). |
<guild_online_count> | Mitglieder, die auf diesem Server online sind. |
<guild_level> | Gildenstufe (derzeit immer 1), 0 ohne Gilde. |
<guild_bank> | Bankstand, wie auf diesem Server gespeichert. |
<guild_allies_count>, <guild_enemies_count> | Anzahl der Verbündeten und Feinde. |
<guild_list> | Mitgliedsnamen, durch Kommas getrennt. |
<guild_member_name:index> | Mitgliedsname an dieser Position, ab 0 gezählt. |
<guild_of:name> | Gilde des genannten Spielers, leer, wenn keine. |
Entries
2 Einträge, aus dem Quellcode der Erweiterung generiert.
Aktionen1
- Guild MenuGuild Menu
Artefakte1
- Guild ArtifactArtifact for storing guild data
Fehlerbehebung
Gilden sind nach einem Neustart weg. Es ist kein Guild Artifact veröffentlicht, daher wird nichts gespeichert. Füge es auf einer Static-Seite hinzu und veröffentliche.
/guild create antwortet „Guild name must be alphanumeric and between 3-16 characters.“ Namen akzeptieren nur Buchstaben und Ziffern, keine Leerzeichen, keinen Unterstrich.
/guild gibt nichts aus. Es gibt keinen Guild Menu-Entry. Erstelle und veröffentliche einen. Unterbefehle wie /guild info funktionieren auch ohne ihn.
Einzahlungen schlagen mit „Insufficient funds“ fehl. Die Einzahlung liest das NumericalStorage-Guthaben des Spielers. Installiere NumericalStorage und prüfe, ob der Spieler dort genug Münzen hat.
„Guild bank storage is temporarily unavailable.“ Die Banktabelle war nicht erreichbar. Aktiviere die MySQL-Erweiterung (mysql.enabled: true) und prüfe die Datenbankverbindung in den Logs. Die Einzahlung wird zurückerstattet.
Eine auf einem Server erstellte Gilde fehlt auf dem anderen. Jeder Server benötigt dieselbe redis.group-id, einen eindeutigen redis.server-name und mysql.enabled: true, damit das Artifact gemeinsam genutzt wird. Ohne group-id wird nichts übertragen.
Mitgliederköpfe oder Einladungsbanner erscheinen nicht. Der aktive Bildschirm ist nicht in memberListViewIds oder joinListViewIds aufgeführt. Ist views leer, verwendet das Menü view: Setze es auf members oder join.
Verwandte Erweiterungen
- MySQL — Redis-Messaging und die Datenbank hinter der Gildenbank.
- GUI — Layouts, Views und
input-Dialoge, die das Gildenmenü verwendet. - NumericalStorage — das von der Bank verwendete Spielerguthaben.
- Friend und Party — die anderen sozialen Systeme.