Help making arm rotate correctly

Hi everyone,

I’d like to make the player’s arm rotate to face their mouse, but it seems to be rotating from the middle of the torso and not the top like I’d like.

image

I’m pretty unfamiliar with welds, so I don’t know how to offset the origin.

Here’s the LocalScript:

wait(2)

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local plr = Players.LocalPlayer
local char = plr.Character
local mouse = plr:GetMouse()

local armOffset = char.Torso.CFrame:Inverse() * char["Right Arm"].CFrame

local armWeld = Instance.new("Weld")
armWeld.Part0 = char.Torso
armWeld.Part1 = char["Right Arm"]
armWeld.Parent = char

RunService.Heartbeat:Connect(function()
	local cframe = CFrame.new(char.Torso.Position, mouse.Hit.Position) * CFrame.Angles(math.pi/2, 0, 0)
	armWeld.C0 = armOffset * char.Torso.CFrame:toObjectSpace(cframe)
end)

Also, I’d like to have player arm rotation to be visible for all players. Is there any way to do that?

Thank you!

This happens:

when I try this:

Also, the arm still appears to be rotating around its center, not the shoulder.

I don’t know Roblox, but the problem looks like a simple one.
The arm starts out rotated about its center:

But is being rotated about the joint:

To fix it, you need to rotate the arm about its center before rotating it about the joint.

The same thing happens when you rotate the right arm of your body. First you rotate it about its center, then you rotate it about the joint: