Class.DataStoreService ช่วยให้คุณเก็บข้อมูลที่ต้องใช้ระหว่างเซสชัน เช่น รายการในช่องเก็บของผู้เล่นหรือคะแนนทักษะ ข้อมูลสโตรเกอร์เป็นเหมือนกันตามประสบการณ์ดังนั้นจึงสามารถเข้าถ
หากคุณต้องการเพิ่มการควบคุมการอนุญาตระดับเม็ดเงินให้กับร้านค้าของคุณและเข้าถึงพวกเขานอกเซิร์ฟเวอร์ของ Studio หรือ Roblox คุณสามารถใช้ เปิด API เมฆสำหรับร้านค้า
สำหรับข้อมูลชั่วคราวที่คุณต้องการปรับปรุงหรือเข้าถึงบ่อยครั้งใช้ ห้างเก็บข้อมูล
เปิดใช้งานการเข้าถึงสตูดิโอ
ตามปกติ, ประสบการณ์ที่ทดสอบใน Studio จะไม่สามารถเข้าถึงห้องเก็บข้อมูลใน Studio ดังนั้นคุณจะต้องเปิดให้เป็นอย่างแรก การเข้าถึงห้องเก็บข้อมูลใน Studio ใน Studio อาจเป็นอันตรายสำหรับป
เพื่อเปิดใช้งานการเข้าถึง Studio ในประสบการณ์ เผยแพร่แล้ว
- ไปที่ หน้าแรก > การตั้งค่าเกม > ความปลอดภัย 2. เปิดใช้งานปุ่ม เปิดใช้งาน Studio Access to API Services 3. คลิก บันทึก .
เข้าถึงข้อมูลสโตรเจอร์
เพื่อเข้าถึงที่เก็บข้อมูลภายในประสบการณ์:
- เพิ่ม DataStoreService ในด้านเซิร์ฟเวอร์ Script
- ใช้คุณสมบัติ GetDataStore() และระบุชื่อของร้านค้าข้อมูลที่คุณต้องการใช้ หากร้านค้าข้อมูลไม่มีอยู่ Studio จะสร้างหนึ่งเมื่อคุณบันทึกข้อมูลประสบการณ์ของคุณครั้งแรก
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
การสร้างข้อมูล
ห้องเก็บข้อมูลเป็นพจนานุกรมที่คล้ายกับตาราง Lua ห้องเก็บข้อมูลมีคีย์ เฉพาะ ร้านค้า, เช่น Class.Player.UserId หรือชื่อสตริงที่ชื่อสตริงสำหรับโปรโมชั
กุญแจข้อมูลผู้ใช้ | มูลค่า |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
รหัสข้อมูลโปรโมชัน | มูลค่า |
กิจกรรมพิเศษที่ใช้งานอยู่ | ปาร์ตี้ฤดูร้อน2 |
รหัสโปรโมชันที่ใช้งานอยู่ | โบนัส123 |
สามารถเข้าถึงสถานที่ปาร์ตี้ได้ | จริง |
เพื่อสร้างรายการใหม่, โทร SetAsync() ด้วยชื่อกุญแจและมูลค่า
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
การปรับปรุงข้อมูล
เพื่อเปลี่ยนค่าใด ๆ ร้านค้าโปรดใช้ UpdateAsync() ด้วยชื่อเข้าของเรื่องกับคำสั่งที่ระบุวิธีที่ค
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
การตั้งค่า vs อัปเดต
ใช้ตั้งค่าเพื่ออัปเดตกุญแจที่เฉพาะอย่างรวดเร็ว ฟังก์ชัน SetAsync()
- อาจทำให้เกิดความผิดพลาดข้อมูลหากเซิร์ฟเวอร์สองเครื่องพยายามตั้งค่ากุญแจเดียวกันในเวลาเดียวกัน
- นับเฉพาะขีดจำกัดการเขียนเท่านั้น
ใช้ปรับปรุงเพื่อจัดการการโจมตีของหลายเซิร์ฟเวอร์ ฟังก์ชัน UpdateAsync()
- อ่านค่ากุญแจปัจจุบันจากเซิร์ฟเวอร์ที่ปรับปรุงล่าสุดก่อนที่จะทำให้มีการเปลี่ยนแปลงใด ๆ
- ช้าลงเพราะมันอ่านก่อนที่มันจะเขียน
- นับทั้งระยะเวลาการอ่านและเขียน
การอ่านข้อมูล
เพื่ออ่านค่าของรายการโรงงานข้อมูลให้โทร GetAsync() พร้อมชื่อของเรื่องกับชื่อของเรื่อง
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
เพิ่มข้อมูล
ร้านค้าIncrementAsync() ด้วยชื่อเข้ากับหมายเลขสำหรับการเปลี่ยนแปลงม
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
การลบข้อมูล
เพื่อลบรายการและคืนค่าที่เกี่ยวข้องกับกุญแจ โปรดโทร RemoveAsync()
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
ตัวอ้าง
มีสองประเภทของข้อมูลอ้างอิงที่เกี่ยวข้องกับกุญแจ:
- ในระดับบริการ : เมทาดาต้าที่อ่านได้เท่านั้น เช่นเวลาอัปเดตล่าสุดและเวลาการสร้าง ทุกวัตถุมีเมทาดาต้าในระดับบริการ
- การใช้งานผู้ใช้ได้กำหนด : เมทาดาต้าที่กำหนดเองสำหรับการจัดป้ายและการจัดป้าย. กำหนดโดยการใช้วัตถุ DataStoreSetOptions และการใช้งาน SetMetadata() ฟังก์ชัน
เพื่อจัดการข้อมูลเมทาดาต้าให้ขยาย Class.GlobalDataStore:SetAsync()|SetAsync()``Class.GlobalDataStore:UpdateAsync()|UpdateAsync()``Class.GlobalDataStore:GetAsync()|GetAsync() 2>Class.GlobalDataStore:IncrementAsync
SetAsync() รองรับตัวอ้างที่สามและสี่อย่างเป็นตัวอ้างที่อาจเป็นตัวอ้างที่สามและสี่:
ตารางของ UserIds สามารถช่วยในการติดตามสิทธิ์เนื้อหาและสิทธิ์ทรัพย์สินทางปัญญา และสามารถลบออกได้
เป็นวัตถุ DataStoreSetOptions ซึ่งคุณสามารถใช้งานได้โดยใช้หน้าใช้งาน SetMetadata()
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() และ RemoveAsync() กลับค่าที่สองในตัวอุปกรณ์ 0> Class.DataStoreKeyInfo0> นี้ ค่าที
- สมบัติข้อมูล Version ดึงเวอร์ชันของกุญแจ
- คุณสมบัติ CreatedTime ดึงเวลาที่สร้างขึ้นมาว่าเป็นเวลานาทีตั้งแต่วันที่อาณาเขต
- คุณสมบัติ UpdatedTime ดึงค่าสุดท้ายที่กุญแจได้รับการปรับปรุงเมื่อเวลาตามวินาที ต้องระวังจากเวลานาทีที่เป็นตัวเลขนับตั้งแต่ยุค
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())endคุณสมบัติเรียกของ UpdateAsync() ใช้ปารามิเตอร์พิเศษในวัตถุ DataStoreKeyInfo ที่อธิบายสถานะของกุญแจปัจจุบัน มันกำหนดค่าที่แก้ไขแล้ว กุญแจที
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
สำหรับข้อจํากัดเมื่อกําหนดเมทาดาตา, ดู ข้อจํากัดเมทาดาตา .
ร้านค้าข้อมูล
โดยปกติระบบจัดเก็บข้อมูลไม่ได้เรียงลำดับเนื้อหาของตัวเอง หากคุณต้องการรับข้อมูลในรูปแบบที่เรียงลำดับได้ เช่นในสถิติลีดเดอร์บอร์ดที่มีอยู่ โปรดใช้ <
local DataStoreService = game:GetService("DataStoreService")local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
ร้านค้าข้อมูลสนับสนุนระบบการจัดการข้อมูลที่เหมือนกับข้อมูลปกติโดยมีการใช้งานเสริม GetSortedAsync() ฟังก์ชันที่เฉพาะเจาะจง หลายคีย์เรียงลำดับ ตัวอย่างต่อไปนี้จัดเก็บข้อมูลตัวละครเป็นหน้าที่มีสามรายการในแต่ละรายการในลำดับลงตัว จากนั้นจะป้อนผ่านหน้าและสรุปผลลัพธ์ของแต่ละตัวละคร
local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- ร้านค้า
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
-- เรียงข้อมูลลงในหน้าสามรายการโดยมีขนาดของแต่ละรายการสามตัวอักษร
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- ได้รับหน้าปัจจุบัน (ตัวแรก)
local entries = pages:GetCurrentPage()
-- ทำซ้ำผ่านคู่ค่าทั้งหมดบนหน้า
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- ตรวจสอบว่าหน้าล่าสุดถึงแล้ว
if pages.IsFinished then
break
else
print("---------")
-- ก้าวไปยังหน้าต่อไป
pages:AdvanceToNextPageAsync()
end
end
end