在RLua中保存玩家数据

这些为什么不起作用呢?

玩家加入脚本:

local DataStore = game:GetService("DataStoreService"):GetDataStore("GeneralStats")

game.Players.PlayerAdded:connect(function(player)

    local stats = Instance.new("IntValue", player)
    stats.Name = "leaderstats"

    local points = Instance.new("IntValue", stats)
    points.Name = "Points"

    local credits = Instance.new("IntValue", stats)
    credits.Name = "Credits"

    local key = "player-"..player.userId

    local savedValues = DataStore:GetAsync(key)

    if savedValues then
        --保存格式: (points, credits)
        points.Value = savedValues[1]
        credits.Value = savedValues[2]
    else
        local ValuesToSave = {points.Value, credits.Value}
        DataStore:SetAsync(key, ValuesToSave)
    end

end)

还有这个脚本,用于玩家离开时。

local DataStore = game:GetService("DataStoreService"):GetDataStore("GeneralStats")

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

    local key = "player-"..player.userId

    --保存键: {points, credits}
    local valuesToSave = {player.leaderstats.Points.Values, player.leaderstats.Credits.Values}
    DataStore:SetAsync(key, valuesToSave)

end)

这是我在制作的一个游戏,RLua即为Roblox Lua,如果你不知道的话。

点赞
用户7228869
用户7228869

是的,很可能在你提取数据之前就已经将 Leaderstat 删除了。

我建议不要使用 Leaderstat 作为数据参考。最好将数据直接存储在脚本中。

但是,如果你确实必须使用 Leaderstat,请将其父级设置为其他位置,提取数据,然后将其删除。

local lead = player.leaderstats
lead.Parent = game
-- 提取数据
lead:Destroy()

或者,在它们被重新父化之前,在一个变量中定义所有这些对象。

但是,再次强烈建议不要使用 Leaderstat 进行数据保存。利用者可以轻松更改该数据并将值更改为高数值。

2016-12-22 18:29:16