SocialService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
SocialService erleichtert soziale Funktionen, die Auswirkungen auf Beziehungen haben, die auf der Roblox-Plattform geschlossen wurden.Seine primäre Verwendung besteht darin, Einladungsaufforderungen anzuzeigen und das Telefonbuch an Spieler zu zeigen, die es ihnen ermöglichen, Einladungsanfragen an ihre Freunde durch PromptGameInvite() und PromptPhoneBook() jeweils zu senden.Du kannst Signale nutzen, wenn solche Anfragen gestellt werden.
Zusammenfassung
Methoden
Gibt eine Tabelle aller derzeit verbundenen Player Objekte mit der Eigenschaft Player.PartyId, die dem übergebenen partyId entspricht.
Versteckt die Selbstansicht des anrufenden Spielers.
Fragt den angegebenen Player mit dem Einladungsbildschirm an.
Fragt das angegebene Player mit dem Telefonbuch ab.
Zeigt die Selbstansicht des anrufenden Spielers an.
Weist an, ob die angegebene Player andere Spieler zu einem Anruf einladen kann.
Zeigt an, ob die angegebene Player andere Spieler einladen kann.
Gibt den RSVP-Status des lokalen Spielers für das angegebene Ereignis zurück.
Gibt eine Liste von Wörterbüchern zurück, die Daten für alle Mitglieder der angegebenen Partei enthalten, die sich derzeit im Erlebnis befinden.
Fordert den lokalen Player mit einem Prompt auf, ihren RSVP-Status auf das angegebene Ereignis zu ändern.
Ereignisse
Feuert, wenn der Anrufstatus eines Spielers Änderungen erfordert.
Feuert, wenn ein Spieler eine Einladungsaufforderung schließt.
Feuert, wenn ein Spieler das Telefonbuch-Aufforderung schließt.
Callbacks
Rückruf, wenn ein Anruf aus dem Telefonbuch getätigt wird.
Eigenschaften
Methoden
GetPlayersByPartyId
Gibt eine Tabelle aller derzeit verbundenen Player Objekte mit der Eigenschaft Player.PartyId, die dem bereitgestellten partyId entspricht.Diese Methode verhält sich ähnlich wie Players:GetPlayers(), filtert aber die Ergebnisse, um nur Spieler aus der angegebenen Gruppe einzuschließen.
Beachten Sie, dass dieser Service während des Spieltests in Roblox Studio nicht funktioniert; um Aspekte Ihrer Erfahrung mit ihm zu testen, müssen Sie die Erfahrung veröffentlichen und sie im Roblox-Anwendungsprogramm spielen.
Parameter
Rückgaben
Eine Tabelle von Player Objekten, deren Player.PartyId Eigenschaft dem übergebenen partyId entspricht.
Code-Beispiele
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
Versteckt die Selbstansicht des anrufenden Spielers. Wenn diese Methode aufgerufen wird, während die Selbstansicht bereits versteckt ist, tut sie nichts.
Rückgaben
PromptGameInvite
PromptGameInvite() Zeigt eine Einladungsaufforderung an den lokalen Spieler an, über die er seine Freunde in die aktuelle Erfahrung einladen kann.Bevor Sie diese Methode aufrufen, sollten Sie CanSendGameInviteAsync() verwenden, um zu bestimmen, ob der Spieler eine Einladung senden kann, da diese Fähigkeit je nach Plattform oder Spieler variieren kann.
Siehe Spieler-Einladungsaufforderungen für weitere Details zur Umsetzung von Einladungsaufforderungen, zur Anpassung von Aufforderungen und Benachrichtigungen und zum Einsatz von Startdaten.
Parameter
Optionales ExperienceInviteOptions Objekt zum Anpassen der Eingabeaufforderung.
Rückgaben
Code-Beispiele
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
Fragt das angegebene Player mit dem Telefonbuch ab.Wenn der Spieler jemanden anrufen möchte, wird das CallInviteStateChanged-Ereignis ausgelöst.Du solltest CanSendCallInviteAsync() vor der Anrufung von PromptPhoneBook() verwenden, da die Fähigkeit, das Telefonbuch zu sehen, je nach Spieler variieren kann.
Wenn ein Spieler nicht berechtigt ist, das Telefonbuch zu öffnen, wird ein Fehldialog angezeigt.
Siehe Roblox Connect für eine Beispielimplementierung dieser Methode.
Parameter
Der Spieler, mit dem Telefonbuch zu fragen.
Schnur, um zu unterscheiden zwischen verschiedenen Telefonbuch-"Eintrittspunkten" oder ähnlichem.Zum Beispiel können Sie einen String übergeben, der definiert, in welcher Region eines Erlebnisses sich der Charakter des anrufenden Spielers derzeit befindet.
Rückgaben
Code-Beispiele
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
Zeigt die Selbstansicht des anrufenden Spielers an. Wenn diese Methode aufgerufen wird, während die Selbstansicht bereits sichtbar ist, tut sie nichts.
Parameter
Die Position, um die Selbstansicht zu platzieren.
Rückgaben
CanSendCallInviteAsync
Gibt true zurück, wenn die angegebene Player einen Anruf zu einem Freund senden kann.Du solltest immer das Ergebnis dieser Methode verwenden, bevor du PromptPhoneBook() aufrufst, da die Fähigkeit, das Telefonbuch zu öffnen, je nach Spieler unterschiedlich sein kann.
Siehe Roblox Connect für eine Beispielimplementierung dieser Methode.
Parameter
Rückgaben
Ob der angegebene Spieler eine Anruf-Einladung senden kann.
Code-Beispiele
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() gibt zurück true, wenn der angegebene Player andere Spieler in die aktuelle Erfahrung einladen kann.Du solltest immer das Ergebnis dieser Methode verwenden, bevor du PromptGameInvite() aufrufst, da die Fähigkeit, Spieler einzuladen, je nach Plattform oder Spieler variieren kann.
Siehe Spieler-Einladungsaufforderungen für weitere Details zur Umsetzung von Spieler-Einladungsaufforderungen, zur Anpassung von Aufforderungen und Benachrichtigungen und zur Verwendung von Startdaten.
Parameter
Die Player Instanz des Spielers sendet möglicherweise eine Einladung.
Optionale des möglichen Empfängers , um zu überprüfen, ob der Sender diesen spezifischen Empfänger einladen kann.
Rückgaben
Ob der angegebene Spieler eine Einladung senden kann.
Code-Beispiele
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
Gibt den RSVP-Status des lokalen Spielers für das angegebene Ereignis zurück.Ereignisse müssen sich in der aktuellen Erfahrung befinden und dürfen noch nicht begonnen haben.Wenn das Ereignis bereits begonnen hat, gibt diese Methode einen Fehler zurück.
Beachte, dass du PromptRsvpToEventAsync() verwenden kannst, um den Spieler aufzufordern, seinen RSVP-Status für das Event zu ändern.
Parameter
Die Event-ID des Events, um den Spieler aufzufordern, seinen RSVP-Status zu ändern.Dies muss eine gültige Ereignis-ID sein, die in der aktuellen Erfahrung existiert und als String dargestellt wird (keine Zahl).
Rückgaben
Gibt eine Enum.RsvpStatus zurück, die den aktuellen RSVP-Status des Spielers für das Ereignis anzeigt.Wenn der Spieler nicht auf das Event RSVP'd hat, wird dies Enum.RsvpStatus.None zurückgeben.
Code-Beispiele
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
Gibt eine Reihe von Wörterbüchern zurück, die Daten für alle Mitglieder enthalten, die mit dem angegebenen partyId verbunden sind.Die zurückgegebene Array spiegelt den aktuellen Zustand der Partei in allen aktiven Serverinstanzen innerhalb des Erlebnisses wider und wird nach der Zeit sortiert, in der jedes Parteimitglied die Parteieinladung akzeptiert hat.Das bedeutet, dass das erste Element in der Liste das früheste ist, das akzeptiert wird, und das letzte das jüngste.
Diese Methode ist nützlich für die Abruf von aktuellen Informationen über alle Mitglieder einer Partei, die derzeit in der Erfahrung und auf verschiedenen Servern sind, und ermöglicht koordiniertes Gruppenverhalten wie Teleportation, Matchmaking oder gruppenbasierte Spiellogik.
Jedes Wörterbuch im zurückgegebenen Array enthält die folgenden Felder:
<th>Wert-Typ</th><th>Beschreibung</th></tr></thead><tbody><tr><th><code>BenutzerID</code></th><td>zahl</td><td>Die Eigenschaft <code>Class.Player.UserId</code> des Spielers.</td></tr><tr><th><code>PlatzId</code></th><td>zahl</td><td>Die <code>Class.DataModel.PlaceId</code> des Ortes, in dem sich das Parteimitglied derzeit befindet.</td></tr><tr><th><code>JobId</code></th><td>schnur</td><td>Die <code>Class.DataModel.JobId</code> der Serverinstanz, in der sich der Benutzer derzeit befindet.</td></tr><tr><th><code>PrivateServerId</code></th><td>schnur</td><td>Wenn zutreffend, die <code>Class.DataModel.PrivateServerId</code>, wenn das Parteimitglied sich auf einem privaten oder reservierten Server befindet.</td></tr><tr><th><code>ReservedServerzugriffscode</code></th><td>schnur</td><td>Wenn zutreffend, der Zugriffscode für den reservierten Server, auf dem sich der Benutzer derzeit befindet.Nützlich für die Teleportation von Gruppenmitgliedern aneinander mit Hilfe von <code>Class.TeleportService:TeleportAsync()</code>.</td></tr></tbody>
Schlave |
---|
Beachten Sie, dass dieser Service während des Spieltests in Roblox Studio nicht funktioniert; um Aspekte Ihrer Erfahrung mit ihm zu testen, müssen Sie die Erfahrung veröffentlichen und sie im Roblox-Anwendungsprogramm spielen.
Parameter
Rückgaben
Ein Array von Dictionaries, die die Mitglieder der angegebenen Partei repräsentieren, die sich derzeit im Erlebnis befinden.
Code-Beispiele
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() Zeigt eine Aufforderung an den lokalen Spieler an, über die er seinen RSVP-Status auf das angegebene Ereignis ändern kann.
Ereignisse müssen sich in der aktuellen Erfahrung befinden und dürfen nicht bereits begonnen haben. Wenn das Ereignis bereits begonnen hat, gibt diese Methode einen Fehler zurück.
Beachten Sie, dass Sie GetEventRsvpStatusAsync() verwenden können, um den aktuellen RSVP-Status des Spielers zu überprüfen, bevor Sie diese Methode aufrufen.
Parameter
Die Event-ID des Events, um den Spieler aufzufordern, seinen RSVP-Status zu ändern.Dies muss eine gültige Ereignis-ID sein, die in der aktuellen Erfahrung existiert und als String dargestellt wird (keine Zahl).
Rückgaben
Gibt eine Enum.RsvpStatus zurück, die den neuen RSVP-Status des Spielers nach Schließung der Eingabeaufforderung anzeigt.Wenn der Spieler die Eingabeaufforderung schließt, ohne seinen RSVP-Status zu ändern, wird dies Enum.RsvpStatus.None oder seinen alten Enum.RsvpStatus zurückgeben, wenn er bereits einen Status ausgewählt hat.
Code-Beispiele
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)
Ereignisse
CallInviteStateChanged
Dieses Ereignis wird ausgelöst, wenn sich der Anrufstatus eines Spielers ändert.
Parameter
Die Player Instanz des Spielers, der einen Anruf-Einladungsstatusänderungsantrag hatte.
Der neue Anruf-Einladungsstatus.
Code-Beispiele
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
Dieses Ereignis wird ausgelöst, wenn ein Spieler eine Einladungsaufforderung schließt.
Parameter
Nicht mehr bevölkert; ein leeres Array.
Callbacks
OnCallInviteInvoked
Ein Rückruf, der verarbeitet wird, wenn ein Anruf aus dem Telefonbuch getätigt wird.Der tag -Parameter kann verwendet werden, um zwischen verschiedenen "Eingangspunkten" oder ähnlichem zu unterscheiden, wie beschrieben in PromptPhoneBook().Nur ein Rückruf kann festgelegt werden.
Parameter
Schnur, um zu unterscheiden zwischen verschiedenen Telefonbuch-Eintragspunkten.
Array enthält alle Spieler, die an dem Anruf beteiligt sind. Der Anrufer wird immer der erste Spieler im Array sein.
Rückgaben
Tabelle, die die PlaceId und ReservedServerAccessCode Schaltflächen enthält, deren Werte die DataModel.PlaceId und der Serverzugriffscode sind, der von TeleportService:ReserveServer() zurückgegeben wird, respektive.
Code-Beispiele
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