SocialService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Sosyal Hizmet Roblox platformunda yapılan ilişkilere etki eden sosyal işlevleri kolaylaştırırBirincil kullanımı, oyunculara davet istekleri göndermelerine izin verenClass.SocialService:PromptGameInvite()|PromptGameInvite()``Class.SocialService:PromptPhoneBook()|PromptPhoneBook() telefon kitabını göstermektir, böylece oyuncular iletişim aracılığıyla arkadaşlarına davet istekleri gönderebilirler.Bu tür istekler yapıldığında sinyalleri kullanabilirsiniz.
Özet
Özellikler
Yöntemler
Mevcut olarak bağlı tüm Player nesnelerin tablosunu döndürür, whose Player.PartyId özelliği geçen partyId eşleşir.
Çağıran oyuncunun kendi görüşünü gizler.
Verilen Player ile davet ekranıyla sorar.
Verilen Player telefon rehberi ile sorar.
Çağıran oyuncunun kendi görüşünü gösterir.
Verdiğiniz Player 'nin diğer oyuncuları bir çağrıya davet edip edemeyeceğini gösterir.
Verdiğiniz Player 'nin diğer oyuncuları davet edebileceğini gösterir.
Verilen etkinlik için yerel oyuncunun RSVP durumunu döndürür.
Şu anda deneyimde bulunan tüm üyeler için veri içeren bir dizi sözlük döndürür. Returns an array of dictionaries containing data for all members of the specified party who are currently in the experience.
Yerel Player ile bir soru sorar ve RSVP durumunu verilen etkinliğe değiştirmesini ister.
Etkinlikler
Bir oyuncunun çağrısının durum değişikliği yaptığında ateş eder.
Bir oyuncu davet istemesini kapattığında ateş eder.
Bir oyuncu telefon rehberini kapattığında ateş eder.
Geri Aramalar
Telefon rehberinden bir çağrı yapıldığında geri çağrı.
Özellikler
Yöntemler
GetPlayersByPartyId
Mevcut olarak bağlı tüm Player nesnelerin tablosunu döndürür, whose Player.PartyId özelliği sağlanan partyId özelliğe uyar.Bu yöntem, Players:GetPlayers() benzer şekilde davranır, ancak sonuçları sadece belirtilen partiye ait oyuncuları içerecek şekilde filtreler.
Bu hizmetin Roblox Studio'da oynatma testi sırasında çalışmadığını unutmayın; deneyimin yönlerini test etmek için deneyimi yayınlamalı ve Roblox uygulamasında oynamalısınız.
Parametreler
Dönüşler
Geçerli Player özelliklerine sahip bir tablo ile Player.PartyId öznitelikleri eşleşen nesnelerin tablosu partyId.
Kod Örnekleri
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
Çağıran oyuncunun kendi görüşünü gizler. Eğer bu yöntem kendi görüşü zaten gizlenmişken çağrılırsa, hiçbir şey yapmaz.
Dönüşler
PromptGameInvite
PromptGameInvite() yerel oyuncuya mevcut deneyime arkadaşlarını davet etmeleri için bir davet mesajı görüntüler.Bu yöntemi çağırmadan önce, oyuncunun bir davet gönderebileceğini belirlemek için CanSendGameInviteAsync() kullanmalısınız, çünkü bu yetenek platform veya oyuncu bağlı olarak değişebilir.
Davet isteklerinin uygulanması, özelleştirilmesi ve bildirimleri ve başlatma verilerinin kullanılması hakkında daha fazla ayrıntı için Oyuncu Davet İstekleri bakınız.
Parametreler
Seçeneğe bağlı ExperienceInviteOptions nesne, istemciyi özelleştirmek için.
Dönüşler
Kod Örnekleri
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
Verilen Player telefon rehberi ile sorar.Oyuncu birisini aramayı seçerse, CallInviteStateChanged etkinliği ateşlenir.Telefon rehberini görme yeteneğinin oyuncuya bağlı olarak değişebileceğinden, CanSendCallInviteAsync() önce PromptPhoneBook() çağırmalısınız, çünkü telefon rehberini görme yeteneği oyuncuya bağlı olabilir.
Bir oyuncu telefon rehberini açmaya uygun değilse, bir hata diyaloğu gösterilir.
Bu yöntemin örnek bir uygulaması için Roblox Connect'e bakın.
Parametreler
Telefon rehberiyle soru sormak için oyuncu.
Farklı telefon rehberi "giriş noktaları" veya benzerleri arasında ayırt etmek için yardımcı olan metin.Örneğin, çağrı yapan oyuncunun şu anda hangi deneyim bölgesinde olduğunu tanımlayan bir dize geçirebilirsiniz.
Dönüşler
Kod Örnekleri
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
Çağıran oyuncunun kendi görüşünü gösterir. Eğer bu yöntem kendi görüşü zaten görülebilirken çağrılırsa, hiçbir şey yapmaz.
Parametreler
Kendi görüntüsünü yerleştirmek için konum.
Dönüşler
CanSendCallInviteAsync
Verilen 'a bir arama daveti gönderebilirse döndürür if the given can send a call invite to a friend.Telefon rehberini açma yeteneği oyuncuya bağlı olarak değişebileceğinden, bu yöntemin sonucunu her zaman çağırmadan önce kullanmalısınız PromptPhoneBook() çünkü oyuncu bağımlı olabilir.
Bu yöntemin örnek bir uygulaması için Roblox Connect'e bakın.
Parametreler
Dönüşler
Belirtilen oyuncu bir çağrı daveti gönderebilir mi.
Kod Örnekleri
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() geri döndürür true eğer verilen Player mevcut deneyime diğer oyuncuları davet edebilirse.Oyuncuları davet etme yeteneği platform veya oyuncu bağlı olarak değişebileceğinden, bu yöntemin sonucunu her zaman çağırmadan önce kullanmalısınız PromptGameInvite() .
Oyuncu davet isteklerinin uygulanması, özelleştirilmesi ve bildirimlerin kullanılması ile ilgili daha fazla ayrıntı için Oyuncu Davet İstekleri bakınız. başlatma verilerini kullanma.
Parametreler
Opsiyonel Player.UserId potansiyel alıcının , gönderenin belirli alıcıyı davet edebileceğini kontrol etmek için kullanılan.
Dönüşler
Belirtilen oyuncunun bir davet gönderebileceği.
Kod Örnekleri
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
Verilen etkinlik için yerel oyuncunun RSVP durumunu döndürür.Etkinlikler mevcut deneyimde olmalı ve henüz başlamamış olmalıdır.Etkinlik zaten başladıysa, bu yöntem bir hata döndürecektir.
Oyuncunun etkinlik için RSVP durumunu değiştirmesini istemek için PromptRsvpToEventAsync() kullanabileceğinizi unutmayın.
Parametreler
Oyuncunun RSVP durumunu değiştirmesini istemek için olayın ID'si.Bu, mevcut deneyimde mevcut ve bir dize olarak temsil edilen geçerli bir etkinlik kimliği olmalıdır (bir sayı değil).
Dönüşler
Oyuncunun etkinlik için mevcut RSVP durumunu gösteren bir Enum.RsvpStatus döndürür.Oyuncu etkinliğe RSVP yapmadıysa, bu Enum.RsvpStatus.None döndürecektir.
Kod Örnekleri
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
Verilen partyId ile ilişkili tüm üyelere ait verileri içeren bir dizi sözlük döndürür.Geri döndürülen dizi, deneyim içindeki tüm aktif sunucu örnekleri arasındaki parti durumunu yansıtır ve her parti üyesi parti davetini kabul ettiğinde zamana göre sıralanır.Bu, düzenekteki ilk elemanın kabul etmesi en erken ve sonuncusunun en yeni olması demektir.
Bu yöntem, şu anda deneyimde ve farklı sunucularda bulunan tüm parti üyeleri hakkında güncel bilgileri almak ve koordineli grup davranışlarını etkinleştirmek gibi teleportasyon, maç yapma veya parti tabanlı oyun mantığı gibi grup davranışlarını koordine etmek için yararlıdır.
Döndürülen dize içindeki her sözlük aşağıdaki alanları içerir:
<th>Değer Türü</th><th>Açıklama</th></tr></thead><tbody><tr><th><code>KullanıcıID</code></th><td>sayı</td><td>Oyuncunun <code>Class.Player.UserId</code> özelliği.</td></tr><tr><th><code>YerId</code></th><td>sayı</td><td>Parti üyesinin şu anda bulunduğu yerin <code>Class.DataModel.PlaceId</code> 'si.</td></tr><tr><th><code>İşIdi</code></th><td>sipariş</td><td>Kullanıcının şu anda bulunduğu sunucu örneğinin <code>Class.DataModel.JobId</code> sınıfı.</td></tr><tr><th><code>ÖzelSunucuId</code></th><td>sipariş</td><td>Eğer geçerliyse, parti üyesi özel veya rezerve bir sunucuda olduğunda <code>Class.DataModel.PrivateServerId</code> .</td></tr><tr><th><code>KayıtlıSunucuErişimKodu</code></th><td>sipariş</td><td>Uygulanabilirse, kullanıcının şu anda bulunduğu rezerve edilmiş sunucunun erişim kodu.Parti üyelerini birbirine <code>Sınıf.TeleportService:TeleportAsync()</code> kullanarak ışınlamak için yararlı.</td></tr></tbody>
Anahtar |
---|
Bu hizmetin Roblox Studio'da oynatma testi sırasında çalışmadığını unutmayın; deneyimin yönlerini test etmek için deneyimi yayınlamalı ve Roblox uygulamasında oynamalısınız.
Parametreler
Dönüşler
Deneyimde bulunan belirtilen parti üyelerini temsil eden bir dizi sözlük.
Kod Örnekleri
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() yerel oyuncuya, RSVP durumunu verilen etkinliğe değiştirebilecekleri bir uyarı görüntüler.
Etkinlikler mevcut deneyimde olmalı ve henüz başlamamış olmalıdır. Etkinlik zaten başladıysa, bu yöntem bir hata döndürecektir.
Bu yöntemi çağırmadan önce oyuncunun mevcut RSVP durumunu kontrol etmek için GetEventRsvpStatusAsync() kullanabileceğinizi unutmayın.
Parametreler
Oyuncunun RSVP durumunu değiştirmesini istemek için olayın ID'si.Bu, mevcut deneyimde mevcut ve bir dize olarak temsil edilen geçerli bir etkinlik kimliği olmalıdır (bir sayı değil).
Dönüşler
İstek kapatıldıktan sonra oyuncunun yeni RSVP durumunu gösteren bir Enum.RsvpStatus döndürür.Oyuncu RSVP durumunu değiştirmeden istemiyi kapatırsa, bu Enum.RsvpStatus.None veya eski Enum.RsvpStatus durumlarını geri döndürecektir, eğer zaten bir durum seçmişlerse.
Kod Örnekleri
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)
Etkinlikler
CallInviteStateChanged
Bu olay, bir oyuncunun çağrı daveti durumu değiştiğinde ateşlenir.
Parametreler
Yeni çağrı davet durumu.
Kod Örnekleri
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
Bu etkinlik, bir oyuncu davet istemesini kapattığında ateşlenir.
Parametreler
Artık doldurulmadı; boş bir dizi.
Geri Aramalar
OnCallInviteInvoked
Bir telefon rehberinden bir çağrı yapıldığında işlenmesi gereken bir geri arama.tag paraçı, farklı "giriş noktaları" veya benzerleri arasında ayırt etmek için kullanılabilir, PromptPhoneBook() 'de açıklanan gibi.Sadece bir geri arama ayarlanabilir.
Parametreler
Farklı telefon rehberi giriş noktaları arasında ayırt etmeye yardımcı olan dize.
Çağrıya dahil olan tüm oyuncuları içeren array. Çağıran daima arraydaki ilk oyuncu olacaktır.
Dönüşler
Değerleri ve olarak döndürülen ve anahtarlarını içeren tablo, değerleri ve sunucuya erişim kodu tarafından döndürülen sunucu erişim kodu.
Kod Örnekleri
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