remova a funçao de reativar a gui livro quando  o jogador sai do acento : 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 = false -- Variável para controlar se a rotação está ativa

-- 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("Rotation"):WaitForChild("ImageButton")
-- Buscar a GUI "Livro"
local livroGui = player:WaitForChild("PlayerGui"):WaitForChild("Livro")

-- Função para atualizar a rotação do personagem
local function updateCharacterRotation(deltaTime)
	if isSitting and isAlive 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
			rotationActive = false -- Reseta para evitar inconsistências
			print("Jogador sentou em um assento de rotação.")
		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
			rotationActive = false

			-- Habilita a GUI "Livro" ao sair do assento
			if livroGui then
				livroGui.Enabled = true
			end

			-- 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
	rotationActive = false

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

	-- Habilita a GUI "Livro" ao morrer
	if livroGui then
		livroGui.Enabled = true
	end

	-- 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 = false -- Reseta a rotação ativa ao respawn

	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)

-- Função para alternar o estado da rotação ao clicar no botão "Stop"
stopButton.MouseButton1Click:Connect(function()
	if isSitting and isAlive then
		if not rotationActive then
			-- Inicia a atualização de rotação
			renderSteppedConnection = RunService.RenderStepped:Connect(updateCharacterRotation)
			rotationActive = true
			print("Rotação iniciada.")

			-- Desabilita a GUI "Livro" ao ativar a rotação
			if livroGui then
				livroGui.Enabled = false
			end
		else
			-- Para a atualização de rotação
			if renderSteppedConnection then
				renderSteppedConnection:Disconnect()
				renderSteppedConnection = nil
			end
			rotationActive = false
			print("Rotação pausada.")

			-- Habilita a GUI "Livro" ao desativar a rotação
			if livroGui then
				livroGui.Enabled = true
			end

			-- 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
	else
		print("O jogador não está sentado em um assento de rotação.")
	end
end)