Make changes on the player's character's waist C0 affect the server

I’ve been trying to make a code so the player’s upper torso moves with the camera when they look up or down. the code has worked so far, but the problem is i can’t find a way to do this on a server script (i’m trying to do it on a server script because if i don’t, the player’s torso will not move to other players) because i cant access the current camera through a server script. also using a remote event makes the movement very choppy and laggy, which isn’t ideal in a 3rd person shooter
here is my code (in a local script):

local cam = workspace.CurrentCamera

local plr = game.Players.LocalPlayer
local char = plr.Character or plr.CharacterAdded:Wait()
local hrp = char:WaitForChild("HumanoidRootPart")
local upperTorso = char:WaitForChild("UpperTorso")

local waist = upperTorso:FindFirstChild("Waist", true)
local z = waist.C0.Z
local waistC0 = waist.C0

local remoteEvent = game:GetService("ReplicatedStorage"):FindFirstChild("TorsoToCamera")


game:GetService("RunService").RenderStepped:Connect(function()
	if _G.modeSwitchAnim == false  and _G.laserActive == true then
		if waist then
			local camDirection = hrp.CFrame:ToObjectSpace(cam.CFrame).LookVector

			waist.C0 = waist.C0:Lerp((CFrame.new(0,0,waist.C0.Z) * CFrame.Angles(0,0,(camDirection.Y*-1))),0.25)

		end
	end
end)

thanks in advance =D

Pretty sure you need to use RunService.PreAnimation instead of RunService.RenderStepped

movement is still choppy and has a delay to it when i use a RemoteEvent