Retrohub "V17.1" (Actually v2, its just his previews tests)
Key RequiredUniversal

Retrohub "V17.1" (Actually v2, its just his previews tests)

Universal Scripttheonewhoatchestheonewhoatches 7.4K views 347 executesUpdated Sep 6, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•531 lines (19467 chars)
-- 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).")

Features & Information

fly low gravity noclip rejoin Dance Walkspeed and jumpower kinda an rp script its v1 and the next things imma code by myself, helped by ai

Community Comments (2)

theonewhoatchestheonewhoatchesSep 6, 2025

kinda bad but i will listen to yall

theonewhoatchestheonewhoatchesSep 6, 2025

update!

More Scripts for Universal Scripts