I am trying to remove players hat, or in my case, hair. But it doesnt seems to work. I have a morth type of thing that when you touch a brick (button) it makes my body invisible and sticks random bricks on the body to make an armor or something.
function onTouched(hit) local d = hit.Parent:GetChildren() for i=1, #d do if (d[i].className == "Hat") then d[i]:remove() end end end script.Parent.Touched:connect(onTouched)
How ever the hair stays on my head and doesn`t gets removed. Any ideas please? Thank you.
https://wiki.roblox.com/index.php?title=API:Class/Accessory
Don't use "Hat", use "Accessory".
if (d[i]:IsA("Accessory")) then d[i]:Destroy()
also, use :IsA instead of .className ==
You could iterate through the character and destroy every Accessory instance.
for i, v in pairs(character:GetChildren()) do if v:IsA("Accessory") then v:Destroy() end end
Be sure to Upvote/Accept if I helped!
Roblox converted hats to accessories so you should be using the new attachement system.
The new system works by attaching the same name attachment with the one in the players character so you cannot easily define what is a hat.
The best way would be to simple check which accessories use the attachments in the players head by checking the name.
Lastly do not use remove()
as it is deprecated use Destroy()
Example only removing hats and accessories which use the players head attachments.
-- list of attachment names to remove local nameList = { FaceCenterAttachment = true, FaceFrontAttachment = true, HairAttachment = true, HatAttachment = true } script.Parent.Touched:Connect(function(hit) for i, v in pairs(hit.Parent:GetDescendants()) do if v:IsA('Accessory') then -- recursivly look for a child which is a Attachment local attach = v:FindFirstChildWhichIsA('Attachment', true) -- check that the name is in the list ie only destroy hats if attach and nameList[attach.Name] then v:Destroy() print('print removed', v) end -- legacy check some models use old hats elseif v:IsA('Hat') then v:Destroy() end end end)
Hope this helps.
The humanoid has a method for this. It's Humanoid:ClearAllAccessories()
. Use this instead of looping or anything else to keep your code nice and clean.