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

I have a Leveling System, but I can't skip over levels. How do I change it so I can do that?

Asked by 5 years ago

Currently, the leveling system that I have works. Although I'm not entirely for sure how I would change it to make it a little bit more random instead of leveling up every 700 xp (which is also a problem I need solved, if possible.), I would like to know what I should add so then I can skip levels.

For example, if I put into my values 1400 and my current XP is 0, it tells me that my level is 2, but instead it should be 3. Here is the code:

local level = game:GetService("DataStoreService"):GetDataStore("DiscWarsLevels")
local xp = game:GetService("DataStoreService"):GetDataStore("DiscWarsXP")
local axp = game:GetService("DataStoreService"):GetDataStore("DiscWarsAmountXP")

function savedata(dataname, playerid, value)
    game:GetService("DataStoreService"):GetDataStore(dataname):SetAsync(playerid, value)
end

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

    local leader = Instance.new("Folder")
    leader.Name = "leaderstats"
    leader.Parent = player

    local levels = Instance.new("IntValue")
    levels.Value = level:GetAsync(tostring(player.userId)) or 1
    levels.Name = "Level"
    levels.Parent = player:WaitForChild("leaderstats")

    local xps = Instance.new("NumberValue")
    xps.Value = xp:GetAsync(tostring(player.userId))
    xps.Name = "XP"
    xps.Parent = player

    local xpn = Instance.new("IntValue")
    xpn.Value = axp:GetAsync(tostring(player.userId)) or 700
    xpn.Name = "XPNeeded"
    xpn.Parent = player

    xps.Changed:connect(function()
        if player:WaitForChild("XP").Value >= player:WaitForChild("XPNeeded").Value then
            levels.Value = levels.Value + 1
            xpn.Value = xpn.Value + 700
            savedata("DiscWarsLevels", player.userId, levels.Value)
            savedata("DiscWarsXP", player.userId, xps.Value)
            savedata("DiscWarsAmountXP", player.userId, xpn.Value)
        else
            savedata("DiscWarsLevels", player.userId, levels.Value)
            savedata("DiscWarsXP", player.userId, xps.Value)
            savedata("DiscWarsAmountXP", player.userId, xpn.Value)          
        end
        savedata("DiscWarsLevels", player.userId, levels.Value)
        savedata("DiscWarsXP", player.userId, xps.Value)
        savedata("DiscWarsAmountXP", player.userId, xpn.Value)      
    end)
end)

game.Players.PlayerRemoving:connect(function(player)
        savedata("DiscWarsLevels", player.userId, player.leaderstats.Value)
        savedata("DiscWarsXP", player.userId, player.XP.Value)
        savedata("DiscWarsAmountXP", player.userId, player.XPNeeded.Value)
end)
0
Rather than having separate "XP" and "XP needed" counters, just have one. Work out what their level is from their current XP amount. E.g., in this case, just make it so their level is `1 + xp / 700`. fredfishy 833 — 5y

Answer this question