Normalmente, o código dentro de uma experiência só pode afetar o servidor ou clientes em que está rodando, mas pode haver situações em que você deseja que diferentes servidores se comuniquem entre si, incluindo:
- Cross-Server Chat Permite que os usuários conversem uns com os outros mesmo que não estejam no mesmo servidor, assumindo um máximo de cerca de 20 jogadores.
- Anúncios Globais Envie anúncios como "Um usuário encontrou um item especial!" para todos os servidores da experiência.
- Real-Time Server Browser Compile uma lista de todos os servidores da experiência e quem está neles (atualizado a cada minuto) e exiba a lista em um máximo de 20 servidores.
Você pode suportar mensagens entre servidores na sua experiência usando MessagingService . Você também pode usar a experiência de exemplo Teleportation Playground para ver como as mensagens entre servidores funcionam antes de implementá-las. Finalmente, veja aqui para explorar a comunicação entre servidores usando ferramentas externas.
Configuração de mensagens entre servidores
Para habilitar mensagens entre servidores, você deve configurar um tópico , que é um canal de mensagem personalizado acessível a partir de vários servidores. Depois de criar um tópico, você pode inscrever usuários no tópico para receber mensagens e habilitar para publicar mensagens no tópico.
Inscrevendo usuários para receber mensagens
Use MessagingService:SubscribeAsync() para inscrever usuários em um tópico e especificar uma função de retorno de chamada que detecta mensagens publicando nesse tópico. Por exemplo, a amostra de código a seguir inscreve todos os usuários em um tópico FriendServerEvent que recebe mensagens quando qualquer usuário é teletransportado para um servidor diferente.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Inscreva-se no tópico
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Cancelar assinatura do tópico após a mudança de ascendência do jogador
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Publicando Mensagens
Use MessagingService:PublishAsync() para corresponder a um tópico específico e publicar uma mensagem nele. Por exemplo, a seguinte amostra de código usa PublishAsync() para notificar todos os usuários quando um usuário entra em um novo servidor, incluindo o Player.Name que representa o nome de exibição do usuário e o JobId , um identificador exclusivo para a instância do servidor de experiência em funcionamento.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Publicar no tópico
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " joined server with 'JobId' of " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)