Global Table returns nil sometimes not

I’m trying to make OOP work with global tables, it works but sometimes not as because the global table sometimes returns nil and sometimes does not.

_G.TestSubjects = {} 
Players.PlayerAdded:Connect(function(Player)
	_G.TestSubjects[Player] = Handler.New()
end)
Players.PlayerRemoving:Connect(function(Player)
	_G.TestSubjects[Player] = nil
end)
script.Parent.Touched:Connect(function(Player)
	local Class = _G.TestSubjects[Player]
	print(Class) -- this returns nil
	if not Class then return end
	Class:Get(true)
end)
script.Parent.ClickDetector.MouseClick:Connect(function(Player)
	local Class = _G.TestSubjects[Player]
	print(Class) -- does not return nil
	if not Class then return end 
	Class:Get("String") -- this works
end)

I think the culprit here is the Touched event. You’re trying to reference the player when in reality the Touched event returns the part that was hit. You’ll have to get the player by first getting the character from the hit part and then use the Players:GetPlayerFromCharacter() function!

Yeah I just realzed, I keep forgetting Touched returns basepart i’m too used on individual connections returning player.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.