Pular para o conteúdo principal

Party

Grupos temporários com convites, um menu GUI, limites de tamanho e warps de servidor para o grupo inteiro.

Privadasv0.2.0Social
RequerTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)GUI (TypeWriter extension)MySQL (TypeWriter extension)opcionalRedis or Valkeyopcional

Criada para a rede BornToCraft. Esta extensão é documentada como referência e não é distribuída.

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​

  1. Instale a extensão GUI, que desenha o menu, e a extensão Quest, que o Party declara como dependência.
  2. Opcional, para vários servidores: instale a extensão MySQL, ative o Redis (ou Valkey) e defina o mesmo redis.group-id e um redis.server-name único em cada servidor. O warp exige que o proxy trate o canal btc:bridge.
  3. 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:

  1. 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 maxPartySize e, opcionalmente, maxPartySizePermissions.
  2. Adicione uma entry Party Menu. /party abre a primeira que encontrar.
  3. Defina inventoryTitle, inventoryRows e guiType, depois construa o layout em layoutPool e defina mainLayoutId. Veja os guias do GUI.
  4. Declare as telas em views (por exemplo members e join). Liste os ids das telas de membros em memberListViewIds e o id da tela de convites em joinListViewIds.
  5. Adicione itens com um buttonType: PARTY_MEMBERS, PARTY_JOIN, PAGE_NAV e os botões que executam comandos (veja Menus).
  6. 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.

Dungeons e instâncias

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ão typewriter.party.vip para 8 e typewriter.party.mvp para 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.

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:

buttonTypeClique
PARTY_MEMBERSAbre a tela members (party open members).
PARTY_JOINMuda para a view join do mesmo menu.
PAGE_NAVClique 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.

Idioma

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.

ComandoDescrição
/partyAbre o menu da party.
/party createCria uma party e torna você o líder.
/party inviteFecha 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 leaveSai da sua party.
/party kick <player>Expulsa um membro (somente o líder).
/party disbandDissolve a party (somente o líder).
/party infoImprime o líder e os membros.
/party admin listLista 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ãoPadrãoConcede
party.useTodosTodos os comandos /party. Os cliques nos menus executam as mesmas ações sem verificá-la.
party.adminOperadoresOs comandos /party admin.
typewriter.party.vip, typewriter.party.mvpNenhumaTamanhos 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.

PlaceholderRetorna
<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
Fatos1
Artefatos1
Manifestos1

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.

Extensões relacionadas​

  • MySQL — mensageria Redis e o transporte do proxy usado nos warps.
  • GUI — layouts e views usados pelo menu da party.
  • Friend e Guild — os outros sistemas sociais.
  • BTC Sky — as ilhas coop colocam os membros na mesma party.
  • Dungeon — as instâncias de dungeon usam a party para agrupar jogadores.