Grupos online e chat de voz em jogos do PlayDrop
Amigos jogam juntos online: declare tamanhos de grupo, abra a janela de grupo do PlayDrop, entre em salas reservadas com sdk.multiplayer.join e controle a voz.
Um grupo do PlayDrop é um conjunto de amigos que passa de um jogo para outro junto. Quando um grupo inicia seu jogo, o PlayDrop reserva vagas para os membros em uma das salas do seu servidor, para que os amigos cheguem na mesma partida em vez de ficarem separados. O chat de voz roda no PlayDrop, não no seu jogo.
Do que você precisa
- Um servidor de jogo em tempo real: os grupos jogam nas suas salas Colyseus.
- Jogadores logados: as salas recusam convidados.
- Estas declarações no catalogue.json:
{
"types": ["solo", "online", "party"],
"party": { "online": [2, 3, 4] },
"roomVoice": true,
"server": { "entry": "server/index.mjs", "rooms": ["game"] }
}party.online lista os tamanhos exatos de grupo, até 4, que podem chegar juntos; [2, 4] exclui 3. É o tamanho do grupo que chega, não a capacidade da sala: dois grupos de quatro podem dividir uma sala de oito vagas. party exige o tipo party, e party.online exige online. roomVoice: true ativa a voz da sala e exige online.
Entre na sala certa
if (!sdk.me.isLoggedIn) {
await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });join usa a vaga reservada do jogador no grupo quando o PlayDrop iniciou um grupo; caso contrário, entra de forma independente. Se a entrada do grupo falhar, a chamada é rejeitada; ela nunca coloca o jogador em outra sala sem avisar. Um convidado recebe authentication_required e o PlayDrop mostra o login; chame join de novo a partir de sdk.me.onAuthChange. Mantenha a mesma sala entre as rodadas.
Depois de recarregar a página, sdk.multiplayer.reconnect(roomName, token) restaura a vaga reservada com um token de reconexão que você guardou de forma privada para este jogo, esta versão e este usuário. Descarte o token e chame join em caso de multiplayer_reconnect_expired, multiplayer_reconnect_unavailable ou party_reconnect_mismatch.
A janela do grupo
A partir de um botão, sdk.social.openParty({ mode: "online" }) abre a janela de grupo do PlayDrop, onde os jogadores convidam amigos e ligam ou desligam a voz. Um grupo existente é reaproveitado. openParty() abre o menu do grupo e openParty({ section: "voice" }) abre as configurações de voz; não combine mode e section. A promise é resolvida quando a janela fecha, inclusive quando o jogador cancela.
Leia o grupo com sdk.social.getParty() ou sdk.social.onPartyChange(callback), que entrega primeiro o estado atual: { partyId, leaderUserId, revision, members, launch }. launch.status é joining ou ready quando o grupo está jogando este jogo. Fazer parte do grupo, por si só, não significa que os jogadores estão na mesma sala; use join.
Os membros do grupo são gerenciados pelo PlayDrop: os jogos não podem adicionar nem remover membros do grupo nem controlar microfones, e os jogadores convidam amigos para o grupo por esta janela. Um jogo ainda pode enviar seu próprio card de convite ou de desafio a um amigo com sdk.social.sendMessage; veja compartilhamento, amigos e convites.
Voz da sala
Com roomVoice: true, todos em uma sala podem falar, sem nenhum código no servidor. Para mudar quem ouve quem, vincule a sala no seu servidor e defina uma política:
import { playdrop } from "@playdrop/server";
const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");As políticas são all, team, proximity (com { range }) e off. setAudience(player, audience) substitui a regra para um jogador e updatePositions([{ player, position: { x, y, z } }]) alimenta a proximidade; passe null para limpar uma equipe ou uma substituição. O PlayDrop garante quem pode ouvir quem. No navegador, sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) só ajusta o volume e a posição estéreo.
A voz depende do consentimento dos jogadores, do silenciamento e dos bloqueios, além da versão do host e da liberação gradual do recurso.
Pausa
A cápsula do grupo não pausa o jogo. A pausa do PlayDrop para o seu cliente, mas a sala continua conectada e o seu servidor continua rodando. A pausa de um jogador não pode interromper a partida dos outros; implemente no servidor qualquer pausa da partida.
Teste
Envie uma versão privada e depois abra o link de teste em duas janelas, com player=1 e player=2, como descrito em servidores de jogo em tempo real. Grupos locais com controles são um modo separado: veja grupos locais e controles.