como eu corrijo o bug da animaçao de mover do skate esta  se misturando com a de correr padrao do roblox ? : local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local SkateEquipEvent = ReplicatedStorage:WaitForChild("SkateEquipEvent")
local SkateUnequipEvent = ReplicatedStorage:WaitForChild("SkateUnequipEvent")

-- IDs das animações (substitua pelos seus IDs reais)
local skateIdleAnimationId = "rbxassetid://75721779864587"  -- Substitua pelo ID da sua animação de parado no skate
local skateMoveAnimationId = "rbxassetid://109831393548971"  -- Substitua pelo ID da sua animação de movimento no skate
local skateJumpAnimationId = "rbxassetid://127896239462291"  -- Substitua pelo ID da sua animação de pulo

-- Carregar as animações
local skateIdleAnimation = Instance.new("Animation")
skateIdleAnimation.AnimationId = skateIdleAnimationId

local skateMoveAnimation = Instance.new("Animation")
skateMoveAnimation.AnimationId = skateMoveAnimationId

local skateJumpAnimation = Instance.new("Animation")
skateJumpAnimation.AnimationId = skateJumpAnimationId

-- Variáveis globais
local character
local humanoid
local defaultHipHeight

local skateIdleTrack
local skateMoveTrack
local skateJumpTrack

local isOnSkate = false
local movedConnection
local stateConnection
local jumpConnection

local skateEquippedMesh
local skateWeld

-- Variáveis para controle da rotação
local rotationAnglePending = 0  -- Ângulo total pendente para rotacionar (acumulado)
local originalC0
local rotationConnection

-- Função para iniciar ou atualizar a rotação do mesh
local function startRotation()
	if not skateWeld then return end
	-- Incrementa o ângulo pendente com mais 360 graus
	rotationAnglePending = rotationAnglePending + 360
	-- Se já existe uma conexão de rotação, não precisamos iniciar outra
	if rotationConnection then return end

	-- Salva o C0 original se ainda não tiver sido salvo
	if not originalC0 then
		originalC0 = skateWeld.C0
	end

	local previousTime = tick()

	-- Inicia a conexão de rotação
	rotationConnection = RunService.RenderStepped:Connect(function(deltaTime)
		-- Calcula quanto tempo passou desde a última chamada
		local currentTime = tick()
		local elapsedTime = currentTime - previousTime
		previousTime = currentTime

		-- Velocidade de rotação (graus por segundo)
		local rotationSpeed = 600  -- Você pode ajustar este valor para acelerar ou desacelerar a rotação

		-- Calcula o ângulo a rotacionar nesta frame
		local angleThisFrame = rotationSpeed * elapsedTime

		-- Não rotaciona mais do que o ângulo pendente
		if angleThisFrame > rotationAnglePending then
			angleThisFrame = rotationAnglePending
		end

		-- Atualiza o ângulo pendente
		rotationAnglePending = rotationAnglePending - angleThisFrame

		-- Aplica a rotação ao skate
		local rotationCFrame = CFrame.Angles(math.rad(angleThisFrame), 0, 0)
		skateWeld.C0 = skateWeld.C0 * rotationCFrame

		-- Se não houver mais ângulo pendente, desconecta a conexão
		if rotationAnglePending <= 0 then
			rotationAnglePending = 0
			rotationConnection:Disconnect()
			rotationConnection = nil
			-- Opcional: Reseta o C0 para evitar acumulação de erros
			skateWeld.C0 = originalC0
		end
	end)
end

-- Função para parar as animações padrão que podem conflitar
local function stopDefaultAnimations()
	for _, track in ipairs(humanoid:GetPlayingAnimationTracks()) do
		local animationName = track.Name:lower()
		if animationName == "walk" or animationName == "run" or animationName == "idle" or animationName == "jump" or animationName == "fall" then
			track:Stop()
		end
	end
end

-- Atualiza as animações com base no estado do jogador
local function updateAnimation()
	if isOnSkate and humanoid then
		local state = humanoid:GetState()
		if state == Enum.HumanoidStateType.Jumping or state == Enum.HumanoidStateType.Freefall then
			if skateIdleTrack and skateIdleTrack.IsPlaying then
				skateIdleTrack:Stop()
			end
			if skateMoveTrack and skateMoveTrack.IsPlaying then
				skateMoveTrack:Stop()
			end
			if skateJumpTrack and not skateJumpTrack.IsPlaying then
				skateJumpTrack:Play()
			end
		else
			local speed = humanoid.MoveDirection.Magnitude
			if speed > 0 then
				if skateIdleTrack and skateIdleTrack.IsPlaying then
					skateIdleTrack:Stop()
				end
				if skateMoveTrack and not skateMoveTrack.IsPlaying then
					skateMoveTrack:Play()
				end
				if skateJumpTrack and skateJumpTrack.IsPlaying then
					skateJumpTrack:Stop()
				end
			else
				if skateMoveTrack and skateMoveTrack.IsPlaying then
					skateMoveTrack:Stop()
				end
				if skateIdleTrack and not skateIdleTrack.IsPlaying then
					skateIdleTrack:Play()
				end
				if skateJumpTrack and skateJumpTrack.IsPlaying then
					skateJumpTrack:Stop()
				end
			end
		end
	end
end

-- Função para quando o skate é equipado
local function onSkateEquipped()
	if isOnSkate or not humanoid then return end

	isOnSkate = true

	humanoid.WalkSpeed = 25
	humanoid.HipHeight = 2.9

	-- Carregar e reproduzir as animações do skate
	skateIdleTrack = humanoid:LoadAnimation(skateIdleAnimation)
	skateIdleTrack.Priority = Enum.AnimationPriority.Action4
	skateIdleTrack.Looped = true
	skateIdleTrack:Play()

	skateMoveTrack = humanoid:LoadAnimation(skateMoveAnimation)
	skateMoveTrack.Priority = Enum.AnimationPriority.Action4
	skateMoveTrack.Looped = true

	skateJumpTrack = humanoid:LoadAnimation(skateJumpAnimation)
	skateJumpTrack.Priority = Enum.AnimationPriority.Action4

	-- Parar as animações padrão que podem conflitar
	stopDefaultAnimations()

	movedConnection = humanoid.Running:Connect(function(speed)
		updateAnimation()
	end)
	stateConnection = humanoid.StateChanged:Connect(function(oldState, newState)
		updateAnimation()
	end)

	-- Procurar o mesh 'SkateEquipped' dentro do personagem
	skateEquippedMesh = character:FindFirstChild("SkateEquipped", true)
	if skateEquippedMesh and skateEquippedMesh:IsA("BasePart") then
		-- Criar um Weld para anexar o skate ao personagem
		skateWeld = skateEquippedMesh:FindFirstChild("SkateWeld")
		local rootPart = character:FindFirstChild("HumanoidRootPart")
		if not skateWeld and rootPart then
			skateWeld = Instance.new("Weld")
			skateWeld.Name = "SkateWeld"
			skateWeld.Part0 = rootPart
			skateWeld.Part1 = skateEquippedMesh
			skateWeld.C0 = rootPart.CFrame:inverse() * skateEquippedMesh.CFrame
			skateWeld.Parent = rootPart
		end

		-- Salvar o C0 original
		originalC0 = skateWeld.C0

		-- Resetar variáveis de rotação
		rotationAnglePending = 0
		if rotationConnection then
			rotationConnection:Disconnect()
			rotationConnection = nil
		end

		-- Conectar o evento de pulo para iniciar a rotação
		jumpConnection = humanoid.Jumping:Connect(function(isJumping)
			if isJumping then
				startRotation()
			end
		end)
	else
		warn("'SkateEquipped' mesh não encontrado ou não é um BasePart")
		skateEquippedMesh = nil
	end
end

-- Função para quando o skate é desequipado
local function onSkateUnequipped()
	if not isOnSkate or not humanoid then return end

	isOnSkate = false

	humanoid.WalkSpeed = 18
	humanoid.HipHeight = defaultHipHeight  -- Restaura o HipHeight para o valor padrão

	if movedConnection then
		movedConnection:Disconnect()
		movedConnection = nil
	end
	if stateConnection then
		stateConnection:Disconnect()
		stateConnection = nil
	end
	if jumpConnection then
		jumpConnection:Disconnect()
		jumpConnection = nil
	end
	if rotationConnection then
		rotationConnection:Disconnect()
		rotationConnection = nil
	end

	if skateIdleTrack and skateIdleTrack.IsPlaying then
		skateIdleTrack:Stop()
		skateIdleTrack = nil
	end
	if skateMoveTrack and skateMoveTrack.IsPlaying then
		skateMoveTrack:Stop()
		skateMoveTrack = nil
	end
	if skateJumpTrack and skateJumpTrack.IsPlaying then
		skateJumpTrack:Stop()
		skateJumpTrack = nil
	end

	-- Remover o Weld do skate
	if skateWeld then
		skateWeld:Destroy()
		skateWeld = nil
	end

	-- Resetar variáveis
	skateEquippedMesh = nil
	originalC0 = nil
	rotationAnglePending = 0
end

-- Função chamada quando o personagem é removido (morreu)
local function onCharacterRemoving(oldCharacter)
	-- Desconecta eventos e para apenas as animações do skate
	if movedConnection then
		movedConnection:Disconnect()
		movedConnection = nil
	end
	if stateConnection then
		stateConnection:Disconnect()
		stateConnection = nil
	end
	if jumpConnection then
		jumpConnection:Disconnect()
		jumpConnection = nil
	end
	if rotationConnection then
		rotationConnection:Disconnect()
		rotationConnection = nil
	end

	if skateIdleTrack and skateIdleTrack.IsPlaying then
		skateIdleTrack:Stop()
		skateIdleTrack = nil
	end
	if skateMoveTrack and skateMoveTrack.IsPlaying then
		skateMoveTrack:Stop()
		skateMoveTrack = nil
	end
	if skateJumpTrack and skateJumpTrack.IsPlaying then
		skateJumpTrack:Stop()
		skateJumpTrack = nil
	end

	skateEquippedMesh = nil
	skateWeld = nil
	originalC0 = nil
	rotationAnglePending = 0

	isOnSkate = false
	humanoid = nil
	character = nil
end

-- Função chamada quando o personagem é adicionado (renasceu)
local function onCharacterAdded(newCharacter)
	character = newCharacter
	humanoid = character:WaitForChild("Humanoid")
	defaultHipHeight = humanoid.HipHeight
	isOnSkate = false
end

-- Conecta aos eventos de personagem
player.CharacterAdded:Connect(onCharacterAdded)
player.CharacterRemoving:Connect(onCharacterRemoving)

-- Inicializa com o personagem atual, caso exista
if player.Character then
	onCharacterAdded(player.Character)
end

-- Conecta aos eventos remotos (apenas uma vez)
SkateEquipEvent.OnClientEvent:Connect(onSkateEquipped)
SkateUnequipEvent.OnClientEvent:Connect(onSkateUnequipped)