-- Retrovibes Hub v17.1 (FE-friendly, categorias, fixes) local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local PathfindingService = game:GetService("PathfindingService") local TeleportService = game:GetService("TeleportService") local TweenService = game:GetService("TweenService") local StarterGui = game:GetService("StarterGui") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") -- Configs local HUB_NAME = "Retrovibes" local FLY_SPEED = 80 local FLY_SMOOTH = 0.12 local FLY_TOGGLE_KEY = Enum.KeyCode.L local TOGGLE_GUI_KEY = Enum.KeyCode.Backspace local SPIN_DANCE_ID = "rbxassetid://161099825" -- se quiser trocar, coloque seu ID local LOW_GRAV_URL = "https://raw.githubusercontent.com/Bac0nHck/Scripts/refs/heads/main/zerogravity" local PUNCHFLING_URL = "https://raw.githubusercontent.com/0Ben1/fe/main/obf_rf6iQURzu1fqrytcnLBAvW34C9N55kS9g9G3CKz086rC47M6632sEd4ZZYB0AYgV.lua.txt" -- Estado local flying = false local bv, bg, flyConn = nil, nil, nil local noclip = false local noclipConn = nil local pathfindActive = false local pathConn = nil local lastPosition = nil -- Helpers local function safeSendChat(msg) if not msg or msg == "" then return end -- Tenta SayMessageRequest (mais confiável) local success, ev = pcall(function() return game:GetService("ReplicatedStorage"):FindFirstChild("DefaultChatSystemChatEvents") and game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents:FindFirstChild("SayMessageRequest") end) if success and ev and ev.FireServer then pcall(function() ev:FireServer(msg, "All") end) return end -- fallback pcall(function() LocalPlayer:Chat(msg) end) end local function getHumanoidAndRoot(character) if not character then return nil, nil end local hum = character:FindFirstChildOfClass("Humanoid") local root = character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Torso") or character:FindFirstChild("UpperTorso") return hum, root end -- GUI base (retro / categorias) local screenGui = Instance.new("ScreenGui") screenGui.Name = HUB_NAME.."_gui" screenGui.ResetOnSpawn = false screenGui.Parent = PlayerGui local main = Instance.new("Frame") main.Name = "Main" main.Size = UDim2.new(0,460,0,480) main.Position = UDim2.new(0.5,-230,0.14,0) main.BackgroundColor3 = Color3.fromRGB(28,28,36) main.BorderSizePixel = 2 main.BorderColor3 = Color3.fromRGB(70,70,90) main.Parent = screenGui -- Title bar (arrastável) local titleBar = Instance.new("Frame", main) titleBar.Size = UDim2.new(1,0,0,44) titleBar.Position = UDim2.new(0,0,0,0) titleBar.BackgroundColor3 = Color3.fromRGB(38,38,48) local titleLabel = Instance.new("TextLabel", titleBar) titleLabel.Size = UDim2.new(1,-120,1,0) titleLabel.Position = UDim2.new(0,12,0,0) titleLabel.BackgroundTransparency = 1 titleLabel.Font = Enum.Font.Legacy titleLabel.TextSize = 20 titleLabel.TextColor3 = Color3.fromRGB(255,245,200) titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Text = "RETROVIBES Hub (v17.1)" -- Welcome (english) local welcomeLabel = Instance.new("TextLabel", main) welcomeLabel.Size = UDim2.new(1,-20,0,26) welcomeLabel.Position = UDim2.new(0,10,0,50) welcomeLabel.BackgroundTransparency = 1 welcomeLabel.Font = Enum.Font.SourceSansItalic welcomeLabel.TextSize = 15 welcomeLabel.TextColor3 = Color3.fromRGB(200,200,210) welcomeLabel.Text = "Welcome to Retrovibes — classic admin vibes. Have fun!" -- Close (destroy) local closeBtn = Instance.new("TextButton", titleBar) closeBtn.Size = UDim2.new(0,90,0,30) closeBtn.Position = UDim2.new(1,-100,0,7) closeBtn.Text = "Close" closeBtn.Font = Enum.Font.Legacy closeBtn.TextSize = 16 closeBtn.BackgroundColor3 = Color3.fromRGB(160,50,50) closeBtn.TextColor3 = Color3.fromRGB(255,255,255) local closeCorner = Instance.new("UICorner", closeBtn); closeCorner.CornerRadius = UDim.new(0,6) closeBtn.MouseButton1Click:Connect(function() screenGui:Destroy() end) -- Layout: left categories, right content local leftCol = Instance.new("Frame", main) leftCol.Size = UDim2.new(0,200,1,-90) leftCol.Position = UDim2.new(0,10,0,86) leftCol.BackgroundTransparency = 1 local content = Instance.new("Frame", main) content.Size = UDim2.new(1,-230,1,-100) content.Position = UDim2.new(0,220,0,86) content.BackgroundColor3 = Color3.fromRGB(22,22,28) local contentCorner = Instance.new("UICorner", content); contentCorner.CornerRadius = UDim.new(0,6) local function clearContent() for _,v in pairs(content:GetChildren()) do v:Destroy() end end -- Create category buttons local categories = {"Movement","Fun","Fling","Player Settings","Misc"} local catButtons = {} for i,cat in ipairs(categories) do local b = Instance.new("TextButton", leftCol) b.Size = UDim2.new(1, -10, 0, 34) b.Position = UDim2.new(0, 5, 0, (i-1)*40) b.Text = cat b.Font = Enum.Font.Legacy b.TextSize = 16 b.TextColor3 = Color3.fromRGB(240,240,240) b.BackgroundColor3 = Color3.fromRGB(44,44,56) local u = Instance.new("UICorner", b); u.CornerRadius = UDim.new(0,6) catButtons[cat] = b end -- UI helpers to create controls inside content local function createLabel(txt, y) local l = Instance.new("TextLabel", content) l.Position = UDim2.new(0,12,0,y) l.Size = UDim2.new(1,-24,0,22) l.BackgroundTransparency = 1 l.Font = Enum.Font.SourceSans l.TextSize = 15 l.TextColor3 = Color3.fromRGB(210,210,210) l.Text = txt return l end local function createButton(txt, y, cb) local b = Instance.new("TextButton", content) b.Position = UDim2.new(0,12,0,y) b.Size = UDim2.new(1,-24,0,32) b.BackgroundColor3 = Color3.fromRGB(60,60,80) b.Font = Enum.Font.SourceSansBold b.TextSize = 16 b.TextColor3 = Color3.fromRGB(240,240,240) b.Text = txt local u = Instance.new("UICorner", b); u.CornerRadius = UDim.new(0,6) b.MouseButton1Click:Connect(function() cb(b) end) return b end local function createSmallButton(txt, parent, pos) local b = Instance.new("TextButton", parent) b.Size = UDim2.new(0,80,0,26) b.Position = pos b.BackgroundColor3 = Color3.fromRGB(75,75,95) b.Font = Enum.Font.SourceSans b.TextSize = 14 b.Text = txt local u = Instance.new("UICorner", b); u.CornerRadius = UDim.new(0,5) return b end local function createInputBox(y, placeholder) local box = Instance.new("TextBox", content) box.Position = UDim2.new(0,12,0,y) box.Size = UDim2.new(1,-24,0,28) box.BackgroundColor3 = Color3.fromRGB(45,45,60) box.PlaceholderText = placeholder or "" box.Text = "" box.Font = Enum.Font.SourceSans box.TextSize = 16 box.TextColor3 = Color3.fromRGB(240,240,240) local u = Instance.new("UICorner", box); u.CornerRadius = UDim.new(0,5) return box end -- FUNCTIONALITY IMPLEMENTATIONS -- FLY (suave) local function enableFly() local character = LocalPlayer.Character local hum, root = getHumanoidAndRoot(character) if not root then return end if flying then return end flying = true bg = Instance.new("BodyGyro", root) bg.MaxTorque = Vector3.new(1e5,1e5,1e5) bg.P = 20 bv = Instance.new("BodyVelocity", root) bv.MaxForce = Vector3.new(1e5,1e5,1e5) bv.P = 125 bv.Velocity = Vector3.new(0,0,0) flyConn = RunService.RenderStepped:Connect(function() if not flying then return end local cam = workspace.CurrentCamera if not cam then return end local dir = Vector3.new() if UserInputService:IsKeyDown(Enum.KeyCode.W) then dir = dir + cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.S) then dir = dir - cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.A) then dir = dir - cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.D) then dir = dir + cam.CFrame.RightVector end local up = 0 if UserInputService:IsKeyDown(Enum.KeyCode.Space) then up = up + 1 end if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then up = up - 1 end dir = Vector3.new(dir.X, up, dir.Z) local desired = Vector3.new(0,0,0) if dir.Magnitude > 0 then desired = dir.Unit * FLY_SPEED end bv.Velocity = bv.Velocity:Lerp(desired, FLY_SMOOTH) bg.CFrame = CFrame.new(root.Position, root.Position + cam.CFrame.LookVector) end) print("[Retrovibes] Fly enabled") end local function disableFly() flying = false if flyConn then flyConn:Disconnect(); flyConn = nil end if bv then pcall(function() bv:Destroy() end); bv = nil end if bg then pcall(function() bg:Destroy() end); bg = nil end print("[Retrovibes] Fly disabled") end -- NOCOLLP local function setNoclip(on) noclip = on if noclipConn then noclipConn:Disconnect(); noclipConn = nil end if noclip then noclipConn = RunService.Stepped:Connect(function() local char = LocalPlayer.Character if not char then return end for _,part in pairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end) else local char = LocalPlayer.Character if char then for _,part in pairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = true end end end end end -- Spin Dance local function playSpinDance() local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then local anim = Instance.new("Animation") anim.AnimationId = SPIN_DANCE_ID local track = hum:LoadAnimation(anim) track:Play() end end -- Lows Gravity (external) local function runLowGravity() local ok, err = pcall(function() local src = game:HttpGet(LOW_GRAV_URL, true) local fn, le = loadstring(src) if not fn then error(le) end fn() end) if not ok then warn("[Retrovibes] LowGravity failed:", err) StarterGui:SetCore("ChatMakeSystemMessage", {Text = "[Retrovibes] Failed to load LowGravity."}) else print("[Retrovibes] LowGravity loaded") end end -- QuickChat hi local function quickHi() safeSendChat("hi") end -- Teleport UI: mostra lista de players para clicar local function showPlayerSelection(actionFunc) clearContent() createLabel("Select a player:", 8) local y = 36 for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then local btn = createButton(p.Name, y, function() actionFunc(p) end) y = y + 38 end end if y == 36 then createLabel("No other players online.", 36) end end -- Teleport to player local function teleportToPlayer(target) if not target or not target.Character then return end local char = LocalPlayer.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") local thrp = target.Character and target.Character:FindFirstChild("HumanoidRootPart") if hrp and thrp then pcall(function() hrp.CFrame = thrp.CFrame + Vector3.new(0,3,0) end) print("[Retrovibes] Teleported to", target.Name) end end -- Pathfind to nearest/random player (runs while active) local function startPathfindLoop() if pathConn then pathConn:Disconnect(); pathConn = nil end pathConn = RunService.Heartbeat:Connect(function() local char = LocalPlayer.Character if not char or not char:FindFirstChild("HumanoidRootPart") then return end local hrp = char.HumanoidRootPart -- collect valid targets local targets = {} for _,p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then table.insert(targets, p) end end if #targets == 0 then return end -- pick nearest with 60% chance, else random local pick if math.random() < 0.6 then local minD, minP = 1e9, nil for _,p in ipairs(targets) do local d = (p.Character.HumanoidRootPart.Position - hrp.Position).Magnitude if d < minD then minD, minP = d, p end end pick = minP else pick = targets[math.random(1,#targets)] end if not pick or not pick.Character then return end -- compute path and follow local ok, path = pcall(function() local pathObj = PathfindingService:CreatePath({AgentRadius=2,AgentHeight=5}) pathObj:ComputeAsync(hrp.Position, pick.Character.HumanoidRootPart.Position) return pathObj end) if not ok or not path then return end local waypoints = path:GetWaypoints() for _,wp in ipairs(waypoints) do if not pathConn then break end -- smooth move: tween HRP to each waypoint (client-only visual) pcall(function() if hrp and hrp.Parent then local goal = {CFrame = CFrame.new(wp.Position + Vector3.new(0,2,0))} local tw = TweenService:Create(hrp, TweenInfo.new(0.35, Enum.EasingStyle.Linear), goal) tw:Play() tw.Completed:Wait(0.4) end end) end task.wait(0.25) end) end local function stopPathfindLoop() if pathConn then pathConn:Disconnect(); pathConn = nil end end -- Rejoin (client teleport) local function rejoin() pcall(function() TeleportService:Teleport(game.PlaceId, LocalPlayer) end) end -- Player settings helpers local function getHumanoid() return LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") end -- CATEGORY CONTENTS local function loadMovement() clearContent() createLabel("Movement", 6) createButton(flying and "Disable Fly (L)" or "Enable Fly (L)", 36, function() if flying then disableFly() else enableFly() end end) createButton(noclip and "Disable Noclip" or "Enable Noclip", 80, function(self) setNoclip(not noclip) -- update text self.Text = noclip and "Disable Noclip" or "Enable Noclip" end) createButton("Low Gravity (remote)", 124, function() runLowGravity() end) createButton("Teleport to player...", 168, function() showPlayerSelection(teleportToPlayer) end) end local function loadFun() clearContent() createLabel("Fun", 6) createButton("Spin Dance (anim)", 36, function() playSpinDance() end) createButton("Quick Chat: hi", 80, function() quickHi() end) end local function loadFling() clearContent() createLabel("Fling / Follow", 6) createButton(pathfindActive and "Stop Pathfind" or "Start Pathfind (follow players)", 36, function(self) pathfindActive = not pathfindActive if pathfindActive then startPathfindLoop() self.Text = "Stop Pathfind" else stopPathfindLoop() self.Text = "Start Pathfind (follow players)" end end) end local function loadPlayerSettings() clearContent() createLabel("Player Settings", 6) local hum = getHumanoid() local currentWalk = hum and hum.WalkSpeed or 0 local currentJump = hum and hum.JumpPower or 0 local wsLabel = createLabel("WalkSpeed: " .. tostring(currentWalk), 36) local jpLabel = createLabel("JumpPower: " .. tostring(currentJump), 66) -- quick +/- buttons local plusWS = createSmallButton("+5", content, UDim2.new(1,-100,0,36)) plusWS.MouseButton1Click:Connect(function() local h = getHumanoid() if h then h.WalkSpeed = h.WalkSpeed + 5; wsLabel.Text = "WalkSpeed: "..tostring(h.WalkSpeed) end end) local minusWS = createSmallButton("-5", content, UDim2.new(1,-180,0,36)) minusWS.MouseButton1Click:Connect(function() local h = getHumanoid() if h then h.WalkSpeed = math.max(0, h.WalkSpeed - 5); wsLabel.Text = "WalkSpeed: "..tostring(h.WalkSpeed) end end) local plusJP = createSmallButton("+10", content, UDim2.new(1,-100,0,66)) plusJP.MouseButton1Click:Connect(function() local h = getHumanoid() if h then h.JumpPower = h.JumpPower + 10; jpLabel.Text = "JumpPower: "..tostring(h.JumpPower) end end) local minusJP = createSmallButton("-10", content, UDim2.new(1,-180,0,66)) minusJP.MouseButton1Click:Connect(function() local h = getHumanoid() if h then h.JumpPower = math.max(0, h.JumpPower - 10); jpLabel.Text = "JumpPower: "..tostring(h.JumpPower) end end) -- exact set boxes local setWSBox = createInputBox(110, "Set WalkSpeed (number)...") setWSBox.FocusLost:Connect(function(enter) if not enter then return end local n = tonumber(setWSBox.Text) if n and getHumanoid() then getHumanoid().WalkSpeed = n; wsLabel.Text = "WalkSpeed: "..tostring(n) end setWSBox.Text = "" end) local setJPBox = createInputBox(150, "Set JumpPower (number)...") setJPBox.FocusLost:Connect(function(enter) if not enter then return end local n = tonumber(setJPBox.Text) if n and getHumanoid() then getHumanoid().JumpPower = n; jpLabel.Text = "JumpPower: "..tostring(n) end setJPBox.Text = "" end) end local function loadMisc() clearContent() createLabel("Misc / Server", 6) createButton("Rejoin (reconnect)", 36, function() rejoin() end) createButton("Run Low Gravity (remote)", 80, function() runLowGravity() end) -- punchfling removed by request createButton("Close Hub (Destroy)", 124, function() screenGui:Destroy() end) end -- Hook category buttons catButtons["Movement"].MouseButton1Click:Connect(loadMovement) catButtons["Fun"].MouseButton1Click:Connect(loadFun) catButtons["Fling"].MouseButton1Click:Connect(loadFling) catButtons["Player Settings"].MouseButton1Click:Connect(loadPlayerSettings) catButtons["Misc"].MouseButton1Click:Connect(loadMisc) -- Default loadMovement() -- Keep lastPosition (for any potential future features) RunService.Heartbeat:Connect(function() local char = LocalPlayer.Character if char and char:FindFirstChild("HumanoidRootPart") then lastPosition = char.HumanoidRootPart.CFrame end end) -- Reapply noclip / fly after respawn if needed LocalPlayer.CharacterAdded:Connect(function(char) task.wait(0.8) if noclip then setNoclip(true) end if flying then -- cleanup old and re-enable pcall(function() disableFly() end) pcall(function() enableFly() end) end end) -- Hotkeys: toggle GUI + fly UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if input.KeyCode == TOGGLE_GUI_KEY then screenGui.Enabled = not screenGui.Enabled elseif input.KeyCode == FLY_TOGGLE_KEY then if flying then disableFly() else enableFly() end end end) -- Final: small chat message welcome (client) pcall(function() StarterGui:SetCore("ChatMakeSystemMessage", {Text = "[Retrovibes] Welcome! Retrovibes v17.1 loaded."}) end) print("[Retrovibes] v17.1 loaded (LocalScript).")