Roblox Studio:为什么我的值没有通过数据存储保存?

问题描述 投票:0回答:1

我正在尝试制作一款游戏,排行榜数据应该保存,但没有保存。这是serverscriptservice中的代码:

local DataStoreService = game:GetService("DataStoreService")
local statsDS = DataStoreService:GetDataStore("statsDS")

local SAVE_INTERVAL = 60 -- Save data every 60 seconds (1 minute)

-- Helper function to save player data
local function savePlayerData(player)
    local leaderstats = player:FindFirstChild("leaderstats")

    if leaderstats then
        local Clicks = leaderstats:FindFirstChild("Clicks")
        local Time = leaderstats:FindFirstChild("Time")

        if Clicks and Time then
            local data = {Clicks.Value, Time.Value}

            local playerUserId = "Player" .. player.UserId

            local success, errorMessage = pcall(function()
                statsDS:SetAsync(playerUserId, data)
            end)

            if success then
                print("Saved data for " .. player.Name)
            else
                warn("Error saving data for " .. player.Name .. ": " .. errorMessage)
            end
        end
    end
end

game.Players.PlayerAdded:Connect(function(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player

    local Clicks = Instance.new("IntValue")
    Clicks.Name = "Clicks"
    Clicks.Parent = leaderstats

    local Time = Instance.new("IntValue")
    Time.Name = "Time"
    Time.Parent = leaderstats

    local playerUserId = "Player" .. player.UserId

    local data = statsDS:GetAsync(playerUserId)

    if data then
        Clicks.Value = data[1]
        Time.Value = data[2]
    end

    player:WaitForChild("leaderstats")
    player:WaitForChild("leaderstats"):WaitForChild("Clicks")

    local lastSaveTime = tick()

    local saveTimer

    saveTimer = game:GetService("RunService").Heartbeat:Connect(function()
        if tick() - lastSaveTime >= SAVE_INTERVAL then
            lastSaveTime = tick()
            savePlayerData(player)
        end

        if not player:IsDescendantOf(game) then
            -- Player left the game
            saveTimer:Disconnect()
            savePlayerData(player)
        end
    end)
end)

game.Players.PlayerRemoving:Connect(function(player)
    savePlayerData(player)
end)

我原本希望在离开并重新加入时保存数据,但它被重置为 0

我尝试以各种方式修改代码,但没有任何效果,而且大多数只会让情况变得更糟。

这是一款游戏,其中有一个按钮,您单击它,它会增加点击价值,而时间仅显示您在游戏中花费的时间。下面的代码应该保存它,以便它在服务器之间工作,但它永远不会工作。总是重置。我不知道还需要添加什么来修复它。

lua save game-development roblox datastore
1个回答
0
投票

您在 Studio 中运行游戏吗?如果是这样,默认情况下,Roblox 会禁用 Studio 对数据存储的访问,仅建议在您的游戏上线时禁用此功能。如果您想禁用此功能,可以在

Game Settings
选项卡下的
Home
中执行此操作。否则,您可以从 Roblox 播放器测试游戏,所有数据存储都应按预期运行。

© www.soinside.com 2019 - 2024. All rights reserved.