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

Attempt to connect failed: Passed value is not a function error with GUI buttons?

i run me code, it instantly says in output: 07:51:07.514 - Attempt to connect failed: Passed value is not a function 07:51:07.515 - Stack Begin 07:51:07.515 - Script 'Players.codingMASTER398.PlayerGui.ScreenGui.Frame.Script', Line 12 07:51:07.515 - Stack End 07:51:07.516 - Attempt to connect failed: Passed value is not a function 07:51:07.516 - Stack Begin 07:51:07.517 - Script 'Players.codingMASTER398.PlayerGui.ScreenGui.Frame.Script', Line 13 07:51:07.517 - Stack End 07:51:07.520 - Attempt to connect failed: Passed value is not a function 07:51:07.521 - Stack Begin 07:51:07.521 - Script 'Players.codingMASTER398.PlayerGui.ScreenGui.Frame.Script', Line 14 07:51:07.522 - Stack End 07:51:07.522 - Attempt to connect failed: Passed value is not a function 07:51:07.522 - Stack Begin 07:51:07.523 - Script 'Players.codingMASTER398.PlayerGui.ScreenGui.Frame.Script', Line 15 07:51:07.523 - Stack End 07:51:17.754 - attempt to call a nil value (x4). how can i fix this? code:

local frame = script.Parent

frame.Parent.Enabled = true

frame.itspartytime.Text = "its party time!"

frame.whoru.Text = "first of all, who are you?"

frame.guyA.Text = "A"
frame.guyB.Text = "B"
frame.guyC.Text = "C"
frame.guyD.Text = "D"
function selectguy(person)
frame:Destroy()
end
frame.guyA.MouseButton1Down:Connect(selectguy("A"))
frame.guyB.MouseButton1Down:Connect(selectguy("B"))
frame.guyC.MouseButton1Down:Connect(selectguy("C"))
frame.guyD.MouseButton1Down:Connect(selectguy("D"))

3 answers

✓ Accepted answer

That's because you are calling the function inside the parameters of :Connect. You have to pass the name of the function.

You have two options.

Connect the events like this:

frame.guyA.MouseButton1Down:Connect(selectguy)

And check inside selectguy which button was pressed.

Or you can do this

frame.guyA.MouseButton1Down:Connect(function()
	selectguy("A")
end)
-- do this for all the buttons replacing "A".

This is the way I set up my code when it comes to GUI's.

local frame = script.Parent
frame.Parent.Enabled =true
frame.itspartytime.Text = "It's party time!"
frame.whoru.Text = "First of all, who are you?"
frame.guyA.Text = "A"
frame.guyB.Text = "B"
frame.guyC.Text = "C"
frame.guyD.Text = "D"

local function SelectGuy(Person)
	print("Selected")
	if frame then
		frame:Destroy()
	end
	return Person
end

frame.guyA.MouseButton1Click:Connect(function()
	selectGuy("A")
end)
frame.guyB.MouseButton1Click:Connect(function()
	selectGuy("B")
end)
frame.guyC.MouseButton1Click:Connect(function()
	selectGuy("C")
end)
frame.guyD.MouseButton1Click:Connect(function()
	selectGuy("D")
end)

The code you pasted never worked for me so I just did that instead...

When you use :Connect and want to put parameter you need :Connect(function()

frame.guyA.MouseButton1Down:Connect(function()
    selectguy("A")
end)
frame.guyB.MouseButton1Down:Connect(function()
    selectguy("B")
end)
frame.guyC.MouseButton1Down:Connect(function()
    selectguy("C")
end)
frame.guyD.MouseButton1Down:Connect(function()
    selectguy("D")
end)

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