I have this welding script which works really great when I stand still and I'm not moving around, completely still.
But if I'm walking around while the module gets called the position of the thing I'm welding to the player's torso get all weird, the position is really random and can really vary how far away from the player it teleports or whatever it now does.
It doesn't guarantee the position I want all times, only when I'm standing still, 0 movement.
This is my module script:
function Global.WeldToCharacter(Player, Model)
for i,v in pairs(Model:GetChildren()) do
local Weld = Instance.new("Weld")
Weld.Parent = Model.PrimaryPart
Weld.C0 = Player.Character.UpperTorso.CFrame - Vector3.new(0, 5, 0) or Player.Character.Torso.CFrame
Weld.C1 = CFrame.Angles(0, math.rad(90), 0)
Weld.Part0 = Model.PrimaryPart
Weld.Part1 = Player.Character.LowerTorso or Player.Character.Torso
end
end

3 comments
For R15 characters, Lower and UpperTorso's orientations change when moving.
https://gyazo.com/d479b3b44463a2bd548294d93bc3b1f7
Look at this and you'll see what i mean, doesn't matter if r6 or r15