repeat wait() until game.Players.LocalPlayer local user = game.Players.LocalPlayer local cash = user:FindFirstChild("Currency") local gui = script.Parent print("Points has started!") game.Players.PlayerAdded:connect(function(iffy) gui.Text = "Points:"..cash.Value print("Joined and updated points") cash.Changed:connect(function(cotton) gui.Text = "Points:"..cash.Value print("updated") end) end)
It will only do the first print 'Points has started!' and that's it. It doesn't change the Text at all or even give me an error.
This is a problem many people seem to have, so no worries.
What's happening is ( presuming this script is a local script located in StarterGui ) that objects are copied from the StarterGui when the player spawns, which is after they join.
Your script would run the function in the PlayerAdded connection line if PlayerAdded fired on the client (it doesn't). That's not what you want! What you want is to run the code when the local player is present.
The best way to fix this would be to remove the 7th and 14th (in this case) lines. This will let the code inside of that event run as the script runs, and you'd be fine as the player already exists. Mentioning that, you could also lose the first line (again, in this case) because the player is already present when this runs.