My weld script is supposed to weld the gasmask to the player positioning it over the player. It's supposed to be just like a hat. Instead it decides that it's okay to position itself behind/in front of my player when I need it to be in the exact location of the players head position. What is going on, and how can I fix this?
local hat= script.GasMask local weld
function weld(h,c) local hat2= h:clone() hat2.Parent= c local head = c:FindFirstChild("Head") if head ~= nil then local p for _,v in pairs(hat2:GetChildren()) do if v:IsA("Part") or v:IsA("UnionOperation") or v:IsA("MeshPart") then local weld= Instance.new("Weld") weld.Parent= head local core= v.Parent:FindFirstChild("Core") if core ~= nil then weld.Part0 = head weld.Part1 = v local lol = CFrame.new(head.Position.X,head.Position.Y,head.Position.Z) weld.C1 = v.CFrame:inverse()*lol p=v end v.Anchored= false end end if p ~= nil then local gM = p.Parent if gM:IsA("Model") then gM:SetPrimaryPartCFrame(CFrame.new(head.Position.X,head.Position.Y,head.Position.Z)) end end end end function clean(c) for _,v in pairs(c:GetChildren()) do if v:IsA("Hat") or v:IsA("Accessory") then v:Destroy() end end end game.Players.PlayerAdded:Connect(function(plr) repeat wait() until plr.Character wait(3) clean(plr.Character) weld(hat,plr.Character) plr.CharacterAdded:Connect(function(char) clean(char) weld(hat,char) end) end)