modifique esse script para so funcionar quando o player clicar no imagebutton, ao inves de executar de cara quando o player senta no seat. e remova a funçao de mudar os id : local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")

-- Evento remoto para comunicação cliente-servidor
local RemoteEvent = ReplicatedStorage:WaitForChild("PlayerRotationEvent")

-- Variáveis de estado
local currentSeat = nil
local isSitting = false
local isAlive = true
local rotationActive = true -- Variável para controlar se a rotação está ativa

-- IDs das imagens para os estados ativo e pausado
local rotationActiveImageId = "rbxassetid://SEU_ID_DE_IMAGEM_ATIVA" -- Substitua pelo ID da imagem para rotação ativa
local rotationPausedImageId = "rbxassetid://SEU_ID_DE_IMAGEM_PAUSADA" -- Substitua pelo ID da imagem para rotação pausada

-- Variáveis para otimização do envio ao servidor
local lastSendTime = 0
local sendInterval = 0.1 -- Intervalo mínimo entre envios ao servidor (em segundos)
local lastYRotation = nil
local rotationThreshold = 1 -- Envia a rotação somente se a diferença for maior que 1 grau

-- Variável para a conexão do evento RenderStepped
local renderSteppedConnection

-- Buscar o botão "Stop" no PlayerGui
local stopButton = player:WaitForChild("PlayerGui"):WaitForChild("ScreenGui"):WaitForChild("Stop")

-- Inicializa o botão "Stop" com a imagem de rotação ativa
stopButton.Image = rotationActiveImageId

-- Função para alternar o estado da rotação ao clicar no botão "Stop"
stopButton.MouseButton1Click:Connect(function()
	rotationActive = not rotationActive
	if rotationActive then
		print("Rotação retomada.")
		-- Atualiza a imagem para rotação ativa
		stopButton.Image = rotationActiveImageId
	else
		print("Rotação pausada.")
		-- Atualiza a imagem para rotação pausada
		stopButton.Image = rotationPausedImageId

		-- Opcional: resetar a orientação do personagem ao pausar
		if character and character:FindFirstChild("HumanoidRootPart") then
			local rootPart = character.HumanoidRootPart
			rootPart.CFrame = CFrame.new(rootPart.Position)
			-- Envia rotação zero para o servidor
			RemoteEvent:FireServer(0)
		end
	end
end)

-- Função para atualizar a rotação do personagem
local function updateCharacterRotation(deltaTime)
	if isSitting and isAlive and rotationActive then
		-- Obter a orientação da câmera
		local camera = workspace.CurrentCamera
		local cameraCF = camera.CFrame
		local _, yRotation, _ = cameraCF:ToEulerAnglesYXZ()
		local yRotationDegrees = math.deg(yRotation)

		-- Correção para manter a rotação entre 0 e 360 graus
		yRotationDegrees = (yRotationDegrees + 360) % 360

		-- Atualiza a rotação do personagem localmente em tempo real
		local rootPart = character:FindFirstChild("HumanoidRootPart")
		if rootPart then
			rootPart.CFrame = CFrame.new(rootPart.Position) * CFrame.Angles(0, math.rad(yRotationDegrees), 0)
		end

		-- Otimização: Envia apenas se o intervalo mínimo tiver passado e a diferença for significativa
		if os.clock() - lastSendTime >= sendInterval then
			if not lastYRotation or math.abs(yRotationDegrees - lastYRotation) >= rotationThreshold then
				-- Atualiza o último envio
				lastSendTime = os.clock()
				lastYRotation = yRotationDegrees

				-- Envia a rotação para o servidor
				RemoteEvent:FireServer(yRotationDegrees)
			end
		end
	end
end

-- Função para detectar quando o jogador senta ou levanta
local function onSeated(active, seatPart)
	if active then
		if CollectionService:HasTag(seatPart, "Rotation") then
			currentSeat = seatPart
			isSitting = true

			-- Inicia a atualização de rotação
			if not renderSteppedConnection then
				renderSteppedConnection = RunService.RenderStepped:Connect(updateCharacterRotation)
			end
		else
			currentSeat = nil
			isSitting = false

			-- Para a atualização de rotação se estiver ativa
			if renderSteppedConnection then
				renderSteppedConnection:Disconnect()
				renderSteppedConnection = nil
			end
		end
	else
		if isSitting then
			-- Envia rotação zero para resetar no servidor
			RemoteEvent:FireServer(0)
			currentSeat = nil
			isSitting = false

			-- Opcional: resetar a orientação localmente
			local rootPart = character:FindFirstChild("HumanoidRootPart")
			if rootPart then
				rootPart.CFrame = CFrame.new(rootPart.Position)
			end

			-- Para a atualização de rotação
			if renderSteppedConnection then
				renderSteppedConnection:Disconnect()
				renderSteppedConnection = nil
			end
		end
	end
end

-- Função para lidar com a morte do jogador
local function onDied()
	isAlive = false
	isSitting = false

	-- Envia rotação zero para resetar no servidor
	RemoteEvent:FireServer(0)

	-- Para a atualização de rotação se estiver ativa
	if renderSteppedConnection then
		renderSteppedConnection:Disconnect()
		renderSteppedConnection = nil
	end

	-- Limpa variáveis
	currentSeat = nil
	lastYRotation = nil
end

-- Função para quando o personagem é adicionado
local function onCharacterAdded(char)
	character = char
	humanoid = character:WaitForChild("Humanoid")
	isAlive = true
	isSitting = false
	currentSeat = nil
	lastYRotation = nil
	rotationActive = true -- Reseta a rotação ativa ao respawn

	-- Atualiza a imagem do botão para o estado inicial
	stopButton.Image = rotationActiveImageId

	humanoid.Seated:Connect(onSeated)
	humanoid.Died:Connect(onDied)
end

-- Inicializa a conexão com o personagem atual
if character then
	onCharacterAdded(character)
end

player.CharacterAdded:Connect(onCharacterAdded)