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.

You are watching: How to take off hats in roblox

function onTouched(hit) local d = hit.Parent:GetChildren() for i=1, #d do if (d.className == "Hat") then d:remove() end endend script.Parent.Touched:connect(onTouched)How ever the hair stays on my head and doesn`t gets removed. Any ideas please?Thank you.


4 answers


Log in to vote
2
Answered by
*
Astralyst 389
3 years ago
Edited 3 years ago

https://wiki.roblox.com/index.php?title=API:Class/Accessory

Don"t use "Hat", use "Accessory".

if (d:IsA("Accessory")) then d:Destroy()also, use :IsA instead that .className ==


0
wait, className? Astralyst 389 — 3y
1
http://wiki.roblox.com/index.php?title=API:Class_reference Adv3rtizement 101 — 3y
0
Oh thanks. Yeah I will fix it right now. I didnt know hair wasnt a "hat", I thought everything on your head is a hat. HeyItzDanniee 252 — 3y
0
Just a new comment. It worked. The morth removed my hair. Thank you astrawr. :D HeyItzDanniee 252 — 3y
View all comments (5 more)
1
Note that accessories aren"t just hats! They are wings, and all those things you can put on your player. If you want to see for yourself, just press play and look in your player model! Adv3rtizement 101 — 3y
2
You should not be using remove in your code and Hats still exist but most use Accessories. User#5423 -5 — 3y
0
You can debug that script by checking if the y value of the Accessory is more than the y value of the Character"s head. Just something to think about. DeceptiveCaster 3746 — 3y
0
Bad what if there is an accessory that is not a hat nc2r 117 — 2y
0
Bad what if there is an accessory that is not a hat nc2r 117 — 2y
*

Log in to vote
1
Answered by
*
ee0w 458
3 years ago
Edited 3 years ago

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() endendBe sure to Upvote/Accept if I helped!


0
This would remove all Accessories from the player not just hats. User#5423 -5 — 3y
Log in to vote
1
Answered by
*
User#5423 -5
3 years ago
Edited 3 years ago

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.

See more: How Many Black And Milds Equal A Cigarette S? The Smoke Is Small, But Not The Risk

-- list of attachment names to removelocal nameList = FaceCenterAttachment = true, FaceFrontAttachment = true, HairAttachment = true, HatAttachment = truescript.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 then v:Destroy() print("print removed", v) end -- legacy check some models use old hats elseif v:IsA("Hat") then v:Destroy() end endend)Hope this helps.