ROBLOX SetAsync 无法保存数据,返回 nil?

我在 roblox 上学习数据存储,从教程中获取了以下代码,并使用打印找出问题所在,但是在玩家删除函数应该保存数据时,它总是返回 nil,无法保存。我已经尝试了很多不同的方法,已经两天了,我只想找出问题所在。

游戏代码如下:

game.Players.PlayerRemoving:connect(function(plyr)

 succsess, err = pcall(function()
    if succsess then
    local ttt = plyr.PlayerGui:findFirstChild("SavedSpot")
        savespot:SetAsync(plyr.UserId.."-SaveNumber",ttt.Value)
        print("Saved")
    else
      warn(err)
        print("No Save")
    end
    playersleft = playersleft - 1
    be:Fire()
end)

end)

当玩家进入游戏时,会尝试从服务器获取数据,如果玩家之前没有玩过游戏,则返回 nil,并将值设置为 1。当人离开时,我使用另一段代码将其设置为 2。在玩家再次进入游戏时,我希望将其保存并加载。但是我收到的唯一错误消息是 nil。

点赞
用户10298464
用户10298464

这是完整的代码,以防你需要它。

local ds = game:GetService("DataStoreService")
local savespot = ds:GetDataStore("Spot")
local timesplyd = ds:GetDataStore("TimesPlayed")
local playersleft = 0
print("starting")

game.Players.PlayerAdded:connect(function(plyr)
    playersleft = playersleft + 1
    print("Loading")
    plyr.CharacterAdded:connect(function(char)
        repeat wait() until plyr.PlayerGui:findFirstChild("SavedSpot")
        repeat wait() until char:findFirstChild("Humanoid")
        local sss = plyr.PlayerGui:findFirstChild("SavedSpot")
        local ss
        print("Loaded")
        local tp
        su,er = pcall(function()
            ss = savespot:GetAsync(plyr.UserId.."-SaveNumber")
            if su then
                print("Loaded")
            elseif er then
                print(er)
            end
        end)
        if ss ~= nil then
            sss.Value = ss
            print(ss)
        else
            sss.Value = 1
            print("1111111111111111111")
        end
    end)
end)

local be = Instance.new("BindableEvent")

game.Players.PlayerRemoving:connect(function(plyr)
    succsess, err = pcall(function()
        if succsess then
            local ttt = plyr.PlayerGui:findFirstChild("SavedSpot")
            savespot:SetAsync(plyr.UserId.."-SaveNumber",ttt.Value)
            print("Saved")
        else
            warn(err)
            print("No Save")
        end
        playersleft = playersleft - 1
        be:Fire()
    end)
end)

game:BindToClose(function()
    be.Event:Wait()
end)
2019-09-18 11:24:53
用户11815974
用户11815974

请确保你在 Script 中运行代码,而不是 LocalScript。 此外,你可能不应该尝试在 pcall 语句内部检查是否没有错误。另外,SetAsync 应该返回 nil

success, err = pcall(function()
    local ttt = plyr.PlayerGui:findFirstChild("SavedSpot")
    savespot:SetAsync(plyr.UserId .. "-SaveNumber", ttt.Value)
end)

if(success) then
    print("保存成功!")
else
    print("保存出错!")
    warn(err)
end
2019-10-04 04:58:00