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

I have a datastore which count the deaths but it stopped working. Can someone help?

Asked by 3 years ago
Edited 3 years ago

So I have three different leader stats folders in the player service: one for counting a players deaths, time spent in-game and their stage in the lobby but when I run my game it says that all three leader stats folders are not a member of the player. When I look at my player service in my character while in-game, there are three leader stats folders.

Deaths script:

local plrs = game.Players
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("Deaths") -- Change this with a different name. 

print ("Deaths leaderstats working")

plrs.PlayerAdded:Connect(function(plr)

    local jats = Instance.new("Folder") 
    jats.Name = "leaderstats"
    jats.Parent = plr

    local wipeouts = Instance.new("IntValue")   
    wipeouts.Name = "Deaths"
    wipeouts.Value = 0
    wipeouts.Parent = jats
    local Data = DataStore:GetAsync(plr.UserId)
    if Data then
        wipeouts.Value = Data
    end
    game.Players.PlayerRemoving:Connect(function(Player)
    DataStore:SetAsync(Player.UserId, Player.leaderstats.Death.Value) -- Change "Money" with your currency.
end)


    plr.CharacterAdded:Connect(function(char)

        local humanoid = char:FindFirstChild("Humanoid")

        humanoid.Died:Connect(function()

            wipeouts.Value = wipeouts.Value + 1

        end)        
    end)
end)


Time spent script =

local plrs = game.Players
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("Seconds") -- Change this with a different name.    

print ("Time leaderstats working")

plrs.PlayerAdded:Connect(function(plr)

    local jats =Instance.new("Folder")  
    jats.Name = "leaderstats"
    jats.Parent = plr

    local wipeouts = Instance.new("IntValue")   
    wipeouts.Name = "Seconds"
    wipeouts.Value = 0
    wipeouts.Parent = jats
    local Data = DataStore:GetAsync(plr.UserId)
    if Data then
        wipeouts.Value = Data
    end
    game.Players.PlayerRemoving:Connect(function(Player)
    DataStore:SetAsync(Player.UserId, Player.leaderstats.Seconds.Value) -- Change "Money" with your currency.
end)


    plr.CharacterAdded:Connect(function(char)
        while true do
            wait(2)
            wipeouts.Value = wipeouts.Value + 1
        end

        end)        
    end)


Stage script:

local dss = game:GetService("DataStoreService")
local obbyDS = dss:GetDataStore("ObbyData")

local checkpoints = workspace.Checkpoints
print("Checkpoint leaderstats working")


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

    local obbyData = obbyDS:GetAsync(plr.UserId .. "-obbyStageProgress")

    local ls = Instance.new("Folder")
    ls.Name = "leaderstats"
    ls.Parent = plr

    local stage = Instance.new("StringValue")
    stage.Name = "Stage"
    stage.Value = obbyData or 1
    stage.Parent = ls

    local char = plr.Character or plr.CharacterAdded:Wait()

    char:WaitForChild("HumanoidRootPart").CFrame = checkpoints[stage.Value].CFrame

    char.Humanoid.Touched:Connect(function(touch)

        if touch.Parent == checkpoints then
            if (tonumber(touch.Name) and tonumber(touch.Name) > tonumber(stage.Value)) or touch.Name == "End" then
                stage.Value = touch.Name

                pcall(function()

                    obbyDS:SetAsync(plr.UserId .. "-obbyStageProgress", plr.leaderstats.Stage.Value)
                end)
            end
        end
    end)

    plr.CharacterAdded:Connect(function(char)

        local hrp = char:WaitForChild("HumanoidRootPart")       
        local humanoid = char:WaitForChild("Humanoid")

        hrp:GetPropertyChangedSignal("CFrame"):Wait()

        hrp.CFrame = checkpoints[stage.Value].CFrame

        humanoid.Touched:Connect(function(touch)

            if touch.Parent == checkpoints then
                if (tonumber(touch.Name) and tonumber(touch.Name) > tonumber(stage.Value)) or touch.Name == "End" then
                    stage.Value = touch.Name

                    pcall(function()

                    end)
                    game.Players.PlayerRemoving:Connect(function(player)
                                obbyDS:SetAsync(plr.UserId .. "-obbyStageProgress", plr.leaderstats.Stage.Value)

                    end)
                end
            end
        end)
    end)    
end)



This only started happening after I implemented a leaderboard for whoever has played the longest:

 local DataStoreService = game:GetService("DataStoreService")
local WinsLeaderboard = DataStoreService:GetOrderedDataStore("WinsLeaderBoard")

local function updateLeaderboard()
        local success, errorMessage = pcall (function()
                local Data =WinsLeaderboard:GetSortedAsync(false, 5)
                local WinsPage = Data:GetCurrentPage()
                for Rank, data in ipairs(WinsPage) do
                       local userName = game.Players:GetNameFromUserIdAsync(tonumber(data.key))
                       local Name = userName
                       local Seconds = data.value
                       local isOnLeaderboard = false
                       for i, v in pairs(game.Workspace.Leaderboardarea.Leaderboard.LeaderboardGUI.Holder:GetChildren()) do
                             if v.Name2.Text == Name then
                                  isOnLeaderboard = true
                                  break
                           end
                    end

                     if Seconds and isOnLeaderboard == false then
                            local newLbFrame = game.ReplicatedStorage:WaitForChild("LeaderboardFrame"):Clone()
                            newLbFrame.Name2.Text = Name
                            newLbFrame.TimeSpent.Text = Seconds
                            newLbFrame.Rank.Text = "#"..Rank
                            newLbFrame.Position = UDim2.new(0, 0, newLbFrame.Position.Y.Scale + (.08 * #game.Workspace.Leaderboardarea.Leaderboard.LeaderboardGUI.Holder:GetChildren()), 0)
                            newLbFrame.Parent = game.Workspace.Leaderboardarea.Leaderboard.LeaderboardGUI.Holder
                     end
              end
      end)

      if not success then
            print(errorMessage)
      end
end
local g =0
wait(30)
while true do

        for _, player in pairs(game.Players:GetPlayers()) do
              WinsLeaderboard:SetAsync(player.UserId, player.leaderstats.Seconds.Value)
        end

        for _, frame in pairs (game.Workspace.Leaderboardarea.Leaderboard.LeaderboardGUI.Holder:GetChildren()) do
              frame:Destroy()
            end

            updateLeaderboard()

    g = g+1
        print("Updated!",g)

        wait(60)
end

1 answer

Log in to vote
0
Answered by 3 years ago

One thing I found was that in the Deaths script, at line 22, you reference the Deaths object as Death. This might have something to do with it. Also, why do you have 3 different leader stats folders? I think that is an issue. seeing as there are three, your referencing in the Leaderboard script at Line 40 might be an issue. Try changing the three scripts so that they all use a single leader stats folder

0
thanks for the answer TheDragonSlayer5481 -11 — 3y
Ad

Answer this question