Normalement, le code d'un jeu ne peut affecter que le serveur ou les clients sur lesquels il s'exécute, mais il peut y avoir des situations où vous souhaitez que différents serveurs communiquent entre eux, notamment :
- Annonces Globales — Envoyez des annonces telles que "Un utilisateur a trouvé un objet spécial !" à tous les serveurs du jeu.
- Navigateur de Serveurs en Temps Réel — Compilez une liste de tous les serveurs du jeu et de ceux qui s'y trouvent (mise à jour chaque minute) et affichez la liste sur un maximum de 20 serveurs.
Vous pouvez prendre en charge la messagerie entre serveurs dans votre jeu en utilisant MessagingService. Vous pouvez également utiliser le Teleportation Playground exemple de jeu pour voir comment la messagerie entre serveurs fonctionne avant de l'implémenter. Enfin, consultez ici pour explorer la communication entre serveurs en utilisant des outils externes.
Configuration de la messagerie entre serveurs
Pour activer la messagerie entre serveurs, vous devez configurer un sujet qui est un canal de message personnalisé accessible depuis plusieurs serveurs. Après avoir créé un sujet, vous pouvez s'abonner des utilisateurs à ce sujet pour recevoir des messages et activer la publication de messages sur le sujet.
S'abonner des utilisateurs pour recevoir des messages
Utilisez MessagingService:SubscribeAsync() pour abonner des utilisateurs à un sujet et spécifiez une fonction de rappel qui détecte les messages publiés sur ce sujet. Par exemple, l'exemple de code suivant abonne tous les utilisateurs à un sujet FriendServerEvent qui reçoit des messages lorsqu'un utilisateur est téléporté vers un autre serveur.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- S'abonner au sujet
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Se désabonner du sujet lors du changement d'ascendance du joueur
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Publier des messages
Utilisez MessagingService:PublishAsync() pour correspondre à un sujet spécifique et publier un message sur celui-ci. Par exemple, l'exemple de code suivant utilise PublishAsync() pour notifier tous les utilisateurs lorsqu'un utilisateur rejoint un nouveau serveur, y compris le Player.Name représentant le nom d'affichage de l'utilisateur et le JobId, un identifiant unique pour l'instance du serveur de jeu en cours d'exécution.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Publier sur le sujet
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " a rejoint le serveur avec 'JobId' de " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)