Multijugador: invitaciones, salas y presencia

Gamealia no corre tus servidores de juego: tu backend multijugador (Colyseus, WebSockets, señalización WebRTC...) sigue siendo tuyo. El SDK te da lo que lo rodea: links de invitación, una lista pública de salas abiertas, y amigos que ven a qué está jugando cada uno.

Declará tus servidores en backendHosts de la ficha, así el autotest sabe que son tuyos.

Si tu servidor revisa el Origin de los pedidos WebSocket o HTTP, permití exactamente estos dos:

  • https://<tu-slug>.gamealia.app: el origen propio de tu juego, donde lo juegan los jugadores;
  • https://gamealia-cdn.tinchogon34.workers.dev: vistas previas, el autotest y links viejos.

Nunca permitas *.gamealia.app: desde ahí se sirven también todos los otros juegos.

Un link de invitación abre tu juego en el portal y le pasa un código de sala: https://gamealia.app/game/<slug>?room=<CODIGO>. Los códigos tienen de 1 a 32 caracteres de A-Z a-z 0-9 _ -.

// El anfitrión creó una sala en tu servidor:
const link = await Gamealia.room.inviteLink(room.code);
copyToClipboard(link);
// O dejá que el portal muestre su hoja de invitación (copiar, compartir):
Gamealia.room.showInvite(room.code);

Un jugador que llega con un código lo recibe al arrancar, y mientras juega si entra a una sala desde el portal:

const { joinRoom } = await Gamealia.init(); // igual que Gamealia.room.getJoinCode()
if (joinRoom) connectToRoom(joinRoom);

Gamealia.on("roomJoin", (code) => connectToRoom(code));

En el mock, inviteLink(code) devuelve la URL actual con ?gamealia_join=<code>, y abrir esa URL completa joinRoom, así probás las uniones con dos pestañas del navegador.

Salas abiertas

Publicá una sala a la que pueda entrar cualquiera. El portal la muestra en la página de tu juego y en la fila "Salas abiertas ahora" de la portada, con la cantidad de jugadores:

Gamealia.room.publish({ code: "K7Q2", name: "Sala de Tino", players: 1, max: 4, inProgress: false });
// Entran o salen jugadores: publicá de nuevo con la cantidad nueva.
// Llena, empezada o cerrada:
Gamealia.room.unpublish();

El SDK repite el último publish cada 15 s mientras el juego está abierto; el portal saca una sala de la que no supo nada en 30 s, así que una pestaña cerrada desaparece sola. Una página publica una sola sala: publicar otro código la reemplaza. Los nombres se cortan a 64 caracteres.

Amigos y presencia

Los jugadores con sesión pueden agregar amigos. Los amigos ven quién está en línea, a qué juego está jugando y un botón Unirme cuando la sala del amigo está publicada y se puede entrar. Los jugadores que entraron al mismo código de sala aparecen en la lista "Jugaste hace poco con" del otro.

Gamealia.presence.setStatus(text) agrega un estado corto ("Nivel 3", "Esperando jugadores") que los amigos ven junto al juego. Se corta a 64 caracteres y se envía como mucho una vez cada 2 s; un texto vacío lo borra.

Ficha

Poné multiplayer: { min, max } (jugadores por sala) en la ficha y la etiqueta multiplayer, así los jugadores pueden filtrar por eso. Usá null para juegos de un jugador.

Para empezar

gamealia new mi-juego --template multiplayer (o gamealia_create_project con template: "multiplayer") crea un juego chico con salas, invitaciones y la lista de salas abiertas ya conectadas.