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

Savable leaderboard won't save? Please Help

Asked by 4 years ago

I was trying to make this leaderboard savable. Player suppose to see their score even after they quit but for some reason, it won't work.

I wrote the script which is why obviously I am asking for help because its not working. So stop saying I didn't wrote the script. Yes, I used free models to base my script but that doesn't mean I didn't wrote it. Yes I was talking to you @eLunate If you can't help please let others help me instead.

Note: I noted in here where there might be a problem. I just can't figure which one.

function onXPChanged(player, XP, level)
    if XP.Value>=level.Value * 10 then
        XP.Value = 0
        level.Value = level.Value + 1 
    end
end

function onLevelUp(player, XP, level)
    local m = Instance.new("Hint")
    m.Parent = game.Workspace
    m.Text = player.Name .. " has leveled up!"
    wait(3)
    m.Parent = nil
   player.Humanoid.Health = 0
end


function onPlayerRespawned(player)
    wait(5)

    player.Character.Humanoid.Health = player.Character.Humanoid.Health + player.leaderstats.Level * 10

    player.Character.Humanoid.MaxHealth = player.Character.Humanoid.MaxHealth + player.leaderstats.Level * 10

end

local datastore = game:GetService("DataStoreService")
local ds1 = datastore:GetDataStore("KillsSaveSystem")
local ds2 = datastore:GetDataStore("CashSaveSystem")
local ds3 = datastore:GetDataStore("DeathSaveSystem")
local ds4 = datastore:GetDataStore("LevelSaveSystem")
local ds5 = datastore:GetDataStore("XPSaveSystem")

function onPlayerEntered(newPlayer)

local stats = Instance.new(newPlayer)
    stats.Name = "leaderstats"

local cash = Instance.new("IntValue",stats)
    cash.Name = "Cash"  

local kills = Instance.new("IntValue",stats)
    kills.Name = "Kills"

local deaths = Instance.new("IntValue",stats)
    deaths.Name = "Deaths"

local level = Instance.new("IntValue",stats)
   level.Name = "Level"

local xp = Instance.new("IntValue",stats)
   xp.Name = "XP"

 kills.Value = ds1:GetAsync(newPlayer.UserId) or 0
 ds1:SetAsync(newPlayer.UserId, kills.Value)

 cash.Value = ds2:GetAsync(newPlayer.UserId) or 0
 ds2:SetAsync(newPlayer.UserId, cash.Value)

deaths.Value = ds3:GetAsync(newPlayer.UserId) or 0
 ds3:SetAsync(newPlayer.UserId, deaths.Value)

level.Value = ds4:GetAsync(newPlayer.UserId) or 0
 ds4:SetAsync(newPlayer.UserId, level.Value)

xp.Value = ds5:GetAsync(newPlayer.UserId) or 0
 ds5:SetAsync(newPlayer.UserId, xp.Value)

   cash.Parent = stats
    stats.Parent = newPlayer
    kills.Parent = stats
    deaths.Parent = stats
   level.Parent = stats
   xp.Parent = stats
---updater: This area might be broken, I don't know whats wrong.
    xp.Changed:connect(function() onXPChanged(newPlayer, xp, level) end)
    level.Changed:connect(function() onLevelUp(newPlayer, xp, level) end)

        kills.Changed:connect(function()
     ds1:SetAsync(newPlayer.UserId, kills.Value)
     end)

        cash.Changed:connect(function()
     ds2:SetAsync(newPlayer.UserId, cash.Value)
     end)

        deaths.Changed:connect(function()
     ds3:SetAsync(newPlayer.UserId, deaths.Value)
     end)

        level.Changed:connect(function()
    ds4:SetAsync(newPlayer.UserId, level.Value)
    end)
        xp.Changed:connect(function()
    ds5:SetAsync(newPlayer.UserId, xp.Value)
    end)

    end
-------
    local humanoid = newPlayer.Character.Humanoid

    humanoid.Died:connect(function() onHumanoidDied(humanoid, newPlayer) end )

    newPlayer.Changed:connect(function(property) onPlayerRespawn(property, newPlayer) end )


    stats.Parent = newPlayer

end

function Send_DB_Event_Died(victim, killer)
    local killername = "unknown"
    if killer ~= nil then killername = killer.Name end
    print(victim.Name, " was killed by ", killername)

    if shared["deaths"] ~= nil then 
        shared["deaths"](victim, killer)
        print("Death event sent.")
    end
end

function Send_DB_Event_Kill(killer, victim)
    print(killer.Name, " killed ", victim.Name)
    if shared["kills"] ~= nil then 
        shared["kills"](killer, victim)
        print("Kill event sent.")
    end
end



function onHumanoidDied(humanoid, player)
    local stats = player:findFirstChild("leaderstats")
    if stats ~= nil then
        local deaths = stats:findFirstChild("Deaths")
        deaths.Value = deaths.Value + 1

        local killer = getKillerOfHumanoidIfStillInGame(humanoid)


        Send_DB_Event_Died(player, killer)
        handleKillCount(humanoid, player)
    end
end

function onPlayerRespawn(property, player)

    if property == "Character" and player.Character ~= nil then
        local humanoid = player.Character.Humanoid
            local p = player
            local h = humanoid
            humanoid.Died:connect(function() onHumanoidDied(h, p) end )
    end
end

function getKillerOfHumanoidIfStillInGame(humanoid)

    local tag = humanoid:findFirstChild("creator")

    if tag ~= nil then

        local killer = tag.Value
        if killer.Parent ~= nil then
            return killer
        end
    end

    return nil
end

function handleKillCount(humanoid, player)
    local killer = getKillerOfHumanoidIfStillInGame(humanoid)
    if killer ~= nil then
        local stats = killer:findFirstChild("leaderstats")
        if stats ~= nil then
            local kills = stats:findFirstChild("Kills")
           local cash = stats:findFirstChild("Cash")
         local xp = stats:findFirstChild("XP")
            if killer ~= player then
                kills.Value = kills.Value + 1
            cash.Value = cash.Value + 50
            xp.Value = xp.Value + 3

            else
                kills.Value = kills.Value - 0

            end
            Send_DB_Event_Kill(killer, player)
        end
    end
end

game.Players.ChildAdded:connect(onPlayerEntered)
0
I forgot that stats are suppose to be int. not named. Asher0606 36 — 4y

1 answer

Log in to vote
0
Answered by 4 years ago

Got it fixed. Thanks for the wonderful and very helpful help! :)

Ad

Answer this question