SocialService
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Usługa społecznościowa ułatwia funkcje społeczne, które wpływają na relacje zawarte na platformie Roblox.Głównym jego zastosowaniem jest pokazanie prośb o zaproszenie i książki telefonicznej graczom, umożliwiając im wysyłanie zaproszeń do swoich znajomych za pośrednictwem i respectively.Możesz wykorzystać sygnały, gdy są dokonywane takie żądania.
Podsumowanie
Metody
Zwraca tabelę wszystkich obecnie połączonych Player obiektów, których właściwość Player.PartyId pasuje do przekazanej partyId.
Ukrywa własny widok gracza wzywającego.
Wysyła powiadomienie do podanego Player z ekranem zaproszenia.
Pyta danego Player z książką telefoniczną.
Pokazuje własny widok wezwującego gracza.
Wskazuje, czy podany Player może zaprosić innych graczy do wezwania.
Wskazuje, czy podany Player może zaprosić innych graczy.
Zwraca status RSVP lokalnego gracza dla danego wydarzenia.
Zwraca tablicę słowników zawierającą dane dla wszystkich członków określonej party, którzy są obecnie w doświadczeniu.
Wysyła prośbę lokalnemu Player o zmianę statusu odpowiedzi na dane wydarzenie.
Zdarzenia
Wystrzeliwuje, gdy zmienia się stan wezwania gracza.
Wypala się, gdy gracz zamyka monit o zaproszenie.
Wystrzeliwuje, gdy gracz zamyka okno książki telefonicznej.
Wywołania zwrotne
Odwołanie, gdy dzwonienie jest wykonywane z książki telefonicznej.
Właściwości
Metody
GetPlayersByPartyId
Zwraca tabelę wszystkich obecnie połączonych Player obiektów, których właściwość Player.PartyId pasuje do podanych partyId.Ta metoda zachowuje się podobnie do Players:GetPlayers(), ale filtruje wyniki, aby zawierały tylko graczy należących do określonej grupy.
Zauważ, że ta usługa nie działa podczas testowania w Roblox Studio; aby przetestować aspekty swojego doświadczenia za jej pomocą, musisz opublikować doświadczenie i rozegrać je w aplikacji Roblox.
Parametry
Zwroty
Tabela obiektów Player o właściwości Player.PartyId, które pasują do przekazanego partyId.
Przykłady kodu
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
Ukrywa widok siebie wzywającego gracza. Jeśli ta metoda jest wywoływana, gdy widok siebie jest już ukryty, nie robi nic.
Zwroty
PromptGameInvite
PromptGameInvite() wyświetla zaproszenie do lokalnego gracza poprzez który mogą zaprosić swoich znajomych do obecnego doświadczenia.Przed wywołaniem tej metody powinieneś użyć CanSendGameInviteAsync(), aby określić, czy gracz może wysłać zaproszenie, ponieważ ta zdolność może się różnić w zależności od platformy lub gracza.
Zobacz powiadomienia o zaproszeniu gracza dla więcej szczegółów na temat wdrażania powiadomień o zaproszeniu, dostosowywania powiadomień i powiadomień oraz wykorzystywania danych uruchomienia.
Parametry
Opcjonalny przedmiot ExperienceInviteOptions do dostosowywania monitu.
Zwroty
Przykłady kodu
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
Pyta danego Player z książką telefoniczną.Jeśli gracz wybiera wezwanie kogoś, wydarzenie CallInviteStateChanged włącza się.Powinieneś użyć CanSendCallInviteAsync() przed wywołaniem PromptPhoneBook(), ponieważ zdolność widzenia książki telefonicznej może się różnić w zależności od gracza.
Jeśli gracz nie może otworzyć książki telefonicznej, pokazany jest dialog o błędzie.
Zobacz Roblox Connect dla przykładowej implementacji tej metody.
Parametry
Gracz, który poprosi o książkę telefoniczną.
Sznurek, który pomaga odróżnić różne punkty wejścia do książki telefonicznej lub podobne.Na przykład możesz przekazać ciąg określający, w którym regionie doświadczenia znajduje się obecnie postać wezwującego gracza.
Zwroty
Przykłady kodu
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
Pokazuje własny widok gracza, który dzwoni. Jeśli ta metoda jest wywoływana, gdy własny widok jest już widoczny, nie robi nic.
Parametry
Pozycja, w której należy umieścić widok siebie.
Zwroty
CanSendCallInviteAsync
Wyświetla true, jeśli podany Player może wysłać zaproszenie do wezwania przyjaciela.Zawsze powinieneś używać wyniku tej metody przed wywołaniem PromptPhoneBook(), ponieważ możliwość otwarcia książki telefonicznej może się różnić w zależności od gracza.
Zobacz Roblox Connect dla przykładowej implementacji tej metody.
Parametry
Zwroty
Czy określony gracz może wysłać zaproszenie do wezwania.
Przykłady kodu
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() zwraca true jeśli podany Player może zaprosić innych graczy do obecnego doświadczenia.Zawsze powinieneś używać wyniku tej metody przed wezwaniem PromptGameInvite(), ponieważ możliwość zaproszenia graczy może się różnić w zależności od platformy lub gracza.
Zobacz powiadomienia o zaproszeniu gracza dla więcej szczegółów na temat wdrażania powiadomień o zaproszeniu gracza, dostosowywania powiadomień i powiadomień oraz wykorzystywania danych uruchomienia.
Parametry
Opcjonalny z potencjalnego odbiorcy >, używany do sprawdzenia, czy nadawca może zaprosić tego konkretnego odbiorcę.
Zwroty
Czy wskazany gracz może wysłać zaproszenie.
Przykłady kodu
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
Zwraca status RSVP lokalnego gracza dla danego wydarzenia.Wydarzenia muszą być w obecnym doświadczeniu i nie mogą już zacząć.Jeśli wydarzenie już się rozpoczęło, ta metoda zwróci błąd.
Zauważ, że możesz użyć PromptRsvpToEventAsync(), aby poprosić gracza o zmianę statusu RSVP na wydarzenie.
Parametry
ID wydarzenia związanego z wydarzeniem, które poprosi gracza o zmianę statusu RSVP.Musi to być ważny ID wydarzenia, który istnieje w obecnym doświadczeniu, reprezentowany jako ciąg znaków (nie liczba).
Zwroty
Zwraca Enum.RsvpStatus, wskazując aktualny stan odpowiedzi gracza na wydarzenie.Jeśli gracz nie odpowiedział na wydarzenie, to zwróci Enum.RsvpStatus.None .
Przykłady kodu
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
Zwraca tablicę słowników zawierającą dane dla wszystkich członków powiązanych z danym partyId .Zwrócona tablica odzwierciedla obecny stan party w wszystkich aktywnych instancjach serwera w ramach doświadczenia i jest sortowana według czasu, kiedy każdy członek party zaakceptował zaproszenie party.Oznacza to, że pierwszy element w obliczu jest najwcześniejszy do zaakceptowania, a ostatni jest najnowszy.
Ta metoda jest przydatna do odzyskiwania najnowszych informacji o wszystkich członkach party obecnie w doświadczeniu i na różnych serwerach, umożliwiając koordynowane zachowanie grup takie jak teleportacja, matchmaking lub logika gry opartej na party.
Każda słownik w zwroconej tablicy zawiera następujące pola:
<th>Typ wartości</th><th>Opis</th></tr></thead><tbody><tr><th><code>Id użytkownika</code></th><td>number liczba</td><td>Właściwość <code>Class.Player.UserId</code> gracza.</td></tr><tr><th><code>Identyfikator miejsca</code></th><td>number liczba</td><td>Klasa <code>Class.DataModel.PlaceId</code> z miejsca, w którym obecnie znajduje się członek grupy.</td></tr><tr><th><code>Identyfikator pracy</code></th><td>tekst</td><td>Klasa <code>Class.DataModel.JobId</code> z instancji serwera, na której obecnie przebywa użytkownik.</td></tr><tr><th><code>Prywatny serwer ID</code></th><td>tekst</td><td>Jeśli ma zastosowanie, <code>Class.DataModel.PrivateServerId</code> gdy członek party jest na prywatnym lub zarezerwowanym serwerze.</td></tr><tr><th><code>Zarezerwowany kod dostępu do serwera</code></th><td>tekst</td><td>Jeśli ma zastosowanie, kod dostępu do zarezerwowanego serwera, na którym obecnie przebywa użytkownik.Przydatne do teleportowania członków party do siebie nawzajem za pomocą <code>Class.TeleportService:TeleportAsync()</code>.</td></tr></tbody>
Klucz |
---|
Zauważ, że ta usługa nie działa podczas testowania w Roblox Studio; aby przetestować aspekty swojego doświadczenia za jej pomocą, musisz opublikować doświadczenie i rozegrać je w aplikacji Roblox.
Parametry
Zwroty
Zbiór słowników reprezentujących członków określonej party, którzy są obecnie w doświadczeniu.
Przykłady kodu
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() wyświetla monit o lokalnym graczu, przez który mogą zmienić swój status RSVP na dane wydarzenie.
Wydarzenia muszą być w obecnym doświadczeniu i nie mogą już się rozpocząć. Jeśli wydarzenie już się rozpoczęło, ta metoda zwróci błąd.
Zauważ, że możesz użyć GetEventRsvpStatusAsync(), aby sprawdzić obecny stan odpowiedzi gracza przed wywołaniem tej metody.
Parametry
ID wydarzenia związanego z wydarzeniem, które poprosi gracza o zmianę statusu RSVP.Musi to być ważny ID wydarzenia, który istnieje w obecnym doświadczeniu, reprezentowany jako ciąg znaków (nie liczba).
Zwroty
Zwraca Enum.RsvpStatus, wskazując nowy status odpowiedzi gracza po zamknięciu monitu.Jeśli gracz zamknie monit o zmianę statusu bez zmiany statusu RSVP, zwróci to Enum.RsvpStatus.None lub ich stary Enum.RsvpStatus, jeśli już wybrał status.
Przykłady kodu
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)
Zdarzenia
CallInviteStateChanged
To wydarzenie wystrzeliwuje, gdy zmienia się stan zaproszenia do wezwania gracza.
Parametry
Nowy stan zaproszenia do wezwania.
Przykłady kodu
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
To wydarzenie wystrzeliwuje, gdy gracz zamyka monit o zaproszenie.
Parametry
Nie jest już zapełniony; pusty array.
Wywołania zwrotne
OnCallInviteInvoked
Wezwanie do przetworzenia, gdy dzwoni się z książki telefonicznej.Parametr tag może być użyty do rozróżnienia między różnymi "punktami wejścia" lub podobnymi, jak opisano w PromptPhoneBook() .Można ustawić tylko jeden powrót.
Parametry
Sznurek, który pomaga odróżnić między różnymi punktami wejścia do książki telefonicznej.
Lista zawierająca wszystkich graczy zaangażowanych w wezwanie. Wzywający zawsze będzie pierwszym graczem w liście.
Zwroty
Tabela zawierająca klawisze PlaceId i ReservedServerAccessCode, których wartości są odpowiednio DataModel.PlaceId i kod dostępu do serwera zwrotiony przez TeleportService:ReserveServer(), odpowiednio.
Przykłady kodu
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