Guild
Vue d'ensemble
Guild permet aux joueurs de fonder une guilde, d'inviter d'autres joueurs, de gérer les rangs et de partager une banque. Tout fonctionne avec les commandes /guild, et vous pouvez ajouter un menu construit dans le panel web pour que les joueurs n'aient jamais besoin de taper. Une guilde a un chef et un nombre quelconque d'officiers, de membres et de recrues.
Toutes les guildes sont stockées dans un seul Guild Artifact et conservées en mémoire pour des lectures rapides. Avec le pont MySQL et Redis, chaque changement est diffusé aux autres serveurs du réseau, et la banque de guilde est une ligne distincte dans la base de données : deux serveurs ne peuvent donc jamais dépenser deux fois les mêmes pièces.
Le menu est un menu GUI. Vous concevez sa disposition et ses écrans, marquez des objets comme boutons de guilde, et l'extension ajoute les têtes des membres et les bannières d'invitation.
Fonctionnalités
- Guildes et rôles — chef, officier, membre et recrue, avec création, invitation, expulsion, promotion, transfert et dissolution.
- Invitations — invitez par nom, rejoignez avec
/guild join, acceptez ou refusez depuis le menu avec une zone de recherche. - Menu de guilde — une seule entrée porte tous les écrans, avec têtes de membres, pagination et onglets.
- Boutons sensibles à l'état — les boutons qui ne s'appliquent pas au joueur (créer alors qu'il est dans une guilde, dissoudre s'il n'est pas chef) sont retirés de la disposition.
- Banque de guilde — déposez et retirez en utilisant le solde NumericalStorage du joueur, avec des lignes de base de données atomiques.
- Synchronisation entre serveurs — création, adhésion, rôles, banque et suppression atteignent chaque serveur du groupe.
- Placeholders — nom, rôle, chef, taille, nombre de membres en ligne, banque, noms des membres et recherche par joueur.
- Commandes d'administration — listez les guildes, inspectez-en une, dissolvez ou expulsez au nom d'un chef.
Installation
- Installez l'extension GUI, qui dessine le menu.
- Installez l'extension NumericalStorage si les joueurs doivent utiliser la banque. Elle fournit le solde utilisé par les dépôts et retraits.
- Facultatif, pour plusieurs serveurs : installez l'extension MySQL, activez Redis (ou Valkey), et définissez le même
redis.group-idsur chaque serveur. La banque de guilde nécessite aussi l'extension MySQL, voir Banque de guilde. - Placez le JAR de Guild dans
plugins/Typewriter/extensions/et redémarrez le serveur. - Créez un Guild Artifact sur une page static et publiez-le.
guild.use est accordée à tout le monde par défaut et guild.admin aux opérateurs.
Premiers pas
Construisez un menu de guilde qui s'ouvre avec /guild :
- Dans le panel web TypeWriter, ajoutez un Guild Artifact sur une page static. Gardez
artifactIdàbtc_guild_data. - Ajoutez une entrée Guild Menu.
/guildouvre le premier Guild Menu trouvé. - Définissez
inventoryTitle,inventoryRowsetguiType, construisez la disposition danslayoutPoolet définissezmainLayoutId. Voir les guides GUI. - Déclarez vos écrans dans
views(par exemplemain,members,join). Placez les identifiants des écrans qui listent les membres dansmemberListViewIds, et l'identifiant de l'écran qui liste les invitations en attente dansjoinListViewIds. - Ajoutez des objets et définissez
buttonTypesur des boutons de guilde :GUILD_MEMBERSetGUILD_BANKouvrent des écrans,GUILD_LEAVEetGUILD_DISBANDs'exécutent immédiatement, etPAGE_NAVparcourt les pages d'une liste. - Pour les boutons qui nécessitent un nom saisi (créer, inviter, expulser, promouvoir, transférer), donnez à l'objet une boîte de dialogue
inputdontonInputCommandsexécute la commande, par exempleguild create {input}. - Publiez et exécutez
/guild.
Un écran ayant l'identifiant join est celui que GUILD_JOIN et GUILD_PENDING_INVITES ouvrent. Ajoutez join à views et à joinListViewIds, et donnez-lui un objet avec une boîte de dialogue input exécutant guild joinsearch {input} pour permettre aux joueurs de filtrer les invitations par nom de guilde.
Fonctionnement
Les guildes sont chargées en mémoire au démarrage. Après chaque changement, la guilde est enregistrée dans l'artefact en arrière-plan et diffusée aux autres serveurs, qui remplacent leur copie. Les invitations en attente ne sont conservées qu'en mémoire et ne sont pas enregistrées.
Menus
Le Guild Menu est un menu GUI avec ces comportements propres aux guildes.
Panneau de contenu. Sur un écran listé dans memberListViewIds, chaque membre est une tête de joueur, le chef en premier, avec son rôle et son état de connexion. Si vous êtes le chef, un clic gauche promeut un membre et un clic droit l'expulse. Sur un écran listé dans joinListViewIds, chaque invitation en attente est une bannière : un clic gauche rejoint, un clic droit refuse. Le panneau est placé avec contentX, contentY, contentColumns et contentRows.
Boutons. Ces valeurs de buttonType fonctionnent d'emblée :
buttonType | Clic |
|---|---|
GUILD_MEMBERS | Ouvre l'écran members (guild open members). |
GUILD_BANK | Ouvre l'écran bank (guild open bank). |
GUILD_ALLIANCES, GUILD_WARS | Ouvrent les écrans allies ou wars (voir la note ci-dessous). |
GUILD_LEAVE | Quitte la guilde. |
GUILD_DISBAND | Dissout la guilde (chef uniquement). |
GUILD_JOIN, GUILD_PENDING_INVITES | Basculent vers la vue join du même menu. |
NAV_BACK, NAV_CLOSE | Retour, fermeture du menu. |
PAGE_NAV | Clic gauche en avant, clic droit en arrière ; le nom affiche le compteur de pages. Masqué lorsqu'une seule page suffit. |
Ces valeurs n'attachent aucune action. Elles sont destinées aux objets que vous configurez vous-même (texte d'affichage, ou boîte de dialogue input qui exécute la commande correspondante) : 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.
Boutons masqués. Les objets sont retirés de la disposition lorsqu'ils ne s'appliquent pas : GUILD_CREATE et GUILD_JOIN une fois que le joueur a une guilde ; GUILD_INVITE sauf si le joueur est chef ou officier ; GUILD_LEAVE, GUILD_MEMBERS, GUILD_BANK, GUILD_ALLIANCES et GUILD_WARS sans guilde ; GUILD_DISBAND sauf si le joueur est chef.
Commandes d'emplacement. Les objets peuvent exécuter 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> et guild transfer <name>. Elles s'exécutent en tant que joueur qui a cliqué.
Les guildes stockent une liste d'alliés, une liste d'ennemis et un niveau, et les placeholders les exposent, mais aucune commande ni aucun bouton de cette version ne les modifie : le niveau reste à 1, et il n'y a pas de commande de rétrogradation. Les écrans allies et wars n'existent que si vous les construisez.
Les textes par défaut du menu (titre « Guilde », lore des têtes) sont en français, et les réponses de guild admin sont en français. Les messages de chat pour les joueurs sont en anglais. Remplacez le texte du menu dans votre disposition.
Banque de guilde
La banque fonctionne sur le solde de la guilde dans la table btc_guild_bank (le nom ne suit pas table-prefix), créée automatiquement dans la base de données MySQL. Chaque opération est atomique : les dépôts et retraits depuis des serveurs différents ne peuvent donc pas mettre la banque à découvert.
/guild deposit <amount>prend des pièces dans le solde du joueur dans NumericalStorage et les ajoute à la banque. N'importe quel membre peut déposer./guild withdraw <amount>déplace des pièces de la banque vers le joueur. Seuls le chef et les officiers peuvent retirer.- Si la banque est inaccessible, un dépôt est remboursé et le joueur est informé que le stockage est temporairement indisponible.
Sans l'extension MySQL activée, ou sans NumericalStorage, la banque ne peut pas être utilisée.
Commandes
Toutes les commandes nécessitent guild.use. Alias : /g, /guilde. La commande seule ouvre le premier Guild Menu et n'affiche rien lorsqu'il n'en existe pas.
| Commande | Description |
|---|---|
/guild | Ouvre le menu de guilde. |
/guild create <name> | Crée une guilde. Le nom doit comporter de 3 à 16 lettres ou chiffres. |
/guild invite <player> | Invite un joueur (chef ou officier). |
/guild join <guild> | Rejoint une guilde dans laquelle vous avez été invité. |
/guild leave | Quitte votre guilde. Un chef avec des membres doit d'abord transférer ou dissoudre. |
/guild kick <player> | Expulse un membre (le chef, ou un officier pour les non-officiers). |
/guild promote <player> | De recrue à membre, de membre à officier (chef uniquement). |
/guild transfer <player> | Transmet la direction. L'ancien chef devient officier. |
/guild deposit <amount> | Place des pièces dans la banque de la guilde. |
/guild withdraw <amount> | Retire des pièces de la banque (chef ou officier). |
/guild info | Affiche le chef, le nombre de membres, le niveau et la banque de votre guilde. |
/guild disband | Dissout votre guilde (chef uniquement). |
/guild admin list | Liste toutes les guildes (nécessite guild.admin). |
/guild admin info <guild> | Affiche une guilde. |
/guild admin disband <guild> | Dissout une guilde. Son chef doit être en ligne. |
/guild admin kick <guild> <player> | Expulse un membre. Le chef de la guilde doit être en ligne. |
Permissions
| Permission | Par défaut | Autorise |
|---|---|---|
guild.use | Tout le monde | Toutes les commandes /guild. Les clics de menu exécutent les mêmes actions sans la vérifier. |
guild.admin | Opérateurs | Les commandes /guild admin. |
Placeholders
Balises MiniPlaceholders pour du texte MiniMessage, comme <guild_name>.
| Placeholder | Renvoie |
|---|---|
<guild_in_guild> | 1 lorsque le joueur est dans une guilde, sinon 0. |
<guild_name> | Nom de la guilde, vide sans guilde. |
<guild_role> | LEADER, OFFICER, MEMBER ou RECRUIT. |
<guild_leader> | Nom du chef. |
<guild_size>, <guild_members> | Nombre de membres (les deux renvoient la même valeur). |
<guild_online_count> | Membres en ligne sur ce serveur. |
<guild_level> | Niveau de la guilde (toujours 1 actuellement), 0 sans guilde. |
<guild_bank> | Solde de la banque tel qu'il est stocké sur ce serveur. |
<guild_allies_count>, <guild_enemies_count> | Nombre d'alliés et d'ennemis. |
<guild_list> | Noms des membres séparés par une virgule. |
<guild_member_name:index> | Nom du membre à cette position, à partir de 0. |
<guild_of:name> | Guilde du joueur nommé, vide s'il n'en a pas. |
Entrées
2 entrées, générées depuis la source de l'extension.
Actions1
- Guild MenuGuild Menu
Artefacts1
- Guild ArtifactArtifact for storing guild data
Dépannage
Les guildes ont disparu après un redémarrage. Aucun Guild Artifact n'est publié : rien n'est donc enregistré. Ajoutez-le sur une page static et publiez.
/guild create répond « Guild name must be alphanumeric and between 3-16 characters. » Les noms n'acceptent que des lettres et des chiffres, sans espace ni tiret bas.
/guild n'affiche rien. Il n'y a pas d'entrée Guild Menu. Créez-en une et publiez-la. Les sous-commandes comme /guild info fonctionnent sans elle.
Les dépôts échouent avec « Insufficient funds ». Le dépôt lit le solde NumericalStorage du joueur. Installez NumericalStorage, et vérifiez que le joueur y a assez de pièces.
« Guild bank storage is temporarily unavailable. » La table de la banque n'a pas pu être atteinte. Activez l'extension MySQL (mysql.enabled: true) et vérifiez la connexion à la base de données dans les journaux. Le dépôt est remboursé.
Une guilde créée sur un serveur est absente de l'autre. Chaque serveur a besoin du même redis.group-id, d'un redis.server-name unique, et de mysql.enabled: true pour que l'artefact soit partagé. Sans group-id, rien n'est diffusé.
Les têtes de membres ou les bannières d'invitation n'apparaissent pas. L'écran actif n'est pas listé dans memberListViewIds ni dans joinListViewIds. Lorsque views est vide, le menu utilise view : définissez-le sur members ou join.
Extensions associées
- MySQL — messagerie Redis et base de données derrière la banque de guilde.
- GUI — dispositions, vues et boîtes de dialogue
inpututilisées par le menu de guilde. - NumericalStorage — le solde du joueur utilisé par la banque.
- Friend et Party — les autres systèmes sociaux.