SocialService
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Dịch vụ xã hội dễ dàng các chức năng xã hội ảnh hưởng đến các mối quan hệ được thực hiện trên nền tảng Roblox.Sử dụng chính của nó là hiển thị lời mời gọi và danh bạ điện thoại cho người chơi, cho phép họ gửi lời mời lên bạn bè của họ thông qua PromptGameInvite() và PromptPhoneBook() lần lượt.Bạn có thể tận dụng tín hiệu khi các yêu cầu như vậy được thực hiện.
Tóm Tắt
Phương Pháp
Trả về một bảng tất cả các đối tượng được kết nối hiện tại Player của đối tượng có tính năng Player.PartyId tương ứng với đã truyền partyId .
Ẩn góc nhìn tự thân của người gọi.
Yêu cầu đưa ra Player với màn hình mời.
Yêu cầu đưa ra Player với cuốn sách điện thoại.
Hiển thị quan điểm tự nhìn của người gọi.
Chỉ ra xem liệu đã cho Player có thể mời các người chơi khác vào cuộc gọi hay không.
Chỉ ra xem liệu đã cho Player có thể mời những người chơi khác không.
Trả lại tình trạng RSVP của người chơi địa phương cho sự kiện được cho.
Trả về một array của các từ điển chứa dữ liệu cho tất cả các thành viên của nhóm được chỉ định hiện đang trong trải nghiệm.
Yêu cầu địa phương Player với một lời nhắc để thay đổi tình trạng RSVP của họ sang sự kiện đã cho.
Sự Kiện
Bắt lửa khi tình trạng cuộc gọi của người chơi thay đổi.
Bắt lửa khi một người chơi đóng lại một lời mời.
Bắt lửa khi một người chơi đóng lại lời nhắc danh bộ điện thoại.
Gọi Lại
Gọi lại khi cuộc gọi được thực hiện từ cuốn sách điện thoại.
Thuộc Tính
Phương Pháp
GetPlayersByPartyId
Trả về một bảng tất cả các đối tượng hiện được kết nối Player có tính năng Player.PartyId bất động sản phù hợp với đặc tính được cung cấp partyId .Phương pháp này hoạt động tương tự như Players:GetPlayers() nhưng lọc kết quả chỉ bao gồm những người chơi thuộc phe đã được định nghĩa.
Lưu ý rằng dịch vụ này không hoạt động trong lúc thử nghiệm trong Roblox Studio; để kiểm tra các khía cạnh của trải nghiệm của bạn bằng cách sử dụng nó, bạn phải xuất bản trải nghiệm và chơi nó trong ứng dụng Roblox.
Tham Số
Lợi Nhuận
Một bảng của Player các đối tượng có đặc tính Player.PartyId tương ứng với partyId đã được truyền.
Mẫu mã
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
Ẩn góc nhìn tự thân của người gọi. Nếu phương pháp này được gọi khi góc nhìn tự thân đã được ẩn, nó không làm gì cả.
Lợi Nhuận
PromptGameInvite
PromptGameInvite() hiển thị một lời mời nhanh cho người chơi địa phương thông qua đó họ có thể mời bạn bè của họ vào trải nghiệm hiện tại.Trước khi gọi phương thức này, bạn nên sử dụng CanSendGameInviteAsync() để xác định xem người chơi có thể gửi lời mời hay không, vì khả năng này có thể thay đổi tùy thuộc vào nền tảng hoặc người chơi.
Xem Lời mời người chơi để có thêm chi tiết về việc triển khai lời mời, tùy chỉnh lời mời và thông báo, và sử dụng dữ liệu khởi động.
Tham Số
Vật phẩm tùy chọn ExperienceInviteOptions để tùy chỉnh lời nhắc.
Lợi Nhuận
Mẫu mã
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
Yêu cầu đưa ra Player với cuốn sách điện thoại.Nếu người chơi chọn gọi ai đó, sự kiện CallInviteStateChanged bắt lửa.Bạn nên sử dụng CanSendCallInviteAsync() trước khi gọi PromptPhoneBook() vì khả năng xem danh bạ điện thoại có thể thay đổi tùy thuộc vào người chơi.
Nếu một người chơi không đủ điều kiện để mở cuốn sách điện thoại, một hộp thoại lỗi được hiển thị.
Xem Kết nối Roblox để có một ví dụ thực hiện phương pháp này.
Tham Số
Người chơi để yêu cầu với cuốn sách điện thoại.
Chuỗi để giúp phân biệt giữa các "điểm nhập" sách điện thoại khác nhau hoặc tương tự.Ví dụ, bạn có thể truyền một chuỗi xác định khu vực trong trải nghiệm mà nhân vật của người gọi hiện đang ở.
Lợi Nhuận
Mẫu mã
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
Hiển thị quan điểm tự nhìn của người gọi. Nếu phương pháp này được gọi khi quan điểm tự nhìn đã xuất hiện, nó không làm gì cả.
Tham Số
Vị trí để đặt cái nhìn tự thân.
Lợi Nhuận
CanSendCallInviteAsync
Trả về true nếu được cung cấp Player có thể gửi lời mời gọi cuộc gọi cho một người bạn.Bạn nên luôn luôn sử dụng kết quả của phương pháp này trước khi gọi PromptPhoneBook() vì khả năng mở cuốn sách điện thoại có thể thay đổi tùy thuộc vào người chơi.
Xem Kết nối Roblox để có một ví dụ thực hiện phương pháp này.
Tham Số
Lợi Nhuận
Liệu người chơi được chỉ định có thể gửi lời mời gọi.
Mẫu mã
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() trả về true nếu Player được cung cấp có thể mời các người chơi khác vào trải nghiệm hiện tại.Bạn nên luôn luôn sử dụng kết quả của phương pháp này trước khi gọi PromptGameInvite() vì khả năng mời người chơi có thể thay đổi tùy thuộc vào nền tảng hoặc người chơi.
Xem Lời mời người chơi để có thêm chi tiết về thực hiện lời mời người chơi, tùy chỉnh lời mời và thông báo, và sử dụng dữ liệu khởi động.
Tham Số
Tùy chọn Player.UserId của người nhận tiềm năng **** , được sử dụng để kiểm tra xem người gửi có thể mời người nhận cụ thể đó không.
Lợi Nhuận
Liệu người chơi được chỉ định có thể gửi lời mời hay không.
Mẫu mã
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
Trả lại tình trạng RSVP của người chơi địa phương cho sự kiện được cho.Sự kiện phải nằm trong trải nghiệm hiện tại và không được đã bắt đầu.Nếu sự kiện đã bắt đầu, phương thức này sẽ trả về một lỗi.
Lưu ý rằng bạn có thể sử dụng PromptRsvpToEventAsync() để yêu cầu người chơi thay đổi tình trạng RSVP của họ cho sự kiện.
Tham Số
ID sự kiện của sự kiện để yêu cầu người chơi thay đổi tình trạng RSVP của họ.Đây phải là một ID sự kiện hợp lệ hiện có trong trải nghiệm hiện tại, được biểu diễn như một chuỗi (không phải là một số).
Lợi Nhuận
Trả về một Enum.RsvpStatus để chỉ thị tình trạng RSVP hiện tại của người chơi cho sự kiện.Nếu người chơi chưa RSVP cho sự kiện, nó sẽ trả về Enum.RsvpStatus.None .
Mẫu mã
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
Trả về một mảng các từ điển chứa dữ liệu cho tất cả các thành viên liên quan đến partyId được cho.Mảng trả lại phản ánh tình trạng hiện tại của nhóm trong tất cả các máy chủ hoạt động trong trải nghiệm và nó được sắp xếp theo thời gian mà mỗi thành viên nhóm chấp nhận lời mời của nhóm.Điều này có nghĩa là yếu tố đầu tiên trong mảng là sớm nhất để chấp nhận và yếu tố cuối cùng là gần đây nhất.
Phương pháp này hữu ích để lấy thông tin mới nhất về tất cả các thành viên trong nhóm hiện đang trong trải nghiệm và trên các máy chủ khác nhau, cho phép thực hiện hành vi nhóm được phối hợp như dịch chuyển, kết hợp, hoặc logic trò chơi dựa trên nhóm.
Mỗi từ điển trong mảng trả về bao gồm các trường sau:
<th>Loại giá trị</th><th>Mô tả</th></tr></thead><tbody><tr><th><code>ID người dùng</code></th><td>số</td><td>Thuộc tính <code>Class.Player.UserId</code> của người chơi.</td></tr><tr><th><code>ID nơi</code></th><td>số</td><td>Các <code>Class.DataModel.PlaceId</code> của nơi thành viên nhóm hiện đang ở.</td></tr><tr><th><code>ID công việc</code></th><td>chuỗi</td><td>Các lớp <code>Class.DataModel.JobId</code> của server instance mà người dùng hiện đang sống trong.</td></tr><tr><th><code>ID máy chủ riêng tư</code></th><td>chuỗi</td><td>Nếu có, <code>Class.DataModel.PrivateServerId</code> khi thành viên nhóm ở trong một máy chủ riêng hoặc được dự trữ.</td></tr><tr><th><code>Mã truy cập máy chủ dự trữ</code></th><td>chuỗi</td><td>Nếu có, mã truy cập cho máy chủ dự trữ mà người dùng hiện đang sinh sống.Hữu ích để dịch chuyển thành viên nhóm đến nhau bằng cách sử dụng <code>Class.TeleportService:TeleportAsync()</code>.</td></tr></tbody>
Nhân vật chính |
---|
Lưu ý rằng dịch vụ này không hoạt động trong lúc thử nghiệm trong Roblox Studio; để kiểm tra các khía cạnh của trải nghiệm của bạn bằng cách sử dụng nó, bạn phải xuất bản trải nghiệm và chơi nó trong ứng dụng Roblox.
Tham Số
Lợi Nhuận
Một mảng các từ điển đại diện cho các thành viên của bên được chỉ định hiện đang trong trải nghiệm.
Mẫu mã
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() hiển thị một lời nhắc cho người chơi địa phương thông qua đó họ có thể thay đổi tình trạng RSVP của họ sang sự kiện được cho.
Các sự kiện phải ở trong trải nghiệm hiện tại và không được đã bắt đầu. Nếu sự kiện đã bắt đầu, phương pháp này sẽ trả về một lỗi.
Lưu ý rằng bạn có thể sử dụng GetEventRsvpStatusAsync() để kiểm tra tình trạng RSVP hiện tại của người chơi trước khi gọi phương pháp này.
Tham Số
ID sự kiện của sự kiện để yêu cầu người chơi thay đổi tình trạng RSVP của họ.Đây phải là một ID sự kiện hợp lệ hiện có trong trải nghiệm hiện tại, được biểu diễn như một chuỗi (không phải là một số).
Lợi Nhuận
Trả về một Enum.RsvpStatus để chỉ cho thấy tình trạng RSVP mới của người chơi sau khi lời nhắc được đóng.Nếu người chơi đóng lại lời nhắc mà không thay đổi tình trạng RSVP của họ, nó sẽ trả về Enum.RsvpStatus.None hoặc cũ Enum.RsvpStatus nếu họ đã chọn một tình trạng.
Mẫu mã
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)
Sự Kiện
CallInviteStateChanged
Sự kiện này bắt lửa khi tình trạng mời gọi của người chơi thay đổi.
Tham Số
Tình trạng mời gọi cuộc gọi mới.
Mẫu mã
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
Sự kiện này xảy ra khi một người chơi đóng lại một lời mời.
Tham Số
Không còn được lấp đầy; một array trống.
Gọi Lại
OnCallInviteInvoked
Một cuộc gọi trở lại để xử lý khi có cuộc gọi được thực hiện từ cuốn sách điện thoại.Tham số tag có thể được sử dụng để phân biệt giữa các "điểm nhập" khác nhau hoặc tương tự, như được mô tả trong PromptPhoneBook() .Chỉ có thể đặt một cuộc gọi lại.
Tham Số
Chuỗi để giúp phân biệt giữa các điểm nhập danh bộ điện thoại khác nhau.
Mảng chứa tất cả các người chơi tham gia cuộc gọi. Người gọi sẽ luôn là người chơi đầu tiên trong mảng.
Lợi Nhuận
Bảng bao gồm các phím PlaceId và ReservedServerAccessCode có giá trị là DataModel.PlaceId và mã truy cập máy chủ được trả lại bởi TeleportService:ReserveServer(), tương ứng.
Mẫu mã
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