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

Strange leaderboard glitch. Is this for anyone else?

Asked by 4 years ago

Recently many players of my game have reported that sometimes when they join they're stage is set at '1' despite them being further in the game.

On other people's screens it normal (the actual stage the person is on.)

I have really no idea how to fix this glitch and so many people ask me about it that it hurts my soul, please help.

local datastore = game:GetService("DataStoreService"):GetDataStore("GameStore")

game.Players.PlayerAdded:connect(function(player)
    local leaderstats = Instance.new("IntValue")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player

    local level = Instance.new("IntValue")
    level.Name = "Stage"
    level.Parent = leaderstats
    level.Value = 1

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

    local storeditems = datastore:GetAsync(key)
    if storeditems then
        level.Value = storeditems[1]
    else
        local items = {level.Value}
        datastore:SetAsync(key, items)
    end
    local spawn = game.Workspace:WaitForChild(player.leaderstats.Stage.Value)
    if player and spawn then
        player.Character:MoveTo(spawn.Position + Vector3.new(0, 3, 0))
    end
end)

game.Players.PlayerRemoving:connect(function(player)
    local items = {player.leaderstats.Stage.Value}
    local key = "user-" .. player.userId
    datastore:SetAsync(key, items)
end)

game.Workspace.ChildAdded:connect(function(obj)
    local player = game.Players:GetPlayerFromCharacter(obj)
    if player then
        local leaderstats = player:FindFirstChild("leaderstats")
        local stage = leaderstats:FindFirstChild("Stage")
        local respawn = game.Workspace:WaitForChild(stage.Value)
        obj.Torso.CFrame = obj.Torso.CFrame + Vector3.new(0,3,0)
        wait(0.1)
        obj.Torso.CFrame = respawn.CFrame + Vector3.new(0,3,0)
    end
end)

Answer this question