Why wont this animation script work?

Hello. I’ve been trying to create a scp game, and ive come across this. The animations do not show on the other player. Specifically the run animation.
heres the animate script that is added to the person when they spawn

--// modules
local require = require(game:GetService('ReplicatedStorage'):WaitForChild('library'))
local index = require('index')
local service = require('service')

--// remotes
local footstep_ev = require.events.footstep
local run_ev = require.events.run

local run_track_con, crouch_track_con

local site = workspace:WaitForChild('site')

local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
local pose = "Standing"

local userNoUpdateOnLoopSuccess, userNoUpdateOnLoopValue = pcall(function() return UserSettings():IsUserFeatureEnabled("UserNoUpdateOnLoop") end)
local userNoUpdateOnLoop = userNoUpdateOnLoopSuccess and userNoUpdateOnLoopValue
local userAnimationSpeedDampeningSuccess, userAnimationSpeedDampeningValue = pcall(function() return UserSettings():IsUserFeatureEnabled("UserAnimationSpeedDampening") end)
local userAnimationSpeedDampening = userAnimationSpeedDampeningSuccess and userAnimationSpeedDampeningValue

local adjustHumanoidRootPartFlagExists, adjustHumanoidRootPartFlagEnabled = pcall(function()
	return UserSettings():IsUserFeatureEnabled("UserAdjustHumanoidRootPartToHipPosition")
end)
local FFlagUserAdjustHumanoidRootPartToHipPosition = adjustHumanoidRootPartFlagExists and adjustHumanoidRootPartFlagEnabled

local animateScriptEmoteHookFlagExists, animateScriptEmoteHookFlagEnabled = pcall(function()
	return UserSettings():IsUserFeatureEnabled("UserAnimateScriptEmoteHook")
end)
local FFlagAnimateScriptEmoteHook = animateScriptEmoteHookFlagExists and animateScriptEmoteHookFlagEnabled

local AnimationSpeedDampeningObject = script:FindFirstChild("ScaleDampeningPercent")
local HumanoidHipHeight = FFlagUserAdjustHumanoidRootPartToHipPosition and 2 or 1.35

local EMOTE_TRANSITION_TIME = 0.1

local cam = workspace.CurrentCamera
local gun_event = nil

local currentAnim = ""
local currentAnimInstance = nil
local currentAnimTrack = nil
local currentAnimKeyframeHandler = nil
local currentAnimSpeed = 1.0
local can_sprint = true

local runAnimTrack = nil
local runAnimKeyframeHandler = nil

local crouching, sprinting, proned = false, false, false
local last_ws = Humanoid.WalkSpeed
local last_offset = Humanoid.CameraOffset
local last_fov = cam.FieldOfView

local animTable = {}
local animNames = { 
	idle = 	{	
				{ id = "http://www.roblox.com/asset/?id=507766666", weight = 1 },
				{ id = "http://www.roblox.com/asset/?id=507766951", weight = 1 },
				{ id = "http://www.roblox.com/asset/?id=507766388", weight = 9 }
			},
	walk = 	{ 	
		{ id = "http://www.roblox.com/asset/?id=6962171620", weight = 10 } 
			}, 
	run2 = 	{
		{ id = "http://www.roblox.com/asset/?id=6962172120", weight = 10 } 
			}, 
	crouchidle = 	{ 	
		{ id = "http://www.roblox.com/asset/?id=6962172847", weight = 10 } 
			}, 
	crouchmove = 	{
		{ id = "http://www.roblox.com/asset/?id=6962174000", weight = 10 } 
			},
	proneidle = 	{ 	
		{ id = "http://www.roblox.com/asset/?id=6962174588", weight = 10 } 
			}, 
	pronemove = 	{
		{ id = "http://www.roblox.com/asset/?id=6962175071", weight = 10 } 
			},
	swim = 	{
				{ id = "http://www.roblox.com/asset/?id=507784897", weight = 10 } 
			}, 
	swimidle = 	{
				{ id = "http://www.roblox.com/asset/?id=507785072", weight = 10 } 
			}, 
	jump = 	{
				{ id = "http://www.roblox.com/asset/?id=507765000", weight = 10 } 
			}, 
	fall = 	{
				{ id = "http://www.roblox.com/asset/?id=507767968", weight = 10 } 
			}, 
	climb = {
				{ id = "http://www.roblox.com/asset/?id=507765644", weight = 10 } 
			}, 
	sit = 	{
				{ id = "http://www.roblox.com/asset/?id=2506281703", weight = 10 } 
			},	
	toolnone = {
				{ id = "http://www.roblox.com/asset/?id=507768375", weight = 10 } 
			},
	toolslash = {
				{ id = "http://www.roblox.com/asset/?id=522635514", weight = 10 } 
			},
	toollunge = {
				{ id = "http://www.roblox.com/asset/?id=522638767", weight = 10 } 
			},
	wave = {
				{ id = "http://www.roblox.com/asset/?id=507770239", weight = 10 } 
			},
	point = {
				{ id = "http://www.roblox.com/asset/?id=507770453", weight = 10 } 
			},
	dance = {
				{ id = "http://www.roblox.com/asset/?id=507771019", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507771955", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507772104", weight = 10 } 
			},
	dance2 = {
				{ id = "http://www.roblox.com/asset/?id=507776043", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507776720", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507776879", weight = 10 } 
			},
	dance3 = {
				{ id = "http://www.roblox.com/asset/?id=507777268", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507777451", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507777623", weight = 10 } 
			},
	laugh = {
				{ id = "http://www.roblox.com/asset/?id=507770818", weight = 10 } 
			},
	cheer = {
				{ id = "http://www.roblox.com/asset/?id=507770677", weight = 10 } 
			},
}
--[[local animNames = { 
	idle = 	{	
				{ id = "http://www.roblox.com/asset/?id=507766951", weight = 1 }
			},
	walk = 	{ 	
				{ id = "http://www.roblox.com/asset/?id=4340927249", weight = 10 } 
			}, 
	run = 	{
				{ id = "http://www.roblox.com/asset/?id=4341272544", weight = 10 } 
			},
	crouchidle = 	{ 	
				{ id = "http://www.roblox.com/asset/?id=4348674644", weight = 10 } 
			}, 
	crouchmove = 	{
				{ id = "http://www.roblox.com/asset/?id=4348681702", weight = 10 } 
	},
	proneidle = 	{ 	
				{ id = "http://www.roblox.com/asset/?id=4348670338", weight = 10 } 
			}, 
	pronemove = 	{
				{ id = "http://www.roblox.com/asset/?id=4348678591", weight = 10 } 
			},
	swim = 	{
				{ id = "http://www.roblox.com/asset/?id=507784897", weight = 10 } 
			}, 
	swimidle = 	{
				{ id = "http://www.roblox.com/asset/?id=507785072", weight = 10 } 
			}, 
	jump = 	{
				{ id = "http://www.roblox.com/asset/?id=507765000", weight = 10 } 
			}, 
	fall = 	{
				{ id = "http://www.roblox.com/asset/?id=507767968", weight = 10 } 
			}, 
	climb = {
				{ id = "http://www.roblox.com/asset/?id=507765644", weight = 10 } 
			}, 
	sit = 	{
				{ id = "http://www.roblox.com/asset/?id=2506281703", weight = 10 } 
			},	
	toolnone = {
				{ id = "http://www.roblox.com/asset/?id=4299957469", weight = 10 } 
			},
	toolslash = {
				{ id = "http://www.roblox.com/asset/?id=522635514", weight = 10 } 
			},
	toollunge = {
				{ id = "http://www.roblox.com/asset/?id=522638767", weight = 10 } 
			},
	wave = {
				{ id = "http://www.roblox.com/asset/?id=507770239", weight = 10 } 
			},
	point = {
				{ id = "http://www.roblox.com/asset/?id=507770453", weight = 10 } 
			},
	dance = {
				{ id = "http://www.roblox.com/asset/?id=507771019", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507771955", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507772104", weight = 10 } 
			},
	dance2 = {
				{ id = "http://www.roblox.com/asset/?id=507776043", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507776720", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507776879", weight = 10 } 
			},
	dance3 = {
				{ id = "http://www.roblox.com/asset/?id=507777268", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507777451", weight = 10 }, 
				{ id = "http://www.roblox.com/asset/?id=507777623", weight = 10 } 
			},
	laugh = {
				{ id = "http://www.roblox.com/asset/?id=507770818", weight = 10 } 
			},
	cheer = {
				{ id = "http://www.roblox.com/asset/?id=507770677", weight = 10 } 
			},
}]]

-- Existance in this list signifies that it is an emote, the value indicates if it is a looping emote
local emoteNames = { wave = false, point = false, dance = true, dance2 = true, dance3 = true, laugh = false, cheer = false}

local PreloadAnimsUserFlag = false
local PreloadedAnims = {}
local successPreloadAnim, msgPreloadAnim = pcall(function()
	PreloadAnimsUserFlag = UserSettings():IsUserFeatureEnabled("UserPreloadAnimations")
end)
if not successPreloadAnim then
	PreloadAnimsUserFlag = false
end

local stepped = false
local vegetation = site.veg
local ignore = {Character, vegetation}

function get_fss()
	local current = (not stepped and Character.LeftUpperLeg or Character.RightUpperLeg)
	if current then
		return workspace:FindPartOnRayWithIgnoreList(Ray.new(current.Position, Vector3.new(0, -3.5, 0)), ignore)
	end
end

local function lerp(a, b, t) --// linear interpolation
    return a * (1 - t) + (b * t)
end

math.randomseed(tick())

function findExistingAnimationInSet(set, anim)
	if set == nil or anim == nil then
		return 0
	end
	
	for idx = 1, set.count, 1 do 
		if set[idx].anim.AnimationId == anim.AnimationId then
			return idx
		end
	end
	
	return 0
end

function configureAnimationSet(name, fileList)
	if (animTable[name] ~= nil) then
		for _, connection in pairs(animTable[name].connections) do
			connection:disconnect()
		end
	end
	animTable[name] = {}
	animTable[name].count = 0
	animTable[name].totalWeight = 0	
	animTable[name].connections = {}

	local allowCustomAnimations = true
	local AllowDisableCustomAnimsUserFlag = false

	local success, msg = pcall(function()
		AllowDisableCustomAnimsUserFlag = UserSettings():IsUserFeatureEnabled("UserAllowDisableCustomAnims2")
	end)

	if (AllowDisableCustomAnimsUserFlag) then
		local success, msg = pcall(function() allowCustomAnimations = game:GetService("StarterPlayer").AllowCustomAnimations end)
		if not success then
			allowCustomAnimations = true
		end
	end

	-- check for config values
	local config = script:FindFirstChild(name)
	if (allowCustomAnimations and config ~= nil) then
		table.insert(animTable[name].connections, config.ChildAdded:connect(function(child) configureAnimationSet(name, fileList) end))
		table.insert(animTable[name].connections, config.ChildRemoved:connect(function(child) configureAnimationSet(name, fileList) end))
		
		local idx = 0
		for _, childPart in pairs(config:GetChildren()) do
			if (childPart:IsA("Animation")) then
				local newWeight = 1
				local weightObject = childPart:FindFirstChild("Weight")
				if (weightObject ~= nil) then
					newWeight = weightObject.Value
				end
				animTable[name].count = animTable[name].count + 1
				idx = animTable[name].count
				animTable[name][idx] = {}
				animTable[name][idx].anim = childPart
				animTable[name][idx].weight = newWeight
				animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight
				table.insert(animTable[name].connections, childPart.Changed:connect(function(property) configureAnimationSet(name, fileList) end))
				table.insert(animTable[name].connections, childPart.ChildAdded:connect(function(property) configureAnimationSet(name, fileList) end))
				table.insert(animTable[name].connections, childPart.ChildRemoved:connect(function(property) configureAnimationSet(name, fileList) end))
			end
		end
	end
	
	-- fallback to defaults
	if (animTable[name].count <= 0) then
		for idx, anim in pairs(fileList) do
			animTable[name][idx] = {}
			animTable[name][idx].anim = Instance.new("Animation")
			animTable[name][idx].anim.Name = name
			animTable[name][idx].anim.AnimationId = anim.id
			animTable[name][idx].weight = anim.weight
			animTable[name].count = animTable[name].count + 1
			animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
		end
	end
	
	-- preload anims
	if PreloadAnimsUserFlag then
		for i, animType in pairs(animTable) do
			for idx = 1, animType.count, 1 do
				if PreloadedAnims[animType[idx].anim.AnimationId] == nil then
					Humanoid:LoadAnimation(animType[idx].anim)
					PreloadedAnims[animType[idx].anim.AnimationId] = true
				end				
			end
		end
	end
end

------------------------------------------------------------------------------------------------------------

function configureAnimationSetOld(name, fileList)
	if (animTable[name] ~= nil) then
		for _, connection in pairs(animTable[name].connections) do
			connection:disconnect()
		end
	end
	animTable[name] = {}
	animTable[name].count = 0
	animTable[name].totalWeight = 0	
	animTable[name].connections = {}

	local allowCustomAnimations = true
	local AllowDisableCustomAnimsUserFlag = false

	local success, msg = pcall(function()
		AllowDisableCustomAnimsUserFlag = UserSettings():IsUserFeatureEnabled("UserAllowDisableCustomAnims2")
	end)

	if (AllowDisableCustomAnimsUserFlag) then
		local success, msg = pcall(function() allowCustomAnimations = game:GetService("StarterPlayer").AllowCustomAnimations end)
		if not success then
			allowCustomAnimations = true
		end
	end

	-- check for config values
	local config = script:FindFirstChild(name)
	if (allowCustomAnimations and config ~= nil) then
		table.insert(animTable[name].connections, config.ChildAdded:connect(function(child) configureAnimationSet(name, fileList) end))
		table.insert(animTable[name].connections, config.ChildRemoved:connect(function(child) configureAnimationSet(name, fileList) end))
		local idx = 1
		for _, childPart in pairs(config:GetChildren()) do
			if (childPart:IsA("Animation")) then
				table.insert(animTable[name].connections, childPart.Changed:connect(function(property) configureAnimationSet(name, fileList) end))
				animTable[name][idx] = {}
				animTable[name][idx].anim = childPart
				local weightObject = childPart:FindFirstChild("Weight")
				if (weightObject == nil) then
					animTable[name][idx].weight = 1
				else
					animTable[name][idx].weight = weightObject.Value
				end
				animTable[name].count = animTable[name].count + 1
				animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight
				idx = idx + 1
			end
		end
	end

	-- fallback to defaults
	if (animTable[name].count <= 0) then
		for idx, anim in pairs(fileList) do
			animTable[name][idx] = {}
			animTable[name][idx].anim = Instance.new("Animation")
			animTable[name][idx].anim.Name = name
			animTable[name][idx].anim.AnimationId = anim.id
			animTable[name][idx].weight = anim.weight
			animTable[name].count = animTable[name].count + 1
			animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
		end
	end
	
	-- preload anims
	if PreloadAnimsUserFlag then
		for i, animType in pairs(animTable) do
			for idx = 1, animType.count, 1 do 
				Humanoid:LoadAnimation(animType[idx].anim)
			end
		end
	end
end

-- Setup animation objects
function scriptChildModified(child)
	local fileList = animNames[child.Name]
	if (fileList ~= nil) then
		configureAnimationSet(child.Name, fileList)
	end	
end

script.ChildAdded:connect(scriptChildModified)
script.ChildRemoved:connect(scriptChildModified)


for name, fileList in pairs(animNames) do 
	configureAnimationSet(name, fileList)
end	

-- ANIMATION

-- declarations
local toolAnim = "None"
local toolAnimTime = 0

local jumpAnimTime = 0
local jumpAnimDuration = 0.31

local toolTransitionTime = 0.1
local fallTransitionTime = 0.2

local currentlyPlayingEmote = false

-- functions

function stopAllAnimations()
	local oldAnim = currentAnim

	-- return to idle if finishing an emote
	if (emoteNames[oldAnim] ~= nil and emoteNames[oldAnim] == false) then
		oldAnim = "idle"
	end
	
	if FFlagAnimateScriptEmoteHook and currentlyPlayingEmote then
		oldAnim = "idle"
		currentlyPlayingEmote = false
	end

	currentAnim = ""
	currentAnimInstance = nil
	if (currentAnimKeyframeHandler ~= nil) then
		currentAnimKeyframeHandler:disconnect()
	end

	if (currentAnimTrack ~= nil) then
		currentAnimTrack:Stop()
		delay(0.1,function()
			currentAnimTrack:Destroy()
			currentAnimTrack = nil
		end)
	end

	-- clean up walk if there is one
	if (runAnimKeyframeHandler ~= nil) then
		runAnimKeyframeHandler:disconnect()
	end
	
	if (runAnimTrack ~= nil) then
		runAnimTrack:Stop()
		game:GetService('Debris'):AddItem(runAnimTrack,0.1)
	end
	
	return oldAnim
end

function getHeightScale()
	if Humanoid then
		if FFlagUserAdjustHumanoidRootPartToHipPosition then
			if not Humanoid.AutomaticScalingEnabled then
				return 1
			end
		end
		
		local scale = Humanoid.HipHeight / HumanoidHipHeight
		if userAnimationSpeedDampening then
			if AnimationSpeedDampeningObject == nil then
				AnimationSpeedDampeningObject = script:FindFirstChild("ScaleDampeningPercent")
			end
			if AnimationSpeedDampeningObject ~= nil then
				scale = 1 + (Humanoid.HipHeight - HumanoidHipHeight) * AnimationSpeedDampeningObject.Value / HumanoidHipHeight
			end
		end
		return scale
	end	
	return 1
end

local smallButNotZero = 0.0001
function setRunSpeed(speed)
	local heightScale = getHeightScale()
	local speedScaled
	if currentAnim == "walk" then
		speedScaled = 1
	else
		speedScaled = 1.25
	end
	local runSpeed = speedScaled / heightScale

	if runSpeed ~= currentAnimSpeed then
		if runSpeed < 0.33 then
			currentAnimTrack:AdjustWeight(1.0)		
			runAnimTrack:AdjustWeight(smallButNotZero)
		elseif runSpeed < 0.66 then
			local weight = ((runSpeed - 0.33) / 0.33)
			currentAnimTrack:AdjustWeight(1.0 - weight + smallButNotZero)
			runAnimTrack:AdjustWeight(weight + smallButNotZero)
		else
			currentAnimTrack:AdjustWeight(smallButNotZero)
			runAnimTrack:AdjustWeight(1.0)
		end
		currentAnimSpeed = runSpeed
		runAnimTrack:AdjustSpeed(runSpeed)
		currentAnimTrack:AdjustSpeed(runSpeed)
	end	
end

function setAnimationSpeed(speed)
	if currentAnim == "walk" or currentAnim == "run2" then
		setRunSpeed(speed)
	else
		if speed ~= currentAnimSpeed then
			currentAnimSpeed = speed
			currentAnimTrack:AdjustSpeed(currentAnimSpeed)
		end
	end
end

--[[function keyFrameReachedFunc(frameName)
	if (frameName == "End") then
		if currentAnim == "walk" or currentAnim == "run" then
			if userNoUpdateOnLoop == true then
				if runAnimTrack.Looped ~= true then
					runAnimTrack.TimePosition = 0.0
				end
				if currentAnimTrack.Looped ~= true then
					currentAnimTrack.TimePosition = 0.0
				end
			else
				runAnimTrack.TimePosition = 0.0
				currentAnimTrack.TimePosition = 0.0
			end
		else
			local repeatAnim = currentAnim
			if (emoteNames[repeatAnim] ~= nil and emoteNames[repeatAnim] == false) then
				repeatAnim = "idle"
			end
			
			if FFlagAnimateScriptEmoteHook and currentlyPlayingEmote then
				if currentAnimTrack.Looped then
					return
				end
				
				repeatAnim = "idle"
				currentlyPlayingEmote = false
			end
			
			local animSpeed = currentAnimSpeed
			playAnimation(repeatAnim, 0.15, Humanoid)
			setAnimationSpeed(animSpeed)
		end
	end
end]]

function rollAnimation(animName)
	local roll = math.random(1, animTable[animName].totalWeight) 
	local origRoll = roll
	local idx = 1
	while (roll > animTable[animName][idx].weight) do
		roll = roll - animTable[animName][idx].weight
		idx = idx + 1
	end
	return idx
end

local function switchToAnim(anim, animName, transitionTime, humanoid)	
	if (anim ~= currentAnimInstance) then
		
		if (currentAnimTrack ~= nil) then
			currentAnimTrack:Stop(transitionTime)
			game:GetService('Debris'):AddItem(currentAnimTrack,0.1)
		end

		if (runAnimTrack ~= nil) then
			runAnimTrack:Stop(transitionTime)
			game:GetService('Debris'):AddItem(currentAnimTrack,0.1)
		end

		currentAnimSpeed = 1.0
	
		-- load it to the humanoid; get AnimationTrack
		currentAnimTrack = humanoid:LoadAnimation(anim)
		 
		-- play the animation
		currentAnimTrack:Play(transitionTime)
		currentAnim = animName
		currentAnimInstance = anim

		-- set up keyframe name triggers
		if (currentAnimKeyframeHandler ~= nil) then
			currentAnimKeyframeHandler:disconnect()
		end
		
		if animName == 'crouchmove' then
			if crouch_track_con then
				crouch_track_con:disconnect()
			end
			
			local runAnimName = 'crouchmove'
			local runIdx = rollAnimation(runAnimName)
			
			crouch_track_con = currentAnimTrack:GetMarkerReachedSignal('footstep'):connect(function()
				stepped = not stepped do
					local hit, pos, norm, mat = get_fss()
		
					if (hit and mat) then	
						footstep_ev:FireServer('{\n\ \ \ \ \\ \\}', hit, pos, norm, mat, true)
					end
				end
			end)
		end
		
		-- check to see if we need to blend a walk/run animation
		if animName == "run2" or animName == "walk" then
			local runIdx = rollAnimation(animName)

			runAnimTrack = humanoid:LoadAnimation(anim)
			runAnimTrack:Play(transitionTime)		
			
			if (runAnimKeyframeHandler ~= nil) then
				runAnimKeyframeHandler:disconnect()
			end
			
			do --// footstep
				if run_track_con then
					run_track_con:disconnect()
				end
				
				run_track_con = runAnimTrack:GetMarkerReachedSignal('footstep'):connect(function()
					stepped = not stepped do
						local hit, pos, norm, mat = get_fss()
			
						if mat then	
							footstep_ev:FireServer('{\n\ \ \ \ \\ \\}', hit, pos, norm, mat, false)
						end
					end
				end)
			end
		end
	end
end

function playAnimation(animName, transitionTime, humanoid) 	
	local idx = rollAnimation(animName)
	local anim = animTable[animName][idx].anim
	
	switchToAnim(anim, animName, transitionTime, humanoid)
end

function playEmote(emoteAnim, transitionTime, humanoid)
	switchToAnim(emoteAnim, emoteAnim.Name, transitionTime, humanoid)
	currentlyPlayingEmote = true
end

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------

local toolAnimName = ""
local toolAnimTrack = nil
local toolAnimInstance = nil


function playToolAnimation(animName, transitionTime, humanoid)	 		
		local idx = rollAnimation(animName)
		local anim = animTable[animName][idx].anim

		if (toolAnimInstance ~= anim) then
			
			if (toolAnimTrack ~= nil) then
				toolAnimTrack:Stop()
				game:GetService('Debris'):AddItem(toolAnimTrack,0.1)
				transitionTime = 0
			end
					
			-- load it to the humanoid; get AnimationTrack
			toolAnimTrack = humanoid:LoadAnimation(anim)
			 
			-- play the animation
			toolAnimTrack:Play(transitionTime)
			toolAnimName = animName
			toolAnimInstance = anim

		end
end

function stopToolAnimations()
	local oldAnim = toolAnimName

	toolAnimName = ""
	toolAnimInstance = nil
	if (toolAnimTrack ~= nil) then
		toolAnimTrack:Stop()
		game:GetService('Debris'):AddItem(toolAnimTrack,0.1)
	end

	return oldAnim
end

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- STATE CHANGE HANDLERS

function onRunning(speed)
	if speed > 0.5 then
		local scale = 12 --// 16
		if pose ~= 'Crouching' and pose ~= 'Prone' then
			if not sprinting then
				playAnimation("walk", 0.2, Humanoid)
				setAnimationSpeed(speed / scale)
				pose = "Walking"
				if cam.FieldOfView == 80 and not sprinting then
					last_fov = 70
					game:GetService("TweenService"):Create(cam,TweenInfo.new(0.5,Enum.EasingStyle.Quad,Enum.EasingDirection.InOut),{FieldOfView = last_fov}):Play()
				end
			elseif sprinting then
				playAnimation("run2", 0.2, Humanoid)
				setAnimationSpeed(speed / scale)
				pose = "Running2"
				if cam.FieldOfView == 70 then
					last_fov = 80
					game:GetService("TweenService"):Create(cam,TweenInfo.new(0.5,Enum.EasingStyle.Quad,Enum.EasingDirection.InOut),{FieldOfView = last_fov}):Play()	
				end
			end
		else
			if pose == 'Crouching' then
				playAnimation("crouchmove", 0.2, Humanoid)
				setAnimationSpeed(speed / scale * 2)
			elseif pose == 'Prone' then
				playAnimation("pronemove", 0.2, Humanoid)
				setAnimationSpeed(speed / scale * 2)
			end
		end
	else
		if emoteNames[currentAnim] == nil then
			if pose ~= 'Crouching' and pose ~= 'Prone' then
				playAnimation("idle", 0.2, Humanoid)
				pose = "Standing"
			else
				if pose == 'Crouching' then
					playAnimation('crouchidle', 0.2, Humanoid)
				elseif pose == 'Prone' then
					playAnimation('proneidle', 0.2, Humanoid)
				end
			end
		end
	end
end

function onDied()
	pose = "Dead"
end

function onJumping()
	playAnimation("jump", 0.1, Humanoid)
	jumpAnimTime = jumpAnimDuration
	pose = "Jumping"
end

function onClimbing(speed)
	if pose == 'Prone' then return end
	
	local scale = 5
	playAnimation("climb", 0.1, Humanoid)
	setAnimationSpeed(speed / scale)
	pose = "Climbing"
end

function onGettingUp()
	pose = "GettingUp"
end

function onFreeFall()
	if (jumpAnimTime <= 0) then
		playAnimation("fall", fallTransitionTime, Humanoid)
	end
	pose = "FreeFall"
end

function onFallingDown()
	pose = "FallingDown"
end

function onSeated()
	pose = "Seated"
end

function onPlatformStanding()
	pose = "PlatformStanding"
end

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------

function onSwimming(speed)
	if speed > 1.00 then
		local scale = 10
		playAnimation("swim", 0.4, Humanoid)
		setAnimationSpeed(speed / scale)
		pose = "Swimming"
	else
		playAnimation("swimidle", 0.4, Humanoid)
		pose = "Standing"
	end
end

function animateTool()
	if (toolAnim == "None") then
		if not gun_event or gun_event.Parent.Parent.Parent ~= Character then 
			playToolAnimation("toolnone", toolTransitionTime, Humanoid)
			return
		end
	end

	if (toolAnim == "Slash") then
		playToolAnimation("toolslash", 0, Humanoid)
		return
	end

	if (toolAnim == "Lunge") then
		playToolAnimation("toollunge", 0, Humanoid)
		return
	end
end

function getToolAnim(tool)
	for _, c in ipairs(tool:GetChildren()) do
		if c.Name == "toolanim" and c.className == "StringValue" then
			return c
		end
	end
	return nil
end

local lastTick = 0

local function has_morph(char)
	for i,v in pairs(char:GetChildren()) do
		if v:IsA('Model') and v.Name == 'armor' and v:FindFirstChild('Middle') then
			return true
		end
	end
end

function stepAnimate(currentTime)
	local amplitude = 1
	local frequency = 1
  	local deltaTime = currentTime - lastTick
  	lastTick = currentTime

	local climbFudge = 0
	local setAngles = false

  	if (jumpAnimTime > 0) then
  		jumpAnimTime = jumpAnimTime - deltaTime
  	end

	if (pose == "FreeFall" and jumpAnimTime <= 0) then
		playAnimation("fall", fallTransitionTime, Humanoid)
	elseif (pose == "Seated") then
		playAnimation("sit", 0.5, Humanoid)
		return
	elseif (pose == "Walking") then
		playAnimation("walk", 0.2, Humanoid)
	elseif (pose == "Running2") and sprinting then
		playAnimation("run2", 0.2, Humanoid)
	elseif (pose == "Dead" or pose == "GettingUp" or pose == "FallingDown" or pose == "Seated" or pose == "PlatformStanding") then
		stopAllAnimations()
		amplitude = 0.1
		frequency = 1
		setAngles = true
	end

	-- Tool Animation handling
	local tool = Character:FindFirstChildOfClass("Tool")
	if tool and tool:FindFirstChild("Handle") then
		local animStringValueObject = getToolAnim(tool)

		if animStringValueObject then
			toolAnim = animStringValueObject.Value
			-- message recieved, delete StringValue
			animStringValueObject.Parent = nil
			toolAnimTime = currentTime + .3
		end

		if currentTime > toolAnimTime then
			toolAnimTime = 0
			toolAnim = "None"
		end

		animateTool()		
	else
		stopToolAnimations()
		toolAnim = "None"
		toolAnimInstance = nil
		toolAnimTime = 0
	end
end

-- connect events
Humanoid.Died:connect(onDied)
Humanoid.Running:connect(onRunning)
Humanoid.Jumping:connect(onJumping)
Humanoid.Climbing:connect(onClimbing)
Humanoid.GettingUp:connect(onGettingUp)
Humanoid.FreeFalling:connect(onFreeFall)
Humanoid.FallingDown:connect(onFallingDown)
Humanoid.Seated:connect(onSeated)
Humanoid.PlatformStanding:connect(onPlatformStanding)
Humanoid.Swimming:connect(onSwimming)

do --// crouching / sprinting
	local jump_limit = .5
    local last_jump = tick() - jump_limit
	local prop = Humanoid.GetPropertyChangedSignal

	Humanoid.StateChanged:connect(function(_, new)
		if new == Enum.HumanoidStateType.Freefall then
			last_jump = tick()
		end
 	end)
	
	prop(Humanoid, 'Jump'):connect(function()
		local up_ray = Ray.new(index.WaitForChild(Character, 'HumanoidRootPart').Position, Vector3.new(0, 7.5, 0))
		local hit = workspace:FindPartOnRayWithIgnoreList(up_ray, {Character, vegetation})
		
        if hit then
            Humanoid.Jump = false
        end
    end)
	
	index.WaitForChild(Character, 'HumanoidRootPart').CanCollide = false

	service.UserInputService.InputBegan:connect(function(key, processed)
		if key.KeyCode == Enum.KeyCode.C and not processed and not sprinting then
			local up_ray = Ray.new(index.WaitForChild(Character, 'HumanoidRootPart').Position, Vector3.new(0, 3, 0))
			local hit = workspace:FindPartOnRayWithIgnoreList(up_ray, {Character, vegetation})
			
			if crouching and hit or pose == 'Seated' or pose == 'Swimming' or pose == 'FreeFall' or pose == 'Dead' then return end
			
			crouching = not crouching do
				pose = crouching and 'Crouching' or 'Standing'
				
				playAnimation(crouching and 'crouchidle' or 'idle', .25, Humanoid)
				
				if gun_event then
					gun_event:Fire('crouching',crouching)
				end
			end
		end
		if key.KeyCode == Enum.KeyCode.Z and not processed and not sprinting then
			local up_ray = Ray.new(index.WaitForChild(Character, 'HumanoidRootPart').Position, Vector3.new(0, 3, 0))
			local hit = workspace:FindPartOnRayWithIgnoreList(up_ray, {Character, vegetation})
			if hit then print(hit.Name) end
			if proned and hit or pose == 'Seated' or pose == 'Swimming' or pose == 'FreeFall' or pose == 'Dead' then return end
			proned = not proned do
				pose = proned and 'Prone' or 'Standing'
				
				playAnimation(proned and 'proneidle' or 'idle', .25, Humanoid)
				
			end
		end
		if key.KeyCode == Enum.KeyCode.LeftShift and can_sprint and not crouching and not proned then
			sprinting = true
			run_ev:FireServer(sprinting)
			if gun_event then
				gun_event:Fire('sprinting',sprinting)
			end
		end
	end)
	service.UserInputService.InputEnded:connect(function(key, processed)
		if key.KeyCode == Enum.KeyCode.LeftShift and sprinting then
			sprinting = false
			run_ev:FireServer(sprinting)
			if gun_event then
				gun_event:Fire('sprinting',sprinting)
			end
		end
	end)
	service.RunService.RenderStepped:connect(function()
		local neutral = service.Players.LocalPlayer.Team and (service.Players.LocalPlayer.Team.Name ~= 'Neutral') or false
		
		--// set local states
		--sprinting = (not crouching and not proned) and service.UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) or false
		crouching = pose == 'Crouching'
		proned = pose == 'Prone'
		service.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, pose ~= 'Dead' and (neutral and not proned) or false)  
		
		--// check states
		if proned then
			Humanoid:UnequipTools()
		end
		if not can_sprint and sprinting then
			sprinting = false
		end
		--// humanoid
		Humanoid.CameraOffset = pose ~= 'Dead' and Humanoid.CameraOffset:lerp( 
			proned and (Vector3.new(0, -3, -2)) or 
			crouching and (Vector3.new(0, -.65, 0)) or 
			last_offset, .075
		) or Vector3.new()

		Humanoid.WalkSpeed = sprinting and last_ws * 1.5 or crouching and (last_ws / 2) or proned and (last_ws / 3.25) or last_ws
	end)
end

-- setup emote chat hook
game:GetService("Players").LocalPlayer.Chatted:connect(function(msg)
	local emote = ""
	if (string.sub(msg, 1, 3) == "/e ") then
		emote = string.sub(msg, 4)
	elseif (string.sub(msg, 1, 7) == "/emote ") then
		emote = string.sub(msg, 8)
	end
	
	if (pose == "Standing" and emoteNames[emote] ~= nil) then
		playAnimation(emote, EMOTE_TRANSITION_TIME, Humanoid)
	end
end)
Character.ChildAdded:Connect(function(child)
	if child:IsA('Tool') and child:FindFirstChild('gunClient') then
		local event = child:WaitForChild('gunClient').event
		gun_event = event
		gun_event:Fire('sprinting',sprinting)
		gun_event:Fire('crouching',crouching)
		gun_event.Event:Connect(function(arg)
			if arg == 'enable' and not can_sprint then
				can_sprint = true
			elseif arg == 'disable' and can_sprint then
				can_sprint = false	
			end
		end)
	end
end)
-- emote bindable hook
if FFlagAnimateScriptEmoteHook then
	script:WaitForChild("PlayEmote").OnInvoke = function(emote)
		-- Only play emotes when idling
		if pose ~= "Standing" then
			return
		end
	
		if emoteNames[emote] ~= nil then
			-- Default emotes
			playAnimation(emote, EMOTE_TRANSITION_TIME, Humanoid)
			
			return true
		elseif typeof(emote) == "Instance" and emote:IsA("Animation") then
			-- Non-default emotes
			playEmote(emote, EMOTE_TRANSITION_TIME, Humanoid)
			return true
		end
		
		-- Return false to indicate that the emote could not be played
		return false
	end
end
-- initialize to idle
playAnimation("idle", 0.1, Humanoid)
pose = "Standing"

-- loop to handle timed state transitions and tool animations
while Character.Parent ~= nil do
	local _, currentGameTime = wait(0.1)
	stepAnimate(currentGameTime)
end

pretty long. Heres what I mean by it doesnt show on the other perosn. All other animations work.
https://gyazo.com/2e4074aae77b67dbf084ac79857aa29e

2 Likes

Is that in roblox studios or in the actual published game

Well it is in studio, but it still does the same thing in the game.

are you handling this script from a local script or a script? if it is a local script, consider using a script

OH BY THE WAY, instead of having that script running all of the time, consider using an instance called HumanoidDescription

Yes it is a local script, its basically a copy of the one default in your character, so it would be kind of hard to make it into a script.

Consider using a HumanoidDescription then. You can set the animation IDs inside of the humanoid description.

If i use that, i could not use the crouch, nor run seen in the gif i provided.

I see… From the GIF I’m seeing these are the infos that I can accumulate

  • You are having trouble replicating crouching to the server and anything that’s not running/walking/jumping/swimming for which are defined in ROBLOX itself
  • You are handling the camera movement on client side when a certain animation is fired

Heres what I think you can do, there’re two ways you can do it:

Option 1: Convert your local script into a script. Anything on a local script is designed to stay local and not replicated onto server. This is an expected behavior of FilteringEnabled. Only handle the camera movement (FOV) on the client side. Essentially you would have a local script AND a script.
This option MIGHT be your best bet.

Option 2 (less flexible in your case): Similar to option 1, you would use a humanoid description and apply the animation IDs and have the client handle the camera movement when the humanoid state changes (FOV and such), might not work with crouching(??? im not sure)

1 Like

for the record I was trying to replicate it on my end and then realized that you were probably OOPing this stuff, which means that this is as far as I can help, hopefully this is going to guide you onto the right path

again, nothing gets replicated onto the server, not even animations. you should just use local scripts to handle the camera movements and anything a player can see, let the server script do the rest

gibberish

OR MAYBE, JUST MAYBE, USE A HUMANOID DESCRIPTION AND ADD THE RUNNING/WALKING/JUMPING ANIMATION IN THERE, i honestly dont know its 2308 hours here and im falling half asleep so im kinda just throwing gibberish out here at this point

1 Like