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
Ok, i understood how it works :D But i still have no idea why the XP is negative some times...