Grupos en línea y chat de voz en juegos de PlayDrop
Deja que tus amigos jueguen en línea: declara tamaños de grupo, abre la ventana de grupo, entra en salas reservadas con sdk.multiplayer.join y gestiona la voz.
Un grupo de PlayDrop es un conjunto de amigos que pasan juntos de un juego a otro. Cuando un grupo inicia tu juego, PlayDrop reserva plazas para sus miembros en una de las salas de tu servidor, para que los amigos lleguen a la misma partida en lugar de quedar separados. El chat de voz funciona en PlayDrop, no en tu juego.
Qué necesitas
- Un servidor de juego en tiempo real: los grupos juegan en tus salas de Colyseus.
- Jugadores con la sesión iniciada: las salas rechazan a los invitados.
- Estas declaraciones en catalogue.json:
{
"types": ["solo", "online", "party"],
"party": { "online": [2, 3, 4] },
"roomVoice": true,
"server": { "entry": "server/index.mjs", "rooms": ["game"] }
}party.online enumera los tamaños exactos de grupo, hasta 4, que pueden llegar juntos; [2, 4] excluye el 3. Es el tamaño del grupo que llega, no la capacidad de la sala: dos grupos de cuatro pueden compartir una sala de ocho plazas. party requiere el tipo party y party.online requiere online. roomVoice: true activa la voz de sala y requiere online.
Entra en la sala correcta
if (!sdk.me.isLoggedIn) {
await sdk.me.promptLogin();
}
const room = await sdk.multiplayer.join("game", { mode: "versus" });join ocupa la plaza reservada del jugador cuando PlayDrop ha lanzado un grupo y, si no, entra por su cuenta. Si falla la entrada de un grupo, se rechaza; nunca coloca al jugador en otra sala sin avisar. Un invitado recibe authentication_required y PlayDrop muestra el inicio de sesión; vuelve a entrar desde sdk.me.onAuthChange. Conserva la misma sala entre rondas.
Tras una recarga, sdk.multiplayer.reconnect(roomName, token) recupera la plaza reservada con un token de reconexión que hayas guardado de forma privada para este juego, versión y usuario. Descarta el token y llama a join ante multiplayer_reconnect_expired, multiplayer_reconnect_unavailable o party_reconnect_mismatch.
La ventana de grupo
Desde un botón, sdk.social.openParty({ mode: "online" }) abre la ventana de grupo de PlayDrop, donde los jugadores invitan a sus amigos y activan o desactivan la voz. Si ya existe un grupo, se reutiliza. openParty() abre el menú del grupo y openParty({ section: "voice" }) abre los ajustes de voz; no combines mode y section. La promesa se resuelve cuando se cierra la ventana, también si se cancela.
Lee el grupo con sdk.social.getParty() o sdk.social.onPartyChange(callback), que entrega primero el estado actual: { partyId, leaderUserId, revision, members, launch }. launch.status es joining o ready cuando el grupo está jugando a este juego. Pertenecer al grupo no significa por sí solo que los jugadores compartan sala; usa join.
Los miembros del grupo los gestiona PlayDrop: los juegos no pueden añadir ni quitar miembros ni controlar micrófonos, y los jugadores invitan a sus amigos al grupo desde esta ventana. Aun así, un juego puede enviar su propia tarjeta de invitación o de desafío a un amigo con sdk.social.sendMessage; consulta compartir, amigos e invitaciones.
Voz de sala
Con roomVoice: true, todos los que están en una sala pueden hablar, sin código de servidor. Para cambiar quién oye a quién, vincula la sala en tu servidor y define una política:
import { playdrop } from "@playdrop/server";
const platform = playdrop.multiplayer.forRoom(this);
platform.voice.setPolicy("team");
platform.voice.setTeam(client.auth, "red");Las políticas son all, team, proximity (con { range }) y off. setAudience(player, audience) crea una excepción para un jugador y updatePositions([{ player, position: { x, y, z } }]) alimenta la proximidad; pasa null para borrar un equipo o una excepción. Es PlayDrop quien impone quién puede oír a quién. En el navegador, sdk.multiplayer.voice.updateSpatialState({ listener: { position, forward, up }, speakers: [{ userId, position }] }) solo ajusta el volumen y la panorámica.
La voz está sujeta al consentimiento, el silencio y los bloqueos de los jugadores, y depende de la versión del host y del despliegue.
Pausa
La cápsula del grupo no pausa el juego. La pausa de PlayDrop detiene tu cliente, pero la sala sigue conectada y tu servidor sigue funcionando. La pausa de un jugador no debe detener la partida de los demás; implementa cualquier pausa de partida en el servidor.
Prueba
Sube una versión privada y abre el enlace de prueba en dos ventanas con player=1 y player=2, como se explica en servidores de juego en tiempo real. Los grupos locales con mandos son un modo aparte: consulta grupos locales y mandos.