Party
Descripción general
Party permite a los jugadores formar un grupo de corta duración. El líder crea una party e invita a jugadores por nombre, y los jugadores invitados aceptan con /party join <leader>. Los sistemas de misiones, mazmorras y HUD pueden entonces preguntar "quién está en la misma party que este jugador". Un líder también puede teletransportar a toda la party a otro servidor de la red.
Las parties no se guardan en una base de datos: viven en memoria y se replican a los demás servidores de la red mediante Redis. Un miembro que se desconecta permanece en la party, de modo que la party sobrevive a un salto de servidor, y solo termina cuando los miembros se van, son expulsados o el líder la disuelve. Un reinicio de todos los servidores disuelve todas las parties.
El menú de la party es un menú de GUI que construyes en el panel web. Los miembros se muestran como cabezas de jugador y las invitaciones pendientes como cabezas clicables.
Características
- Crear, invitar, unirse, salir, expulsar, disolver — disponible como comandos, acciones de TypeWriter y botones de menú.
- Menú de party — una entrada con pantallas de miembros e invitaciones, paginación y pestañas.
- Invitaciones — introducción del nombre por chat, una pantalla de unirse con un filtro de búsqueda y caducidad a los 60 segundos.
- Límites de tamaño — un máximo por defecto con límites más altos para permisos como
typewriter.party.vip. - Warp a un servidor — el líder envía a todos los miembros a otro backend, estén donde estén en la red.
- Parties entre servidores — la pertenencia, las invitaciones y los mensajes de chat de la party llegan a todos los servidores del grupo.
- Enlaces con la historia — un fact indica si el jugador está en una party.
- Placeholders — líder, rol, tamaño, nombres de miembros y salud de miembros para HUD.
- Integraciones — otras extensiones de BTC, como las islas coop y las mazmorras, crean y leen parties.
Instalación
- Instala la extensión GUI, que dibuja el menú, y la extensión Quest, que Party declara como dependencia.
- Opcional, para varios servidores: instala la extensión MySQL, activa Redis (o Valkey) y establece el mismo
redis.group-idy unredis.server-nameúnico en cada servidor. El warp necesita que el proxy gestione el canalbtc:bridge. - Coloca el JAR de Party en
plugins/Typewriter/extensions/y reinicia el servidor.
party.use se da a todos por defecto y party.admin a los operadores.
Primeros pasos
Construye un menú de party y un límite de tamaño:
- En el panel web de TypeWriter, abre una página y añade una entrada Party Menu Config. Solo se usan sus límites (consulta Configuración): establece
maxPartySizey, opcionalmente,maxPartySizePermissions. - Añade una entrada Party Menu.
/partyabre la primera que encuentra. - Establece
inventoryTitle,inventoryRowsyguiType, luego construye el layout enlayoutPooly establecemainLayoutId. Consulta las guías de GUI. - Declara pantallas en
views(por ejemplomembersyjoin). Lista los ids de las pantallas de miembros enmemberListViewIdsy el id de la pantalla de invitaciones enjoinListViewIds. - Añade items con un
buttonType:PARTY_MEMBERS,PARTY_JOIN,PAGE_NAVy los botones que ejecutan comandos (consulta Menús). - Publica y ejecuta
/party.
Para iniciar una party desde una misión, usa la acción Create Party. Para reunir a jugadores, usa Invite Player con targetName, que acepta un placeholder, y Join Party con leaderName.
Usa Warp Party to Server con targetServer establecido en el nombre del backend que conoce el proxy, por ejemplo dungeon-1. Solo el líder puede activarlo. Combínalo con el fact In Party como criterio para ofrecer el warp solo a los jugadores que están en una party.
Cómo funciona
Cada cambio de party se envía a los demás servidores, que sustituyen su copia. Las invitaciones caducan a los 60 segundos, comprobado una vez por minuto, así que una invitación dura entre 60 y 120 segundos. Cuando el líder se va, el primer miembro restante pasa a ser líder. Una party sin ningún miembro se elimina.
Configuración
La entrada Party Menu Config es opcional. Solo contiene los límites de tamaño de la party, mediante estos campos:
maxPartySize— número máximo de miembros por defecto. El valor por defecto es5.maxPartySizePermissions— permiso a tamaño máximo. Se aplica el tamaño coincidente más alto del líder. Los valores por defecto sontypewriter.party.vippara 8 ytypewriter.party.mvppara 12.
Sin esta entrada no hay límite de tamaño. El menú de la party en sí no se configura aquí, proviene de la entrada Party Menu.
El servicio de party no lee ni escribe el Party Artifact en esta versión, y no necesitas crear uno.
Menús
La entrada Party Menu es un menú de GUI con estos comportamientos específicos de party.
Panel de contenido. En una pantalla listada en memberListViewIds, cada miembro es una cabeza de jugador que muestra su rol y estado de conexión. Si eres el líder, el clic izquierdo sobre otro miembro lo expulsa. En una pantalla listada en joinListViewIds, cada invitación pendiente es la cabeza del líder que invita: el clic izquierdo se une y el clic derecho rechaza. El panel se coloca con contentX (por defecto 5), contentY, contentColumns (por defecto 4) y contentRows (por defecto 7).
Botones. Estos valores de buttonType funcionan de serie:
buttonType | Clic |
|---|---|
PARTY_MEMBERS | Abre la pantalla members (party open members). |
PARTY_JOIN | Cambia a la vista join del mismo 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. Configura tú mismo el item y dale comandos: PARTY_INFO, PARTY_CREATE, PARTY_LEAVE, PARTY_DISBAND, PARTY_INVITE, PARTY_CLOSE, PARTY_ACCEPT_INVITE, PARTY_DECLINE_INVITE. Por ejemplo, ejecuta party create, party leave o party disband en los items correspondientes. Un botón de invitar necesita un nombre escrito: dale un diálogo input cuyo onInputCommands ejecute party invite {input}.
Comandos de ranura. Los items pueden ejecutar 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> y party joinsearch <text>. Se ejecutan como el jugador que hizo clic.
El lore de las cabezas y algunos mensajes de administración están en francés. El placeholder <party_role> devuelve las palabras francesas Chef, Moderateur y Membre. Usa <party_role_raw> para los identificadores LEADER, MODERATOR y MEMBER.
Comandos
Todos los comandos necesitan party.use. Alias: /p. El comando sin argumentos abre el primer Party Menu y no imprime nada cuando no existe ninguno.
| Comando | Descripción |
|---|---|
/party | Abre el menú de la party. |
/party create | Crea una party y te conviertes en su líder. |
/party invite | Cierra el inventario y escribe el nombre del jugador en el chat. |
/party invite <player> | Invita a un jugador (solo el líder). |
/party join <leader> | Únete a la party de ese líder, si te invitó. |
/party accept <leader> | Igual que join. |
/party leave | Abandona tu party. |
/party kick <player> | Expulsa a un miembro (solo el líder). |
/party disband | Disuelve la party (solo el líder). |
/party info | Imprime el líder y los miembros. |
/party admin list | Lista todas las parties activas (requiere party.admin). |
/party admin info <player> | Muestra la party de un jugador. |
/party admin disband <player> | Disuelve la party de un jugador. Su líder debe estar conectado. |
/party admin kick <player> | Saca a un jugador de su party. El líder de la party debe estar conectado. |
Permisos
| Permiso | Por defecto | Concede |
|---|---|---|
party.use | Todos | Todos los comandos /party. Los clics del menú ejecutan las mismas acciones sin comprobarlo. |
party.admin | Operadores | Los comandos /party admin. |
typewriter.party.vip, typewriter.party.mvp | Ninguno | Tamaños de party mayores, solo cuando figuran en maxPartySizePermissions de la entrada de configuración. Estos nombres son los valores por defecto y se pueden cambiar. |
Placeholders
Etiquetas de MiniPlaceholders para texto MiniMessage, como <party_leader>. Los índices empiezan en 0.
| Placeholder | Devuelve |
|---|---|
<party_in_party> | 1 cuando el jugador está en una party, 0 en caso contrario. |
<party_leader> | Nombre del líder. |
<party_role> | Chef, Moderateur o Membre. |
<party_role_raw> | LEADER, MODERATOR o MEMBER. |
<party_size> | Número de miembros. |
<party_members> | Número de miembros. |
<party_members:index> | Nombre del miembro en esa posición. |
<party_members_exclude:index> | Nombre del miembro en esa posición, sin el espectador. |
<party_list> | Nombres de los miembros separados por una coma. |
<party_member_name:index> | Nombre del miembro en esa posición. |
<party_member_uuid:index> | UUID de ese miembro. |
<party_member_health:index> | Salud actual de ese miembro cuando está conectado en este servidor, 0.0 en caso contrario. |
<party_member_health_max:index> | Salud máxima, 20.0 cuando se desconoce. |
<party_member_health_percent:index> | Salud como porcentaje. |
Entradas
10 entradas, generadas a partir del código fuente de la extensión.
Acciones7
- Create PartyCreate a new party
- Invite PlayerInvite a player to your party
- Join PartyJoin a party
- Kick Party MemberKick a member from your party
- Leave PartyLeave your current party
- Party MenuOpen Party Menu
- Warp Party to ServerWarp the player's party to a server
Hechos1
- In PartyCheck if player is in a party
Artefactos1
- Party ArtifactArtifact for storing party and friend data
Manifiestos1
- Party size limitsMaximum party size, with optional permission-based overrides
Solución de problemas
/party no hace nada. No hay ninguna entrada Party Menu publicada. Los subcomandos como /party create funcionan sin ella.
"You do not have an invite to this party." La invitación caducó tras 60 a 120 segundos, o el nombre del líder estaba mal escrito. Pide al líder que invite de nuevo y luego usa /party join <leader>.
"Party is full! Limit: N". El líder alcanzó maxPartySize del Party Menu Config. Auméntalo, o concede al líder un permiso listado en maxPartySizePermissions. Sin la entrada de configuración no hay límite.
Los miembros de otro servidor no aparecen. Cada servidor necesita el mismo redis.group-id no vacío, un redis.server-name único y un Redis conectado. Sin un group-id no se difunde nada.
El warp falla con "Cross-server transport is unavailable." Redis no está conectado. Revisa la configuración de la extensión MySQL. El targetServer debe ser el nombre del backend que conoce el proxy, y el proxy debe aceptar el canal btc:bridge.
Los cambios en Party Menu Config (ranuras, botones, mensajes) no tienen efecto. Esos campos pertenecen a un menú antiguo que ya no está registrado. Usa la entrada Party Menu para diseñar el menú.
El siguiente mensaje de chat tras /party invite no se muestra. Es lo esperado: el comando sin un nombre espera un mensaje de chat y lo usa como nombre del jugador, y luego invita a ese jugador. Un nombre incorrecto solo da un error.
Extensiones relacionadas
- MySQL — mensajería de Redis y el transporte de proxy usado para los warps.
- GUI — layouts y vistas usados por el menú de party.
- Friend y Guild — los otros sistemas sociales.
- BTC Sky — las islas coop ponen a los miembros en la misma party.
- Dungeon — las instancias de mazmorra usan la party para agrupar jugadores.