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

Datastore won't save part of what needs to be saved and I don't know why?

Asked by 5 years ago
Edited 5 years ago
local function Save(p)
    --Save Data--
        local DataStore = game:GetService("DataStoreService"):GetDataStore(p.userId.."MHDRP_V0.0.1")
        local Stats1 = p.PlayerData:GetChildren()
        local s1 = {}
        for i=1,#Stats1 do
            local n = Stats1[i].Name
            s1[n] = Stats1[i].Value
        end
        DataStore:SetAsync("Stats1",s1)
    --
        local Stats2 = p.PlayerInventory:GetChildren()
        local s2 = {}
        for iii=1,#Stats2 do
            local n2 = Stats2[iii].Name
            s2[n2] = Stats2[iii].Value
        end
        DataStore:SetAsync("Stats2",s2)
    --
        local Stats3 = p.PlayerInventoryPerm:GetChildren()
        local s3 = {}
        for i=1,#Stats3 do
            local n3 = Stats3[i].Name
            s3[n3] = Stats3[i].Value
        end
        DataStore:SetAsync("Stats3",s3)
    -- End Here --
end

function onPlayerEntered(newPlayer)
    --Clone Data--
        local vs = script:WaitForChild("PlayerData"):Clone()
        vs.Parent = newPlayer

        local vs2 = script:WaitForChild("PlayerInventory"):Clone()
        vs2.Parent = newPlayer

        local vs3 = script:WaitForChild("PlayerInventoryPerm"):Clone()
        vs3.Parent = newPlayer

    --Setup Intial Data--
        local Stats1 = vs:GetChildren()
        local S1 = {}
        for i=1,#Stats1 do
            local n = Stats1[i].Name
            S1[n] = Stats1[i].Value
        end
    --
        local Stats2 = vs2:GetChildren()
        local S2 = {}
        for ii=1,#Stats2 do
            local n2 = Stats2[ii].Name
            S2[n2] = Stats2[ii].Value
        end
    --
        local Stats3 = vs3:GetChildren()
        local S3 = {}
        for iii=1,#Stats3 do
            local n3 = Stats3[iii].Name
            S3[n3] = Stats3[iii].Value
        end

    --Get Data--
    if newPlayer.Name ~= "Player" then
        local DataStore = game:GetService("DataStoreService"):GetDataStore(newPlayer.userId.."MHDRP_V0.0.1")-- Custom data

        if DataStore:GetAsync("Stats1") == nil then
            DataStore:SetAsync("Stats1", S1)
        end
        S1 = DataStore:GetAsync("Stats1")
    ----------------------------------------------------
        if DataStore:GetAsync("Stats2") == nil then
            DataStore:SetAsync("Stats2", S2)
        end
        S2 = DataStore:GetAsync("Stats2")
    ----------------------------------------------------
        if DataStore:GetAsync("Stats3") == nil then
            DataStore:SetAsync("Stats3", S3)
        end
        S3 = DataStore:GetAsync("Stats3")

    end
    --Safely Load Data--
        local vv = vs:GetChildren()
        for i=1,#vv do
            local n = vv[i].Name
            if S1[n] ~= nil then
                vv[i].Value = S1[n]
            end
        end
    --
        local vv2 = vs2:GetChildren()
        for i=1,#vv2 do
            local n2 = vv2[i].Name
            if S2[n2] ~= nil then
                vv2[i].Value = S2[n2]
            end
        end
    --
        local vv3 = vs3:GetChildren()
        for i=1,#vv3 do
            local n3 = vv3[i].Name
            if S3[n3] ~= nil then
                vv3[i].Value = S3[n3]
            end
        end
end

game.Players.PlayerAdded:connect(onPlayerEntered)

for _,player in pairs(game.Players:GetChildren()) do
    onPlayerEntered(player)
end

game.Players.PlayerRemoving:connect(function(p)
    Save(p)
end)

https://gyazo.com/7d78d59c02a5770063dbbd08cbd1a711.png

Help! My datastore would save PlayerData but won't save PlayerInventory! No errors are shown, every thing is in place! No idea what's happening.

"Stat2" is what's weird, everything is cloned into the game. PlayerData and PlayerInventory are cloned into the player when they joined, and an intValue is cloned into PlayerInventory when they interact with objects.

Answer this question