SocialService

Pokaż przestarzałe

*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.

Brak możliwości tworzenia
Usługa
Bez replikacji

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

Zdarzenia

Wywołania zwrotne

Właściwości

Metody

GetPlayersByPartyId

Instances

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

partyId: string
Wartość domyślna: ""

Zwroty

Instances

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.

SocialService:GetPlayersByPartyId()

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.

Team Rebalance with Party Integration

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

player: Instance

The Player to prompt z oknem zaproszenia.

Wartość domyślna: ""
experienceInviteOptions: Instance

Opcjonalny przedmiot ExperienceInviteOptions do dostosowywania monitu.

Wartość domyślna: "nil"

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().

Sending an Invite

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

player: Instance

Gracz, który poprosi o książkę telefoniczną.

Wartość domyślna: ""
tag: string

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.

Wartość domyślna: ""

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.

SocialService:PromptPhoneBook()

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

selfViewPosition: Enum.SelfViewPosition

Pozycja, w której należy umieścić widok siebie.

Wartość domyślna: "LastPosition"

Zwroty

()

CanSendCallInviteAsync

Wynik

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

player: Instance

Instancja Player gracza potencjalnie wysyłająca zaproszenie do wezwania.

Wartość domyślna: ""

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.

SocialService:PromptPhoneBook()

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

Wynik

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

player: Instance

Instancja Player gracza potencjalnie wysyłająca zaproszenie.

Wartość domyślna: ""
recipientId: number

Opcjonalny z potencjalnego odbiorcy >, używany do sprawdzenia, czy nadawca może zaprosić tego konkretnego odbiorcę.

Wartość domyślna: 0

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().

Sending an Invite

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

Wynik

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

eventId: string

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).

Wartość domyślna: ""

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.

SocialService:PromptRsvpToEventAsync()

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

Wynik

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

partyId: string
Wartość domyślna: ""

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.

SocialService:GetPartyAsync()

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

Wynik

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

eventId: string

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).

Wartość domyślna: ""

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.

SocialService:PromptRsvpToEventAsync()

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

player: Instance

Instancja Player gracza, który miał zmianę stanu zaproszenia do wezwania

inviteState: Enum.InviteState

Nowy stan zaproszenia do wezwania.


Przykłady kodu

SocialService.CallInviteStateChanged

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

player: Instance

Instancja Player gracza, który zamknął okno dialogowe.

recipientIds: Array

Nie jest już zapełniony; pusty array.


PhoneBookPromptClosed

Wystrzeliwuje, gdy gracz zamyka okno książki telefonicznej.

Parametry

player: Instance

Instancja Player gracza, który zamknął książkę telefoniczną.


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

tag: string

Sznurek, który pomaga odróżnić między różnymi punktami wejścia do książki telefonicznej.

callParticipantIds: Array

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

SocialService.OnCallInviteInvoked

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