Attempt to connect failed: Passed value is not a function

The title is my error, and this is my code:

function open(n)
	for _,v in pairs(script.Parent.bg:GetChildren()) do
		if v:IsA('GuiObject') then
			v.Visible = false
		end
	end
	
	script.Parent.bg:FindFirstChild(n).Visible = true
end

local selector = script.Parent.selector

local openChatTags = selector.chattags.select
local openCrates = selector.crates.select
local openEndcoins = selector.endcoins.select
local openGamepasses = selector.gamepasses.select
local openGhostgems = selector.ghostgems.select

openChatTags.MouseButton1Click:Connect(open("chattags"))
openCrates.MouseButton1Click:Connect(open("crates"))
openEndcoins.MouseButton1Click:Connect(open("endcoins"))
openGamepasses.MouseButton1Click:Connect(open("gamepasses"))
openGhostgems.MouseButton1Click:Connect(open("ghostgems"))

Help??

1 Like

Connect only allows you to connect a function to an event. You are attempting to call a nil value. Let me explain what is happening. You are calling Connect but on what is returned by the open function (which returns nil in this case). What you are doing is equivalent to:

local valueThatIsNil = open("gamepasses") -- This value is nil because "open" does not return anything.
object.MouseButton1Click:Connect(valueThatIsNil)

To fix this, simply create a new function and then call the open function.

openChatTags.MouseButton1Click:Connect(function()
    open("chattags")
end) -- As an example, this would work correctly.