As @Puzzled3d said, maybe you can add a remote event that will fire when they use the sniper scope and then in a local script when the remote fire will run change the transparency of all the body parts of the player that sent the remote event to 1
GetDescendants() instead of GetChildren() but for a more performant approach you should do the following.
local function makeInvisibleRecursive(object)
for _, instance in ipairs(object:GetChildren()) do
if instance:IsA("BasePart") then
instance.Transparency = 1
elseif instance:IsA("Accessory") then
makeInvisibleRecursive(instance)
end
end
end
and if you want to include the character’s tool too.
local function makeInvisibleRecursive(object)
for _, instance in ipairs(object:GetChildren()) do
if instance:IsA("BasePart") then
instance.Transparency = 1
elseif instance:IsA("Accessory") then
makeInvisibleRecursive(instance)
elseif instance:IsA("Tool") then
makeInvisibleRecursive(instance)
end
end
end