Roblox, her kullanıcıya etkileşimde bulunduğu her oyun veya uygulama için benzersiz bir alan kapsamlı kullanıcı ID atar. Bu sayfa, alan kapsamlı tanımlamanın nasıl çalıştığını ve oyununuzun kodunda User türünü nasıl kullanacağınızı açıklar.
Kullanıcı tanımlamasında anahtar olan aşağıdaki kavramlar bulunmaktadır:
| Kavram | Açıklama |
|---|---|
| Kullanıcı | Roblox'ta kalıcı bir hesap. |
| Oyuncu | Çalışan bir oyunun veri modelinde bir kullanıcının temsili (bkz. Oyuncular). |
| User veri türü | Belirli bir alandaki bir kullanıcının kimliğini temsil eden bir veri türü. Bu, oyun kodunda kullanıcıları referans almak için standart kimliktir. |
| Alan kapsamlı kullanıcı ID | Belirli bir alan içinde bir kullanıcıyı benzersiz şekilde tanımlayan sayısal bir kimlik. Bu kimlik her oyun ve uygulamada farklıdır. |
Alan kapsamlı kullanıcı ID'leri
Bir alan kapsamlı kullanıcı ID belirli bir oyun veya uygulama içinde bir kullanıcıya atanan benzersiz bir kimliktir. Global bir kullanıcı ID'sinin aksine, bir alan kapsamlı kullanıcı ID sadece onu veren alanda anlamlıdır, bu nedenle aynı kullanıcı her etkileşimde bulunduğu oyunda veya uygulamada farklı bir alan kapsamlı kullanıcı ID'sine sahiptir. Scoped ID dağıtımından önce oyununuza katılan oyuncular, o oyundaki orijinal global kullanıcı ID'lerini korurlar (bkz. Dönen oyuncular).
Alan türleri Enum.DomainType ile gösterilmektedir:
| Alan türü | Kapsama alanı | Örnek |
|---|---|---|
| Enum.DomainType.EXPERIENCE | Belirli bir oyun (evren) | Oyundaki bir oyuncunun ID'si |
| Enum.DomainType.OAUTH | Belirli bir OAuth uygulaması | Dış aracınızdaki bir kullanıcının ID'si |
Alan kapsamlı ID'lerin nasıl çalıştığı
Bir oyuncu oyununuza katıldığında, o oyuna özgü benzersiz bir alan kapsamlı kullanıcı ID'si alır. Farklı bir oyuna katılan aynı oyuncu, farklı bir alan kapsamlı kullanıcı ID'si alır. Bu, şunları ifade eder:
- Alan kapsamlı kullanıcı ID'leri, mevcut global kullanıcı ID'lerine benzer şekilde tamsayılardır.
- Bir alan kapsamlı kullanıcı ID, mevcut herhangi bir global kullanıcı ID'si ile çakışmaz.
- Aynı sayısal değer, farklı kullanıcılar için farklı alanlarda görünebilir. Benzersiz anahtar, alan türü, alan ID'si ve alan kapsamlı kullanıcı ID'sinin birleşimidir.
Ö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 kullanıcı ID'si |
|---|---|---|
| Kullanıcı Oyun A'ya bağlanıyor | Dönen oyuncu (kapsamlı ID'lerden önce ziyaret etti) | 123 (global ID, değişmedi) |
| Kullanıcı Oyun B'ye bağlanıyor | Kapsamlı ID dağıtımından sonraki ilk ziyaret | 500789 (Oyun B için alan kapsamlı kullanıcı ID'si) |
| Kullanıcı Oyun C'ye bağlanıyor | Kapsamlı ID dağıtımından sonraki ilk ziyaret | 302441 (Oyun C için alan kapsamlı kullanıcı ID'si) |
Dönen oyuncular
Eğer bir oyuncu, kapsamlı kullanıcı ID dağıtımından önce oyununuza katıldıysa, o oyunda orijinal global kullanıcı ID'sini korur. Bu, mevcut veri mağazası anahtarlarının, sıralama tablolarının ve envanterlerin herhangi bir değişiklik olmadan çalışmaya devam etmesini sağlar.
Kullanıcı Türü ile Çalışmak
User, oyun kodunda kullanıcıları belirlemenin standart yoludur. Bir User değeri, alan kapsamlı kullanıcı ID'sini, alan türünü ve alan ID'sini taşır, böylece kimlik bağlamı her zaman tanımlayıcı ile birlikte seyahat eder. Tam API ayrıntıları için User referansına bakın.
Bir Oyuncudan Kullanıcı Almak
User'ı elde etmenin ana 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("Alan kullanıcı ID'si:", user.Id)
print("Alan türü:", user.DomainType)
print("Alan ID'si:", user.DomainId)
end)
Bir ID'den Kullanıcı Oluşturmak
Mevcut oyundaki bilinen bir kullanıcı ID'sinden User oluşturmak için User.fromId()'ı kullanın:
local user = User.fromId(knownUserId)
Kullanıcıyı motor API'leri ile kullanma
Kullanıcı ID'si parametresi kabul eden motor API'leri, User değerlerini doğrudan kabul eder. User kullanmanız önerilir:
-- Her iki form da çalışır:BadgeService:AwardBadge(player.User, badgeId) -- ÖnerilenBadgeService:AwardBadge(player.UserId, badgeId)
-- Her iki form da çalışır:local target = Players:GetPlayerByUserId(player.User) -- Önerilenlocal target = Players:GetPlayerByUserId(someUserId)
Sayısal bir kullanıcı ID'si, kullanıcı ID'lerini kabul eden bir motor API'sine geçirildiğinde, otomatik olarak dahili olarak bir User içerisine sarılır.
Kullanıcı ID'lerini dönen motor API'leri
Kullanıcı ID'si dönen motor API'leri aynı alan adlarını ve türlerini kullanmaya devam eder. Her dönen ID, oyuncunun oyuna kapsamlı ID dağıtımından önce veya sonra katılıp katılmadığına bağlı olarak ya bir global ID ya da bir alan kapsamlı kullanıcı ID'sidir:
- Dönen oyuncular (önceki katılımlar kapsamlı ID lansmanından önce) — API, kullanıcının global kullanıcı ID'sini döner.
- Yeni oyuncular (ilk katılım kapsamlı ID lansmanından sonra) — API, kullanıcının alan kapsamlı kullanıcı ID'sini döner.
Hem global hem de alan kapsamlı kullanıcı ID'leri standart tamsayılardır ve çakışmaz, bu nedenle bu sayısal alanları okuyan mevcut kod doğru çalışmaya devam eder.
Kullanıcı kimliğini saklamak
Tek bir oyundaki veri mağazası anahtarları için doğrudan user.Id kullanın:
local key = ("player_%d"):format(player.User.Id)PlayerDataStore:SetAsync(key, data)
Diğer sistemler tarafından okunabilecek veya tam alan bağlamına ihtiyaç duyacak değerler için, User'ı ToString() ile serileştirin:
local encoded = player.User:ToString()SomeDataStore:SetAsync("support_ticket_user", encoded)-- Daha sonra, string'den geri yükleyinlocal user = User.fromString(encoded)
Serileştirme garantileri hakkında daha fazla detay için User referansına bakın.
En iyi uygulamalar
- Yeni kodda standart tanımlayıcı olarak Player.User kullanın.
- Bir alan içindeki bir kullanıcıyı tanımlamak için bir alanda sayısal kullanıcı ID'si kullanmayın.