SocialService
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
SocialService facilita las funciones sociales que afectan las relaciones establecidas en la plataforma Roblox.Su uso principal es mostrar invitaciones de invitación y la agenda telefónica a los jugadores, permitiéndoles enviar solicitudes de invitación a sus amigos a través de PromptGameInvite() y PromptPhoneBook() respectivamente.Puedes aprovechar las señales cuando se hagan tales solicitudes.
Resumen
Métodos
Devuelve una tabla de todos los objetos conectados actualmente Player que tienen la propiedad Player.PartyId que coincide con la pasada partyId.
Oculta la vista propia del jugador llamador.
Solicita al dado Player con la pantalla de invitación.
Solicita al dado Player con el libro de teléfonos.
Muestra la vista propia del jugador llamante.
Indica si el dado Player puede invitar a otros jugadores a una llamada.
Indica si el dado Player puede invitar a otros jugadores.
Devuelve el estado de RSVP del jugador local para el evento dado.
Devuelve un array de diccionarios que contienen datos para todos los miembros del grupo especificado que están actualmente en la experiencia.
Solicita al local Player con una solicitud para cambiar su estado de RSVP al evento dado.
Eventos
Se activa cuando el estado de la llamada de un jugador cambia.
Se enciende cuando un jugador cierra una invitación.
Se enciende cuando un jugador cierra la solicitud del libro de teléfonos.
Llamadas
Devolución de llamada cuando se realiza una llamada desde la agenda telefónica.
Propiedades
Métodos
GetPlayersByPartyId
Devuelve una tabla de todos los objetos conectados actualmente Player que tienen la propiedad Player.PartyId que coincide con la proporcionada partyId.Este método se comporta de manera similar a Players:GetPlayers() pero filtra los resultados para incluir solo a aquellos jugadores que pertenecen al partido especificado.
Tenga en cuenta que este servicio no funciona durante las pruebas de juego en Roblox Studio; para probar aspectos de su experiencia usándolo, debe publicar la experiencia y jugarla en la aplicación de Roblox.
Parámetros
Devuelve
Una tabla de Player objetos cuya propiedad Player.PartyId coincide con el partyId pasado.
Muestras de código
The following example listens for when a player joins the experience. If the player is part of a party, it uses SocialService:GetPlayersByPartyId() to retrieve all players in the same party who are currently connected to the server. It then outputs the name of each party member.
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)
This code sample demonstrates how to assign players to Teams based on their Player.PartyId using the SocialService:GetPlayersByPartyId() method. When a player joins the experience, the script checks whether they're part of a party. If so, it attempts to assign them to the same team as other party members. If no match is found or the player isn't in a party, they're placed on the team with fewer members to maintain balance.
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
Oculta la vista propia del jugador llamante. Si se llama este método mientras la vista propia ya está oculta, no hace nada.
Devuelve
PromptGameInvite
PromptGameInvite() muestra una invitación al jugador local a través de la cual pueden invitar a sus amigos a la experiencia actual.Antes de llamar a este método, debe usar CanSendGameInviteAsync() para determinar si el jugador puede enviar una invitación, ya que esta capacidad puede variar dependiendo de la plataforma o el jugador.
Vea Invitaciones de jugador para más detalles sobre la implementación de invitaciones, la personalización de solicitudes y notificaciones, y el uso de datos de lanzamiento.
Parámetros
El Player para solicitar con la ventana emergente de invitación.
Objeto opcional ExperienceInviteOptions para personalizar la solicitud.
Devuelve
Muestras de código
The following code sample uses CanSendGameInviteAsync() to confirm whether the local Player can send an invite. If true, it then prompts the invite using PromptGameInvite().
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
Solicita al dado Player con el libro de teléfonos.Si el jugador elige llamar a alguien, se activa el evento CallInviteStateChanged.Debe usar CanSendCallInviteAsync() antes de llamar PromptPhoneBook() ya que la capacidad de ver la agenda telefónica puede variar dependiendo del jugador.
Si un jugador no es elegible para abrir la agenda telefónica, se muestra un diálogo de error.
Vea Roblox Connect para una implementación de muestra de este método.
Parámetros
El jugador para solicitar con el libro de teléfonos.
Texto para ayudar a diferenciar entre varios "puntos de entrada" de libro de teléfonos o similares.Por ejemplo, puedes pasar una cadena que defina en qué región de una experiencia se encuentra actualmente el personaje del jugador llamador.
Devuelve
Muestras de código
The following code sample, placed within a child LocalScript of a GuiButton, uses CanSendCallInviteAsync() to confirm that the player can make a call. If so, it connects PromptPhoneBook() to the button's Activated event.
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
Muestra la vista propia del jugador llamante. Si se llama este método mientras la vista propia ya es visible, no hace nada.
Parámetros
La posición para colocar la vista autónoma.
Devuelve
CanSendCallInviteAsync
Devuelve true si el dado Player puede enviar una invitación de llamada a un amigo.Siempre debe usar el resultado de este método antes de llamar PromptPhoneBook() ya que la capacidad de abrir la agenda telefónica puede variar dependiendo del jugador.
Vea Roblox Connect para una implementación de muestra de este método.
Parámetros
Devuelve
Si el jugador especificado puede enviar una invitación de llamada.
Muestras de código
The following code sample, placed within a child LocalScript of a GuiButton, uses CanSendCallInviteAsync() to confirm that the player can make a call. If so, it connects PromptPhoneBook() to the button's Activated event.
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() devuelve true si el dado Player puede invitar a otros jugadores a la experiencia actual.Siempre debe usar el resultado de este método antes de llamar PromptGameInvite() ya que la capacidad de invitar a jugadores puede variar dependiendo de la plataforma o del jugador.
Vea Invitaciones de jugador para más detalles sobre la implementación de invitaciones de jugador, la personalización de invitaciones y notificaciones, y el uso de datos de lanzamiento.
Parámetros
La instancia Player del jugador que potencialmente envía una invitación.
Opcional del receptor potencial , usado para verificar si el remitente puede invitar a ese receptor específico.
Devuelve
Si el jugador especificado puede enviar una invitación.
Muestras de código
The following code sample uses CanSendGameInviteAsync() to confirm whether the local Player can send an invite. If true, it then prompts the invite using PromptGameInvite().
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
GetEventRsvpStatusAsync
Devuelve el estado de RSVP del jugador local para el evento dado.Los eventos deben estar en la experiencia actual y no deben haber comenzado ya.Si el evento ya ha comenzado, este método devolverá un error.
Tenga en cuenta que puede usar PromptRsvpToEventAsync() para solicitar al jugador que cambie su estado de RSVP para el evento.
Parámetros
El ID del evento del evento para solicitar al jugador que cambie su estado de RSVP.Este debe ser un ID de evento válido que existe en la experiencia actual, representado como una cadena (no un número).
Devuelve
Devuelve un Enum.RsvpStatus que indica el estado de RSVP actual del jugador para el evento.Si el jugador no ha respondido al evento, este devolverá Enum.RsvpStatus.None .
Muestras de código
The following example checks if a player is RSVP'd to an event; if not, it gives them the option to RSVP. If the player is already RSVP'd, it gives them the option to cancel their RSVP.
The following Script assumes that RunContext is set to Enum.RunContext.Client and that two sibling ProximityPrompts are in place: one for following the event and one for unfollowing the event. The prompts are enabled or disabled based on the player's RSVP status.
local SocialService = game:GetService("SocialService")
local EVENT_ID = "YOUR_EVENT_ID"
local followPrompt : ProximityPrompt = script.Parent.FollowProximityPrompt
local unFollowPrompt : ProximityPrompt = script.Parent.UnfollowProximityPrompt
local function updatePrompt(rsvpStatus : Enum.RsvpStatus)
if rsvpStatus == Enum.RsvpStatus.Going then
unFollowPrompt.Enabled = true
followPrompt.Enabled = false
else
unFollowPrompt.Enabled = false
followPrompt.Enabled = true
end
end
local success, currentRsvpStatus = pcall(function()
return SocialService:GetEventRsvpStatusAsync(EVENT_ID)
end)
if not success then
-- Could not retrieve RSVP status; don't enable either proximity prompt
warn("Failed to get RSVP status:", currentRsvpStatus)
return
end
print("CurrentRsvpStatus:", currentRsvpStatus)
updatePrompt(currentRsvpStatus)
unFollowPrompt.Triggered:Connect(function(player)
local rsvpStatus = SocialService:PromptRsvpToEventAsync(EVENT_ID)
updatePrompt(rsvpStatus)
end)
followPrompt.Triggered:Connect(function(player)
local rsvpStatus = SocialService:PromptRsvpToEventAsync(EVENT_ID)
updatePrompt(rsvpStatus)
end)
GetPartyAsync
Devuelve un array de diccionarios que contienen datos para todos los miembros asociados con el dado partyId.El array devuelto refleja el estado actual de la fiesta en todas las instancias del servidor activas dentro de la experiencia y se ordena por el tiempo que cada miembro de la fiesta aceptó la invitación de la fiesta.Esto significa que el primer elemento en el array es el más antiguo en aceptar y el último es el más reciente.
Este método es útil para recuperar información actualizada sobre todos los miembros de la parte actualmente en la experiencia y en diferentes servidores, lo que permite un comportamiento de grupo coordinado como la teletransportación, el emparejamiento o la lógica de juego basada en grupos.
Cada diccionario en el array devuelto contiene los siguientes campos:
<th>Tipo de valor</th><th>Descripción</th></tr></thead><tbody><tr><th><code>Id de usuario</code></th><td>número</td><td>La propiedad <code>Class.Player.UserId</code> del jugador.</td></tr><tr><th><code>Id de lugar</code></th><td>número</td><td>El <code>Class.DataModel.PlaceId</code> del lugar en el que se encuentra actualmente el miembro del grupo.</td></tr><tr><th><code>Id de trabajo</code></th><td>texto</td><td>El <code>Class.DataModel.JobId</code> de la instancia del servidor en la que el usuario actualmente reside.</td></tr><tr><th><code>Id de servidor privado</code></th><td>texto</td><td>Si es aplicable, el <code>Class.DataModel.PrivateServerId</code> cuando el miembro de la parte está en un servidor privado o reservado.</td></tr><tr><th><code>Código de acceso al servidor reservado</code></th><td>texto</td><td>Si es aplicable, el código de acceso para el servidor reservado en el que el usuario actualmente reside.Útil para teletransportar a los miembros del grupo el uno al otro usando <code>Class.TeleportService:TeleportAsync()</code>.</td></tr></tbody>
Clave |
---|
Tenga en cuenta que este servicio no funciona durante las pruebas de juego en Roblox Studio; para probar aspectos de su experiencia usándolo, debe publicar la experiencia y jugarla en la aplicación de Roblox.
Parámetros
Devuelve
Un conjunto de diccionarios que representan a los miembros del partido especificado que están actualmente en la experiencia.
Muestras de código
The following example checks if a player is in a party when they join. If so, it retrieves the latest party data using SocialService:GetPartyAsync() and outputs the details of each party member.
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)
PromptRsvpToEventAsync
PromptRsvpToEventAsync() muestra una solicitud al jugador local a través de la cual pueden cambiar su estado de RSVP al evento dado.
Los eventos deben estar en la experiencia actual y no deben haber comenzado ya. Si el evento ya ha comenzado, este método devolverá un error.
Tenga en cuenta que puede usar GetEventRsvpStatusAsync() para verificar el estado de RSVP actual del jugador antes de llamar a este método.
Parámetros
El ID del evento del evento para solicitar al jugador que cambie su estado de RSVP.Este debe ser un ID de evento válido que existe en la experiencia actual, representado como una cadena (no un número).
Devuelve
Devuelve un Enum.RsvpStatus que indica el nuevo estado de RSVP del jugador después de que se cierra la solicitud.Si el jugador cierra el mensaje sin cambiar su estado de RSVP, este devolverá Enum.RsvpStatus.None o su antiguo estado Enum.RsvpStatus si ya había seleccionado un estado.
Muestras de código
The following example checks if a player is RSVP'd to an event; if not, it gives them the option to RSVP. If the player is already RSVP'd, it gives them the option to cancel their RSVP.
The following Script assumes that RunContext is set to Enum.RunContext.Client and that two sibling ProximityPrompts are in place: one for following the event and one for unfollowing the event. The prompts are enabled or disabled based on the player's RSVP status.
local SocialService = game:GetService("SocialService")
local EVENT_ID = "YOUR_EVENT_ID"
local followPrompt : ProximityPrompt = script.Parent.FollowProximityPrompt
local unFollowPrompt : ProximityPrompt = script.Parent.UnfollowProximityPrompt
local function updatePrompt(rsvpStatus : Enum.RsvpStatus)
if rsvpStatus == Enum.RsvpStatus.Going then
unFollowPrompt.Enabled = true
followPrompt.Enabled = false
else
unFollowPrompt.Enabled = false
followPrompt.Enabled = true
end
end
local success, currentRsvpStatus = pcall(function()
return SocialService:GetEventRsvpStatusAsync(EVENT_ID)
end)
if not success then
-- Could not retrieve RSVP status; don't enable either proximity prompt
warn("Failed to get RSVP status:", currentRsvpStatus)
return
end
print("CurrentRsvpStatus:", currentRsvpStatus)
updatePrompt(currentRsvpStatus)
unFollowPrompt.Triggered:Connect(function(player)
local rsvpStatus = SocialService:PromptRsvpToEventAsync(EVENT_ID)
updatePrompt(rsvpStatus)
end)
followPrompt.Triggered:Connect(function(player)
local rsvpStatus = SocialService:PromptRsvpToEventAsync(EVENT_ID)
updatePrompt(rsvpStatus)
end)
Eventos
CallInviteStateChanged
Este evento se activa cuando cambia el estado de la invitación de llamada de un jugador.
Parámetros
La instancia Player del jugador que tuvo un cambio de estado de invitación de llamada.
El nuevo estado de invitación de llamada.
Muestras de código
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
Este evento se activa cuando un jugador cierra una invitación.
Parámetros
Ya no está poblado; un array vacío.
Llamadas
OnCallInviteInvoked
Una llamada para procesar cuando se realiza una llamada desde la agenda telefónica.El parámetro tag se puede usar para diferenciar entre diferentes "puntos de entrada" o similares, como se describe en PromptPhoneBook() .Solo se puede establecer una llamada de devolución.
Parámetros
Texto para ayudar a diferenciar entre varios puntos de entrada del libro de teléfonos.
Arr列包含所有参加呼叫的玩家。呼叫者 siempre será el primer jugador en el array。
Devuelve
Tabla que incluye las teclas PlaceId y ReservedServerAccessCode cuyos valores son los de DataModel.PlaceId y el código de acceso al servidor devuelto por TeleportService:ReserveServer(), respectivamente.
Muestras de código
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