The DataStoreService ile oturumlar arasında sürekli olması gereken verileri depolayabilirsiniz, oyuncunun envanterindeki öğeler veya beceri noktaları gibi.Veri depoları deneyime göre tutarlıdır, bu nedenle deneyimdeki herhangi bir yer farklı sunuculardaki yerler de dahil olmak üzere aynı verilere erişebilir ve değiştirebilir.
Veri depolarına granüler izin kontrolü eklemek ve Studio veya Roblox sunucularının dışına erişmek istiyorsanız, Veri depoları için Açık Bulut API'lerini kullanabilirsiniz.
Deneyimdeki tüm veri depolarını Yaratıcı Merkez aracılığıyla görüntülemek ve izlemek için Veri Depolama Yöneticisi kullanın.
Sık sık güncellemeniz veya erişmeniz gereken geçici veriler için bellek depoları kullanın.
Studio erişimini etkinleştir
Varsayılan olarak, Studio'da test edilen deneyimler veri depolarına erişemez, bu yüzden önce etkinleştirmeniz gerekir.Studio'daki veri depolarına erişmek, canlı deneyimler için tehlikeli olabilir çünkü Studio, aynı veri depolarına istemci uygulaması aracılığıyla erişir.Üretim verilerini üzerine yazmaktan kaçınmak için, canlı deneyimler için bu ayarı etkinleştirmeyin.Bunun yerine, deneyimin ayrı bir test sürümü için etkinleştirin.
Studio erişimini yayınlanmış bir deneyimde etkinleştirmek için:
- Aç Oyun Ayarları.
- Navigate to Güvenlik .
- API Hizmetlerine Stüdyo Erişimini Etkinleştir geçişini etkinleştirin.
- Tıklayın Kaydet .
Erişim veri depoları
Deneyim içinde bir veri depolarına erişmek için:
- Bir sunucu tarafına DataStoreService ekleyin Script .
- GetDataStore() fonksiyonunu kullanın ve kullanmak istediğiniz veri depolama adını belirtin.Veri depoları mevcut değilse, deneyim verilerinizi ilk kez kaydettiğinizde Studio bir tane oluşturur.
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
Veri oluşturma
Veri depoları temelde bir Luau tablosuna benzer bir sözlüktür.Eşsiz bir anahtar indeksi, veri mağazaher değeri bir kullanıcının benzersiz Player.UserId veya bir deneyim promosyonu için adlandırılmış bir dize gibi etiketler.
Kullanıcı veri anahtarı | Değer |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
Promosyon veri anahtarı | Değer |
ActiveSpecialEvent | Yaz Partisi2 |
ActivePromoCode | BONUS123 |
CanAccessPartyPlace | doğru |
Yeni bir giriş oluşturmak için, anahtar adı ve bir değer ile SetAsync() 'yi arayın.
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, errorMessage = pcall(function()
experienceStore:SetAsync("User_1234", 50)
end)
if not success then
print(errorMessage)
end
Verileri güncelle
Bir veri mağazadepolanan herhangi bir değeri değiştirmek için, girişin anahtar adıyla UpdateAsync() 'yi arayın ve girişi nasıl güncelleştirmek istediğinizi tanımlayan bir geri çağrı işlevi.Bu geri arama mevcut değeri alır ve tanımladığınız mantığa dayanarak yeni bir değer döndürür.Geri çağrılma nil döndürürse, yazma işlemi iptal edilir ve değer güncellenmez.
local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local function makeNameUpper(currentName)
local nameUpper = string.upper(currentName)
return nameUpper
end
local success, updatedName = pcall(function()
return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
end)
if success then
print("Uppercase Name:", updatedName)
end
Set vs güncelleme
Özel bir anahtarı hızlı bir şekilde güncellemek için ayarı kullanın. SetAsync() fonksiyonu:
- İki sunucu aynı anda aynı anahtarı ayarmaya çalışırsa veri tutarsızlığına neden olabilir
- Sadece yazma sınırına karşı sayılır
Güncellemeyi çok sunucu denemelerini ele almak için kullanın. UpdateAsync() fonksiyonu:
- Herhangi bir değişiklik yapmadan önce sunucu tarafından son kez güncellenen mevcut anahtar değerini okur
- Yazmadan önce okuduğu için daha yavaş
- Hem okuma hem de yazma sınırlarına karşı sayılır
Verileri oku
Bir veri depolama girişinin değerini okumak için, girişin anahtar adıyla GetAsync() 'yi arayın.
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, currentExperience = pcall(function()
return experienceStore:GetAsync("User_1234")
end)
if success then
print(currentExperience)
end
Artırma verileri
Bir veri mağazabir sayı artırmak için, girişin anahtar adı ve değeri değiştirecek miktar için bir sayı ile IncrementAsync() 'yi arayın.IncrementAsync() bir rahatlık işlevidir ve UpdateAsync() 'yi çağırmayı ve sayıyı manuel olarak artırmayı engeller.
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, newExperience = pcall(function()
return experienceStore:IncrementAsync("Player_1234", 1)
end)
if success then
print(newExperience)
end
Verileri kaldır
Bir girişi kaldırmak ve anahtar ile ilişkili değeri geri dönüştürmek için RemoveAsync() 'yi arayın.
local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local success, removedValue = pcall(function()
return nicknameStore:RemoveAsync("User_1234")
end)
if success then
print(removedValue)
end
Meta veriler
Anahtarlarla ilişkili iki tür metadat var:
- Hizmet tarafından tanımlanmış : En son güncelleme süresi ve oluşturma süresi gibi varsayılan okunabilir metad veriler, her nesneye hizmet tarafından tanımlanmıştır.
- Kullanıcı tanımlı : Etiketleme ve kategorizasyon için özel metadatlar. DataStoreSetOptions nesnesi ve SetMetadata() fonksiyonu kullanılarak tanımlandı.
Metadatları yönetmek için, SetAsync() , UpdateAsync() , GetAsync() , IncrementAsync() ve RemoveAsync() fonksiyonlarını genişletin.
SetAsync() zorunlu üçüncü ve dördüncü argümanları kabul eder:
UserIds 'den bir tablo. Bu, içerik telif hakları ve entelektüel mülkiyet izleme ve kaldırma konusunda yardımcı olabilir.
Bir DataStoreSetOptions nesne, SetMetadata() işlevini kullanarak özel metadat tanımlayabileceğiniz yer.
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")local setOptions = Instance.new("DataStoreSetOptions")setOptions:SetMetadata({["ExperienceElement"] = "Fire"})local success, errorMessage = pcall(function()experienceStore:SetAsync("User_1234", 50, {1234}, setOptions)end)if not success thenprint(errorMessage)end
GetAsync() , IncrementAsync() ve RemoveAsync() , DataStoreKeyInfo nesnesinde ikinci bir değer döndürür.Bu ikinci değer, kullanıcı tarafından tanımlanan metadatları almak için hem hizmet tarafından tanımlanan özellikleri hem de işlevleri içerir.
- The GetMetadata() fonksiyonu, SetAsync() aracılığıyla geçirdiğiniz kullanıcı tanımlı metadatayı alır SetMetadata() .
- The Version özelliği anahtarın sürümünü alır.
- The CreatedTime özelliği, anahtarın oluşturulduğu süreyi alır, anahtarın oluşturulduğu andan itibaren milisaniye sayısı olarak biçimlendirilir.
- The UpdatedTime özelliği, anahtarın son kez güncellendiği, epokadan milisaniye sayısı olarak biçimlendirildiği son kez alır.
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")local success, currentExperience, keyInfo = pcall(function()return experienceStore:GetAsync("User_1234")end)if success thenprint(currentExperience)print(keyInfo.Version)print(keyInfo.CreatedTime)print(keyInfo.UpdatedTime)print(keyInfo:GetUserIds())print(keyInfo:GetMetadata())endUpdateAsync() 'nin geri çağrılma işlevi, mevcut anahtar durumunu tanımlayan DataStoreKeyInfo nesnesinde ek bir parametre alır.Değiştirilmiş değeri, UserIds ile ilişkili anahtarları ve anahtarın metadatlarını geri döndürür.
local DataStoreService = game:GetService("DataStoreService")local nicknameStore = DataStoreService:GetDataStore("Nicknames")local function makeNameUpper(currentName, keyInfo)local nameUpper = string.upper(currentName)local userIDs = keyInfo:GetUserIds()local metadata = keyInfo:GetMetadata()return nameUpper, userIDs, metadataendlocal success, updatedName, keyInfo = pcall(function()return nicknameStore:UpdateAsync("User_1234", makeNameUpper)end)if success thenprint(updatedName)print(keyInfo.Version)print(keyInfo.CreatedTime)print(keyInfo.UpdatedTime)print(keyInfo:GetUserIds())print(keyInfo:GetMetadata())end
Metadatayı tanımlarken sınırlara bakın metadat sınırları.
Sıralanmış veri depoları
Varsayılan olarak, veri depoları içeriğini sıralamaz.Kalıcı lider tablosu istatistikleri gibi düzenli bir şekilde veri almanız gerekiyorsa, GetOrderedDataStore() yerine GetDataStore() yerine çağırın.
local DataStoreService = game:GetService("DataStoreService")local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
Sıralanmış veri depoları, varsayılan veri depolarıyla aynı temel işlevleri destekler, artı benzersiz GetSortedAsync() işlevi.Bu, belirli bir sıralama düzenine, sayfa boyutuna ve minimum/maksimum değerlere dayanarak çok sayıda sıralanmış anahtarı alır.
Aşağıdaki örnek, karakter verilerini üç girişle sayfalara sıralar, her biri azalan sırayla, ardından sayfalar aracılığıyla döngüye girer ve her karakterin adını ve yaşını çıkarır.
local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- Sıralanmış veri mağazadoldurur
local characters = {
Mars = 19,
Janus = 20,
Diana = 18,
Venus = 25,
Neptune = 62
}
for char, age in characters do
local success, errorMessage = pcall(function()
characterAgeStore:SetAsync(char, age)
end)
if not success then
print(errorMessage)
end
end
-- Verileri, her biri üç giriş sayfasına inen sırayla sıralar
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- Mevcut (ilk) sayfayı alır
local entries = pages:GetCurrentPage()
-- Sayfadaki tüm anahtar-değer çiftleri arasında dolaşır
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- Son sayfaya ulaşıldığını kontrol eder
if pages.IsFinished then
break
else
print("----------")
-- Sonraki sayfaya ilerlemeler
pages:AdvanceToNextPageAsync()
end
end
end