Grab System (Using Weld) Has alot of bugs Any other good solutions?

I made a grab system Using weld But it just has so many issues i cant even count all of them Im looking for either a replacement for a weld grab system or ideas/info on how to Fix it

List of bugs i know about:

When Ragdolled after being grabbed the ragdoll bugs and the position of the ragdoll gets stuck

After the enemy dies and i grab him again i become the one getting “Grabbed”

enemy can be put through objects

enemy dies and gets launched away while grabbed

Code:

function module.Grab(Character,Enemy,Part0,Part1,C0,Time) 
	local Weld = Instance.new("Weld")
	Weld.Part0 = Character[Part0.Name]
	Weld.Part1 = Enemy[Part1.Name]
	Weld.Parent = Weld.Part0
	Weld.C0 = C0 
	Enemy.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, false)
	Enemy.Humanoid.Died:Connect(function()
		Weld:Destroy()
		Enemy.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, true)
	end)
	Enemy.Humanoid.AncestryChanged:Connect(function()
		Weld:Destroy()
	end)
	Character.Humanoid.Died:Connect(function()
		Weld:Destroy()
	end)
	Character.Humanoid.AncestryChanged:Connect(function()
		Weld:Destroy()
	end)
	task.delay(Time,function()
		Weld:Destroy()
	end)
end

Try creating alignposition and alignorientation, works well

create a separate collision for the raised player, so that the one holding does not touch the raised player.

Code:

											local Position = Instance.new("AlignPosition")
											Position.Parent = Humanoid
											local Orientation = Instance.new("AlignOrientation")
											Orientation.Parent = Humanoid

											local TargetAttachment = Instance.new("Attachment")
											TargetAttachment.Parent = TargetHumanoid.RootPart
											TargetAttachment.Name = "CarryAttachment"

											local PlayerAttachment = Instance.new("Attachment")
											PlayerAttachment.Parent = RightArm
											PlayerAttachment.Name = "CarryAttachment"
											PlayerAttachment.Orientation = Vector3.new(-25, -180, 155)
											PlayerAttachment.Position = Vector3.new(0, -0.5, 1)
											Position.Responsiveness = 200
											Position.MaxForce = 1e6

											Position.Attachment0 = TargetAttachment
											Position.Attachment1 = PlayerAttachment

											Orientation.Responsiveness = 200
											Orientation.MaxTorque = 1e6
											Orientation.Attachment0 = TargetAttachment
											Orientation.Attachment1 = PlayerAttachment

													TargetHumanoid.RootPart:SetNetworkOwner(Player) -- it's important

[/quote]

I might have implemented it wrong but for me it just launches the player in the air