Guild
Descripción general
Guild permite a los jugadores fundar un gremio, invitar a otros, gestionar rangos y compartir un banco. Todo funciona con comandos /guild, y puedes añadir un menú construido en el panel web para que los jugadores nunca necesiten escribir. Un gremio tiene un líder y cualquier número de oficiales, miembros y reclutas.
Todos los gremios se almacenan en un único Guild Artifact y se mantienen en memoria para lecturas rápidas. Con el puente de MySQL y Redis, cada cambio se difunde a los demás servidores de la red, y el banco del gremio es una fila separada en la base de datos, de modo que dos servidores nunca pueden gastar las mismas monedas dos veces.
El menú es un menú de GUI. Diseñas su layout y sus pantallas, marcas items como botones de gremio y la extensión añade las cabezas de los miembros y los banners de invitación.
Características
- Gremios y roles — líder, oficial, miembro y recluta, con crear, invitar, expulsar, ascender, transferir y disolver.
- Invitaciones — invita por nombre, únete con
/guild join, acepta o rechaza desde el menú con un cuadro de búsqueda. - Menú de gremio — una entrada contiene todas las pantallas, con cabezas de miembros, paginación y pestañas.
- Botones sensibles al estado — los botones que no se pueden aplicar al jugador (crear estando en un gremio, disolver sin ser líder) se eliminan del layout.
- Banco del gremio — deposita y retira usando el saldo de NumericalStorage del jugador, con filas de base de datos atómicas.
- Sincronización entre servidores — la creación, la pertenencia, los roles, el banco y la eliminación llegan a todos los servidores del grupo.
- Placeholders — nombre, rol, líder, tamaño, recuento de conectados, banco, nombres de miembros y una búsqueda por jugador.
- Comandos de administración — lista gremios, inspecciona uno, disuelve o expulsa en nombre de un líder.
Instalación
- Instala la extensión GUI, que dibuja el menú.
- Instala la extensión NumericalStorage si los jugadores deben usar el banco. Proporciona el saldo que usan los depósitos y retiros.
- Opcional, para varios servidores: instala la extensión MySQL, activa Redis (o Valkey) y establece el mismo
redis.group-iden cada servidor. El banco del gremio también requiere la extensión MySQL, consulta Banco del gremio. - Coloca el JAR de Guild en
plugins/Typewriter/extensions/y reinicia el servidor. - Crea un Guild Artifact en una página static y publícalo.
guild.use se da a todos por defecto y guild.admin a los operadores.
Primeros pasos
Construye un menú de gremio que se abra con /guild:
- En el panel web de TypeWriter, añade un Guild Artifact en una página static. Mantén
artifactIdcomobtc_guild_data. - Añade una entrada Guild Menu.
/guildabre el primer Guild Menu que encuentra. - Establece
inventoryTitle,inventoryRowsyguiType, construye el layout enlayoutPooly establecemainLayoutId. Consulta las guías de GUI. - Declara tus pantallas en
views(por ejemplomain,members,join). Pon los ids de las pantallas que listan miembros enmemberListViewIds, y el id de la pantalla que lista las invitaciones pendientes enjoinListViewIds. - Añade items y establece
buttonTypecon botones de gremio:GUILD_MEMBERSyGUILD_BANKabren pantallas,GUILD_LEAVEyGUILD_DISBANDse ejecutan de inmediato, yPAGE_NAVpasa páginas de una lista. - Para los botones que necesitan un nombre escrito (crear, invitar, expulsar, ascender, transferir), dale al item un diálogo
inputcuyoonInputCommandsejecute el comando, por ejemploguild create {input}. - Publica y ejecuta
/guild.
Una pantalla con el id join es la que abren GUILD_JOIN y GUILD_PENDING_INVITES. Añade join a views y a joinListViewIds, y dale un item con un diálogo input que ejecute guild joinsearch {input} para que los jugadores puedan filtrar las invitaciones por nombre de gremio.
Cómo funciona
Los gremios se cargan en memoria al iniciar. Tras cada cambio, el gremio se guarda en el artefacto en segundo plano y se difunde a los demás servidores, que sustituyen su copia. Las invitaciones pendientes solo se mantienen en memoria y no se guardan.
Menús
El Guild Menu es un menú de GUI con estos comportamientos específicos de gremio.
Panel de contenido. En una pantalla listada en memberListViewIds, cada miembro es una cabeza de jugador, con el líder primero, con su rol y estado de conexión. Si eres el líder, el clic izquierdo asciende a un miembro y el clic derecho lo expulsa. En una pantalla listada en joinListViewIds, cada invitación pendiente es un banner: el clic izquierdo se une y el clic derecho rechaza. El panel se coloca con contentX, contentY, contentColumns y contentRows.
Botones. Estos valores de buttonType funcionan de serie:
buttonType | Clic |
|---|---|
GUILD_MEMBERS | Abre la pantalla members (guild open members). |
GUILD_BANK | Abre la pantalla bank (guild open bank). |
GUILD_ALLIANCES, GUILD_WARS | Abren las pantallas allies o wars (consulta la nota de abajo). |
GUILD_LEAVE | Abandona el gremio. |
GUILD_DISBAND | Disuelve el gremio (solo el líder). |
GUILD_JOIN, GUILD_PENDING_INVITES | Cambian a la vista join del mismo menú. |
NAV_BACK, NAV_CLOSE | Volver, cerrar el menú. |
PAGE_NAV | Clic izquierdo avanza, clic derecho retrocede; el nombre muestra el contador de páginas. Oculto cuando basta una página. |
Estos valores no asocian ninguna acción. Están pensados para items que configuras tú mismo (texto visible, o un diálogo input que ejecuta el comando correspondiente): 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.
Botones ocultos. Los items se eliminan del layout cuando no se aplican: GUILD_CREATE y GUILD_JOIN una vez que el jugador tiene un gremio; GUILD_INVITE salvo que el jugador sea líder u oficial; GUILD_LEAVE, GUILD_MEMBERS, GUILD_BANK, GUILD_ALLIANCES y GUILD_WARS sin un gremio; GUILD_DISBAND salvo que el jugador sea líder.
Comandos de ranura. Los items pueden ejecutar 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> y guild transfer <name>. Se ejecutan como el jugador que hizo clic.
Los gremios almacenan una lista de aliados, una lista de enemigos y un nivel, y los placeholders los exponen, pero ningún comando ni botón de esta versión los cambia: el nivel se queda en 1 y no hay comando de degradar. Las pantallas allies y wars solo existen si las construyes.
Los textos por defecto del menú (título "Guilde", lore de las cabezas) están en francés y las respuestas de guild admin están en francés. Los mensajes de chat para los jugadores están en inglés. Sobrescribe el texto del menú en tu layout.
Banco del gremio
El banco funciona sobre el saldo del gremio en la tabla btc_guild_bank (el nombre no sigue table-prefix), creada automáticamente en la base de datos MySQL. Cada operación es atómica, de modo que los depósitos y retiros desde distintos servidores no pueden dejar el banco en descubierto.
/guild deposit <amount>toma monedas del saldo del jugador en NumericalStorage y las añade al banco. Cualquier miembro puede depositar./guild withdraw <amount>mueve monedas del banco al jugador. Solo el líder y los oficiales pueden retirar.- Si no se puede acceder al banco, el depósito se reembolsa y se informa al jugador de que el almacenamiento no está disponible temporalmente.
Sin la extensión MySQL activada, o sin NumericalStorage, el banco no se puede usar.
Comandos
Todos los comandos necesitan guild.use. Alias: /g, /guilde. El comando sin argumentos abre el primer Guild Menu y no imprime nada cuando no existe ninguno.
| Comando | Descripción |
|---|---|
/guild | Abre el menú de gremio. |
/guild create <name> | Crea un gremio. El nombre debe tener de 3 a 16 letras o dígitos. |
/guild invite <player> | Invita a un jugador (líder u oficial). |
/guild join <guild> | Únete a un gremio al que te invitaron. |
/guild leave | Abandona tu gremio. Un líder con miembros debe transferir o disolver antes. |
/guild kick <player> | Expulsa a un miembro (líder, u oficial para quienes no son oficiales). |
/guild promote <player> | De recluta a miembro, de miembro a oficial (solo el líder). |
/guild transfer <player> | Cede el liderazgo. El antiguo líder pasa a oficial. |
/guild deposit <amount> | Pone monedas en el banco del gremio. |
/guild withdraw <amount> | Toma monedas del banco (líder u oficial). |
/guild info | Imprime el líder, el número de miembros, el nivel y el banco de tu gremio. |
/guild disband | Disuelve tu gremio (solo el líder). |
/guild admin list | Lista todos los gremios (requiere guild.admin). |
/guild admin info <guild> | Muestra un gremio. |
/guild admin disband <guild> | Disuelve un gremio. Su líder debe estar conectado. |
/guild admin kick <guild> <player> | Expulsa a un miembro. El líder del gremio debe estar conectado. |
Permisos
| Permiso | Por defecto | Concede |
|---|---|---|
guild.use | Todos | Todos los comandos /guild. Los clics del menú ejecutan las mismas acciones sin comprobarlo. |
guild.admin | Operadores | Los comandos /guild admin. |
Placeholders
Etiquetas de MiniPlaceholders para texto MiniMessage, como <guild_name>.
| Placeholder | Devuelve |
|---|---|
<guild_in_guild> | 1 cuando el jugador está en un gremio, 0 en caso contrario. |
<guild_name> | Nombre del gremio, vacío sin gremio. |
<guild_role> | LEADER, OFFICER, MEMBER o RECRUIT. |
<guild_leader> | Nombre del líder. |
<guild_size>, <guild_members> | Número de miembros (ambos devuelven el mismo valor). |
<guild_online_count> | Miembros conectados en este servidor. |
<guild_level> | Nivel del gremio (siempre 1 por ahora), 0 sin gremio. |
<guild_bank> | Saldo del banco tal como está almacenado en este servidor. |
<guild_allies_count>, <guild_enemies_count> | Número de aliados y de enemigos. |
<guild_list> | Nombres de los miembros separados por una coma. |
<guild_member_name:index> | Nombre del miembro en esa posición, empezando en 0. |
<guild_of:name> | Gremio del jugador indicado, vacío cuando no tiene. |
Entradas
2 entradas, generadas a partir del código fuente de la extensión.
Acciones1
- Guild MenuGuild Menu
Artefactos1
- Guild ArtifactArtifact for storing guild data
Solución de problemas
Los gremios desaparecen tras un reinicio. No hay ningún Guild Artifact publicado, así que no se guarda nada. Añádelo en una página static y publica.
/guild create responde "Guild name must be alphanumeric and between 3-16 characters." Los nombres solo aceptan letras y dígitos, sin espacios ni guion bajo.
/guild no imprime nada. No hay ninguna entrada Guild Menu. Crea y publica una. Los subcomandos como /guild info funcionan sin ella.
Los depósitos fallan con "Insufficient funds". El depósito lee el saldo de NumericalStorage del jugador. Instala NumericalStorage y comprueba que el jugador tiene suficientes monedas allí.
"Guild bank storage is temporarily unavailable." No se pudo acceder a la tabla del banco. Activa la extensión MySQL (mysql.enabled: true) y comprueba la conexión con la base de datos en los registros. El depósito se reembolsa.
Un gremio creado en un servidor falta en el otro. Cada servidor necesita el mismo redis.group-id, un redis.server-name único y mysql.enabled: true para que el artefacto se comparta. Sin un group-id no se difunde nada.
No aparecen las cabezas de los miembros ni los banners de invitación. La pantalla activa no está listada en memberListViewIds ni en joinListViewIds. Cuando views está vacío, el menú usa view: establécelo en members o join.
Extensiones relacionadas
- MySQL — mensajería de Redis y la base de datos que hay detrás del banco del gremio.
- GUI — layouts, vistas y diálogos
inputusados por el menú de gremio. - NumericalStorage — el saldo del jugador que usa el banco.
- Friend y Party — los otros sistemas sociales.