I've been working on developing a script without using preset animations, but came across some trouble recently on trying to get the left arm of the player to rotate systematically (custom) while the player is walking (only when the mouse is held down). Below is my attempt to solve it, and following that is the original code I had:

wait(1)
q= 1

while q==1 do
	local Player = game.Players.LocalPlayer
	local Mouse = Player:GetMouse()
	if game.Players.LocalPlayer.Character.LeftArmClone then
		fg= game.Players.LocalPlayer.Character.LeftArmClone
		for i=1,100 do
			fg.CFrame= fg.CFrame*CFrame.Angles(0,0,0.1)*CFrame.new(0.05,0,0)
			wait(0)
		end
		wait(0.2)
	end
	wait(0)
end

Here, this script was inserted under a model in the Workspace, and its goal was to try to CFrame a rotation of the brick by steps.fg.CFrame= fg.CFrame*CFrame.Angles(0,0,0.1)*CFrame.new(0.05,0,0)represents the original position, the angle of rotation, and some translation to prevent the part from sliding off, respectively. This was influenced by a previously successful script for an NPC model I used before.

local Player = game.Players.LocalPlayer
local Mouse = Player:GetMouse()

--creates a weld to join the animated arm to the torso
local function weldBetween(a,b)
	local weld= Instance.new("ManualWeld",a)
	weld.Part0= a
	weld.Part1= b
	weld.C0= a.CFrame:inverse()*b.CFrame
	return weld
end

local vb= 0--extra variable for testing purposes
local holdVal= 0
ResetValue= function(Self)
	holdVal= 0
end

--this acts also like a hold function, the value increases as the left button is held down
Mouse.Button1Down:connect(function()
	
	local leftArmClone= game.Players.LocalPlayer.Character["Left Arm"]:Clone()
	leftArmClone.Parent= game.Players.LocalPlayer.Character
	leftArmClone.Name= "LeftArmClone"
	leftArmClone.Anchored= true
	leftArmClone.TopSurface= "Smooth"
	leftArmClone.BottomSurface= "Smooth"
	leftArmClone.FrontSurface= "Smooth"
	leftArmClone.BackSurface= "Smooth"
	leftArmClone.LeftSurface= "Smooth"
	leftArmClone.RightSurface= "Smooth"
	--game.Players.LocalPlayer.Character["Right Arm"].TopSurface= "Weld"
	weldBetween(game.Players.LocalPlayer.Character.Torso,leftArmClone)
	local kl= game.Players.LocalPlayer.Character["Left Arm"]
	leftArmClone.Position= Vector3.new(kl.Position.X,kl.Position.Y,kl.Position.Z)
	leftArmClone.Anchored= false

	--]]
	--[[
--another attempt by changing the surface to get a desired weld type, didn't work
	local leftArmClone= game.Players.LocalPlayer.Character["Left Arm"]:Clone()
	leftArmClone.Parent= game.Players.LocalPlayer.Character
	leftArmClone.Name= "LeftArmClone"
	leftArmClone.Anchored= true
	leftArmClone.TopSurface= "SmoothNoOutlines"
	leftArmClone.BottomSurface= "SmoothNoOutlines"
	leftArmClone.FrontSurface= "SmoothNoOutlines"
	leftArmClone.BackSurface= "SmoothNoOutlines"
	leftArmClone.LeftSurface= "SmoothNoOutlines"
	leftArmClone.RightSurface= "SmoothNoOutlines"
	--]]
	
--[[	
	--in-script left arm animation; haven't gotten to work; it is modeled off NPC left arm animation
	local fg= game.Players.LocalPlayer.Character.LeftArmClone
	if game.Players.LocalPlayer.Character.LeftArmClone then
		fg.CFrame= fg.CFrame*CFrame.Angles(0,0,0.1)*CFrame.new(0.05,0,0)
		wait(0)
	end
--]]

	Mouse.Button1Up:connect(function()--inside button down so holdVal can recount if pos changes
		holdSwitch= 1
		ResetValue()
		if game.Players.LocalPlayer.Character:FindFirstChild("LeftArmClone") then
			leftArmClone:Destroy()
		end
	end)
						
	holdSwitch= 0
	while holdSwitch== 0 do
		wait(0)
		holdVal= holdVal+1
		print(holdVal)
		game.Players.LocalPlayer.Character["Left Arm"].Transparency= 1	
		----------------
		
		-----------------------	
		if holdVal==1 then
			game.Players.LocalPlayer.Character["Left Arm"].Transparency= 0
		end
	end
end)

The script above is the original script I have. Basically, the left arm is cloned, beginning at local leftArmClone= game.Players.LocalPlayer.Character["Left Arm"]:Clone(). Next, the surfaces of the cloned arm is changed to smooth, a function to weld the left arm to the torso is instantiated, the left arm is shifted to prevent overlap with the torso, and finally the part becomes un-anchored as the left arm clone won't fall off. If the mouse button is released, the original arm reappears, in:

if holdVal==1 then
			game.Players.LocalPlayer.Character["Left Arm"].Transparency= 0
		end

Because, when the right mouse button is released the value of holdVal is 1, not 0.

For a supplement just to help with my question/ get an idea, this was my left arm NPC animation script that worked just because it only had to translate in a fixed single direction and velocity while rotating. What this one does is that it rocks the arm back and forth in a swinging motion, non-stop as the server is running:

while true do	
	local pos1= workspace.NPC.LeftArm.Position.Y
	--print("Pos 1: "..workspace.NPC.LeftArm.Position.Y)
	for i=1,7 do
		workspace.NPC.LeftArm.CFrame= workspace.NPC.LeftArm.CFrame*CFrame.Angles(0,0,0.1)*CFrame.new(0.05,0,0)
		wait(0)
	end
	wait(0.2)
	for i=1,7 do
		workspace.NPC.LeftArm.CFrame= workspace.NPC.LeftArm.CFrame*CFrame.Angles(0,0,-0.1)*CFrame.new(-0.05,0,0)
		wait(0)
	end
	for i=1,7 do
		workspace.NPC.LeftArm.CFrame= workspace.NPC.LeftArm.CFrame*CFrame.Angles(0,0,-0.1)*CFrame.new(-0.05,0,0)
		wait(0)
	end
	wait(0.2)
	for i=1,7 do
		workspace.NPC.LeftArm.CFrame= workspace.NPC.LeftArm.CFrame*CFrame.Angles(0,0,0.1)*CFrame.new(0.05,0,0)
		wait(0)
	end
	--workspace.NPC.LeftArm.CFrame= workspace.NPC.LeftArm.CFrame*CFrame.new(0,-0.05,0)
	local pos2= workspace.NPC.LeftArm.Position.Y
	local pos3= pos2-pos1--positive
	--print("Pos 2: "..workspace.NPC.LeftArm.Position.Y)
	workspace.NPC.LeftArm.CFrame= workspace.NPC.LeftArm.CFrame*CFrame.new(0,-pos3,0)--if too high should go down, so '-' sign
end

Referring back to the original code, when the left mouse is held down the left arm clone becomes frozen (no rotation) at the last site where the original left arm became transparent, but translates well with the player and the player's faced direction. In advance, thanks for taking a look at this; I will follow up with any inquiries.