Zapisywanie danych

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Gry często muszą przechować pewną ilość trwałych danych między sesjami, takimi jak poziom gracza, punkty doświadczenia, przedmioty w ekwipunku, złoto/pieniądze i wiele więcej.

Ten samouczek pokaże ci, jak utworzyć podstawowy magazyn danych , zapisać dane próbowe i przeczytać je z powrotem w sesjagry.

Włączanie dostępu do Studio

Domyślnie gry testowane w Studio nie mogą uzyskać dostępu do magazynów danych, więc najpierw musisz je włączyć.

  1. Upewnij się, że gra jest opublikowana (Plik > Publikuj w Roblox), aby włączyć dostęp do Studio.

  2. Z zakładki Strona główna, otwórz okienko Ustawienia gry.

  3. W sekcji Bezpieczeństwo, włącz Włącz dostęp Studio do usług API.

  4. Kliknij Zapisz , aby zapisać swoje zmiany.

Tworzenie magazynu danych

Magazyny danych są identyfikowane przez unikalne imię . W tym przykładzie, magazyn danych nazyający się PlayerGold zapisze złoto każdego gracza w trwałym magazynie.

  1. Utwórz nowy Script w ServerScriptService zwany GoldManager .

  2. Stoły danych są zarządzane przez DataStoreService, więc dostań usługę na pierwszej linii.


    local DataStoreService = game:GetService("DataStoreService")
  3. Zadzwoń do DataStoreService:GetDataStore() zgodnie ze zmianą "PlayerGold" . Będzie to uzyskać PlayerGold przechowywanie danych, jeśli istnieje już, lub stworzyć go inaczej.


    local DataStoreService = game:GetService("DataStoreService")
    local goldStore = DataStoreService:GetDataStore("PlayerGold")

Zapisywanie danych

Magazyn danych jest zasadniczo słownikiem, takim jak tabela Lua. Każda wartość w magestrze danych jest zindeksowana przez unikalny klucz, na przykład gracza Class.Player.UserId|userId lub po prostu imienną strungę dla promocji gry.

Przykład danych gracza

KluczWartość

31250608

50

351675979

20

505306092

78000

Przykłady promocji

KluczWartość

AktywneSpecjalneWydarzenie

Letnia impreza 2

Aktywny Kod Promocyjny

BONUS123

Możliwość dostępu do party place

prawdziwy

Aby zapisać dane gracza w sklepdanych:

  1. Utwórz zmienne nazyjące się playerUserID dla klucza magazynu danych. Następnie użyj playerGold , aby przechować początkową ilość złota gracza.


    local DataStoreService = game:GetService("DataStoreService")
    local goldStore = DataStoreService:GetDataStore("PlayerGold")
    -- Klucz i wartość przechowywania danych
    local playerUserID = 505306092
    local playerGold = 250
  2. Aby zapisać dane w PlayerGold danej sklep, wezwij SetAsync w chronionym wezwaniu, przekazując klucz i zmienne wartości poprzednio utworzone.


    local DataStoreService = game:GetService("DataStoreService")
    local goldStore = DataStoreService:GetDataStore("PlayerGold")
    -- Klucz i wartość przechowywania danych
    local playerUserID = 505306092
    local playerGold = 250
    -- Ustaw klucz do przechowywania danych
    local setSuccess, errorMessage = pcall(function()
    goldStore:SetAsync(playerUserID, playerGold)
    end)
    if not setSuccess then
    warn(errorMessage)
    end

Funkcje jak SetAsync() są wezwaniami sieciowymi, które czasami mogą się nie powodować. Jak pokazano powyżej, pcall() jest używany do wykrywania i zarządzania, gdy takie niepowodzenia się występować.

W swojej najbardziej podstawowej formie pcall() akceptuje funkcję i zwraca dwa wartości:

  • Status ( boolean); będzie to prawdą, jeśli funkcja zostanie wykonana bez błędów lub fałszywie.
  • Wartość zwracana funkcji lub wiadomośćbłędu.

W przykładzie powyżej status ( setSuccess ) jest testowany na linii 12 i, jeśli SetAsync() nie powiodło się z jakiejkolwiek przyczyny, errorMessage jest wyświetlany w oknie Wyjścia.

Czytanie danych

  1. Aby czytać dane z sklepdanych, wezwij GetAsync() z dowolnym imieniem klucza.


    local setSuccess, errorMessage = pcall(function()
    goldStore:SetAsync(playerUserID, playerGold)
    end)
    if not setSuccess then
    warn(errorMessage)
    end
    -- Przeczytaj klucz do magazynu danych
    local getSuccess, currentGold = pcall(function()
    return goldStore:GetAsync(playerUserID)
    end)
    if getSuccess then
    print(currentGold)
    end
  2. Aby przetestować skrypt, kliknij Zacznij i zauważ currentGold wartość wydrukowana do okienka wyjścia. Uwaga, że może to zająć kilka sekund, ponieważ funkcje muszą się połączyć z serwerami przechowywania danych.

Projekt przykładowy

Teraz, gdy rozumiesz podstawowe użycie przechowywania danych, sprawdź to w grapróbnej.

Złota gorąca Zbierz jak najwięcej kawałków złota, aby ustanowić osobisty rekord, który będzie trwać między sesjami gry.

Możesz również edytować grę w Studio i zbadać ulepszony GoldManager skrypt, który zawiera automatyczne zapisywanie danych i wiele innych.

Edit in Studio option from the experience's main page