So I made this level leaderstat script for my roleplaying game that is supposed to work so that players can level up once they reach a certain value of XP. I used my gold leaderstat script and changed the names and values. The script overwrites my gold script and it doesn't work. Here are all the scripts.
Level leaderstat script:
local save = true
local datastore = game:GetService("DataStoreService"):GetDataStore("Stats")
local ver = "V0.1"
game.Players.PlayerAdded:connect(function(join)
local stats = Instance.new('IntValue')
stats.Name = "leaderstats"
stats.Parent = join
level = Instance.new('IntValue')
level.Name = "Level"
level.Parent = stats
if save == true then
level.Value = datastore:GetAsync("Level"..join.Name)
end
end)
game.Players.PlayerRemoving:connect(function(leave)
if save == true then
datastore:SetAsync("Level"..leave.Name, level.Value)
end
end)
Gold leaderstat script:
local save = true
local datastore = game:GetService("DataStoreService"):GetDataStore("Stats")
local ver = "V0.1"
game.Players.PlayerAdded:connect(function(join)
local stats = Instance.new('IntValue')
stats.Name = "leaderstats"
stats.Parent = join
cash = Instance.new('IntValue')
cash.Name = "Gold"
cash.Parent = stats
if save == true then
cash.Value = datastore:GetAsync("Gold"..join.Name)
end
end)
game.Players.PlayerRemoving:connect(function(leave)
if save == true then
datastore:SetAsync("Gold"..leave.Name, Gold.Value)
end
end)
Level up script:
local level = Instance.new("IntValue")
level.Name = "Level"
level.Value = 1
function onxpChanged(player, XP, level)
if XP.Value>=level.Value * 50 then
XP.Value = XP.Value - level.Value * 50
level.Value = level.Value + 1
local healthincrease = 50
end
end
function onLevelUp(player, XP, level)
if player.Character~=nil then
for i = 1,5 do
local fireworks = Instance.new("Part")
fireworks.Shape = 0
fireworks.formFactor = "Symmetric"
fireworks.Size = Vector3.new(1,1,1)
fireworks.BrickColor = BrickColor.Random()
fireworks.CFrame = player.Character.Head.CFrame + Vector3.new(0,2,0)
fireworks.Parent = game.Workspace
game:GetService("Debris"):AddItem(fireworks, 2)
fireworks.Velocity = Vector3.new(math.random(-30,30),math.random(-30,30),math.random(-30,30))
end
end
local m = Instance.new("Hint")
m.Parent = game.Workspace
m.Text = player.Name .. "Leveled up"
wait(3)
m.Parent = nil
end
function onPlayerRespawned(player)
wait(5)
player.Character.Humanoid.Health = player.leaderstats.Level * 100
player.Character.Humanoid.MaxHealth = player.leaderstats.Level * 100
end
function onPlayerEntered(newPlayer)
local stats = Instance.new("IntValue")
stats.Name = "leaderstats"
local xp = Instance.new("IntValue")
xp.Name = "XP"
xp.Value = 0
local level = Instance.new("IntValue")
level.Name = "Lvl"
level.Value = 1
local c = Instance.new("IntValue")
c.Name = "Gold"
c.Value = 0
xp.Parent = stats
level.Parent = stats
c.Parent = stats
stats.Parent = newPlayer
xp.Changed:connect(function() onXPChanged(newPlayer, xp, level) end)
level.Changed:connect(function() onLevelUp(newPlayer, xp, level) end)
newPlayer.Changed:connect(function (property)
if (property == "Character") then
onPlayerRespawned(newPlayer)
end
end)
end
game.Players.ChildAdded:connect(onPlayerEntered)
XP script:
XP = script.Parent.Parent.Parent.Parent.Parent.leaderstats.XP
level = script.Parent.Parent.Parent.Parent.Parent.leaderstats.Lvl
while true do
script.Parent.Text = "XP: " .. XP.Value .. " / " .. level.Value * 50
wait(0.1)
end
XP fill bar script:
XP = script.Parent.Parent.Parent.Parent.Parent.leaderstats.XP
level = script.Parent.Parent.Parent.Parent.Parent.leaderstats.lvl
while true do
wait()
local pie = ( XP.Value / (level.Value * 50))
script.Parent.Size = UDim2.new( pie , 0 , 0, 20)
end
Enemy Gold and XP on death script:
local Humanoid = script.Parent.Humanoid
function PwntX_X()
local tag = Humanoid:findFirstChild("creator")
if tag ~= nil then
if tag.Value ~= nil then
local Leaderstats = tag.Value:findFirstChild("leaderstats")
if Leaderstats ~= nil then
Leaderstats.Gold.Value = Leaderstats.Gold.Value + 1
wait(0.1)
script:remove()
end
end
end
end
Humanoid.Died:connect(PwntX_X)
local Humanoid = script.Parent.Humanoid
function PwntX_X()
local tag = Humanoid:findFirstChild("creator")
if tag ~= nil then
if tag.Value ~= nil then
local Leaderstats = tag.Value:findFirstChild("leaderstats")
if Leaderstats ~= nil then
Leaderstats.XP.Value = Leaderstats.XP.Value + 2
wait(0.1)
script:remove()
end
end
end
end
Humanoid.Died:connect(PwntX_X)
Current Gold GUI script
while true do
script.Parent.Text = "Gold: " .. math.floor(script.Parent.Parent.Parent.Parent.Parent.leaderstats.Gold.Value)
wait(0)
end
Current Level GUI script:
while true do
script.Parent.Text = "Level: " .. math.floor(script.Parent.Parent.Parent.Parent.Parent.leaderstats.Lvl.Value)
wait(0)
end
These are all the related scripts, please tell me my fault. Thanks for reading.

2 comments
You may need to try to put everything in one script.
Why don't you cut out some of the scripts and organize everything a lot better.