Zum Hauptinhalt springen

Party

Temporäre Gruppen mit Einladungen, GUI-Menü, Größenlimits und Server-Warps für die ganze Gruppe.

Privatv0.2.0Soziales
BenötigtTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)GUI (TypeWriter extension)MySQL (TypeWriter extension)optionalRedis or Valkeyoptional

Für das BornToCraft-Netzwerk entwickelt. Diese Erweiterung ist zu Referenzzwecken dokumentiert und wird nicht verteilt.

Überblick​

Mit Party bilden Spieler eine kurzlebige Gruppe. Der Anführer erstellt eine Party und lädt Spieler per Namen ein, und eingeladene Spieler nehmen mit /party join <leader> an. Quest-, Dungeon- und HUD-Systeme können dann fragen: „Wer ist in derselben Party wie dieser Spieler?“ Ein Anführer kann außerdem die ganze Party auf einen anderen Server des Netzwerks warpen.

Parties werden nicht in einer Datenbank gespeichert: Sie leben im Speicher und werden über Redis auf die anderen Server des Netzwerks repliziert. Ein Mitglied, das die Verbindung trennt, bleibt in der Party, sodass die Party einen Serverwechsel übersteht, und sie endet nur, wenn Mitglieder gehen, gekickt werden oder der Anführer sie auflöst. Ein Neustart aller Server löst alle Parties auf.

Das Party-Menü ist ein GUI-Menü, das du im Web-Panel baust. Mitglieder werden als Spielerköpfe angezeigt und ausstehende Einladungen als anklickbare Köpfe.

Funktionen​

  • Erstellen, einladen, beitreten, verlassen, kicken, auflösen — verfügbar als Befehle, TypeWriter-Actions und Menü-Buttons.
  • Party-Menü — ein Entry mit Mitglieder- und Einladungsbildschirmen, Seiten und Tabs.
  • Einladungen — Namenseingabe im Chat, ein Beitritts-Bildschirm mit Suchfilter und 60 Sekunden Ablaufzeit.
  • Größenlimits — ein Standardmaximum mit höheren Limits für Berechtigungen wie typewriter.party.vip.
  • Warp zu einem Server — der Anführer schickt alle Mitglieder zu einem anderen Backend, wo auch immer sie im Netzwerk sind.
  • Serverübergreifende Parties — Mitgliedschaft, Einladungen und Party-Chatnachrichten erreichen jeden Server der Gruppe.
  • Story-Hooks — ein Fact gibt an, ob der Spieler in einer Party ist.
  • Platzhalter — Anführer, Rolle, Größe, Mitgliedsnamen und Mitglieder-Gesundheit für HUDs.
  • Integrationen — andere BTC-Erweiterungen, etwa Coop-Inseln und Dungeons, erstellen und lesen Parties.

Installation​

  1. Installiere die GUI-Erweiterung, die das Menü zeichnet, und die Quest-Erweiterung, die Party als Abhängigkeit deklariert.
  2. Optional, für mehrere Server: Installiere die MySQL-Erweiterung, aktiviere Redis (oder Valkey) und setze auf jedem Server dieselbe redis.group-id und einen eindeutigen redis.server-name. Das Warpen erfordert, dass der Proxy den Kanal btc:bridge verarbeitet.
  3. Lege die Party-JAR in plugins/Typewriter/extensions/ ab und starte den Server neu.

party.use wird standardmäßig an alle vergeben und party.admin an Operatoren.

Erste Schritte​

So baust du ein Party-Menü und ein Größenlimit:

  1. Öffne im TypeWriter-Web-Panel eine Seite und füge einen Party Menu Config-Entry hinzu. Nur seine Limits werden verwendet (siehe Konfiguration): Setze maxPartySize und optional maxPartySizePermissions.
  2. Füge einen Party Menu-Entry hinzu. /party öffnet den ersten gefundenen.
  3. Setze inventoryTitle, inventoryRows und guiType, baue dann das Layout in layoutPool und setze mainLayoutId. Siehe die GUI-Anleitungen.
  4. Deklariere Bildschirme in views (zum Beispiel members und join). Trage die IDs der Mitglieder-Bildschirme in memberListViewIds ein und die ID des Einladungs-Bildschirms in joinListViewIds.
  5. Füge Items mit einem buttonType hinzu: PARTY_MEMBERS, PARTY_JOIN, PAGE_NAV und die Buttons, die Befehle ausführen (siehe Menüs).
  6. Veröffentliche und führe /party aus.

Um eine Party aus einer Quest heraus zu starten, verwende die Create Party-Action. Um Spieler zusammenzubringen, verwende Invite Player mit targetName, das einen Platzhalter akzeptiert, und Join Party mit leaderName.

Dungeons und Instanzen

Verwende Warp Party to Server mit targetServer auf den dem Proxy bekannten Backend-Namen gesetzt, zum Beispiel dungeon-1. Nur der Anführer kann es auslösen. Kombiniere es mit dem Fact In Party als Criteria, um den Warp nur Spielern in einer Party anzubieten.

So funktioniert es​

Jede Party-Änderung wird an die anderen Server gesendet, die ihre Kopie ersetzen. Einladungen laufen nach 60 Sekunden ab, einmal pro Minute geprüft, sodass eine Einladung zwischen 60 und 120 Sekunden gilt. Verlässt der Anführer die Party, wird das erste verbleibende Mitglied Anführer. Eine Party ohne Mitglied wird entfernt.

Konfiguration​

Der Party Menu Config-Entry ist optional. Er enthält nur die Größenlimits der Party, über diese Felder:

  • maxPartySize — maximale Anzahl an Mitgliedern als Standard. Der Standardwert ist 5.
  • maxPartySizePermissions — Berechtigung zu maximaler Größe. Es gilt die höchste passende Größe des Anführers. Die Standardwerte sind typewriter.party.vip für 8 und typewriter.party.mvp für 12.

Ohne diesen Entry gibt es kein Größenlimit. Das Party-Menü selbst wird hier nicht konfiguriert, es stammt aus dem Party Menu-Entry.

Das Party Artifact wird vom Party-Dienst in dieser Version weder gelesen noch geschrieben, du musst also keines erstellen.

Der Party Menu-Entry ist ein GUI-Menü mit diesen Party-spezifischen Verhaltensweisen.

Inhaltsbereich. Auf einem in memberListViewIds aufgeführten Bildschirm ist jedes Mitglied ein Spielerkopf mit Rolle und Online-Status. Bist du der Anführer, kickt ein Linksklick ein anderes Mitglied. Auf einem in joinListViewIds aufgeführten Bildschirm ist jede ausstehende Einladung der Kopf des einladenden Anführers: Linksklick tritt bei, Rechtsklick lehnt ab. Der Bereich wird mit contentX (Standard 5), contentY, contentColumns (Standard 4) und contentRows (Standard 7) platziert.

Buttons. Diese buttonType-Werte funktionieren von Haus aus:

buttonTypeKlick
PARTY_MEMBERSÖffnet den Bildschirm members (party open members).
PARTY_JOINWechselt zur View join desselben Menüs.
PAGE_NAVLinksklick vorwärts, Rechtsklick zurück; der Name zeigt den Seitenzähler. Ausgeblendet, wenn eine Seite genügt.

Diese Werte hängen keine Aktion an. Konfiguriere das Item selbst und gib ihm Befehle: PARTY_INFO, PARTY_CREATE, PARTY_LEAVE, PARTY_DISBAND, PARTY_INVITE, PARTY_CLOSE, PARTY_ACCEPT_INVITE, PARTY_DECLINE_INVITE. Führe zum Beispiel party create, party leave oder party disband bei den passenden Items aus. Ein Einladen-Button benötigt einen eingetippten Namen: Gib ihm einen input-Dialog, dessen onInputCommands party invite {input} ausführt.

Slot-Befehle. Items können 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> und party joinsearch <text> ausführen. Sie werden als der Spieler ausgeführt, der geklickt hat.

Sprache

Kopf-Lore und einige Admin-Nachrichten sind auf Französisch. Der Platzhalter <party_role> liefert die französischen Wörter Chef, Moderateur und Membre. Verwende <party_role_raw> für die Bezeichner LEADER, MODERATOR und MEMBER.

Befehle​

Alle Befehle erfordern party.use. Alias: /p. Der bloße Befehl öffnet das erste Party Menu und gibt nichts aus, wenn keines existiert.

BefehlBeschreibung
/partyÖffnet das Party-Menü.
/party createErstellt eine Party und macht dich zu ihrem Anführer.
/party inviteSchließt das Inventar, und du tippst den Namen des Spielers im Chat.
/party invite <player>Lädt einen Spieler ein (nur Anführer).
/party join <leader>Tritt der Party dieses Anführers bei, wenn du eingeladen bist.
/party accept <leader>Wie join.
/party leaveVerlässt deine Party.
/party kick <player>Kickt ein Mitglied (nur Anführer).
/party disbandLöst die Party auf (nur Anführer).
/party infoGibt Anführer und Mitglieder aus.
/party admin listListet alle aktiven Parties auf (erfordert party.admin).
/party admin info <player>Zeigt die Party eines Spielers an.
/party admin disband <player>Löst die Party eines Spielers auf. Ihr Anführer muss online sein.
/party admin kick <player>Entfernt einen Spieler aus seiner Party. Der Party-Anführer muss online sein.

Berechtigungen​

BerechtigungStandardErlaubt
party.useAlleJeden /party-Befehl. Menüklicks führen dieselben Aktionen aus, ohne sie zu prüfen.
party.adminOperatorenDie /party admin-Befehle.
typewriter.party.vip, typewriter.party.mvpKeineHöhere Party-Größen, nur wenn sie in maxPartySizePermissions des Konfigurations-Entrys aufgeführt sind. Diese Namen sind die Standardwerte und können geändert werden.

Platzhalter​

MiniPlaceholders-Tags für MiniMessage-Text, etwa <party_leader>. Indizes beginnen bei 0.

PlatzhalterLiefert
<party_in_party>1, wenn der Spieler in einer Party ist, sonst 0.
<party_leader>Name des Anführers.
<party_role>Chef, Moderateur oder Membre.
<party_role_raw>LEADER, MODERATOR oder MEMBER.
<party_size>Anzahl der Mitglieder.
<party_members>Anzahl der Mitglieder.
<party_members:index>Mitgliedsname an dieser Position.
<party_members_exclude:index>Mitgliedsname an dieser Position, ohne den Betrachter.
<party_list>Mitgliedsnamen, durch Kommas getrennt.
<party_member_name:index>Mitgliedsname an dieser Position.
<party_member_uuid:index>UUID dieses Mitglieds.
<party_member_health:index>Aktuelle Gesundheit dieses Mitglieds, wenn es auf diesem Server online ist, sonst 0.0.
<party_member_health_max:index>Maximale Gesundheit, 20.0, wenn unbekannt.
<party_member_health_percent:index>Gesundheit als Prozentsatz.

Entries​

10 Einträge, aus dem Quellcode der Erweiterung generiert.

Aktionen7
Fakten1
Artefakte1
Manifeste1

Fehlerbehebung​

/party bewirkt nichts. Es ist kein Party Menu-Entry veröffentlicht. Unterbefehle wie /party create funktionieren auch ohne ihn.

„You do not have an invite to this party.“ Die Einladung ist nach 60 bis 120 Sekunden abgelaufen, oder der Name des Anführers war falsch geschrieben. Bitte den Anführer, erneut einzuladen, und verwende dann /party join <leader>.

„Party is full! Limit: N“. Der Anführer hat maxPartySize des Party Menu Config erreicht. Erhöhe es oder gib dem Anführer eine in maxPartySizePermissions aufgeführte Berechtigung. Ohne den Konfigurations-Entry gibt es kein Limit.

Mitglieder auf einem anderen Server erscheinen nicht. Jeder Server benötigt dieselbe nicht leere redis.group-id, einen eindeutigen redis.server-name und ein verbundenes Redis. Ohne group-id wird nichts übertragen.

Der Warp schlägt mit „Cross-server transport is unavailable.“ fehl. Redis ist nicht verbunden. Prüfe die Konfiguration der MySQL-Erweiterung. Das targetServer muss der dem Proxy bekannte Backend-Name sein, und der Proxy muss den Kanal btc:bridge akzeptieren.

Änderungen im Party Menu Config (Slots, Buttons, Nachrichten) haben keine Wirkung. Diese Felder gehören zu einem früheren Menü, das nicht mehr registriert wird. Verwende den Party Menu-Entry, um das Menü zu gestalten.

Die nächste Chatnachricht nach /party invite wird nicht angezeigt. Das ist erwartet: Der Befehl ohne Namen wartet auf eine Chatnachricht und verwendet sie als Spielernamen, dann lädt er diesen Spieler ein. Ein falscher Name ergibt einfach einen Fehler.

Verwandte Erweiterungen​

  • MySQL — Redis-Messaging und der Proxy-Transport, der für Warps verwendet wird.
  • GUI — Layouts und Views, die das Party-Menü verwendet.
  • Friend und Guild — die anderen sozialen Systeme.
  • BTC Sky — Coop-Inseln setzen Mitglieder in dieselbe Party.
  • Dungeon — Dungeon-Instanzen nutzen die Party, um Spieler zu gruppieren.