Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

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

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

1 comment

0

you could just do level.Value^2 instead of level.Value * level.Value

1 answer

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

This discussion is preserved as it was. New answers, comments, and votes are closed.