Normalmente, il codice all'interno di un gioco può influenzare solo il server o i client su cui viene eseguito, ma ci possono essere situazioni in cui si desidera che server diversi comunichino tra loro, inclusi:
- Annunci globali — Invia annunci come "Un utente ha trovato un oggetto speciale!" a tutti i server del gioco.
- Browser di server in tempo reale — Compila un elenco di tutti i server del gioco e di chi è presente in essi (aggiornato ogni minuto) e visualizza l'elenco su un massimo di 20 server.
Puoi supportare la messaggistica tra server nel tuo gioco utilizzando MessagingService. Puoi anche utilizzare il gioco dimostrativo Teleportation Playground per vedere come funziona la messaggistica tra server prima di implementarla. Infine, consulta qui per esplorare la comunicazione tra server utilizzando strumenti esterni.
Configurazione della messaggistica tra server
Per abilitare la messaggistica tra server, devi impostare un argomento, che è un canale di messaggi personalizzato accessibile da più server. Dopo aver creato un argomento, puoi iscrivere gli utenti all'argomento per ricevere messaggi e abilitare la pubblicazione di messaggi all'argomento.
Iscrivere utenti per ricevere messaggi
Usa MessagingService:SubscribeAsync() per iscrivere gli utenti a un argomento e specificare una funzione di callback che rilevi i messaggi pubblicati su quell'argomento. Ad esempio, il seguente esempio di codice iscrive tutti gli utenti a un argomento FriendServerEvent che riceve messaggi quando un qualsiasi utente viene teletrasportato a un server diverso.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Iscrivi all'argomento
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Annulla l'iscrizione dall'argomento al cambiamento dell'ascendenza del giocatore
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Pubblicare messaggi
Usa MessagingService:PublishAsync() per abbinare un argomento specifico e pubblicare un messaggio. Ad esempio, il seguente esempio di codice utilizza PublishAsync() per notificare a tutti gli utenti quando un utente si unisce a un nuovo server, inclusi Player.Name che rappresenta il nome visualizzato dell'utente e JobId, un identificatore unico per l'istanza di server di gioco in esecuzione.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Pubblica sull'argomento
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " si è unito al server con 'JobId' di " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)