Roblox DataStore无法保存或记住我的UserId

所以我一直在制作一个Roblox演化模拟器游戏,我正在尝试制作一个级别系统。我需要让每个级别的基础最大经验值为1000。如果所有基础都为0,我可以编写一个简单的脚本,但如果有一个数字大于0,它就不起作用!我已经在Studio和游戏中尝试过了。此外,我不使用leaderstat,因为我有一个经验条。 无法保存,我已经查看了每个可能的论坛页面,它就是不起作用! 这是我的代码:

local playerData = DataStoreService:GetDataStore("PlayerData")

local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name='lead'
    leaderstats.Parent=player

    local xp = Instance.new("IntValue", leaderstats)
    xp.Name='Exp'

    local level = Instance.new("IntValue", leaderstats)
    level.Name='Level'

    local maxExp = Instance.new("IntValue", leaderstats)
    maxExp.Name='Max'


    local playerUserId = 'Player....'..player.UserId
    local data = playerData:GetAsync(tostring(playerUserId))
    if data  then
        xp.Value = data['Exp']
        print(data["Exp"])
        game.StarterGui.ScreenGui.One.Text=data["Exp"]
        level.Value = data['Level']
        game.StarterGui.ScreenGui.Two.Text=data["Level"]
        print(data["Level"])
        maxExp.Value = data['Max']
        game.StarterGui.ScreenGui.Three.Text=data["Max"]
        print(data['Max'])
    else
        xp.Value=0
        level.Value=0
        maxExp.Value=1000
        game.StarterGui.ScreenGui.Three.Text='Hi'
        print("first time")
    end

end

local function create_table(player)
    local player_stats = {}
    for _, stat in pairs(player.lead:GetChildren()) do
        player_stats[stat.name] = stat.value
    end
        return player_stats
end

local function onPlayerExit(player)
    local player_stats = create_table(player)
    local success, err = pcall(function()
        local playerUserId = 'Player....'..player.UserId
        playerData:SetAsync(tostring(playerUserId), player_stats)
    end)

    if not success then
        warn('Could not save data')
    end
end

game.Players.PlayerAdded:Connect(onPlayerJoin)
game.Players.PlayerRemoving:Connect(onPlayerExit)

原文链接 https://stackoverflow.com/questions/69081750

点赞
stackoverflow用户16665626
stackoverflow用户16665626

有时候当最后一个玩家离开服务器时,服务器会关闭,因此数据没有保存。为了解决这个问题,有一个名为 game:BindToClose() 的事件。它会在服务器即将关闭时触发,从这里你可以连接一个函数,将所有玩家踢出游戏。因此你需要将以下代码添加到你的代码中:

game:BindToClose(function()
    for i,v in pairs(game.Players:GetPlayers()) do
        v:Kick("Server Shutdown")
    end
end)

这将确保在服务器关闭之前保存数据。

2021-09-07 06:31:42
stackoverflow用户16014788
stackoverflow用户16014788

如果你在Roblox Studio上并且离开,那么你基本上就是关闭了服务器。有一个叫做BindToClose的函数可以在关闭时绑定函数。

game:BindToClose(function()
wait(3) --等待玩家离开事件触发
end)
2021-09-16 05:33:26