-- Oziler Script (LocalScript) -- Instruções: coloque este LocalScript em StarterPlayerScripts de um place seu. -- Faz: cria UI simples com "Salvar Posição" e "Voltar para Posição" -- Funciona no PC com teclas S (salvar) e V (voltar) e em Mobile com botões na tela. local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer -- ======= Configurações ======= local UI_NAME = "OzilerScriptUI" local SAVE_KEY = Enum.KeyCode.S -- tecla para salvar posição no PC local RETURN_KEY = Enum.KeyCode.V -- tecla para voltar posição no PC local TWEEN_TIME = 0.25 -- tempo para "teleport" suave (pode ajustar para 0 para salto instantâneo) -- ============================== -- Estado local savedCFrame = nil local savedExists = false -- Espera o character local function getHRP() local char = player.Character or player.CharacterAdded:Wait() local hrp = char:FindFirstChild("HumanoidRootPart") or char:WaitForChild("HumanoidRootPart") return hrp end -- Cria UI (programaticamente) para evitar depender de assets externos local function createUI() -- remove UI antigo se existir local existing = player:WaitForChild("PlayerGui"):FindFirstChild(UI_NAME) if existing then existing:Destroy() end local screenGui = Instance.new("ScreenGui") screenGui.Name = UI_NAME screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") -- Container (canto inferior direito) local frame = Instance.new("Frame") frame.Name = "Container" frame.Size = UDim2.new(0, 160, 0, 90) frame.AnchorPoint = Vector2.new(1, 1) frame.Position = UDim2.new(1, -10, 1, -10) frame.BackgroundTransparency = 0.25 frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) frame.BorderSizePixel = 0 frame.Parent = screenGui -- Título local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -10, 0, 24) title.Position = UDim2.new(0, 5, 0, 5) title.BackgroundTransparency = 1 title.TextColor3 = Color3.fromRGB(255,255,255) title.Font = Enum.Font.SourceSansBold title.TextSize = 16 title.Text = "Oziler Script" title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = frame -- Save button local btnSave = Instance.new("TextButton") btnSave.Name = "BtnSave" btnSave.Size = UDim2.new(1, -10, 0, 28) btnSave.Position = UDim2.new(0, 5, 0, 34) btnSave.BackgroundColor3 = Color3.fromRGB(70, 130, 180) btnSave.TextColor3 = Color3.fromRGB(255,255,255) btnSave.Font = Enum.Font.SourceSans btnSave.TextSize = 16 btnSave.Text = "Salvar Posição (S)" btnSave.Parent = frame -- Return button local btnReturn = Instance.new("TextButton") btnReturn.Name = "BtnReturn" btnReturn.Size = UDim2.new(1, -10, 0, 28) btnReturn.Position = UDim2.new(0, 5, 0, 64) btnReturn.BackgroundColor3 = Color3.fromRGB(60, 160, 80) btnReturn.TextColor3 = Color3.fromRGB(255,255,255) btnReturn.Font = Enum.Font.SourceSans btnReturn.TextSize = 16 btnReturn.Text = "Voltar para Posição (V)" btnReturn.Parent = frame return { ScreenGui = screenGui, BtnSave = btnSave, BtnReturn = btnReturn, Frame = frame } end local ui = createUI() -- Função para salvar posição atual do HumanoidRootPart local function savePosition() local hrp = getHRP() if not hrp then warn("Oziler: HumanoidRootPart não encontrado.") return end savedCFrame = hrp.CFrame savedExists = true -- feedback visual simples ui.BtnSave.Text = "Posição salva!" delay(1.2, function() ui.BtnSave.Text = "Salvar Posição (S)" end) print("Oziler: posição salva em:", savedCFrame) end -- Função para voltar para a posição salva local function returnToPosition() if not savedExists or not savedCFrame then ui.BtnReturn.Text = "Nenhuma posição salva" delay(1.2, function() ui.BtnReturn.Text = "Voltar para Posição (V)" end) return end local hrp = getHRP() if not hrp then warn("Oziler: HumanoidRootPart não encontrado.") return end -- Se preferir teleporte instantâneo, comente a parte do Tween e use: -- hrp.CFrame = savedCFrame local success, err = pcall(function() local tweenInfo = TweenInfo.new(math.max(0.01, TWEEN_TIME), Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local goal = {} goal.CFrame = savedCFrame local tween = TweenService:Create(hrp, tweenInfo, goal) tween:Play() end) if not success then warn("Oziler: erro ao tentar ir para posição (tween) - teleport instantâneo usado. Erro:", err) hrp.CFrame = savedCFrame end ui.BtnReturn.Text = "Voltando..." delay(1.0, function() ui.BtnReturn.Text = "Voltar para Posição (V)" end) print("Oziler: voltando para posição salva.") end -- Conexões de clique dos botões ui.BtnSave.MouseButton1Click:Connect(savePosition) ui.BtnReturn.MouseButton1Click:Connect(returnToPosition) -- Teclas no PC (S e V) UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end -- não interferir com chat/GUI já usados if input.UserInputType == Enum.UserInputType.Keyboard then if input.KeyCode == SAVE_KEY then savePosition() elseif input.KeyCode == RETURN_KEY then returnToPosition() end end end) -- Suporte para toque (mobile): torna botões maiores ao detectar touch devices local function isTouchDevice() return UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled end if isTouchDevice() then -- opcional: ajustar tamanho/visibilidade para mobile ui.Frame.Size = UDim2.new(0, 200, 0, 110) ui.BtnSave.Text = "Salvar Posição" ui.BtnReturn.Text = "Voltar para Posição" end -- Mantém o script funcionando se o personagem morrer / respawnar player.CharacterAdded:Connect(function() -- pequena espera para garantir HRP disponível wait(0.5) end) -- Mensagem de debug opcional print("Oziler Script carregado. Teclas: S = salvar, V = voltar. UI criada.")