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.
Links de invitación
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.