Normalmente, el código dentro de un juego solo puede afectar al servidor o a los clientes en los que se está ejecutando, pero pueden haber situaciones en las que desees que diferentes servidores se comuniquen entre sí, incluyendo:
- Anuncios globales — Envía anuncios como "¡Un usuario encontró un objeto especial!" a todos los servidores del juego.
- Navegador de servidores en tiempo real — Compila una lista de todos los servidores del juego y quién está en ellos (actualizada cada minuto) y muestra la lista en un máximo de 20 servidores.
Puedes soportar la mensajería entre servidores en tu juego utilizando MessagingService. También puedes usar el juego de muestra Teleportation Playground para ver cómo funciona la mensajería entre servidores antes de implementarlo. Por último, consulta aquí para explorar la comunicación entre servidores utilizando herramientas externas.
Configuración de mensajería entre servidores
Para habilitar la mensajería entre servidores, debes configurar un tema que es un canal de mensajes personalizado accesible desde múltiples servidores. Después de crear un tema, puedes suscribir usuarios al tema para recibir mensajes y habilitar la publicación de mensajes en el tema.
Suscribir usuarios para recibir mensajes
Utiliza MessagingService:SubscribeAsync() para suscribir usuarios a un tema y especificar una función de devolución de llamada que detecte los mensajes publicados en ese tema. Por ejemplo, el siguiente ejemplo de código suscribe a todos los usuarios a un tema FriendServerEvent que recibe mensajes cuando cualquier usuario es teletransportado a otro servidor.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Suscribirse al tema
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Cancelar suscripción del tema al cambiar la ascendencia del jugador
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Publicar mensajes
Utiliza MessagingService:PublishAsync() para coincidir con un tema específico y publicar un mensaje en él. Por ejemplo, el siguiente ejemplo de código utiliza MessagingService:PublishAsync() para notificar a todos los usuarios cuando un usuario se une a un nuevo servidor, incluyendo el Player.Name que representa el nombre visible del usuario y el DataModel.JobId, un identificador único para la instancia del servidor de juego en ejecución.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Publicar en el tema
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " se unió al servidor con 'JobId' de " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)