Client Admin
Key RequiredUniversal

Client Admin

Universal ScriptCasualdeveloperCasualdeveloper 1.6K views 1.8K executesUpdated Apr 23, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•1424 lines (57787 chars)
-- script updated every week V1.2
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local TextChatService = game:GetService("TextChatService")
local Workspace = game:GetService("Workspace")
local StarterGui = game:GetService("StarterGui")
local TweenService = game:GetService("TweenService")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local Lighting = game:GetService("Lighting")

local LocalPlayer = Players.LocalPlayer
local playerGui = LocalPlayer:WaitForChild("PlayerGui")
local Camera = Workspace.CurrentCamera
local prefix = "!"

local ScreenGui = _G.SmoothNotificationUI
if not ScreenGui then
    ScreenGui = Instance.new("ScreenGui")
    ScreenGui.Name = "SmoothNotificationUI"
    ScreenGui.ResetOnSpawn = false
    ScreenGui.Parent = playerGui
    _G.SmoothNotificationUI = ScreenGui
end

local NOTIFICATION_SPACING = 10
local NOTIFICATION_WIDTH   = 340
local NOTIFICATION_HEIGHT  = 100

_G.SmoothNotifications = _G.SmoothNotifications or {}
local notifications = _G.SmoothNotifications

local function smoothTween(obj, time, props, style)
    local tween = TweenService:Create(
        obj,
        TweenInfo.new(time, style or Enum.EasingStyle.Quint, Enum.EasingDirection.Out),
        props
    )
    tween:Play()
    return tween
end

local function updateStack()
    for i, frame in ipairs(notifications) do
        local targetY = -120 - ((NOTIFICATION_HEIGHT + NOTIFICATION_SPACING) * (i - 1))
        smoothTween(frame, 0.4, {Position = UDim2.new(1, -30, 1, targetY)})
    end
end

local function createNotification(titleText, subtitleText, duration)
    duration = duration or 3
    local Frame = Instance.new("Frame")
    Frame.Size = UDim2.new(0, NOTIFICATION_WIDTH, 0, NOTIFICATION_HEIGHT)
    Frame.Position = UDim2.new(1, 400, 1, -120)
    Frame.AnchorPoint = Vector2.new(1, 1)
    Frame.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
    Frame.BackgroundTransparency = 0.15
    Frame.BorderSizePixel = 0
    Frame.Visible = true
    Frame.ClipsDescendants = true
    Frame.ZIndex = 10
    Frame.Parent = ScreenGui

    local Corner = Instance.new("UICorner")
    Corner.CornerRadius = UDim.new(0, 14)
    Corner.Parent = Frame

    local Shadow = Instance.new("ImageLabel")
    Shadow.Size = UDim2.new(1, 40, 1, 40)
    Shadow.Position = UDim2.new(0.5, 0, 0.5, 0)
    Shadow.AnchorPoint = Vector2.new(0.5, 0.5)
    Shadow.BackgroundTransparency = 1
    Shadow.Image = "rbxassetid://1316045217"
    Shadow.ImageColor3 = Color3.fromRGB(0, 0, 0)
    Shadow.ImageTransparency = 1
    Shadow.ZIndex = 9
    Shadow.ScaleType = Enum.ScaleType.Slice
    Shadow.SliceCenter = Rect.new(10, 10, 118, 118)
    Shadow.Parent = Frame

    local Title = Instance.new("TextLabel")
    Title.Size = UDim2.new(1, -30, 0.5, -15)
    Title.Position = UDim2.new(0, 15, 0, 10)
    Title.BackgroundTransparency = 1
    Title.Text = titleText or ""
    Title.TextColor3 = Color3.fromRGB(255, 255, 255)
    Title.TextScaled = true
    Title.Font = Enum.Font.GothamBold
    Title.TextTransparency = 1
    Title.TextXAlignment = Enum.TextXAlignment.Left
    Title.ZIndex = 11
    Title.Parent = Frame

    local Subtitle = Instance.new("TextLabel")
    Subtitle.Size = UDim2.new(1, -30, 0.5, -15)
    Subtitle.Position = UDim2.new(0, 15, 0.5, 0)
    Subtitle.BackgroundTransparency = 1
    Subtitle.Text = subtitleText or ""
    Subtitle.TextColor3 = Color3.fromRGB(200, 200, 200)
    Subtitle.TextScaled = true
    Subtitle.Font = Enum.Font.Gotham
    Subtitle.TextTransparency = 1
    Subtitle.TextXAlignment = Enum.TextXAlignment.Left
    Subtitle.ZIndex = 11
    Subtitle.Parent = Frame

    table.insert(notifications, 1, Frame)
    updateStack()

    task.spawn(function()
        smoothTween(Frame, 0.7, {Position = UDim2.new(1, -30, 1, -120)})
        smoothTween(Title, 0.6, {TextTransparency = 0})
        smoothTween(Subtitle, 0.6, {TextTransparency = 0.15})
        smoothTween(Shadow, 0.6, {ImageTransparency = 0.85})
        task.wait(duration)
        local slideOut = TweenService:Create(Frame, TweenInfo.new(0.7, Enum.EasingStyle.Quint, Enum.EasingDirection.In), {
            Position = UDim2.new(1, 400, Frame.Position.Y.Scale, Frame.Position.Y.Offset),
            BackgroundTransparency = 1
        })
        local fadeTitle = TweenService:Create(Title, TweenInfo.new(0.5, Enum.EasingStyle.Sine), {TextTransparency = 1})
        local fadeSub   = TweenService:Create(Subtitle, TweenInfo.new(0.5, Enum.EasingStyle.Sine), {TextTransparency = 1})
        slideOut:Play() fadeTitle:Play() fadeSub:Play()
        slideOut.Completed:Wait()
        for i, v in ipairs(notifications) do
            if v == Frame then table.remove(notifications, i) break end
        end
        Frame:Destroy()
        updateStack()
    end)
end

_G.ShowNotification = function(title, subtitle, duration)
    createNotification(title, subtitle, duration)
end

local function notify(msg)
    pcall(function()
        if _G.ShowNotification then
            _G.ShowNotification("Client Admin", tostring(msg), 3)
        end
    end)
    pcall(function()
        StarterGui:SetCore("ChatMakeSystemMessage", {
            Text = "[Client Admin] " .. tostring(msg),
            Color = Color3.fromRGB(255, 230, 128),
            Font = Enum.Font.SourceSansBold,
            FontSize = Enum.FontSize.Size24,
        })
    end)
    print("[ClientAdmin] " .. tostring(msg))
end

local flying       = false
local noclip       = false
local infiniteJump = false
local spinning     = false
local godMode      = false
local espEnabled   = false
local fullbright   = false

local flySpeed  = 50
local spinSpeed = 90

local flyConn        = nil
local noclipConn     = nil
local spinConn       = nil
local godConn        = nil
local espPlayerConn  = nil
local fullbrightConn = nil

local espObjects     = {}
local blockedPlayers = {}

local deathPosition  = nil
local savedLighting  = {}

local FlingActive      = false
local SelectedTargets  = {}
local PlayerCheckboxes = {}

getgenv().OldPos = nil
getgenv().FPDH   = workspace.FallenPartsDestroyHeight

local function findPlayer(query)
    if not query then return nil end
    local q = string.lower(query)
    for _, p in pairs(Players:GetPlayers()) do
        if string.lower(p.Name) == q or string.lower(p.DisplayName) == q then return p end
    end
    for _, p in pairs(Players:GetPlayers()) do
        if string.find(string.lower(p.Name), q, 1, true)
        or string.find(string.lower(p.DisplayName), q, 1, true) then return p end
    end
    return nil
end

local function SkidFling(TargetPlayer)
    local Character  = LocalPlayer.Character
    local Humanoid   = Character and Character:FindFirstChildOfClass("Humanoid")
    local RootPart   = Humanoid and Humanoid.RootPart
    local TCharacter = TargetPlayer.Character
    if not TCharacter then return end

    local THumanoid = TCharacter:FindFirstChildOfClass("Humanoid")
    local TRootPart = THumanoid and THumanoid.RootPart
    local THead     = TCharacter:FindFirstChild("Head")
    local Accessory = TCharacter:FindFirstChildOfClass("Accessory")
    local Handle    = Accessory and Accessory:FindFirstChild("Handle")

    if not (Character and Humanoid and RootPart) then
        return notify("Your character is not ready")
    end

    if RootPart.Velocity.Magnitude < 50 then
        getgenv().OldPos = RootPart.CFrame
    end

    if THumanoid and THumanoid.Sit then
        return notify(TargetPlayer.Name .. " is sitting")
    end

    if THead then workspace.CurrentCamera.CameraSubject = THead
    elseif Handle then workspace.CurrentCamera.CameraSubject = Handle
    elseif THumanoid and TRootPart then workspace.CurrentCamera.CameraSubject = THumanoid
    end

    if not TCharacter:FindFirstChildWhichIsA("BasePart") then return end

    local function FPos(BasePart, Pos, Ang)
        RootPart.CFrame = CFrame.new(BasePart.Position) * Pos * Ang
        Character:SetPrimaryPartCFrame(CFrame.new(BasePart.Position) * Pos * Ang)
        RootPart.Velocity    = Vector3.new(9e7, 9e7 * 10, 9e7)
        RootPart.RotVelocity = Vector3.new(9e8, 9e8, 9e8)
    end

    local function SFBasePart(BasePart)
        local TimeToWait = 2
        local Time  = tick()
        local Angle = 0
        repeat
            if RootPart and THumanoid then
                if BasePart.Velocity.Magnitude < 50 then
                    Angle += 100
                    FPos(BasePart, CFrame.new(0,  1.5, 0) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, 0) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0,  1.5, 0) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, 0) + THumanoid.MoveDirection * BasePart.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0,  1.5, 0) + THumanoid.MoveDirection, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, 0) + THumanoid.MoveDirection, CFrame.Angles(math.rad(Angle), 0, 0)) task.wait()
                else
                    FPos(BasePart, CFrame.new(0,  1.5,  THumanoid.WalkSpeed), CFrame.Angles(math.rad(90), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, -THumanoid.WalkSpeed), CFrame.Angles(0, 0, 0))            task.wait()
                    FPos(BasePart, CFrame.new(0,  1.5,  THumanoid.WalkSpeed), CFrame.Angles(math.rad(90), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, 0), CFrame.Angles(math.rad(90), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, 0), CFrame.Angles(0, 0, 0))            task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, 0), CFrame.Angles(math.rad(90), 0, 0)) task.wait()
                    FPos(BasePart, CFrame.new(0, -1.5, 0), CFrame.Angles(0, 0, 0))            task.wait()
                end
            end
        until Time + TimeToWait < tick() or not FlingActive
    end

    workspace.FallenPartsDestroyHeight = 0/0

    local BV = Instance.new("BodyVelocity")
    BV.Parent   = RootPart
    BV.Velocity = Vector3.new(0, 0, 0)
    BV.MaxForce = Vector3.new(9e9, 9e9, 9e9)

    Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, false)

    if TRootPart then SFBasePart(TRootPart)
    elseif THead  then SFBasePart(THead)
    elseif Handle then SFBasePart(Handle)
    else notify(TargetPlayer.Name .. " has no valid parts") end

    BV:Destroy()
    Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, true)
    workspace.CurrentCamera.CameraSubject = Humanoid

    if getgenv().OldPos then
        repeat
            RootPart.CFrame = getgenv().OldPos * CFrame.new(0, .5, 0)
            Character:SetPrimaryPartCFrame(getgenv().OldPos * CFrame.new(0, .5, 0))
            Humanoid:ChangeState("GettingUp")
            for _, part in pairs(Character:GetChildren()) do
                if part:IsA("BasePart") then
                    part.Velocity, part.RotVelocity = Vector3.new(), Vector3.new()
                end
            end
            task.wait()
        until (RootPart.Position - getgenv().OldPos.p).Magnitude < 25
        workspace.FallenPartsDestroyHeight = getgenv().FPDH
    end
end

local function CountSelectedTargets()
    local count = 0
    for _ in pairs(SelectedTargets) do count += 1 end
    return count
end

local function showFlingGUI()
    local existing = playerGui:FindFirstChild("KilasikFlingGUI")
    if existing then existing:Destroy() end

    FlingActive      = false
    SelectedTargets  = {}
    PlayerCheckboxes = {}

    local FlingGui = Instance.new("ScreenGui")
    FlingGui.Name         = "KilasikFlingGUI"
    FlingGui.ResetOnSpawn = false
    FlingGui.Parent       = playerGui

    local MainFrame = Instance.new("Frame")
    MainFrame.Size                   = UDim2.new(0, 310, 0, 390)
    MainFrame.Position               = UDim2.new(0.5, -155, 0.5, -195)
    MainFrame.BackgroundColor3       = Color3.fromRGB(52, 52, 62)
    MainFrame.BackgroundTransparency = 0.15
    MainFrame.BorderSizePixel        = 0
    MainFrame.Active                 = true
    MainFrame.Draggable              = true
    MainFrame.Parent                 = FlingGui
    Instance.new("UICorner", MainFrame).CornerRadius = UDim.new(0, 12)

    local mainStroke = Instance.new("UIStroke", MainFrame)
    mainStroke.Color     = Color3.fromRGB(85, 85, 105)
    mainStroke.Thickness = 1.5

    local TitleBar = Instance.new("Frame")
    TitleBar.Size                   = UDim2.new(1, 0, 0, 42)
    TitleBar.BackgroundColor3       = Color3.fromRGB(62, 62, 75)
    TitleBar.BackgroundTransparency = 0.15
    TitleBar.BorderSizePixel        = 0
    TitleBar.Parent                 = MainFrame
    Instance.new("UICorner", TitleBar).CornerRadius = UDim.new(0, 12)

    local tbFix = Instance.new("Frame", TitleBar)
    tbFix.Size                   = UDim2.new(1, 0, 0.5, 0)
    tbFix.Position               = UDim2.new(0, 0, 0.5, 0)
    tbFix.BackgroundColor3       = Color3.fromRGB(62, 62, 75)
    tbFix.BackgroundTransparency = 0.15
    tbFix.BorderSizePixel        = 0

    local TitleLabel = Instance.new("TextLabel", TitleBar)
    TitleLabel.Size                   = UDim2.new(1, -50, 1, 0)
    TitleLabel.Position               = UDim2.new(0, 12, 0, 0)
    TitleLabel.BackgroundTransparency = 1
    TitleLabel.Text                   = "☠  FLING MANAGER"
    TitleLabel.TextColor3             = Color3.fromRGB(255, 255, 255)
    TitleLabel.Font                   = Enum.Font.GothamBold
    TitleLabel.TextSize               = 16
    TitleLabel.TextXAlignment         = Enum.TextXAlignment.Left

    local CloseBtn = Instance.new("TextButton", TitleBar)
    CloseBtn.Position               = UDim2.new(1, -36, 0, 6)
    CloseBtn.Size                   = UDim2.new(0, 30, 0, 30)
    CloseBtn.BackgroundColor3       = Color3.fromRGB(85, 85, 105)
    CloseBtn.BackgroundTransparency = 0.3
    CloseBtn.BorderSizePixel        = 0
    CloseBtn.Text                   = "✖"
    CloseBtn.TextColor3             = Color3.fromRGB(255, 255, 255)
    CloseBtn.Font                   = Enum.Font.GothamBold
    CloseBtn.TextSize               = 14
    Instance.new("UICorner", CloseBtn).CornerRadius = UDim.new(0, 8)

    local StatusLabel = Instance.new("TextLabel", MainFrame)
    StatusLabel.Position               = UDim2.new(0, 12, 0, 48)
    StatusLabel.Size                   = UDim2.new(1, -24, 0, 22)
    StatusLabel.BackgroundTransparency = 1
    StatusLabel.Text                   = "Select targets below"
    StatusLabel.TextColor3             = Color3.fromRGB(215, 215, 230)
    StatusLabel.Font                   = Enum.Font.Gotham
    StatusLabel.TextSize               = 13
    StatusLabel.TextXAlignment         = Enum.TextXAlignment.Left

    local ListFrame = Instance.new("Frame", MainFrame)
    ListFrame.Position               = UDim2.new(0, 10, 0, 74)
    ListFrame.Size                   = UDim2.new(1, -20, 0, 220)
    ListFrame.BackgroundColor3       = Color3.fromRGB(42, 42, 52)
    ListFrame.BackgroundTransparency = 0.15
    ListFrame.BorderSizePixel        = 0
    Instance.new("UICorner", ListFrame).CornerRadius = UDim.new(0, 8)

    local ScrollFrame = Instance.new("ScrollingFrame", ListFrame)
    ScrollFrame.Position               = UDim2.new(0, 4, 0, 4)
    ScrollFrame.Size                   = UDim2.new(1, -8, 1, -8)
    ScrollFrame.BackgroundTransparency = 1
    ScrollFrame.BorderSizePixel        = 0
    ScrollFrame.ScrollBarThickness     = 5
    ScrollFrame.ScrollBarImageColor3   = Color3.fromRGB(105, 105, 128)
    ScrollFrame.CanvasSize             = UDim2.new(0, 0, 0, 0)

    local function UpdateStatus()
        local count = CountSelectedTargets()
        if FlingActive then
            StatusLabel.Text       = "☠ Flinging " .. count .. " target(s)..."
            StatusLabel.TextColor3 = Color3.fromRGB(255, 200, 80)
        else
            StatusLabel.Text       = count > 0 and (count .. " target(s) selected") or "Select targets below"
            StatusLabel.TextColor3 = Color3.fromRGB(215, 215, 230)
        end
    end

    local function RefreshPlayerList()
        for _, c in pairs(ScrollFrame:GetChildren()) do c:Destroy() end
        PlayerCheckboxes = {}

        local list = Players:GetPlayers()
        table.sort(list, function(a, b) return a.Name:lower() < b.Name:lower() end)

        local y = 4
        for _, player in ipairs(list) do
            if player == LocalPlayer then continue end

            local row = Instance.new("Frame", ScrollFrame)
            row.Size             = UDim2.new(1, -8, 0, 34)
            row.Position         = UDim2.new(0, 4, 0, y)
            row.BackgroundColor3 = Color3.fromRGB(58, 58, 72)
            row.BorderSizePixel  = 0
            Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6)

            local Box = Instance.new("Frame", row)
            Box.Size             = UDim2.new(0, 22, 0, 22)
            Box.Position         = UDim2.new(0, 6, 0.5, -11)
            Box.BackgroundColor3 = Color3.fromRGB(75, 75, 92)
            Box.BorderSizePixel  = 0
            Instance.new("UICorner", Box).CornerRadius = UDim.new(0, 5)

            local Check = Instance.new("TextLabel", Box)
            Check.Size                   = UDim2.new(1, 0, 1, 0)
            Check.BackgroundTransparency = 1
            Check.Text                   = "✓"
            Check.TextColor3             = Color3.fromRGB(255, 180, 50)
            Check.TextSize               = 16
            Check.Font                   = Enum.Font.GothamBold
            Check.Visible                = SelectedTargets[player.Name] ~= nil

            local NameLbl = Instance.new("TextLabel", row)
            NameLbl.Size                   = UDim2.new(1, -40, 1, 0)
            NameLbl.Position               = UDim2.new(0, 34, 0, 0)
            NameLbl.BackgroundTransparency = 1
            NameLbl.Text                   = player.Name
            NameLbl.TextColor3             = Color3.fromRGB(232, 232, 242)
            NameLbl.TextSize               = 14
            NameLbl.Font                   = Enum.Font.Gotham
            NameLbl.TextXAlignment         = Enum.TextXAlignment.Left

            local ClickBtn = Instance.new("TextButton", row)
            ClickBtn.Size                   = UDim2.new(1, 0, 1, 0)
            ClickBtn.BackgroundTransparency = 1
            ClickBtn.Text                   = ""
            ClickBtn.ZIndex                 = 3

            ClickBtn.MouseButton1Click:Connect(function()
                if SelectedTargets[player.Name] then
                    SelectedTargets[player.Name] = nil
                    Check.Visible = false
                    smoothTween(row, 0.1, {BackgroundColor3 = Color3.fromRGB(58, 58, 72)})
                else
                    SelectedTargets[player.Name] = player
                    Check.Visible = true
                    smoothTween(row, 0.1, {BackgroundColor3 = Color3.fromRGB(65, 65, 90)})
                end
                UpdateStatus()
            end)

            ClickBtn.MouseEnter:Connect(function()
                if not SelectedTargets[player.Name] then
                    smoothTween(row, 0.1, {BackgroundColor3 = Color3.fromRGB(68, 68, 82)})
                end
            end)
            ClickBtn.MouseLeave:Connect(function()
                if not SelectedTargets[player.Name] then
                    smoothTween(row, 0.1, {BackgroundColor3 = Color3.fromRGB(58, 58, 72)})
                end
            end)

            if SelectedTargets[player.Name] then
                row.BackgroundColor3 = Color3.fromRGB(65, 65, 90)
            end

            PlayerCheckboxes[player.Name] = {Row = row, Check = Check}
            y += 38
        end

        ScrollFrame.CanvasSize = UDim2.new(0, 0, 0, y + 4)
    end

    local function makeBtn(xScale, xOff, text, bgColor)
        local btn = Instance.new("TextButton", MainFrame)
        btn.Position         = UDim2.new(xScale, xOff, 0, 302)
        btn.Size             = UDim2.new(0.5, -15, 0, 38)
        btn.BackgroundColor3 = bgColor
        btn.BorderSizePixel  = 0
        btn.Text             = text
        btn.TextColor3       = Color3.fromRGB(255, 255, 255)
        btn.Font             = Enum.Font.GothamBold
        btn.TextSize         = 15
        Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8)
        return btn
    end

    local StartBtn = makeBtn(0,   10, "▶  START FLING", Color3.fromRGB(0, 150, 60))
    local StopBtn  = makeBtn(0.5,  5, "■  STOP FLING",  Color3.fromRGB(72, 72, 90))

    local SelAllBtn = makeBtn(0,   10, "SELECT ALL",   Color3.fromRGB(68, 68, 85))
    local DeselBtn  = makeBtn(0.5,  5, "DESELECT ALL", Color3.fromRGB(68, 68, 85))
    SelAllBtn.Position = UDim2.new(0,   10, 0, 348)
    DeselBtn.Position  = UDim2.new(0.5,  5, 0, 348)
    SelAllBtn.TextSize = 13
    DeselBtn.TextSize  = 13

    CloseBtn.MouseButton1Click:Connect(function()
        FlingActive = false
        FlingGui:Destroy()
    end)

    local function StartFling()
        if FlingActive then return end
        if CountSelectedTargets() == 0 then
            StatusLabel.Text       = "⚠ No targets selected!"
            StatusLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
            task.delay(1.5, UpdateStatus)
            return
        end
        FlingActive = true
        smoothTween(StopBtn, 0.2, {BackgroundColor3 = Color3.fromRGB(160, 50, 50)})
        UpdateStatus()
        notify("Flinging " .. CountSelectedTargets() .. " target(s)")
        task.spawn(function()
            while FlingActive do
                for name, player in pairs(SelectedTargets) do
                    if not (player and player.Parent) then
                        SelectedTargets[name] = nil
                        local cb = PlayerCheckboxes[name]
                        if cb then cb.Check.Visible = false end
                    elseif FlingActive then
                        SkidFling(player)
                        task.wait(0.1)
                    end
                end
                UpdateStatus()
                task.wait(0.5)
            end
        end)
    end

    local function StopFling()
        if not FlingActive then return end
        FlingActive = false
        smoothTween(StopBtn, 0.2, {BackgroundColor3 = Color3.fromRGB(72, 72, 90)})
        UpdateStatus()
        notify("Fling stopped")
    end

    StartBtn.MouseButton1Click:Connect(StartFling)
    StopBtn.MouseButton1Click:Connect(StopFling)

    SelAllBtn.MouseButton1Click:Connect(function()
        for _, player in ipairs(Players:GetPlayers()) do
            if player ~= LocalPlayer then
                SelectedTargets[player.Name] = player
                local cb = PlayerCheckboxes[player.Name]
                if cb then
                    cb.Check.Visible = true
                    smoothTween(cb.Row, 0.1, {BackgroundColor3 = Color3.fromRGB(65, 65, 90)})
                end
            end
        end
        UpdateStatus()
    end)

    DeselBtn.MouseButton1Click:Connect(function()
        for name in pairs(SelectedTargets) do
            SelectedTargets[name] = nil
            local cb = PlayerCheckboxes[name]
            if cb then
                cb.Check.Visible = false
                smoothTween(cb.Row, 0.1, {BackgroundColor3 = Color3.fromRGB(58, 58, 72)})
            end
        end
        UpdateStatus()
    end)

    Players.PlayerAdded:Connect(function()
        task.wait(0.5)
        RefreshPlayerList()
    end)
    Players.PlayerRemoving:Connect(function(p)
        SelectedTargets[p.Name] = nil
        task.wait(0.1)
        RefreshPlayerList()
        UpdateStatus()
    end)

    RefreshPlayerList()
    UpdateStatus()
end

local function startFly()
    if flying then notify("Already flying") return end
    local char = LocalPlayer.Character
    if not char then notify("No character") return end
    local hrp = char:FindFirstChild("HumanoidRootPart")
    if not hrp then notify("No HumanoidRootPart") return end
    if flyConn then flyConn:Disconnect() flyConn = nil end
    flying = true

    local bv = Instance.new("BodyVelocity")
    bv.Name     = "FlyBodyVelocity"
    bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
    bv.Velocity = Vector3.zero
    bv.Parent   = hrp

    local ba = Instance.new("BodyAngularVelocity")
    ba.Name            = "FlyBodyAngularVelocity"
    ba.MaxTorque       = Vector3.new(1e5, 1e5, 1e5)
    ba.AngularVelocity = Vector3.zero
    ba.Parent          = hrp

    local hum = char:FindFirstChildOfClass("Humanoid")
    if hum then pcall(function() hum.PlatformStand = true end) end

    local currentVelocity = Vector3.zero
    local ACCELERATION    = 12
    local DECELERATION    = 10

    flyConn = RunService.RenderStepped:Connect(function(dt)
        if not flying then return end
        local rootPart = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
        local flyBV    = rootPart and rootPart:FindFirstChild("FlyBodyVelocity")
        if not rootPart or not flyBV then return end
        local cam   = Workspace.CurrentCamera
        local move  = Vector3.zero
        local rightV = Vector3.new(cam.CFrame.RightVector.X, 0, cam.CFrame.RightVector.Z).Unit
        if UIS:IsKeyDown(Enum.KeyCode.W)           then move += cam.CFrame.LookVector end
        if UIS:IsKeyDown(Enum.KeyCode.S)           then move -= cam.CFrame.LookVector end
        if UIS:IsKeyDown(Enum.KeyCode.A)           then move -= rightV end
        if UIS:IsKeyDown(Enum.KeyCode.D)           then move += rightV end
        if UIS:IsKeyDown(Enum.KeyCode.Space)       then move += Vector3.new(0, 1, 0) end
        if UIS:IsKeyDown(Enum.KeyCode.LeftControl) then move -= Vector3.new(0, 1, 0) end
        local targetVelocity = move.Magnitude > 0 and move.Unit * flySpeed or Vector3.zero
        local lerpFactor     = move.Magnitude > 0 and math.min(1, ACCELERATION * dt) or math.min(1, DECELERATION * dt)
        currentVelocity      = currentVelocity:Lerp(targetVelocity, lerpFactor)
        if currentVelocity.Magnitude < 0.01 then currentVelocity = Vector3.zero end
        flyBV.Velocity = currentVelocity
    end)

    notify("Fly enabled | Speed: " .. tostring(flySpeed))
end

local function stopFly()
    if not flying then notify("Not flying") return end
    flying = false
    if flyConn then flyConn:Disconnect() flyConn = nil end
    local char = LocalPlayer.Character
    if char then
        local hrp = char:FindFirstChild("HumanoidRootPart")
        if hrp then
            local bv = hrp:FindFirstChild("FlyBodyVelocity")
            if bv then bv:Destroy() end
            local ba = hrp:FindFirstChild("FlyBodyAngularVelocity")
            if ba then ba:Destroy() end
        end
        local hum = char:FindFirstChildOfClass("Humanoid")
        if hum then pcall(function() hum.PlatformStand = false end) end
    end
    notify("Fly disabled")
end

local function startNoclip()
    if noclip then notify("Noclip already on") return end
    if noclipConn then noclipConn:Disconnect() noclipConn = nil end
    noclip = true
    noclipConn = RunService.Stepped:Connect(function()
        if not noclip then return end
        local char = LocalPlayer.Character
        if not char then return end
        for _, part in ipairs(char:GetDescendants()) do
            if part:IsA("BasePart") then part.CanCollide = false end
        end
    end)
    notify("Noclip enabled")
end

local function stopNoclip()
    if not noclip then notify("Noclip already off") return end
    noclip = false
    if noclipConn then noclipConn:Disconnect() noclipConn = nil end
    local char = LocalPlayer.Character
    if char then
        for _, part in ipairs(char:GetDescendants()) do
            if part:IsA("BasePart") then part.CanCollide = true end
        end
    end
    notify("Noclip disabled")
end

local function startSpin(speed)
    if spinning then notify("Already spinning") return end
    speed = tonumber(speed) or spinSpeed
    if spinConn then spinConn:Disconnect() spinConn = nil end
    spinning = true
    spinConn = RunService.Heartbeat:Connect(function(dt)
        if not spinning then return end
        local char = LocalPlayer.Character
        local hrp  = char and char:FindFirstChild("HumanoidRootPart")
        if hrp then hrp.CFrame = hrp.CFrame * CFrame.Angles(0, math.rad(speed * dt), 0) end
    end)
    notify("Spin enabled at " .. tostring(speed) .. "°/s")
end

local function stopSpin()
    if not spinning then notify("Not spinning") return end
    spinning = false
    if spinConn then spinConn:Disconnect() spinConn = nil end
    notify("Spin disabled")
end

local function startGodMode()
    if godMode then notify("Godmode already on") return end
    local char = LocalPlayer.Character
    if not char then notify("No character") return end
    local hum = char:FindFirstChildOfClass("Humanoid")
    if not hum then notify("No Humanoid") return end
    if godConn then godConn:Disconnect() godConn = nil end
    godMode = true
    godConn = RunService.Heartbeat:Connect(function()
        if not godMode then return end
        local c = LocalPlayer.Character
        local h = c and c:FindFirstChildOfClass("Humanoid")
        if h and h.Health < h.MaxHealth then h.Health = h.MaxHealth end
    end)
    notify("Godmode enabled")
end

local function stopGodMode()
    if not godMode then notify("Godmode already off") return end
    godMode = false
    if godConn then godConn:Disconnect() godConn = nil end
    notify("Godmode disabled")
end

local function applyFullbright()
    Lighting.Ambient        = Color3.fromRGB(255, 255, 255)
    Lighting.OutdoorAmbient = Color3.fromRGB(255, 255, 255)
    Lighting.Brightness     = 2
    Lighting.FogEnd         = 1e9
    Lighting.GlobalShadows  = false
    Lighting.ClockTime      = 14
    for _, effect in ipairs(Lighting:GetChildren()) do
        if effect:IsA("Atmosphere") or effect:IsA("ColorCorrectionEffect")
        or effect:IsA("BloomEffect") or effect:IsA("BlurEffect") then
            pcall(function() effect.Enabled = false end)
        end
    end
end

local function enableFullbright()
    if fullbright then notify("Fullbright already on") return end
    savedLighting = {
        Ambient        = Lighting.Ambient,
        OutdoorAmbient = Lighting.OutdoorAmbient,
        Brightness     = Lighting.Brightness,
        FogEnd         = Lighting.FogEnd,
        GlobalShadows  = Lighting.GlobalShadows,
        ClockTime      = Lighting.ClockTime,
    }
    fullbright = true
    applyFullbright()
    if fullbrightConn then fullbrightConn:Disconnect() fullbrightConn = nil end
    fullbrightConn = RunService.Heartbeat:Connect(function()
        if not fullbright then return end
        applyFullbright()
    end)
    notify("Fullbright enabled")
end

local function disableFullbright()
    if not fullbright then notify("Fullbright already off") return end
    fullbright = false
    if fullbrightConn then fullbrightConn:Disconnect() fullbrightConn = nil end
    Lighting.Ambient        = savedLighting.Ambient
    Lighting.OutdoorAmbient = savedLighting.OutdoorAmbient
    Lighting.Brightness     = savedLighting.Brightness
    Lighting.FogEnd         = savedLighting.FogEnd
    Lighting.GlobalShadows  = savedLighting.GlobalShadows
    Lighting.ClockTime      = savedLighting.ClockTime
    for _, effect in ipairs(Lighting:GetChildren()) do
        if effect:IsA("Atmosphere") or effect:IsA("ColorCorrectionEffect")
        or effect:IsA("BloomEffect") or effect:IsA("BlurEffect") then
            pcall(function() effect.Enabled = true end)
        end
    end
    notify("Fullbright disabled")
end

local function createESPForPlayer(p)
    if p == LocalPlayer then return end
    if not p.Character then return end
    if espObjects[p] then
        if espObjects[p].highlight and espObjects[p].highlight.Parent then espObjects[p].highlight:Destroy() end
        if espObjects[p].charConn then espObjects[p].charConn:Disconnect() end
        espObjects[p] = nil
    end
    local highlight
    pcall(function()
        highlight = Instance.new("Highlight")
        highlight.Name              = "ESP_Highlight"
        highlight.FillTransparency  = 1
        highlight.OutlineTransparency = 0
        highlight.OutlineColor      = Color3.fromRGB(0, 255, 255)
        highlight.Parent            = p.Character
    end)
    if highlight then
        local charConn
        charConn = p.CharacterAdded:Connect(function()
            task.wait(0.2)
            if espEnabled then createESPForPlayer(p)
            else if charConn then charConn:Disconnect() end end
        end)
        espObjects[p] = {highlight = highlight, charConn = charConn}
    end
end

local function removeESPForPlayer(p)
    if not p then return end
    local obj = espObjects[p]
    if obj then
        if obj.highlight and obj.highlight.Parent then obj.highlight:Destroy() end
        if obj.charConn then obj.charConn:Disconnect() end
        espObjects[p] = nil
    elseif p.Character then
        local hl = p.Character:FindFirstChild("ESP_Highlight", true)
        if hl then hl:Destroy() end
    end
end

local function enableESP()
    if espEnabled then notify("ESP already on") return end
    espEnabled = true
    for _, p in pairs(Players:GetPlayers()) do
        if p ~= LocalPlayer then createESPForPlayer(p) end
    end
    if espPlayerConn then espPlayerConn:Disconnect() espPlayerConn = nil end
    espPlayerConn = Players.PlayerAdded:Connect(function(p)
        if espEnabled then createESPForPlayer(p) end
    end)
    notify("ESP enabled")
end

local function disableESP()
    if not espEnabled then notify("ESP already off") return end
    espEnabled = false
    if espPlayerConn then espPlayerConn:Disconnect() espPlayerConn = nil end
    for p in pairs(espObjects) do removeESPForPlayer(p) end
    espObjects = {}
    for _, p in pairs(Players:GetPlayers()) do
        if p.Character then
            local hl = p.Character:FindFirstChild("ESP_Highlight", true)
            if hl then hl:Destroy() end
        end
    end
    notify("ESP disabled")
end

local function thru()
    local char = LocalPlayer.Character
    if not char then notify("No character") return end
    local hrp = char:FindFirstChild("HumanoidRootPart")
    if not hrp then notify("No HumanoidRootPart") return end
    local direction = Camera.CFrame.LookVector
    local raycastParams = RaycastParams.new()
    raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
    raycastParams.FilterDescendantsInstances = {char}
    raycastParams.IgnoreWater = true
    local ray = Workspace:Raycast(hrp.Position, direction * 20, raycastParams)
    if ray and ray.Instance then
        hrp.CFrame = CFrame.new(hrp.Position + direction * (ray.Distance + 3))
        notify("Teleported through wall")
    else
        notify("No wall detected in front")
    end
end

local function tpToPlayer(name)
    local target = findPlayer(name)
    if target and target.Character and LocalPlayer.Character then
        local myhrp    = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
        local theirhrp = target.Character:FindFirstChild("HumanoidRootPart")
        if myhrp and theirhrp then
            myhrp.CFrame = theirhrp.CFrame + Vector3.new(2, 0, 0)
            notify("Teleported to " .. target.Name)
            return
        end
    end
    notify("Player not found: " .. tostring(name))
end

local function hideCharacter(char)
    if not char then return end
    for _, part in ipairs(char:GetDescendants()) do
        if part:IsA("BasePart") then part.Transparency = 1 part.CanCollide = false
        elseif (part:IsA("Accessory") or part:IsA("Hat")) then
            local h = part:FindFirstChild("Handle")
            if h then h.Transparency = 1 end
        elseif part:IsA("ParticleEmitter") or part:IsA("Trail") or part:IsA("Beam") then
            part.Enabled = false
        end
    end
end

local function restoreCharacter(char)
    if not char then return end
    for _, part in ipairs(char:GetDescendants()) do
        if part:IsA("BasePart") then part.Transparency = 0 part.CanCollide = true
        elseif (part:IsA("Accessory") or part:IsA("Hat")) then
            local h = part:FindFirstChild("Handle")
            if h then h.Transparency = 0 end
        elseif part:IsA("ParticleEmitter") or part:IsA("Trail") or part:IsA("Beam") then
            part.Enabled = true
        end
    end
end

local function blockPlayer(name)
    local target = findPlayer(name)
    if not target then notify("Player not found: " .. tostring(name)) return end
    if blockedPlayers[target] then notify("Already blocked: " .. target.Name) return end
    local connections = {}
    if target.Character then
        hideCharacter(target.Character)
        local dc = target.Character.DescendantAdded:Connect(function(desc)
            task.wait()
            if desc:IsA("BasePart") then desc.Transparency = 1 desc.CanCollide = false end
        end)
        table.insert(connections, dc)
    end
    local cc = target.CharacterAdded:Connect(function(char)
        task.wait(0.1)
        hideCharacter(char)
        local dc = char.DescendantAdded:Connect(function(desc)
            task.wait()
            if desc:IsA("BasePart") then desc.Transparency = 1 desc.CanCollide = false end
        end)
        table.insert(connections, dc)
    end)
    table.insert(connections, cc)
    blockedPlayers[target] = {connections = connections}
    notify("Blocked: " .. target.Name)
end

local function unblockPlayer(name)
    local target = findPlayer(name)
    if not target or not blockedPlayers[target] then notify("Not blocked: " .. tostring(name)) return end
    for _, conn in ipairs(blockedPlayers[target].connections) do
        pcall(function() conn:Disconnect() end)
    end
    blockedPlayers[target] = nil
    if target.Character then restoreCharacter(target.Character) end
    notify("Unblocked: " .. target.Name)
end

local function setJumpPower(n)
    if not n then notify("Invalid jump power") return end
    local function apply(hum)
        if not hum then return end
        pcall(function()
            hum.UseJumpPower = true
            hum.JumpPower    = n
            if hum.JumpHeight ~= nil then hum.JumpHeight = math.max(0, n / 2) end
        end)
    end
    local char = LocalPlayer.Character
    if char then
        local hum = char:FindFirstChildOfClass("Humanoid")
        if hum then apply(hum) notify("JumpPower set to " .. tostring(n)) return end
    end
    local conn
    conn = LocalPlayer.CharacterAdded:Connect(function(ch)
        local hum = ch:WaitForChild("Humanoid", 5)
        if hum then apply(hum) notify("JumpPower set to " .. tostring(n)) end
        if conn then conn:Disconnect() conn = nil end
    end)
end

local function back()
    if not deathPosition then notify("No death position saved") return end
    local char = LocalPlayer.Character
    if not char then notify("No character") return end
    local hrp = char:FindFirstChild("HumanoidRootPart")
    if hrp then
        hrp.CFrame = CFrame.new(deathPosition)
        notify("Teleported to death location")
    else notify("No HumanoidRootPart") end
end

local function die()
    local char = LocalPlayer.Character
    if not char then notify("No character") return end
    local hum = char:FindFirstChildOfClass("Humanoid")
    if hum then hum.Health = 0 notify("You died.")
    else notify("No Humanoid") end
end

local function fetchServers()
    local placeId    = game.PlaceId
    local allServers = {}
    local cursor     = ""
    local maxPages   = 5
    for page = 1, maxPages do
        local url = "https://games.roblox.com/v1/games/" .. placeId .. "/servers/Public?sortOrder=Asc&limit=100"
        if cursor and cursor ~= "" then url = url .. "&cursor=" .. cursor end
        local success, result = pcall(function()
            return HttpService:JSONDecode(game:HttpGet(url))
        end)
        if not success or not result or not result.data then break end
        for _, server in ipairs(result.data) do table.insert(allServers, server) end
        if result.nextPageCursor and result.nextPageCursor ~= "" then
            cursor = result.nextPageCursor
        else break end
    end
    return allServers
end

local function showServerHopGUI()
    local existing = playerGui:FindFirstChild("ServerHopUI")
    if existing then existing:Destroy() end

    local gui = Instance.new("ScreenGui")
    gui.Name         = "ServerHopUI"
    gui.ResetOnSpawn = false
    gui.Parent       = playerGui

    local main = Instance.new("Frame")
    main.Size                 = UDim2.new(0, 480, 0, 560)
    main.Position             = UDim2.new(0.5, -240, 0.5, -280)
    main.BackgroundColor3     = Color3.fromRGB(20, 20, 20)
    main.BackgroundTransparency = 0.05
    main.Active               = true
    main.Draggable            = true
    main.Parent               = gui
    Instance.new("UICorner", main).CornerRadius = UDim.new(0, 14)

    local mainStroke = Instance.new("UIStroke", main)
    mainStroke.Color     = Color3.fromRGB(60, 60, 60)
    mainStroke.Thickness = 1.5

    local titleBar = Instance.new("Frame", main)
    titleBar.Size                 = UDim2.new(1, 0, 0, 50)
    titleBar.BackgroundColor3     = Color3.fromRGB(25, 25, 25)
    titleBar.BackgroundTransparency = 0.1
    titleBar.BorderSizePixel      = 0
    Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 14)

    local titleFix = Instance.new("Frame", titleBar)
    titleFix.Size                 = UDim2.new(1, 0, 0, 14)
    titleFix.Position             = UDim2.new(0, 0, 1, -14)
    titleFix.BackgroundColor3     = Color3.fromRGB(25, 25, 25)
    titleFix.BackgroundTransparency = 0.1
    titleFix.BorderSizePixel      = 0

    local titleLabel = Instance.new("TextLabel", titleBar)
    titleLabel.Size               = UDim2.new(1, -50, 1, 0)
    titleLabel.Position           = UDim2.new(0, 15, 0, 0)
    titleLabel.BackgroundTransparency = 1
    titleLabel.Text               = "Server Browser"
    titleLabel.Font               = Enum.Font.GothamBold
    titleLabel.TextSize           = 20
    titleLabel.TextColor3         = Color3.fromRGB(255, 255, 255)
    titleLabel.TextXAlignment     = Enum.TextXAlignment.Left

    local closeBtn = Instance.new("TextButton", titleBar)
    closeBtn.Size             = UDim2.new(0, 36, 0, 36)
    closeBtn.Position         = UDim2.new(1, -43, 0, 7)
    closeBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40)
    closeBtn.BackgroundTransparency = 0.3
    closeBtn.Text             = "x"
    closeBtn.Font             = Enum.Font.GothamBold
    closeBtn.TextSize         = 16
    closeBtn.TextColor3       = Color3.fromRGB(255, 255, 255)
    Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 8)
    closeBtn.MouseButton1Click:Connect(function() gui:Destroy() end)

    local statusLabel = Instance.new("TextLabel", main)
    statusLabel.Size              = UDim2.new(1, -20, 0, 24)
    statusLabel.Position          = UDim2.new(0, 10, 0, 58)
    statusLabel.BackgroundTransparency = 1
    statusLabel.Text              = "Loading servers..."
    statusLabel.Font              = Enum.Font.GothamBold
    statusLabel.TextSize          = 14
    statusLabel.TextColor3        = Color3.fromRGB(150, 150, 150)
    statusLabel.TextXAlignment    = Enum.TextXAlignment.Left

    local scroll = Instance.new("ScrollingFrame", main)
    scroll.Size                  = UDim2.new(1, -20, 1, -90)
    scroll.Position              = UDim2.new(0, 10, 0, 86)
    scroll.BackgroundTransparency = 1
    scroll.ScrollBarThickness    = 5
    scroll.ScrollBarImageColor3  = Color3.fromRGB(80, 80, 80)
    scroll.CanvasSize            = UDim2.new(0, 0, 0, 0)

    local listLayout = Instance.new("UIListLayout", scroll)
    listLayout.Padding = UDim.new(0, 6)

    local serverCards = {}

    local function createServerCard(server, index)
        local currentId   = game.JobId
        local isCurrent   = (server.id == currentId)
        local playerCount = server.playing or 0
        local maxPlayers  = server.maxPlayers or 0
        local isFull      = (playerCount >= maxPlayers)
        local fillPercent = maxPlayers > 0 and (playerCount / maxPlayers) or 0

        local card = Instance.new("Frame", scroll)
        card.Size = UDim2.new(1, -6, 0, 56)
        card.BackgroundColor3 = isCurrent and Color3.fromRGB(35, 45, 35) or Color3.fromRGB(30, 30, 30)
        card.BackgroundTransparency = 0.15
        Instance.new("UICorner", card).CornerRadius = UDim.new(0, 10)

        local cardStroke = Instance.new("UIStroke", card)
        cardStroke.Color     = isCurrent and Color3.fromRGB(0, 180, 80) or Color3.fromRGB(50, 50, 50)
        cardStroke.Thickness = isCurrent and 1.5 or 1

        local indexLabel = Instance.new("TextLabel", card)
        indexLabel.Size               = UDim2.new(0, 30, 1, 0)
        indexLabel.Position           = UDim2.new(0, 8, 0, 0)
        indexLabel.BackgroundTransparency = 1
        indexLabel.Text               = "#" .. tostring(index)
        indexLabel.Font               = Enum.Font.GothamBold
        indexLabel.TextSize           = 13
        indexLabel.TextColor3         = Color3.fromRGB(100, 100, 100)

        local playerLabel = Instance.new("TextLabel", card)
        playerLabel.Size              = UDim2.new(0, 120, 0, 20)
        playerLabel.Position          = UDim2.new(0, 44, 0, 8)
        playerLabel.BackgroundTransparency = 1
        playerLabel.Text              = tostring(playerCount) .. " / " .. tostring(maxPlayers) .. " players"
        playerLabel.Font              = Enum.Font.GothamBold
        playerLabel.TextSize          = 14
        playerLabel.TextColor3        = Color3.fromRGB(230, 230, 230)
        playerLabel.TextXAlignment    = Enum.TextXAlignment.Left

        local barBG = Instance.new("Frame", card)
        barBG.Size            = UDim2.new(0, 140, 0, 6)
        barBG.Position        = UDim2.new(0, 44, 0, 32)
        barBG.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
        Instance.new("UICorner", barBG).CornerRadius = UDim.new(0, 3)

        local barColor = fillPercent < 0.5 and Color3.fromRGB(0, 200, 100)
            or fillPercent < 0.8 and Color3.fromRGB(255, 180, 0)
            or Color3.fromRGB(220, 50, 50)

        local barFill = Instance.new("Frame", barBG)
        barFill.Size            = UDim2.new(math.min(fillPercent, 1), 0, 1, 0)
        barFill.BackgroundColor3 = barColor
        Instance.new("UICorner", barFill).CornerRadius = UDim.new(0, 3)

        local joinBtn = Instance.new("TextButton", card)
        joinBtn.Size     = UDim2.new(0, 80, 0, 32)
        joinBtn.Position = UDim2.new(1, -90, 0.5, -16)
        joinBtn.Font     = Enum.Font.GothamBold
        joinBtn.TextSize = 14
        Instance.new("UICorner", joinBtn).CornerRadius = UDim.new(0, 8)

        if isCurrent then
            joinBtn.Text            = "Current"
            joinBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
            joinBtn.TextColor3      = Color3.fromRGB(120, 120, 120)
            joinBtn.Active          = false
        elseif isFull then
            joinBtn.Text            = "Full"
            joinBtn.BackgroundColor3 = Color3.fromRGB(80, 30, 30)
            joinBtn.TextColor3      = Color3.fromRGB(180, 80, 80)
            joinBtn.Active          = false
        else
            joinBtn.Text            = "Join"
            joinBtn.BackgroundColor3 = Color3.fromRGB(0, 140, 255)
            joinBtn.TextColor3      = Color3.fromRGB(255, 255, 255)
            joinBtn.MouseEnter:Connect(function() smoothTween(joinBtn, 0.2, {BackgroundColor3 = Color3.fromRGB(0, 170, 255)}) end)
            joinBtn.MouseLeave:Connect(function() smoothTween(joinBtn, 0.2, {BackgroundColor3 = Color3.fromRGB(0, 140, 255)}) end)
            joinBtn.MouseButton1Click:Connect(function()
                joinBtn.Text            = "Joining..."
                joinBtn.BackgroundColor3 = Color3.fromRGB(0, 100, 180)
                notify("Joining server...")
                pcall(function()
                    TeleportService:TeleportToPlaceInstance(game.PlaceId, server.id, LocalPlayer)
                end)
            end)
        end

        return card
    end

    task.spawn(function()
        local allServers = fetchServers()
        if #allServers == 0 then
            statusLabel.Text      = "Failed to fetch servers."
            statusLabel.TextColor3 = Color3.fromRGB(255, 80, 80)
            return
        end
        statusLabel.Text      = tostring(#allServers) .. " servers found"
        statusLabel.TextColor3 = Color3.fromRGB(0, 220, 150)
        for i, server in ipairs(allServers) do
            local card = createServerCard(server, i)
            table.insert(serverCards, card)
        end
        task.wait(0.05)
        scroll.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 10)
    end)
end

local function showCommandsGUI()
    local existing = playerGui:FindFirstChild("CmdsUI")
    if existing then existing:Destroy() end

    local gui = Instance.new("ScreenGui")
    gui.Name         = "CmdsUI"
    gui.ResetOnSpawn = false
    gui.Parent       = playerGui

    local frame = Instance.new("Frame")
    frame.Size                   = UDim2.new(0, 380, 0, 520)
    frame.Position               = UDim2.new(0.5, -190, 0.5, -260)
    frame.BackgroundColor3       = Color3.fromRGB(25, 25, 25)
    frame.BackgroundTransparency = 0.15
    frame.Active                 = true
    frame.Draggable              = true
    frame.Parent                 = gui
    Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 12)

    local title = Instance.new("TextLabel")
    title.Size                   = UDim2.new(1, 0, 0, 40)
    title.BackgroundTransparency = 1
    title.Text                   = "🛠 Client Admin Commands 🛠"
    title.Font                   = Enum.Font.GothamBold
    title.TextSize               = 18
    title.TextColor3             = Color3.fromRGB(255, 255, 255)
    title.Parent                 = frame

    local closeBtn = Instance.new("TextButton")
    closeBtn.Text                   = "✖"
    closeBtn.Size                   = UDim2.new(0, 30, 0, 30)
    closeBtn.Position               = UDim2.new(1, -35, 0, 5)
    closeBtn.BackgroundTransparency = 1
    closeBtn.Font                   = Enum.Font.GothamBold
    closeBtn.TextSize               = 16
    closeBtn.TextColor3             = Color3.fromRGB(255, 255, 255)
    closeBtn.Parent                 = frame
    closeBtn.MouseButton1Click:Connect(function() gui:Destroy() end)

    local scroll = Instance.new("ScrollingFrame")
    scroll.Size                   = UDim2.new(1, -20, 1, -60)
    scroll.Position               = UDim2.new(0, 10, 0, 50)
    scroll.BackgroundTransparency = 1
    scroll.ScrollBarThickness     = 6
    scroll.Parent                 = frame

    local layout = Instance.new("UIListLayout")
    layout.Padding = UDim.new(0, 6)
    layout.Parent  = scroll

    local commands = {
        {"!fly [speed] / !unfly",                "Toggle flying (hover for info)"},
        {"!noclip / !unnoclip",                  "Toggle noclip"},
        {"!infinitejump / !uninfinitejump",       "Toggle infinite jump"},
        {"!spin {speed} / !unspin",              "Spin character (degrees/sec)"},
        {"!esp / !unesp",                        "Toggle ESP (outline only)"},
        {"!godmode / !ungodmode",                "Toggle invincibility"},
        {"!fullbright / !unfullbright",          "Toggle fullbright"},
        {"!speed {speed}",                       "Set WalkSpeed"},
        {"!jump {power}",                        "Set JumpPower"},
        {"!thru",                                "Teleport through a wall in front of you"},
        {"!tp {player}",                         "Teleport to a player"},
        {"!block {player} / !unblock {player}",  "Block / Unblock a player"},
        {"!fling",                               "Open Fling Manager GUI"},
        {"!serverhop",                           "Open server browser GUI"},
        {"!back",                                "Teleport to where you last died"},
        {"!die",                                 "Kill yourself instantly"},
        {"!cmd / !help / !menu",                 "Open this GUI"},
    }

    for _, cmdInfo in ipairs(commands) do
        local lbl = Instance.new("TextLabel")
        lbl.Size                   = UDim2.new(1, -10, 0, 26)
        lbl.BackgroundTransparency = 1
        lbl.Font                   = Enum.Font.Gotham
        lbl.TextSize               = 15
        lbl.TextColor3             = Color3.fromRGB(200, 200, 200)
        lbl.TextXAlignment         = Enum.TextXAlignment.Left
        lbl.Text                   = cmdInfo[1]
        lbl.Parent                 = scroll
        lbl.MouseEnter:Connect(function()
            lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
            lbl.Text       = cmdInfo[1] .. " — " .. cmdInfo[2]
        end)
        lbl.MouseLeave:Connect(function()
            lbl.TextColor3 = Color3.fromRGB(200, 200, 200)
            lbl.Text       = cmdInfo[1]
        end)
    end

    task.wait(0.05)
    scroll.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 10)
end

local function hookDeathTracking(char)
    local hum = char:WaitForChild("Humanoid", 5)
    if not hum then return end
    hum.Died:Connect(function()
        local hrp = char:FindFirstChild("HumanoidRootPart")
        if hrp then
            deathPosition = hrp.Position
            notify("Death position saved. Use !back to return.")
        end
    end)
end

if LocalPlayer.Character then task.spawn(hookDeathTracking, LocalPlayer.Character) end
LocalPlayer.CharacterAdded:Connect(hookDeathTracking)

UIS.JumpRequest:Connect(function()
    if infiniteJump then
        local char = LocalPlayer.Character
        local hum  = char and char:FindFirstChildOfClass("Humanoid")
        if hum then pcall(function() hum:ChangeState(Enum.HumanoidStateType.Jumping) end) end
    end
end)

local function handleCommand(msg)
    if type(msg) ~= "string" then return end
    if msg:sub(1, #prefix) ~= prefix then return end
    local body = msg:sub(#prefix + 1)
    local args = {}
    for w in body:gmatch("%S+") do table.insert(args, w) end
    local cmd = args[1] and string.lower(args[1]) or ""
    if cmd == "" then return end

    if cmd == "fly" then
        local newSpeed = tonumber(args[2])
        if newSpeed then
            flySpeed = newSpeed
            if flying then
                notify("Fly speed updated to " .. tostring(flySpeed))
            else
                startFly()
            end
        else
            startFly()
        end
    elseif cmd == "unfly" then
        stopFly()

    elseif cmd == "noclip"         then startNoclip()
    elseif cmd == "unnoclip"       then stopNoclip()

    elseif cmd == "infinitejump"   then infiniteJump = true  notify("Infinite Jump enabled")
    elseif cmd == "uninfinitejump" then infiniteJump = false notify("Infinite Jump disabled")

    elseif cmd == "spin"           then startSpin(tonumber(args[2]) or spinSpeed)
    elseif cmd == "unspin"         then stopSpin()

    elseif cmd == "esp"            then enableESP()
    elseif cmd == "unesp"          then disableESP()

    elseif cmd == "godmode"        then startGodMode()
    elseif cmd == "ungodmode"      then stopGodMode()

    elseif cmd == "fullbright"     then enableFullbright()
    elseif cmd == "unfullbright"   then disableFullbright()

    elseif cmd == "walk" or cmd == "speed" then
        local n = tonumber(args[2])
        if n then
            local char = LocalPlayer.Character
            local hum  = char and char:FindFirstChildOfClass("Humanoid")
            if hum then hum.WalkSpeed = n notify("WalkSpeed set to " .. n)
            else notify("No Humanoid found") end
        else notify("Usage: !" .. cmd .. " <number>") end

    elseif cmd == "jump" then
        local n = tonumber(args[2])
        if n then setJumpPower(n) else notify("Usage: !jump <number>") end

    elseif cmd == "thru" then thru()

    elseif cmd == "tp" then
        if args[2] then tpToPlayer(args[2]) else notify("Usage: !tp <player>") end

    elseif cmd == "block" then
        if args[2] then blockPlayer(args[2]) else notify("Usage: !block <player>") end
    elseif cmd == "unblock" then
        if args[2] then unblockPlayer(args[2]) else notify("Usage: !unblock <player>") end

    elseif cmd == "fling"     then showFlingGUI()
    elseif cmd == "serverhop" then showServerHopGUI()
    elseif cmd == "back"      then back()
    elseif cmd == "die"       then die()

    elseif cmd == "cmd" or cmd == "help" or cmd == "menu" then showCommandsGUI()

    else notify("Unknown command: " .. cmd) end
end

local usingNewChat = false
if TextChatService and TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
    pcall(function()
        TextChatService.OnIncomingMessage = function(message)
            if message.TextSource and message.TextSource.UserId == LocalPlayer.UserId then
                handleCommand(message.Text)
            end
        end
        usingNewChat = true
    end)
end
if not usingNewChat then
    LocalPlayer.Chatted:Connect(handleCommand)
end

notify("Client Admin V1.2 Loaded. Type !cmd for commands.")

Features & Information

Current Features - !fly - !noclip - !infinitejump - !spin - !esp - !godmode - !walk - !jump - !thru - !tp - !block - !fling - !serverhop - !back - !die - !cmd
#free#open src#best#admin

Community Comments (3)

CasualdeveloperCasualdeveloperApr 23, 2026

Check back every week to stay tuned for any updates!

CasualdeveloperCasualdeveloperApr 28, 2026

New update fixed stability issues and revamped some of the things such as serverhop

CasualdeveloperCasualdeveloperMay 4, 2026

@Pack_Script_Guy yes it should

More Scripts for Universal Scripts