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

How do I update a gui when I add one to a variable in it?

score = 0
brick = game.Workspace.Part
gui = game.StarterGui.ScreenGui.TextLabel

gui.Text = "Score: " .. score

function touch(part)
	score = score + 1
	gui.Text = "Score: " .. score
	brick:Destroy()
end

brick.Touched:connect(touch)

This is my code that I tried to use to show the score on a gui. The score stays 0 when I touch the brick. When i do go to the properties of the textlabel, it says the property text has the value of "Score: 1" but it does not show up on the screen.

1 answer

✓ Accepted answer

StarterGui is a folder that stores things to be given to the player - it does not control the actual GUIs the player is seeing. You will find that respawning updates the gui, because StarterGui will by default clear the player's PlayerGui, then clone StarterGui's content into it.

As well as this, this will update the GUI for all players, something which I believe you do not want to happen from look at your code.

Here's the fixed version of the code:

local part = workspace:WaitForChild("Part") --// WaitForChild makes sure that the part is loaded before trying to index it
local playerScores = {} --// For later use, note that this style is not recommended in most cases, but will accomplish what you need

part.Touched:connect(function(hit)
	local player = game.Players:GetPlayerFromCharacter(hit.Parent)
	if player then --// If what touched the part was from a player
		local gui = player.PlayerGui:FindFirstChild("ScreenGui") --// Sees if the GUI exists before attempting to index it (will error otherwise)
		if gui then --// If the GUI does indeed exist
			local text = gui:WaitForChild("TextLabel") --// Waits for the TextLabel
			if not playerScores[player] then --// If a player does not have a set score
				playerScores[player] = 0 --// Sets the value if it does not exist
			end
			playerScores[player] = playerScores[player] + 1 --// Adds 1 to the score
			text.Text = "Score:" ..playerScores[player] --// Sets the text
		end
	end
end)

Hope I helped! If you need more help, please ask.

~TDP

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