ร้านค้าข้อมูล

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

Class.DataStoreService ช่วยให้คุณเก็บข้อมูลที่ต้องใช้ระหว่างเซสชัน เช่น รายการในช่องเก็บของผู้เล่นหรือคะแนนทักษะ ข้อมูลสโตรเกอร์เป็นเหมือนกันตามประสบการณ์ดังนั้นจึงสามารถเข้าถ

หากคุณต้องการเพิ่มการควบคุมการอนุญาตระดับเม็ดเงินให้กับร้านค้าของคุณและเข้าถึงพวกเขานอกเซิร์ฟเวอร์ของ Studio หรือ Roblox คุณสามารถใช้ เปิด API เมฆสำหรับร้านค้า

สำหรับข้อมูลชั่วคราวที่คุณต้องการปรับปรุงหรือเข้าถึงบ่อยครั้งใช้ ห้างเก็บข้อมูล

เปิดใช้งานการเข้าถึงสตูดิโอ

ตามปกติ, ประสบการณ์ที่ทดสอบใน Studio จะไม่สามารถเข้าถึงห้องเก็บข้อมูลใน Studio ดังนั้นคุณจะต้องเปิดให้เป็นอย่างแรก การเข้าถึงห้องเก็บข้อมูลใน Studio ใน Studio อาจเป็นอันตรายสำหรับป

เพื่อเปิดใช้งานการเข้าถึง Studio ในประสบการณ์ เผยแพร่แล้ว

  1. ไปที่ หน้าแรก > การตั้งค่าเกม > ความปลอดภัย 2. เปิดใช้งานปุ่ม เปิดใช้งาน Studio Access to API Services 3. คลิก บันทึก .

เข้าถึงข้อมูลสโตรเจอร์

เพื่อเข้าถึงที่เก็บข้อมูลภายในประสบการณ์:

  1. เพิ่ม DataStoreService ในด้านเซิร์ฟเวอร์ Script
  2. ใช้คุณสมบัติ GetDataStore() และระบุชื่อของร้านค้าข้อมูลที่คุณต้องการใช้ หากร้านค้าข้อมูลไม่มีอยู่ Studio จะสร้างหนึ่งเมื่อคุณบันทึกข้อมูลประสบการณ์ของคุณครั้งแรก

local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")

การสร้างข้อมูล

ห้องเก็บข้อมูลเป็นพจนานุกรมที่คล้ายกับตาราง Lua ห้องเก็บข้อมูลมีคีย์ เฉพาะ ร้านค้า, เช่น Class.Player.UserId หรือชื่อสตริงที่ชื่อสตริงสำหรับโปรโมชั

กุญแจข้อมูลผู้ใช้ มูลค่า
3125060850
35167597920
50530609278000
รหัสข้อมูลโปรโมชัน มูลค่า
กิจกรรมพิเศษที่ใช้งานอยู่ปาร์ตี้ฤดูร้อน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 then
      print(errorMessage)
      end
  • GetAsync() , IncrementAsync() และ RemoveAsync() กลับค่าที่สองในตัวอุปกรณ์ 0> Class.DataStoreKeyInfo0> นี้ ค่าที

    • การใช้งาน GetUserIds() จะดึงตารางของ UserIds ที่คุณส่งไปยัง SetAsync()
    • การใช้งาน GetMetadata() รวบรวมเมทริกส์ที่กำหนดเองที่คุณส่งให้ SetAsync() ผ่าน SetMetadata() .
    • สมบัติข้อมูล 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 then
    print(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, metadata
    end
    local success, updatedName, keyInfo = pcall(function()
    return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
    end)
    if success then
    print(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