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

How to detect if player touched a part?

I have this script for a loot crate that will give a random weapon if touched.

math.randomseed(tick())

script.Parent.Touched:Connect(function(hit)
	script.Disabled = true
	
	local player = hit.Parent.Name
	local random = math.random(1,100)
	
	if random > 0 and random < 50 then
		local ar = game.ServerStorage.AR:Clone()
		ar.Parent = game.Players[player].Backpack
	
	elseif random > 50 and random < 100 then
		local crossbow = game.ServerStorage.Crossbow:Clone()
		crossbow.Parent = game.Players[player].Backpack
	end
	
	script.Parent:Destroy()
end)

The problem is, it didn't work. It says: "Touched is not a valid member of Part"

Please help, thank you! <3

3 comments

0

You've forgot a end after line 11.

0

He was using elseif though

0

Make sure script.Parent is a part

1 answer

✓ Accepted answer

Hello. You'd need an if statement checking if the player isn't nil from the :GetPlayerFromCharacter() function. It gets that player from its character, hi.Parent. Try this:

math.randomseed(tick())

script.Parent.Touched:Connect(function(hit)
	local player = game.Players:GetPlayerFromCharacter(hit.Parent)

	if player then
	    script.Disabled = true

	    local random = math.random(1,100)
	
	    if random > 0 and random < 50 then
	        local ar = game.ServerStorage.AR:Clone()
	        ar.Parent = player.Backpack
	
	    elseif random > 50 and random < 100 then
	        local crossbow = game.ServerStorage.Crossbow:Clone()
	        crossbow.Parent = player.Backpack
	    end
	
	    script.Parent:Destroy()
	end
end)

Please accept and upvote this answer if it helped.

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