SocialService
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
SocialService facilite les fonctions sociales qui impactent les relations établies sur la plate-forme Roblox.Son usage principal est de montrer invitations d'invitation et le répertoire téléphonique aux joueurs, leur permettant d'envoyer des demandes d'invitation à leurs amis via PromptGameInvite() et PromptPhoneBook().Vous pouvez utiliser des signaux lorsque de telles demandes sont faites.
Résumé
Méthodes
Renvoie une table de tous les objets connectés actuellement qui ont la propriété correspondante à la passe .
Masque la vue d'un joueur appelant lui-même.
Demande à l'invitation donnée Player avec l'écran d'invitation.
Demande au livre de téléphone donné Player avec l'annuaire téléphonique.
Affiche la vue d'un joueur appelant lui-même.
Indique si le Player donné peut inviter d'autres joueurs à un appel.
Indique si le Player peut inviter d'autres joueurs.
Renvoie une série de dictionnaires contenant des données pour tous les membres de la partie spécifiée qui sont actuellement dans l'expérience.
Évènements
Se déclenche lorsque l'appel d'un joueur invite à modifier l'état.
Se déclenche lorsqu'un joueur ferme une invite.
Se déclenche lorsqu'un joueur ferme l'invite du répertoire téléphonique.
Rappels
Propriétés
Méthodes
GetPlayersByPartyId
Retourne une table de tous les objets connectés actuellement qui ont la propriété correspondante fournie .Cette méthode se comporte de manière similaire à Players:GetPlayers() mais filtre les résultats pour inclure uniquement les joueurs appartenant à la partie spécifiée.
Notez que ce service ne fonctionne pas pendant les tests de jeu dans Roblox Studio ; pour tester les aspects de votre expérience en l'utilisant, vous devez publier l'expérience et la jouer dans l'application Roblox.
Paramètres
Retours
Une table de Player objets dont la propriété Player.PartyId correspond au partyId passé.
Échantillons de code
local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local partyId = player.PartyId
if partyId ~= "" then
local partyPlayers: { Player } = SocialService:GetPlayersByPartyId(partyId)
for _, partyMember in partyPlayers do
print("Party Member: " .. partyMember.Name)
end
else
warn("Player is not in a party")
end
end)
local Teams = game:GetService("Teams")
local Players = game:GetService("Players")
local SocialService = game:GetService("SocialService")
local redTeam = Instance.new("Team")
redTeam.Name = "Red Team"
redTeam.TeamColor = BrickColor.Red()
redTeam.AutoAssignable = false
redTeam.Parent = Teams
local blueTeam = Instance.new("Team")
blueTeam.Name = "Blue Team"
blueTeam.TeamColor = BrickColor.Blue()
blueTeam.AutoAssignable = false
blueTeam.Parent = Teams
local function assignPlayerToTeam(player)
local partyId = player.PartyId
if partyId == "" then
assignBalancedTeam(player)
return
end
local teams = { redTeam, blueTeam }
local matchingTeam = nil
local partyPlayers = SocialService:GetPlayersByPartyId(partyId)
for _, partyPlayer in partyPlayers do
if partyPlayer ~= player and table.find(teams, partyPlayer.Team) then
matchingTeam = partyPlayer.Team
break
end
end
if matchingTeam then
player.Team = matchingTeam
player.TeamColor = matchingTeam.TeamColor
else
assignBalancedTeam(player)
end
end
function assignBalancedTeam(player)
local redCount = #redTeam:GetPlayers()
local blueCount = #blueTeam:GetPlayers()
local chosenTeam = redCount <= blueCount and redTeam or blueTeam
player.Team = chosenTeam
player.TeamColor = chosenTeam.TeamColor
end
local function groupPlayersByParty()
local seenPartyIds = {}
local groupedPlayers = {}
for _, player in Players:GetPlayers() do
if player.PartyId == "" then
table.insert(groupedPlayers, { player })
elseif not table.find(seenPartyIds, player.PartyId) then
table.insert(seenPartyIds, player.PartyId)
local partyPlayers = SocialService:GetPlayersByPartyId(player.PartyId)
table.insert(groupedPlayers, partyPlayers)
end
end
return groupedPlayers
end
-- Call this function to rebalance teams
local function rebalanceTeams()
local groups = groupPlayersByParty()
table.sort(groups, function(a, b)
return #a > #b
end)
for _, player in Players:GetPlayers() do
player.Team = nil
end
for _, group in groups do
local redCount = #redTeam:GetPlayers()
local blueCount = #blueTeam:GetPlayers()
local bestTeam
if redCount <= blueCount then
bestTeam = redTeam
else
bestTeam = blueTeam
end
for _, player in group do
player.Team = bestTeam
player.TeamColor = bestTeam.TeamColor
end
end
for _, player in Players:GetPlayers() do
player:LoadCharacter()
end
end
Players.PlayerAdded:Connect(function(player)
assignPlayerToTeam(player)
player:LoadCharacter()
player:GetPropertyChangedSignal("PartyId"):Connect(function()
if player.PartyId ~= "" then
assignPlayerToTeam(player)
end
end)
end)
HideSelfView
Masque la vue d'un joueur appelant de lui-même. Si cette méthode est appelée alors que la vue d'un joueur est déjà cachée, elle ne fait rien.
Retours
PromptGameInvite
PromptGameInvite() affiche une invitation rapide au joueur local à travers laquelle il peut inviter ses amis à l'expérience actuelle.Avant d'appeler cette méthode, vous devez utiliser CanSendGameInviteAsync() pour déterminer si le joueur peut envoyer une invitation, car cette capacité peut varier en fonction de la plate-forme ou du joueur.
Voir invitations de joueur pour plus de détails sur la mise en œuvre d'invitations, la personnalisation d'invitations et de notifications, et l'utilisation des données de lancement.
Paramètres
Objet facultatif ExperienceInviteOptions optionnel pour personnaliser la demande.
Retours
Échantillons de code
local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Function to check whether the player can send an invite
local function canSendGameInvite(sendingPlayer)
local success, canSend = pcall(function()
return SocialService:CanSendGameInviteAsync(sendingPlayer)
end)
return success and canSend
end
local canInvite = canSendGameInvite(player)
if canInvite then
SocialService:PromptGameInvite(player)
end
PromptPhoneBook
Demande au livre de téléphone donné Player avec l'annuaire téléphonique.Si le joueur choisit d'appeler quelqu'un, l'événement CallInviteStateChanged se déclenche.Vous devez utiliser CanSendCallInviteAsync() avant d'appeler PromptPhoneBook() puisque la capacité de voir l'annuaire téléphonique peut varier en fonction du joueur.
Si un joueur n'est pas éligible pour ouvrir le répertoire téléphonique, un dialogue d'erreur est affiché.
Voir Roblox Connect pour une implémentation d'échantillon de cette méthode.
Paramètres
Le joueur à interroger avec le répertoire téléphonique.
Chaîne pour aider à différencier entre divers points d'entrée du répertoire téléphonique ou similaires.Par exemple, vous pouvez passer une chaîne définissant dans quelle région d'une expérience le personnage de l'appelant se trouve actuellement.
Retours
Échantillons de code
local Players = game:GetService("Players")
local SocialService = game:GetService("SocialService")
local player = Players.LocalPlayer
local button = script.Parent
button.Visible = false
-- Function to check whether the player can send a call invite
local function canSendCallingInvite(sendingPlayer)
local success, canSend = pcall(function()
return SocialService:CanSendCallInviteAsync(sendingPlayer)
end)
return success and canSend
end
local canCall = canSendCallingInvite(player)
if canCall then
button.Visible = true
button.Activated:Connect(function()
SocialService:PromptPhoneBook(player, "")
end)
end
ShowSelfView
Affiche la vue d'un joueur appelant de lui-même. Si cette méthode est appelée alors que la vue d'un joueur est déjà visible, elle ne fait rien.
Paramètres
La position pour placer la vue d'ensemble.
Retours
CanSendCallInviteAsync
Retourne true si le donné Player peut envoyer une invitation à un appel à un ami.Vous devez toujours utiliser le résultat de cette méthode avant d'appeler PromptPhoneBook() puisque la capacité d'ouvrir le répertoire téléphonique peut varier en fonction du joueur.
Voir Roblox Connect pour une implémentation d'échantillon de cette méthode.
Paramètres
Retours
Si le joueur spécifié peut envoyer une invitation à un appel.
Échantillons de code
local Players = game:GetService("Players")
local SocialService = game:GetService("SocialService")
local player = Players.LocalPlayer
local button = script.Parent
button.Visible = false
-- Function to check whether the player can send a call invite
local function canSendCallingInvite(sendingPlayer)
local success, canSend = pcall(function()
return SocialService:CanSendCallInviteAsync(sendingPlayer)
end)
return success and canSend
end
local canCall = canSendCallingInvite(player)
if canCall then
button.Visible = true
button.Activated:Connect(function()
SocialService:PromptPhoneBook(player, "")
end)
end
CanSendGameInviteAsync
CanSendGameInviteAsync() renvoie true si le donné Player peut inviter d'autres joueurs à l'expérience actuelle.Vous devez toujours utiliser le résultat de cette méthode avant d'appeler PromptGameInvite() puisque la capacité d'inviter des joueurs peut varier en fonction de la plate-forme ou du joueur.
Voir invitations de joueur Prompts pour plus de détails sur la mise en œuvre d'invitations de joueur, la personnalisation d'invitations et de notifications, et l'utilisation des données de lancement.
Paramètres
L'instance Player du joueur envoie potentiellement une invitation.
Facultatif du récepteur potentiel , utilisé pour vérifier si l'expéditeur peut inviter ce destinataire spécifique.
Retours
Si le joueur spécifié peut envoyer une invitation.
Échantillons de code
local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Function to check whether the player can send an invite
local function canSendGameInvite(sendingPlayer)
local success, canSend = pcall(function()
return SocialService:CanSendGameInviteAsync(sendingPlayer)
end)
return success and canSend
end
local canInvite = canSendGameInvite(player)
if canInvite then
SocialService:PromptGameInvite(player)
end
GetPartyAsync
Retourne un ensemble de dictionnaires contenant des données pour tous les membres associés au donné partyId.L'array retourné reflète l'état actuel du parti à travers toutes les instances de serveur actives dans l'expérience et il est ordonné par le temps auquel chaque membre du parti a accepté l'invitation du parti.Cela signifie que le premier élément dans l'array est le plus ancien à accepter et le dernier est le plus récent.
Cette méthode est utile pour récupérer des informations à jour sur tous les membres de la partie actuellement dans l'expérience et sur différents serveurs, ce qui permet d'activer un comportement de groupe coordonné comme la téléportation, le matchmaking ou la logique de jeu basée sur les parties.
Chaque dictionnaire dans l'array retourné contient les champs suivants :
<th>Type de valeur</th><th>Avertissement</th></tr></thead><tbody><tr><th><code>ID utilisateur</code></th><td>numéro</td><td>La propriété <code>Class.Player.UserId</code> du joueur.</td></tr><tr><th><code>Identifiant de lieu</code></th><td>numéro</td><td>Le <code>Class.DataModel.PlaceId</code> de l'endroit où le membre du groupe se trouve actuellement.</td></tr><tr><th><code>Id de travail</code></th><td>texte</td><td>Le <code>Class.DataModel.JobId</code> de l'instance du serveur dans laquelle l'utilisateur réside actuellement.</td></tr><tr><th><code>ID de serveur privé</code></th><td>texte</td><td>Si applicable, le <code>Class.DataModel.PrivateServerId</code> lorsque le membre du groupe est sur un serveur privé ou réservé.</td></tr><tr><th><code>Code d'accès au serveur réservé</code></th><td>texte</td><td>Si applicable, le code d'accès pour le serveur réservé dans lequel l'utilisateur réside actuellement.Utile pour téléporter les membres du groupe les uns aux autres en utilisant <code>Class.TeleportService:TeleportAsync()</code>.</td></tr></tbody>
Clé |
---|
Notez que ce service ne fonctionne pas pendant les tests de jeu dans Roblox Studio ; pour tester les aspects de votre expérience en l'utilisant, vous devez publier l'expérience et la jouer dans l'application Roblox.
Paramètres
Retours
Un ensemble de dictionnaires représentant les membres du parti spécifié qui sont actuellement dans l'expérience.
Échantillons de code
local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local partyId = player.PartyId
if partyId == "" then
warn("Player is not in a party")
return
end
local success, partyData = pcall(function()
return SocialService:GetPartyAsync(partyId)
end)
if success and partyData then
for _, partyMemberData in partyData do
print(
partyMemberData.UserId,
partyMemberData.PlaceId,
partyMemberData.JobId,
partyMemberData.PrivateServerId,
partyMemberData.ReservedServerAccessCode
)
end
else
warn("Failed to retrieve party data")
end
end)
Évènements
CallInviteStateChanged
Cet événement se déclenche lorsque l'état d'invitation d'un appel de joueur change.
Paramètres
L'état d'invitation de nouvel appel.
Échantillons de code
local SocialService = game:GetService("SocialService")
local button = script.Parent
local isPhonebookOpen = false
SocialService.CallInviteStateChanged:Connect(function(_, inviteState)
local isCalling = inviteState == Enum.InviteState.Placed
if isCalling or isPhonebookOpen then
button.Visible = false
else
button.Visible = true
end
end)
GameInvitePromptClosed
Cet événement se déclenche lorsqu'un joueur ferme une invite.
Paramètres
Plus rempli ; une liste vide.
Rappels
OnCallInviteInvoked
Paramètres
Retours
Échantillons de code
local SocialService = game:GetService("SocialService")
local TeleportService = game:GetService("TeleportService")
SocialService.OnCallInviteInvoked = function()
local placeId = 0123456789 -- This is the place ID of the desired place to drop call participants into
local accessCode = TeleportService:ReserveServer(placeId)
return { ReservedServerAccessCode = accessCode, PlaceId = placeId }
end