I'm trying to make it so when you click on a GUI thing a hat comes on. When I do this the pin badge on the hat goes miles away from the head where the main hat is. I will show you my script and an image to help you picture this.
game.ReplicatedStorage.hat.OnServerEvent:Connect(function(player,name)
local d = game.Workspace[player.Name]:GetChildren() -- start of hat remover
for i=1, #d do
if (d[i].className == "Accessory") then
d[i]:remove()
end
end
local g = game.ServerStorage.Hats[name].Face:Clone()
g.Parent = game.Workspace[player.Name].Head
local C = g:GetChildren()
for i=1, #C do
if C[i].className == "Part" or C[i].className == "UnionOperation" or C[i].className == "MeshPart" then
local W = Instance.new("Weld")
W.Part0 = g.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g.Middle.Position)
local C0 = g.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g.Middle
g.Middle.Transparency = 1
C[i].Parent = g
end
local Y = Instance.new("Weld")
Y.Part0 = game.Workspace[player.Name].Head
Y.Part1 = g.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
local h = g:GetChildren()
for i = 1, # h do
h[i].Anchored = false
h[i].CanCollide = false
end
end
end)

11 comments
any errors in output?
No
Is it just one part with a mesh or is it multiple parts as a model?
Multiple parts as a model
I think I have a solution. I'll write it as an answer, you test it, tell me if it works.
Ok
Can't you use Humanoid:AddAccessory to add the hat? I can't tell what you're trying to achieve.
Im trying to put the hat on like it is on the workspace
Instead of using welds, have you considered using WeldConstraints? Those are much cleaner and easier to work with. Just set the hat's CFrame to the head's CFrame, and then create a WeldConstraint connecting the two parts together.
the problem is the bit that comes off has more than 1 part
The script that I made a while back was outdated.