Roblox memberikan setiap pengguna sebuah ID pengguna yang diproyeksikan dalam domain yang unik per permainan atau aplikasi yang mereka interaksikan. Halaman ini menjelaskan cara kerja pengidentifikasian yang diproyeksikan dalam domain dan bagaimana menggunakan tipe User dalam kode permainan Anda.
Konsep berikut adalah pusat dari pengidentifikasian pengguna:
| Konsep | Deskripsi |
|---|---|
| Pengguna | Sebuah akun persisten di Roblox. |
| Pemain | Representasi pengguna dalam model data permainan yang sedang berjalan (lihat Pemain). |
| tipe data User | Sebuah tipe data yang mewakili identitas pengguna dalam domain tertentu. Ini adalah pengidentifikasi standar untuk mereferensikan pengguna dalam kode permainan. |
| ID pengguna yang diproyeksikan dalam domain | Pengidentifikasi numerik yang secara unik mengidentifikasi pengguna dalam domain tertentu. Pengidentifikasi ini berbeda dalam setiap permainan dan aplikasi. |
ID pengguna yang diproyeksikan dalam domain
ID pengguna yang diproyeksikan dalam domain adalah pengidentifikasi unik yang diberikan kepada pengguna dalam permainan atau aplikasi tertentu. Tidak seperti ID pengguna global, ID pengguna yang diproyeksikan dalam domain hanya berarti dalam domain yang mengeluarkannya, jadi pengguna yang sama memiliki ID pengguna yang diproyeksikan dalam domain yang berbeda di setiap permainan atau aplikasi yang mereka interaksikan. Pemain yang bergabung dengan permainan Anda sebelum peluncuran ID yang diproyeksikan tetap mempertahankan ID pengguna global aslinya di permainan tersebut (lihat Pemain yang Kembali).
Jenis domain diwakili oleh Enum.DomainType:
| Jenis domain | Diproyeksikan untuk | Contoh |
|---|---|---|
| Enum.DomainType.EXPERIENCE | Sebuah permainan (alam semesta) tertentu | ID pemain di permainan Anda |
| Enum.DomainType.OAUTH | Sebuah aplikasi OAuth tertentu | ID pengguna di alat eksternal Anda |
Cara kerja ID yang diproyeksikan dalam domain
Ketika seorang pemain bergabung dengan permainan Anda, mereka menerima ID pengguna yang diproyeksikan dalam domain yang unik untuk permainan tersebut. Pemain yang sama yang bergabung dengan permainan yang berbeda menerima ID pengguna yang diproyeksikan dalam domain yang berbeda. Ini berarti:
- ID pengguna yang diproyeksikan dalam domain adalah bilangan bulat, mirip dengan ID pengguna global yang ada.
- ID pengguna yang diproyeksikan dalam domain tidak bertabrakan dengan ID pengguna global yang ada.
- Nilai numerik yang sama dapat muncul di domain yang berbeda untuk pengguna yang berbeda. Kunci unik adalah kombinasi jenis domain, ID domain, dan ID pengguna yang diproyeksikan dalam domain.
Contoh skenario
Contoh berikut menunjukkan bagaimana permainan yang berbeda mereferensikan pengguna yang sama:
| Skenario | Konteks pengguna | ID pengguna yang dilihat oleh permainan |
|---|---|---|
| Pengguna terhubung ke Permainan A | Pemain yang kembali (mengunjungi sebelum ID yang diproyeksikan) | 123 (ID global, tidak berubah) |
| Pengguna terhubung ke Permainan B | Kunjungan pertama setelah peluncuran ID yang diproyeksikan | 500789 (ID pengguna yang diproyeksikan dalam domain untuk Permainan B) |
| Pengguna terhubung ke Permainan C | Kunjungan pertama setelah peluncuran ID yang diproyeksikan | 302441 (ID pengguna yang diproyeksikan dalam domain untuk Permainan C) |
Pemain yang Kembali
Jika seorang pemain sudah bergabung dengan permainan Anda sebelum peluncuran ID pengguna yang diproyeksikan, mereka mempertahankan ID pengguna global aslinya di permainan tersebut. Ini memastikan kunci data penyimpanan yang ada, papan peringkat, dan inventaris terus berfungsi tanpa perubahan.
Bekerja dengan Tipe Pengguna
User adalah cara standar untuk mengidentifikasi pengguna dalam kode permainan. Nilai User membawa ID pengguna yang diproyeksikan dalam domain bersama jenis domain dan ID domain, sehingga konteks identitas selalu berjalan dengan pengidentifikasi. Untuk rincian API lengkap, lihat referensi User.
Mendapatkan Pengguna dari Pemain
Cara utama untuk memperoleh User adalah dari Player yang terhubung melalui Player.User:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("ID pengguna domain:", user.Id)
print("Jenis domain:", user.DomainType)
print("ID domain:", user.DomainId)
end)
Membangun Pengguna dari ID
Untuk membuat User dari ID pengguna yang diketahui dalam permainan saat ini, gunakan User.fromId():
local user = User.fromId(knownUserId)
Menggunakan Pengguna dengan API mesin
API mesin yang menerima parameter ID pengguna juga menerima nilai User secara langsung. Menggunakan User sangat dianjurkan:
-- Kedua bentuk berfungsi:BadgeService:AwardBadge(player.User, badgeId) -- DianjurkanBadgeService:AwardBadge(player.UserId, badgeId)
-- Kedua bentuk berfungsi:local target = Players:GetPlayerByUserId(player.User) -- Dianjurkanlocal target = Players:GetPlayerByUserId(someUserId)
Ketika ID pengguna numerik diteruskan ke API mesin yang menerima ID pengguna, itu secara otomatis dibungkus menjadi User secara internal.
API mesin yang mengembalikan ID pengguna
API mesin yang mengembalikan ID pengguna numerik terus menggunakan nama dan tipe bidang yang sama. Setiap ID yang dikembalikan adalah ID global atau ID pengguna yang diproyeksikan dalam domain tergantung pada apakah pengguna bergabung dengan permainan sebelum atau setelah peluncuran ID yang diproyeksikan:
- Pemain yang Kembali (pertama bergabung sebelum peluncuran ID yang diproyeksikan) — API mengembalikan ID pengguna global pengguna.
- Pemain Baru (pertama bergabung setelah peluncuran ID yang diproyeksikan) — API mengembalikan ID pengguna yang diproyeksikan dalam domain untuk pengguna.
Baik ID pengguna global maupun ID pengguna yang diproyeksikan dalam domain adalah bilangan bulat standar yang tidak bertabrakan, sehingga kode yang ada yang membaca bidang numerik ini terus berfungsi.
Menyimpan identitas pengguna
Untuk kunci penyimpanan data dalam satu permainan, gunakan user.Id secara langsung:
local key = ("player_%d"):format(player.User.Id)PlayerDataStore:SetAsync(key, data)
Untuk nilai yang mungkin dibaca oleh sistem lain atau memerlukan konteks domain penuh, serialisasikan User dengan ToString():
local encoded = player.User:ToString()SomeDataStore:SetAsync("support_ticket_user", encoded)-- Nantinya, kembalikan dari stringlocal user = User.fromString(encoded)
Untuk rincian lebih lanjut tentang jaminan serialisasi, lihat referensi User.
Praktik terbaik
- Gunakan Player.User sebagai pengidentifikasi standar dalam kode baru.
- Jangan gunakan ID pengguna numerik dari satu domain untuk mengidentifikasi pengguna di domain lain.