Zapisz i wyświetlaj dane gracza

*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.


Teraz, gdy możesz wykryć, gdy gracz zebrał monetę, ta sekcja tutorialu nauczy cię, jak policzyć, ile monet zebrało graczy, i uczynić tę kwotę widoczną na ranking.

Utwórz modułowy skrypt, aby zapisać kolekcję monet

Aby zarządzać danymi zbieranymi w każdej kolekcji monet gracza, musisz utworzyć obiekt ModuleScript, aby zawierać strukturę danych i funkcje, które uzyskują dane zbierane w każdej kolekcji monet dla każdego gracza. Skrypty modułowe są ponownymi kodami, które inne skrypty mogą wymagać. W tym przypadku

Aby utworzyć skrypt modułu:

  1. W oknie Explorer, przełącz nawigację nad ServerStorage i kliknij przycisk 2> ⊕2>. Wyświetlony zostanie menu kontekstowe.

  2. Z menu kontekstowego wybierz ModuleScript. Nowy skrypt modułu wyświetlony jest pod ServerStorage. Jesteś umieszczając nowy skrypt modułu w ServerStorage, ponieważ chcesz zarządzać logiką zbierania monet na serwerze.

    Studio's Explorer window with both the ServerScriptService's plus icon and ModuleScript object highlighted.
  3. Zmień nazwę modułu skryptu na PlayerData .

    Studio's Explorer window with the PlayerData script highlighted under ServerStorage.
  4. Zastąp standardowy kod następujązym kodem:


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number
    }
    ]]
    }
    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end
    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end
    return PlayerData

    Skrypt modułu określają tabelę PlayerData, która zawiera zero lub wiele tabel playerData, które reprezentują dane o zbiórce monet dla gracza. Każdy skrypt, który wymaga tego modułu, otrzymuje tę samą kopię tablicy PlayerData, umożliwiając wiele skryptów do modyfikacji i udostępniania danych o zbiórce monet.

    Oznaczanie struktur danych

    Skrypt modułu zaczyna się od deklaracji pustej tabeli, PlayerData , która jest zwracana na końcu skryptu. Zawiera również metody dostępu, aby uzyskać i ustawić wartości w tabeli.

    Tabela playerData zawiera komentarze opisujące strukturę tabeli, co ułatwia zrozumienie kodu. W tym przypadku tabela playerData zawiera userId i odpowiadającą imię pola nazyającym się 1> Coins1>, które reprezentuje ilość zebranych monet dla tego gracza.


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number
    }
    ]]
    }
    ...
    return PlayerData

    Definiowanie lokalnego dostawcy danych

    getData() jest lokalną funkcją, która odczytuje dane dla określonego playerData tabeli. Jeśli gracz nie zebrał monety, to zwraca tabelę DEFAULT_PLAYER_DATA, aby upewnić się, że każdy gracz ma kilka danych związanych z nim. Common Con약 jest stworzenie prostych, publicznych funkcji, które od


    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end

    Definowanie dostępcników danych publicznych

    getValue() Player() i updateValue() są funkcjami publicznie dostępnymi, które inne skrypty, które wymagają tego modułowego skryptu, mogą wezwywać. W naszym przypadku CoinService używa tych funkcji do aktualizacji danych o monetach gracza, gdy ten gracz dotyka monety.


    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end

Wdrożenie tabeli liderów

Możesz przedstawić wizualnie dane zbioru monet. Roblox wbudowuje system, który automatycznie generuje tabelę liderów, używając domyślnej interfejsu użytkownika.

Aby stworzyć tabelę ranking:

  1. W oknie Explorer , utwórz ModuleScript w ServerStorage , a następnie zmień nazwę modułu skryptu na 1> Leaderboard1>.

    Studio's Explorer window with the Leaderboard script highlighted under ServerStorage.
  2. Zastąp standardowy kod następujązym kodem:


    local Leaderboard = {}
    -- Tworzenie nowego ranking
    local function setupLeaderboard(player)
    local leaderstats = Instance.new("Folder")
    -- „leaderstats” to rezerwowany nazwa Roblox uznana za nazwę ranking
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    return leaderstats
    end
    -- Tworzenie nowej wartości statystyki lidera
    local function setupStat(leaderstats, statName)
    local stat = Instance.new("IntValue")
    stat.Name = statName
    stat.Value = 0
    stat.Parent = leaderstats
    return stat
    end
    -- Aktualizowanie wartości statystyki gracza
    function Leaderboard.setStat(player, statName, value)
    local leaderstats = player:FindFirstChild("leaderstats")
    if not leaderstats then
    leaderstats = setupLeaderboard(player)
    end
    local stat = leaderstats:FindFirstChild(statName)
    if not stat then
    stat = setupStat(leaderstats, statName)
    end
    stat.Value = value
    end
    return Leaderboard

    Poniższe sekcje opisują, jak tablica liderów działa bardziej szczegółowo.

    Utworzenie listy liderów

    Funkcja setupLeaderboard() tworzy nową instancję leaderstats i ustawia ją jako dziecko określonego gracza. Roblox automatycznie rozpozna


    -- Tworzenie nowego ranking
    local function setupLeaderboard(player)
    local leaderstats = Instance.new("Folder")
    -- „leaderstats” to rezerwowany nazwa Roblox uznana za nazwę ranking
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    return leaderstats
    end
    -- Tworzenie nowej wartości statystyki lidera
    local function setupStat(leaderstats, statName)
    local stat = Instance.new("IntValue")
    stat.Name = statName
    stat.Value = 0
    stat.Parent = leaderstats
    return stat
    end

    Aktualizowanie statystyk gracza

    setStat() jest jedyną publiczną funkcją w modułach Leaderboard . tworzy wartości statystyk dla określonego gracza lub dla tablicy liderów, jeśli nie istnieje jeszcze.

    FindFirstChild() wziął nazwę obiektu i zwraca obiekt, jeśli istnieje, lub nil jeśli nie. Jest to powszechny, bezpieczny sposób znalezienia, czy obiekt istnieje przed użyciem go.


    -- Aktualizowanie wartości statystyki gracza
    function Leaderboard.setStat(player, statName, value)
    local leaderstats = player:FindFirstChild("leaderstats")
    if not leaderstats then
    leaderstats = setupLeaderboard(player)
    end
    local stat = leaderstats:FindFirstChild(statName)
    if not stat then
    stat = setupStat(leaderstats, statName)
    end
    stat.Value = value
    end

Zintegrować Skrypcje Modułowe

Zarówno PlayerData i Leaderboard skrypty modułowe są ukończone, wymagają one w CoinService skrypcie, aby zarządzać i wyświetlać dane monety gracza. Aby aktualizować 2>CoinService2>:

  1. W oknie Explorer otwórz skrypt CoinService .

  2. Zastąp obecny kod kodem następującym:


    -- Początkowa inicjalizacja usług i zmienne
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local ServerStorage = game:GetService("ServerStorage")
    -- Moduły
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local COOLDOWN = 10
    local COIN_AMOUNT_TO_ADD = 1
    local function updatePlayerCoins(player, updateFunction)
    -- Aktualizuj tabelę monet
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, updateFunction)
    -- Aktualizuj rankingmonet
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    end
    -- Definiowanie identyfikatora wydarzenia
    local function onCoinTouched(otherPart, coin)
    if coin:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Gracz dotknął monety
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    updatePlayerCoins(player, function(oldCoinAmount)
    oldCoinAmount = oldCoinAmount or 0
    return oldCoinAmount + COIN_AMOUNT_TO_ADD
    end)
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Ustawienie słuchaczy wydarzeń
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Zmiany w oryginalnym CoinService skrypcie obejmują:

    • Importowanie modułów PlayerData i Leaderboard z funkcją require().
    • Oświadczenie COIN_AMOUNT_TO_ADD jako liczbę monet do dodania, gdy gracz zbiera monetę, i COIN_KEY_NAME jako imię klucza zdefiniowane w PlayerData .
    • Utworzenie funkcji pomocniczej updatePlayerCoins() do aktualizacji liczby monet gracza i statystyk tablicy liderów.
    • Zastąpienie znacznika print() stwierdzenie w onCoinTouched() z wezwanie do updatePlayerCoins() .

Playtest

Nadszedł czas, aby zobaczyć, czy zbiór monet działa tak, jak zaplanowano. Gdy dotykasz i zbierasz monety w gra, powinieneś być w stanie zobaczyć ilość monet, które zebrałeś na pasku lidera. Aby przetestować swoją własną doświadczenie:

  1. W menu Kliknij przycisk Graj. Studio wchodzi w tryb testu.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Przenieś swojego postaci, aby dotknąć monety. Jeśli twoje skrypty działają poprawnie, interfejs lidera wyświetla się i zwiększa liczbę monet, jak zbierasz więcej monet.