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

Can someone explain how my XP system works? It works, but i don't get why.

Asked by 5 years ago

Hello! So i made this XP system, but i don't really get it how does it work... I don't get how does it count those levels and how does it get the maxXP value so accurately. Can someone please explain what have i done here, as well as answer why sometimes the white bar goes way over and why sometimes the XP is negative value?! How could i do this more efficiently? P.s i'm still kind of new to the whole game developing...

Server script:

game.Players.PlayerAdded:Connect(function(plr)
    local leaderstats = Instance.new("Folder",plr)
    leaderstats.Name = "leaderstats"
    local XP = Instance.new("NumberValue",leaderstats)
    XP.Name = "XP"
    XP.Value = 0
    local Level = Instance.new("IntValue",leaderstats)
    Level.Name = "Level"
    Level.Value = 0
    ----
    local maxXP = 5000
    game.ReplicatedStorage.RemoteEvent1.OnServerEvent:Connect(function()
        XP.Value = XP.Value + 20000
    end)
    while wait() do
        if XP.Value == maxXP then
            maxXP = 5000 + (50*Level.Value*Level.Value)
            XP.Value = 0
            Level.Value = Level.Value + 1
        elseif XP.Value > maxXP then
            maxXP = 5000 + (50*Level.Value*Level.Value)
            XP.Value = XP.Value - maxXP
            Level.Value = Level.Value + 1
            print("lvl "..Level.Value)
            print(XP.Value)
            print("Max "..maxXP)
        end
        game.ReplicatedStorage.RemoteEvent:FireClient(plr,maxXP,Level,XP)
    end
end)

Local script:

local plr = game.Players.LocalPlayer
--local XP = plr.leaderstats.XP
game.ReplicatedStorage.RemoteEvent.OnClientEvent:Connect(function(maxXP,level,XP)
    script.Parent.Text = XP.Value.."/"..maxXP
    script.Parent.Parent.Level.Text = level.Value
    script.Parent.Parent.Bar:TweenSize(UDim2.new(0,(XP.Value / maxXP * 147),0,21),"Out","Quad",0.25)
end)

script.Parent.Parent.TextButton.MouseButton1Click:Connect(function()
    game.ReplicatedStorage.RemoteEvent1:FireServer(plr)
end)

game.ReplicatedStorage.RemoteEvent2.OnClientEvent:Connect(function(drift,currXP,count)
    if drift == true then
        script.Parent.Parent.CurrentXP.Size = UDim2.new(0.110,0,40)
        wait()
        script.Parent.Parent.CurrentXP.Text = currXP
        wait()
        script.Parent.Parent.CurrentXP.Size = UDim2.new(0.100,0,30)
    else
        if count >= 10 then
        script.Parent.Parent.CurrentXP.Size = UDim2.new(0.100,0,30)
        script.Parent.Parent.CurrentXP.Text = ""
        end
    end
end)

Video demo: https://youtu.be/ptcx-NnhQTI

0
you could just do level.Value^2 instead of level.Value * level.Value theking48989987 2147 — 5y

1 answer

Log in to vote
0
Answered by 5 years ago

Ok, i understood how it works :D But i still have no idea why the XP is negative some times...

Ad

Answer this question