local player = game.Players.LocalPlayer
local Humanoid = player.Character:FindFirstChild("Humanoid")
if Humanoid then
	Humanoid.AutoRotate = false
end

local jumping = false
local crouch = false
local leftValue, rightValue = 0, 0

if script.Parent.HumanoidRootPart.Orientation.Y == 0 then
--[[lots of checks to figure out what animation to play based on input]]
elseif script.Parent.HumanoidRootPart.Orientation.Y == 180 or -180 then
--[[lots of checks to figure out what animation to play based on input except they're all for when the character faces right]]
end
local function onUpdate()
	if player.Character and player.Character:FindFirstChild('Humanoid') then
		if jumping then
				wait(.083)
				if animtrack623.IsPlaying == false then
					Humanoid.Jump = true
					local moveDirection = rightValue - leftValue
					player.Character.Humanoid:Move(Vector3.new(0,0,moveDirection), false)
			end
		elseif crouch == true or anyattackanimation.IsPlaying == true then
			player.Character.Humanoid:Move(Vector3.new(0,0,0), false)
		elseif crouch == false then
			local moveDirection = rightValue - leftValue
			player.Character.Humanoid:Move(Vector3.new(0,0,moveDirection), false)
		end
	end
end

This code is part of a ControlScript I made that handles movement, jumping, and an entire attack command and animation system that I have in my game. However, whenever I try to run the script in a server, none of the movement code works, and the attack system is hampered because it can't find out what direction the character is facing. I've been stuck trying to figure this out for a while, and I've not gotten anything that works, partially because I also have it in StarterCharacterScripts when it should be in StarterPlayerScripts so it can override the default ControlScript. How can I fix the code above so that it works in a server, and if possible,so that it can function in PlayerScripts rather than in the character?