Check Client-Sided part on server?

Hi,i want when i touched the part it fires remote event and a script will check if this part does it comply
with the conditions.

i wrote a basic script but it prints player name but i want it prints part name here is script:

this is a localscript inside character


wait(1)
local rs = game:GetService("ReplicatedStorage")
script.Parent.Hitbox.Touched:Connect(function(otherPart)
	rs.RemoteEvent:FireServer(otherPart)
end)


----------
This is a script inside serverscriptservice

local rs = game:GetService("ReplicatedStorage")
	local re = rs:WaitForChild("RemoteEvent")
re.OnServerEvent:Connect(function(part)
	
	if part:WaitForChild("Attachment") then
		
		print(part)
	end
	
end)
1 Like

RemoteEvents always pass in the player who fired the event as the first argument. So, on the server-sided code, you simply need to add a player argument before the “part” argument and your code should work.

-- Script in ServerScriptService

local rs = game:GetService("ReplicatedStorage")
local re = rs:WaitForChild("RemoteEvent")

re.OnServerEvent:Connect(function(player,part) -- player is always the first argument in remote events
	if part:WaitForChild("Attachment") then
		print(part)
	end
end)
1 Like

Thanks,but i had an error
"ServerScriptService.Script:5: attempt to index nil with ‘WaitForChild’

Ah, so it looks like the part you’re firing through the remote event is the wrong thing. Try firing otherPart.Parent from the client and I recommend using :FindFirstChild() instead of :WaitForChild() in this case as waiting for the child could cause an infinite yield if it does not exist.

1 Like

Still same error.If possible can you write the script please?

Its because of Filtering Enabled the server cannot find or see parts created by the client even by firing a remote event it will never be able to find the part because as far as the server is concerned it is nil.

1 Like

Thanks, but what should i do for fix it?

There is no solution to checking parts created by a client on the server the part is only visible to that client making it nil/doesn’t exists for other clients and players, if you want to print the whole parts in workspace in a server script then use for i, v in pairs() do loop so in this instance it would be:

for i, v in pairs(workspace:GetDescendants()) do
    if v:IsA("BasePart") then    
       print(v.Name)
    end
end

works in both a local script and a server script.

1 Like