game.Players.PlayerAdded:connect(function(player) local stats = Instance.new("IntValue", player) stats.Name = "leaderstats" local level = Instance.new("IntValue", stats) level.Name = "Level" local exp = Instance.new("IntValue", stats) exp.Name = "Exp" local cash = Instance.new("IntValue", player) cash.Name = "Cash" local class = Instance.new("StringValue", player) class.Name = "Class" class.Value = "Laser" local team = Instance.new("StringValue", player) team.Name = "Team" team.Value = "White" player:WaitForDataReady() player.leaderstats.Level.Value = player:LoadNumber("Level") player.leaderstats.Exp.Value = player:LoadNumber("Exp") player.Cash.Value = player:LoadNumber("Cash") level.Changed:connect(function(level) print("Levelup") levelupframe:TweenPosition(UDim2.new(0.5, -150, 0.5, -50), "Out", "Quad", 1, false) leveluptext.Text = "You have leveled up to Level: " .. level levelupframe.CashText.Text = "Cash + 50" wait("3") levelupframe:TweenPosition(UDim2.new(0, -300, 0.5, -50), "Out", "Quad", 1, false) end) end)
There is nothing printing in the output
I'm not sure where the first code block fits in, and the two functions in the second code block are better written as a single function.
The problem, as I think it is, is that the leaderstats get created, and then you Change them to load the Player's level, causing the leveled up message to appear. To get around that, you have to connect the Changed
event after you load the player's data:
game.Players.PlayerAdded:connect(function(player) local stats = Instance.new("IntValue", player) stats.Name = "leaderstats" local level = Instance.new("IntValue", stats) level.Name = "Level" player:WaitForDataReady() player.leaderstats.Level.Value = newPlayer:LoadNumber("Level") level.Changed:connect(function(level) levelupframe:TweenPosition(UDim2.new(0.5, -150, 0.5, -50), "Out", "Quad", 1, false) leveluptext.Text = "You have leveled up to Level: " .. level levelupframe.CashText.Text = "Cash + 50" wait("3") levelupframe:TweenPosition(UDim2.new(0, -300, 0.5, -50), "Out", "Quad", 1, false) end) end)
If you have those two lines in separate scripts, use a BoolValue to tell the client when to connect the event:
game.Players.PlayerAdded:connect(function(player) local stats = Instance.new("IntValue", player) stats.Name = "leaderstats" local level = Instance.new("IntValue", stats) level.Name = "Level" local bool = Instance.new("BoolValue", player) bool.Name = "Bool" player:WaitForDataReady() player.leaderstats.Level.Value = newPlayer:LoadNumber("Level") bool.Value = true end)
local bool = player:WaitForChild("Bool") while bool.Value ~= true do bool.Changed:wait() end player.leaderstats.Level.Changed:connect(function(level) levelupframe:TweenPosition(UDim2.new(0.5, -150, 0.5, -50), "Out", "Quad", 1, false) leveluptext.Text = "You have leveled up to Level: " .. level levelupframe.CashText.Text = "Cash + 50" wait("3") levelupframe:TweenPosition(UDim2.new(0, -300, 0.5, -50), "Out", "Quad", 1, false) end)