Roblox, her kullanıcı için her oyunda, grupta veya uygulamada bir etkili kullanıcı kimliği sunar. Kullanıcının o alanla olan geçmişine bağlı olarak, etkili kullanıcı kimliği ya küresel kullanıcı kimliği ya da bir kapsamlı kullanıcı kimliğidir. Bu sayfa, etkili kullanıcı kimliklerinin nasıl çalıştığını ve oyun kodunuzda User türünü nasıl kullanacağınızı açıklar.
Kullanıcı tanımlamasıyla ilgili aşağıdaki kavramlar merkezi öneme sahiptir:
| Kavram | Açıklama |
|---|---|
| Kullanıcı | Roblox'ta kalıcı bir hesap. |
| Oyuncu | Bir kullanıcının çalışan bir oyunun veri modelindeki temsili (bkz. Oyuncular). |
| User veri türü | Bir kullanıcının etkili kullanıcı kimliğini ve alan bağlamını taşıyan bir veri türü. Bu, oyun kodunda kullanıcıları referans almak için standart tanımlayıcıdır. |
| Küresel kullanıcı kimliği | Roblox'un her hesaba atadığı platform düzeyindeki kullanıcı kimliği. Roblox genelinde benzersizdir. |
| Kapsamlı kullanıcı kimliği | Belirli bir alanda atanan bir kullanıcı kimliği. Bir kullanıcının kapsamlı kullanıcı kimlikleri her oyunda, grupta veya uygulamada farklıdır. |
| Etkili kullanıcı kimliği | Roblox'un bir kullanıcı için bir alan içinde sunduğu tek kullanıcı kimliği. |
| Ön dağıtım kullanıcısı | Kapsamlı kullanıcı kimliği dağıtımından önce bir alanla ilk etkileşime giren bir kullanıcı. O alanda, etkili kullanıcı kimliği küresel kullanıcı kimliği olarak kalır. |
| Sonrası dağıtım kullanıcısı | Kapsamlı kullanıcı kimliği dağıtımından sonra bir alanla ilk etkileşime giren bir kullanıcı. O alanda, etkili kullanıcı kimliği bir kapsamlı kullanıcı kimliğidir. |
Etkili kullanıcı kimlikleri ve alanlar
Her kullanıcının belirli bir oyunda, grupta veya uygulamada bir etkili kullanıcı kimliği vardır. Roblox, o alandaki aynı kullanıcı için ayrı küresel ve kapsamlı kullanıcı kimlikleri sunmaz:
- Ön dağıtım kullanıcısı etkili kullanıcı kimliği olarak küresel kullanıcı kimliğine sahiptir.
- Sonrası dağıtım kullanıcısı etkili kullanıcı kimliği olarak bir kapsamlı kullanıcı kimliğine sahiptir. O kimlik yalnızca o alanda anlamlıdır.
Oyun kodunda, Player.UserId ve Player.User.Id her ikisi de bu etkili kullanıcı kimliğini döndürür ve her zaman aynı sayısal değere sahiptir (Player.User.Id eşittir Player.UserId), bu nedenle kodunuzun bunlar arasında seçim yapmak için dallanma mantığına ihtiyacı yoktur.
Roblox, kullanıcı kimliğini üç tür alan üzerinden kapsamlandırır:
| Alan | Kapsamlı | Örnek |
|---|---|---|
| Deneyim (Enum.DomainType.EXPERIENCE) | Belirli bir deneyim | Bir oyuncunun deneyiminizdeki kimliği |
| Grup | Belirli bir Roblox grubu (topluluk) | Grubunuzdaki bir üyenin kimliği |
| OAuth uygulaması (Enum.DomainType.OAUTH) | Belirli bir OAuth uygulaması | Bir kullanıcının dış aracınızdaki kimliği |
Etkili kullanıcı kimlikleri nasıl çalışır
Bir oyuncu oyununuza katıldığında, o oyun için bir etkili kullanıcı kimliği vardır. Sonrası dağıtım kullanıcısının etkili kullanıcı kimliği, o oyuna özgü bir kapsamlı kullanıcı kimliğidir. Başka bir oyunda, grupta veya uygulamada da bir sonrası dağıtım kullanıcısı olduklarında farklı bir kapsamlı kullanıcı kimliği alırlar. Bu, şu anlama gelir:
- Etkili kullanıcı kimlikleri, küresel veya kapsamlı olsun, tam sayılardır.
- Etkili kullanıcı kimlikleri, aynı alan içindeki oturumlar boyunca istikrarlıdır.
- Bir kapsamlı kullanıcı kimliği, mevcut herhangi bir küresel kullanıcı kimliği ile çakışmaz.
- Aynı sayısal değer, farklı kullanıcılar için farklı alanlarda görünebilir. Benzersiz anahtar, alanın (alan türü ve alan kimliği) ve etkili kullanıcı kimliğinin kombinasyonudur.
Örnek senaryo
Aşağıdaki örnek, farklı oyunların aynı kullanıcıyı nasıl referans aldığını gösterir:
| Senaryo | Kullanıcı bağlamı | Oyun tarafından görülen etkili kullanıcı kimliği |
|---|---|---|
| Kullanıcı Oyun A'ya bağlanıyor | Ön dağıtım kullanıcısı | 123 (küresel kullanıcı kimliği, değişmedi) |
| Kullanıcı Oyun B'ye bağlanıyor | Sonrası dağıtım kullanıcısı | 500789 (Oyun B için kapsamlı kullanıcı kimliği) |
| Kullanıcı Oyun C'ye bağlanıyor | Sonrası dağıtım kullanıcısı | 302441 (Oyun C için kapsamlı kullanıcı kimliği) |
Ön dağıtım kullanıcıları
Eğer bir oyuncu oyununuzda bir ön dağıtım kullanıcısıysa, etkili kullanıcı kimliği o oyundaki küresel kullanıcı kimliği olarak kalır. Hem Player.UserId hem de Player.User.Id o küresel kullanıcı kimliğini döndürür. Roblox, o oyundaki oyuncu için ikinci bir kullanıcı kimliği sunmaz. Bu, mevcut veri deposu anahtarlarının, liderlik tablolarının ve envanterlerin herhangi bir değişiklik olmadan çalışmaya devam etmesini sağlar.
Grup alanı
Her Roblox grubu kendi alanıdır. Bir kullanıcının bir grupta bir etkili kullanıcı kimliği vardır, bu, herhangi bir oyunda veya OAuth uygulamasındaki etkili kullanıcı kimliğinden ayrıdır:
- Oyun içi grup kontrolleri değişmez — Player üzerindeki motor yöntemleri, Player:IsInGroupAsync(), Player:GetRankInGroupAsync(), ve Player:GetRoleInGroupAsync(), ayrıca GroupService:PromptJoinAsync(), kimliği içsel olarak çözer ve bir kullanıcı kimliği sunmaz.
- Açık Cloud grup API'leri grubun alanını kullanır — Bu, grup üyeliklerini ve katılma taleplerini listeleyen veya yöneten uç noktalar için geçerlidir.
Kullanıcı Türü ile Çalışma
User, oyun kodunda kullanıcıları tanımlamanın standart yoludur. Bir User değeri, etkili kullanıcı kimliğini alan türü ve alan kimliği ile birlikte taşır, böylece kimlik bağlamı her zaman tanımlayıcı ile birlikte gelir. Tam API ayrıntıları için User referansına bakın.
Bir Oyuncudan Kullanıcı Almak
Bir User elde etmenin birincil yolu, bağlı bir Player üzerinden Player.User kullanmaktır:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("Etkili kullanıcı kimliği:", user.Id) -- Her zaman player.UserId ile eşleşir
print("Alan türü:", user.DomainType)
print("Alan kimliği:", user.DomainId)
end)Bir Kimlikten Kullanıcı Oluşturmak
Mevcut oyundaki bilinen bir etkili kullanıcı kimliğinden User oluşturmak için User.fromId() kullanın:
local user = User.fromId(knownUserId)Kullanıcıyı motor API'leri ile Kullanma
Kullanıcı kimliği parametresi kabul eden motor API'leri, doğrudan User değerlerini de kabul eder. User kullanılması önerilir:
-- Her iki form da çalışır:
BadgeService:AwardBadge(player.User, badgeId) -- Önerilen
BadgeService:AwardBadge(player.UserId, badgeId)-- Her iki form da çalışır:
local target = Players:GetPlayerByUserId(player.User) -- Önerilen
local target = Players:GetPlayerByUserId(someUserId)Bir sayısal kullanıcı kimliği, kullanıcı kimliklerini kabul eden bir motor API'sine geçirildiğinde, otomatik olarak içsel olarak bir User içine sarılır.
Kullanıcı Kimliklerini Döndüren Motor API'leri
Kullanıcı kimliklerini döndüren motor API'leri, kullanıcının etkili kullanıcı kimliğini döndürür:
- Ön dağıtım kullanıcıları — API, kullanıcının küresel kullanıcı kimliğini döndürür.
- Sonrası dağıtım kullanıcıları — API, kullanıcının kapsamlı kullanıcı kimliğini döndürür.
Player.UserId, Player.User.Id ve diğer motor API'leri, oyununuzdaki bir kullanıcı için bu aynı etkili kullanıcı kimliğini döndürür, bu nedenle sayısal kullanıcı kimliği alanlarını okuyan mevcut kod, dallanma mantığı olmadan çalışmaya devam eder.
Açık Cloud istekleri ve yanıtları, hedef alan için aynı etkili kullanıcı kimliğini kullanır. O alandaki aynı kullanıcı için ikinci bir kullanıcı kimliği sunmazlar.
Kullanıcı kimliğini saklama
Sayısal etkili kullanıcı kimliğini yalnızca bir kullanıcıyı tek bir alanda tanımlamak için kullanın. Bir oyundaki bir veri deposu anahtarı user.Id'yi doğrudan kullanabilir:
local key = ("player_%d"):format(player.User.Id)
PlayerDataStore:SetAsync(key, data)Başka bir alan, saklanan kimliği okuduğunda, örneğin kullanıcıları denetleyen bir OAuth uygulaması, ToString()'den gelen dizeyi saklayın. Dize, alan bağlamını etkili kullanıcı kimliği ile birlikte kodlar. Sadece tam sayıyı kullanmak, aynı sayının başka bir alanda farklı bir kullanıcıyı tanımladığı durumlarda yanlış kullanıcıya bir işlem uygulayabilir.
local encoded = player.User:ToString()
SomeDataStore:SetAsync("support_ticket_user", encoded)
-- Daha sonra, dizeden geri yükleyin
local user = User.fromString(encoded)Serileştirme garantileri hakkında daha fazla ayrıntı için User referansına bakın.
En iyi uygulamalar
- Yeni kodda standart tanımlayıcı olarak Player.User kullanın.
- Sayısal etkili kullanıcı kimliğini yalnızca tek bir alanda, örneğin bir oyundaki veri deposu anahtarları için kullanın.
- Başka bir alan saklanan kimliği okuduğunda ToString() ve fromString() kullanın.