Saltar al contenido principal

Guild

Gremios con roles, invitaciones, un banco compartido y un menú GUI, sincronizados entre servidores.

Privadasv0.1.0Social
RequiereTypeWriter0.9.0-beta-177 (BTC build)GUI (TypeWriter extension)MySQL (TypeWriter extension)opcionalNumericalStorage (TypeWriter extension)opcionalRedis or Valkeyopcional

Creada para la red BornToCraft. Esta extensión está documentada como referencia y no se distribuye.

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​

  1. Instala la extensión GUI, que dibuja el menú.
  2. Instala la extensión NumericalStorage si los jugadores deben usar el banco. Proporciona el saldo que usan los depósitos y retiros.
  3. Opcional, para varios servidores: instala la extensión MySQL, activa Redis (o Valkey) y establece el mismo redis.group-id en cada servidor. El banco del gremio también requiere la extensión MySQL, consulta Banco del gremio.
  4. Coloca el JAR de Guild en plugins/Typewriter/extensions/ y reinicia el servidor.
  5. 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:

  1. En el panel web de TypeWriter, añade un Guild Artifact en una página static. Mantén artifactId como btc_guild_data.
  2. Añade una entrada Guild Menu. /guild abre el primer Guild Menu que encuentra.
  3. Establece inventoryTitle, inventoryRows y guiType, construye el layout en layoutPool y establece mainLayoutId. Consulta las guías de GUI.
  4. Declara tus pantallas en views (por ejemplo main, members, join). Pon los ids de las pantallas que listan miembros en memberListViewIds, y el id de la pantalla que lista las invitaciones pendientes en joinListViewIds.
  5. Añade items y establece buttonType con botones de gremio: GUILD_MEMBERS y GUILD_BANK abren pantallas, GUILD_LEAVE y GUILD_DISBAND se ejecutan de inmediato, y PAGE_NAV pasa páginas de una lista.
  6. Para los botones que necesitan un nombre escrito (crear, invitar, expulsar, ascender, transferir), dale al item un diálogo input cuyo onInputCommands ejecute el comando, por ejemplo guild create {input}.
  7. Publica y ejecuta /guild.
La pantalla de unirse

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:

buttonTypeClic
GUILD_MEMBERSAbre la pantalla members (guild open members).
GUILD_BANKAbre la pantalla bank (guild open bank).
GUILD_ALLIANCES, GUILD_WARSAbren las pantallas allies o wars (consulta la nota de abajo).
GUILD_LEAVEAbandona el gremio.
GUILD_DISBANDDisuelve el gremio (solo el líder).
GUILD_JOIN, GUILD_PENDING_INVITESCambian a la vista join del mismo menú.
NAV_BACK, NAV_CLOSEVolver, cerrar el menú.
PAGE_NAVClic 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.

Alianzas, guerras y degradación

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.

Idioma

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.

ComandoDescripción
/guildAbre 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 leaveAbandona 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 infoImprime el líder, el número de miembros, el nivel y el banco de tu gremio.
/guild disbandDisuelve tu gremio (solo el líder).
/guild admin listLista 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​

PermisoPor defectoConcede
guild.useTodosTodos los comandos /guild. Los clics del menú ejecutan las mismas acciones sin comprobarlo.
guild.adminOperadoresLos comandos /guild admin.

Placeholders​

Etiquetas de MiniPlaceholders para texto MiniMessage, como <guild_name>.

PlaceholderDevuelve
<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
Artefactos1

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 input usados por el menú de gremio.
  • NumericalStorage — el saldo del jugador que usa el banco.
  • Friend y Party — los otros sistemas sociales.