Party
Visão geral
O Party permite que os jogadores formem um grupo de curta duração. O líder cria uma party e convida jogadores pelo nome, e os jogadores convidados aceitam com /party join <leader>. Os sistemas de quests, dungeons e HUDs podem então perguntar "quem está na mesma party que este jogador". Um líder também pode levar toda a party por warp para outro servidor da rede.
As parties não são salvas em um banco de dados: elas vivem na memória e são replicadas para os outros servidores da rede por meio do Redis. Um membro que se desconecta permanece na party, então a party sobrevive a uma troca de servidor e só termina quando os membros saem, são expulsos ou o líder a dissolve. Uma reinicialização de todos os servidores dissolve todas as parties.
O menu da party é um menu do GUI que você constrói no painel web. Os membros são exibidos como cabeças de jogadores e os convites pendentes como cabeças clicáveis.
Recursos
- Criar, convidar, entrar, sair, expulsar, dissolver — disponíveis como comandos, actions do TypeWriter e botões de menu.
- Menu da party — uma entry com telas de membros e convites, paginação e abas.
- Convites — digitação do nome pelo chat, uma tela de entrada com filtro de busca e expiração em 60 segundos.
- Limites de tamanho — um máximo padrão com limites maiores para permissões como
typewriter.party.vip. - Warp para um servidor — o líder envia todos os membros para outro backend, onde quer que estejam na rede.
- Parties entre servidores — participação, convites e mensagens de chat da party chegam a todos os servidores do grupo.
- Ganchos de história — um fact indica se o jogador está em uma party.
- Placeholders — líder, cargo, tamanho, nomes dos membros e vida dos membros para HUDs.
- Integrações — outras extensões da BTC, como ilhas coop e dungeons, criam e leem parties.
Instalação
- Instale a extensão GUI, que desenha o menu, e a extensão Quest, que o Party declara como dependência.
- Opcional, para vários servidores: instale a extensão MySQL, ative o Redis (ou Valkey) e defina o mesmo
redis.group-ide umredis.server-nameúnico em cada servidor. O warp exige que o proxy trate o canalbtc:bridge. - Coloque o JAR do Party em
plugins/Typewriter/extensions/e reinicie o servidor.
party.use é concedida a todos por padrão e party.admin aos operadores.
Primeiros passos
Construa um menu de party e um limite de tamanho:
- No painel web do TypeWriter, abra uma página e adicione uma entry Party Menu Config. Apenas seus limites são usados (veja Configuração): defina
maxPartySizee, opcionalmente,maxPartySizePermissions. - Adicione uma entry Party Menu.
/partyabre a primeira que encontrar. - Defina
inventoryTitle,inventoryRowseguiType, depois construa o layout emlayoutPoole definamainLayoutId. Veja os guias do GUI. - Declare as telas em
views(por exemplomembersejoin). Liste os ids das telas de membros emmemberListViewIdse o id da tela de convites emjoinListViewIds. - Adicione itens com um
buttonType:PARTY_MEMBERS,PARTY_JOIN,PAGE_NAVe os botões que executam comandos (veja Menus). - Publique e execute
/party.
Para iniciar uma party a partir de uma quest, use a action Create Party. Para reunir jogadores, use Invite Player com targetName, que aceita um placeholder, e Join Party com leaderName.
Use Warp Party to Server com targetServer definido como o nome do backend conhecido pelo proxy, por exemplo dungeon-1. Apenas o líder pode dispará-lo. Combine-o com o fact In Party como criteria para oferecer o warp apenas aos jogadores em uma party.
Como funciona
Cada alteração em uma party é enviada aos outros servidores, que substituem sua cópia. Os convites expiram após 60 segundos, verificados uma vez por minuto, então um convite dura entre 60 e 120 segundos. Quando o líder sai, o primeiro membro restante se torna líder. Uma party sem nenhum membro é removida.
Configuração
A entry Party Menu Config é opcional. Ela contém apenas os limites de tamanho da party, por meio destes campos:
maxPartySize— número máximo padrão de membros. O padrão é5.maxPartySizePermissions— permissão para tamanho máximo. Vale o maior tamanho correspondente do líder. Os padrões sãotypewriter.party.vippara 8 etypewriter.party.mvppara 12.
Sem essa entry, não há limite de tamanho. O menu da party em si não é configurado aqui, ele vem da entry Party Menu.
O Party Artifact não é lido nem gravado pelo serviço de parties nesta versão, e você não precisa criar um.
Menus
A entry Party Menu é um menu do GUI com estes comportamentos específicos de party.
Painel de conteúdo. Em uma tela listada em memberListViewIds, cada membro é uma cabeça de jogador mostrando o cargo e o status online. Se você é o líder, o clique esquerdo em outro membro o expulsa. Em uma tela listada em joinListViewIds, cada convite pendente é a cabeça do líder que convidou: o clique esquerdo entra, o clique direito recusa. O painel é posicionado com contentX (padrão 5), contentY, contentColumns (padrão 4) e contentRows (padrão 7).
Botões. Estes valores de buttonType funcionam de imediato:
buttonType | Clique |
|---|---|
PARTY_MEMBERS | Abre a tela members (party open members). |
PARTY_JOIN | Muda para a view join do mesmo menu. |
PAGE_NAV | Clique esquerdo avança, clique direito volta; o nome mostra o contador de páginas. Oculto quando uma página basta. |
Estes valores não anexam nenhuma ação. Configure o item você mesmo e dê a ele comandos: PARTY_INFO, PARTY_CREATE, PARTY_LEAVE, PARTY_DISBAND, PARTY_INVITE, PARTY_CLOSE, PARTY_ACCEPT_INVITE, PARTY_DECLINE_INVITE. Por exemplo, execute party create, party leave ou party disband nos itens correspondentes. Um botão de convite precisa de um nome digitado: dê a ele um diálogo input cujo onInputCommands execute party invite {input}.
Comandos de slot. Os itens podem executar 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> e party joinsearch <text>. Eles são executados como o jogador que clicou.
A lore das cabeças e algumas mensagens de admin estão em francês. O placeholder <party_role> retorna as palavras em francês Chef, Moderateur e Membre. Use <party_role_raw> para os identificadores LEADER, MODERATOR e MEMBER.
Comandos
Todos os comandos exigem party.use. Alias: /p. O comando sem argumentos abre o primeiro Party Menu e não imprime nada quando não existe nenhum.
| Comando | Descrição |
|---|---|
/party | Abre o menu da party. |
/party create | Cria uma party e torna você o líder. |
/party invite | Fecha o inventário e permite digitar o nome do jogador no chat. |
/party invite <player> | Convida um jogador (somente o líder). |
/party join <leader> | Entra na party desse líder, se convidado. |
/party accept <leader> | O mesmo que join. |
/party leave | Sai da sua party. |
/party kick <player> | Expulsa um membro (somente o líder). |
/party disband | Dissolve a party (somente o líder). |
/party info | Imprime o líder e os membros. |
/party admin list | Lista todas as parties ativas (exige party.admin). |
/party admin info <player> | Mostra a party de um jogador. |
/party admin disband <player> | Dissolve a party de um jogador. O líder dela deve estar online. |
/party admin kick <player> | Remove um jogador de sua party. O líder da party deve estar online. |
Permissões
| Permissão | Padrão | Concede |
|---|---|---|
party.use | Todos | Todos os comandos /party. Os cliques nos menus executam as mesmas ações sem verificá-la. |
party.admin | Operadores | Os comandos /party admin. |
typewriter.party.vip, typewriter.party.mvp | Nenhuma | Tamanhos de party maiores, somente quando listadas em maxPartySizePermissions da entry de configuração. Esses nomes são os padrões e podem ser alterados. |
Placeholders
Tags MiniPlaceholders para texto MiniMessage, como <party_leader>. Os índices começam em 0.
| Placeholder | Retorna |
|---|---|
<party_in_party> | 1 quando o jogador está em uma party, caso contrário 0. |
<party_leader> | Nome do líder. |
<party_role> | Chef, Moderateur ou Membre. |
<party_role_raw> | LEADER, MODERATOR ou MEMBER. |
<party_size> | Número de membros. |
<party_members> | Número de membros. |
<party_members:index> | Nome do membro nessa posição. |
<party_members_exclude:index> | Nome do membro nessa posição, sem o espectador. |
<party_list> | Nomes dos membros separados por vírgula. |
<party_member_name:index> | Nome do membro nessa posição. |
<party_member_uuid:index> | UUID desse membro. |
<party_member_health:index> | Vida atual desse membro quando online neste servidor, caso contrário 0.0. |
<party_member_health_max:index> | Vida máxima, 20.0 quando desconhecida. |
<party_member_health_percent:index> | Vida como porcentagem. |
Entries
10 entradas, geradas a partir do código-fonte da extensão.
Ações7
- 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
Fatos1
- In PartyCheck if player is in a party
Artefatos1
- Party ArtifactArtifact for storing party and friend data
Manifestos1
- Party size limitsMaximum party size, with optional permission-based overrides
Solução de problemas
/party não faz nada. Nenhuma entry Party Menu está publicada. Subcomandos como /party create funcionam sem ela.
"You do not have an invite to this party." O convite expirou após 60 a 120 segundos, ou o nome do líder foi digitado errado. Peça ao líder que convide novamente e depois use /party join <leader>.
"Party is full! Limit: N". O líder atingiu maxPartySize do Party Menu Config. Aumente-o ou conceda ao líder uma permissão listada em maxPartySizePermissions. Sem a entry de configuração, não há limite.
Os membros em outro servidor não aparecem. Cada servidor precisa do mesmo redis.group-id não vazio, de um redis.server-name único e de um Redis conectado. Sem um group-id, nada é transmitido.
O warp falha com "Cross-server transport is unavailable." O Redis não está conectado. Verifique a configuração da extensão MySQL. O targetServer deve ser o nome do backend conhecido pelo proxy, e o proxy deve aceitar o canal btc:bridge.
As alterações no Party Menu Config (slots, botões, mensagens) não têm efeito. Esses campos pertencem a um menu antigo que não é mais registrado. Use a entry Party Menu para projetar o menu.
A próxima mensagem de chat após /party invite não é exibida. Isso é esperado: o comando sem um nome aguarda uma mensagem de chat e a usa como o nome do jogador, depois convida esse jogador. Um nome errado apenas gera um erro.