Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I save both player data and tools?

Asked by 5 years ago

Hi,

Hope you're all having a great new year so far! I'm trying to work on a game and I have a script that saves the tools in your backpack when you leave the game, but when I try to either add code to make the game save the player's variable data (Money and Knowledge), it doesn't work and breaks the entire script. I also tried putting it in a different script but it doesn't seem to work still. Could anyone help me out with this? This is the current script that saves all the tools

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

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


    player.CharacterAdded:Connect(function(char)

        game.ReplicatedStorage.PlayerReset:FireClient(player)
        player:WaitForChild("InShop").Value = false

        char.ChildAdded:Connect(function(child)

            if child:IsA("Tool") then
                player.Equipped.Value = child.Name
            end

        end)

        -- Give the tool back
        if game.ServerStorage.Tools:FindFirstChild(player:WaitForChild("Equipped").Value) then
            local toolToEquip = game.ServerStorage.Tools[player.Equipped.Value]:Clone()
            toolToEquip.Parent = player:WaitForChild("Backpack")
        end


    end)

    local inShop = Instance.new("BoolValue")
    inShop.Name = "InShop"
    inShop.Value = false
    inShop.Parent = player

    local playerToolsFolder = Instance.new("Folder")
    playerToolsFolder.Name = player.Name
    playerToolsFolder.Parent = game.ServerStorage.PlayerTools

    local equipped = Instance.new("StringValue")
    equipped.Name = "Equipped"
    equipped.Parent = player


    local tools = "tools-"..player.UserId
    local equippedKey = "equipped-"..player.UserId

    local data = nil
    local success, errormessage = pcall(function()
        data = DataStore:GetAsync(tools)
    end)

    if success then
        print("Data for the tools was Found")
    else
        warn("Error"..errormessage)
    end

    local equippedData = nil

    local success, errormessage = pcall(function()
         equippedData = DataStore:GetAsync(equippedKey)
    end)

    if success then
        print("Data for the tools was Found")
    else
        warn("Error"..errormessage)
    end

    if equippedData ~= nil then
        equipped.Value = equippedData
    end

    if data ~= nil then

        for i, tool in pairs(data) do

            if game.ServerStorage.Tools:FindFirstChild(tool) then
                local clonedTool = game.ServerStorage.Tools:FindFirstChild(tool):Clone()
                clonedTool.Parent = game.ServerStorage.PlayerTools:FindFirstChild(player.Name)
            end

        end
    else
        print("New player")
    end

end)


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


    local tools = {}

    for i, tool in pairs(game.ServerStorage.PlayerTools[player.Name]:GetChildren()) do

        table.insert(tools,tool.Name)

    end

    local success, errormessage = pcall(function()
        DataStore:SetAsync("tools-"..player.UserId,tools)
    end)

    if success then
        print("data saved")
    else
        print("There was an error:"..errormessage)
    end

    local success, errormessage = pcall(function()
        DataStore:SetAsync("equipped-"..player.UserId,player.Equipped.Value)
    end)

    if success then
        print("data saved")
    else
        print("There was an error:"..errormessage)
    end

    print("Data successfully saved")

end)

game:BindToClose(function()

    for i, player in pairs(game.Players:GetPlayers()) do

        if player then
            player:Kick("This game is shutting down")
        end

    end

    wait(10)

end)




Thanks!

Answer this question