One Tap Script by Nebula Hub | Premium & Hacking V11, Keyless

One Tap Script by Nebula Hub | Premium & Hacking V11, Keyless

One Tap • 1 day ago
3 views
One Tap Script by Nebula Hub | Premium & Hacking V11, Keyless Keyless
XenoDev
Play Game Game Link

Description

Not every script lives up to the hype, but this one for One Tap delivers what it promises. Featuring Overview and Visuals among other tools, it’s worth trying if you want to get more out of your sessions. no key needed.

What This Script Can Do

  • Overview: Handles Overview automatically in One Tap, so you don’t have to do it manually every session.
  • Visuals: Handles Visuals automatically in One Tap, so you don’t have to do it manually every session.
  • Movement: Gives you access to Movement in One Tap, which can make a real difference during longer play sessions.
  • Combat Lab: Adds Combat Lab functionality to your One Tap setup, helpful for both new and experienced players.
  • Access: No key system or Linkvertise redirect needed — just paste and run.
  • Executor Compatibility: Works great on Delta, Codex, Hydrogen, Wave, and most mobile and PC executors.

How to Use This Script

  1. Open Roblox and search for One Tap, then join any active server.
  2. Wait until you’re fully loaded into the game world before running any script.
  3. Open your executor app (Delta, Codex, Hydrogen, Wave, or any compatible one) and go to the script tab.
  4. Copy the loadstring code shown on this page and paste it into your executor’s script box, then press Execute.
  5. A GUI or confirmation should appear in-game — use it to turn on the features you want and adjust any settings.
Features
Compatible Executors

Script

--[[

    NEBULA // PREMIUM // HACKING V11

    Roblox Studio - LocalScript

    Install: StarterPlayer > StarterPlayerScripts

    Features:

    - Viewmodel & Camera Angle Lock (FPS Engine Compatibility)

    - Full Character Rotation

    - Team Check & Wall Check

    - Smooth hold-right-click camera aim assist for living enemy players and TrainingDummies
    - Server-side weapon hit validation recommended; weapon remote overrides and triggerbot disabled

    - ESP & Skeleton ESP
    - Movement: fly, walk/jump settings, authorized player teleport, test-point loop teleport

]]

local Players = game:GetService("Players")

local RunService = game:GetService("RunService")

local TweenService = game:GetService("TweenService")

local UserInputService = game:GetService("UserInputService")

local Lighting = game:GetService("Lighting")

local player = Players.LocalPlayer

local playerGui = player:WaitForChild("PlayerGui")

local mouse = player:GetMouse()

local PURPLE = Color3.fromRGB(160, 85, 255)
local NEBULA_BLUE = Color3.fromRGB(55, 160, 255)
local PREMIUM_GOLD = Color3.fromRGB(255, 196, 55)
local HACKING_GREEN = Color3.fromRGB(65, 235, 125)
local BRAND_RICH_TEXT = 'NEBULA // PREMIUM // HACKING V11'

local BG = Color3.fromRGB(13, 10, 22)

local PANEL = Color3.fromRGB(27, 21, 41)

local WHITE = Color3.fromRGB(241, 235, 255)

local enabled = {}

local espObjects = {}

local skeletonLines = {}

local originalCollisions = {}

local originalEffects = {}

local snowEnabled = false

local snowRunning = false

local fpsBoostEnabled = false

local motionBlurEnabled = false

local noclipEnabled = false

local menuOpen = true

-- Combat settings

local AIMBOT_FOV = 600

local isRightMouseDown = false

-- Motion blur state

local lastCameraLook = nil

local currentBlur = 0

local blurEffect

local BLUR_MAX = 3

local BLUR_SENSITIVITY = 18

local BLUR_THRESHOLD = 0.015

local BLUR_RESPONSE = 12

local originalShadows = Lighting.GlobalShadows

-- Clean up existing UI

local oldGui = playerGui:FindFirstChild("NEBULA_HACKING_V2")

if oldGui then

    oldGui:Destroy()

end

-- MAIN GUI

local gui = Instance.new("ScreenGui")

gui.Name = "NEBULA_HACKING_V2"

gui.ResetOnSpawn = false

gui.IgnoreGuiInset = true

gui.DisplayOrder = 20

gui.Parent = playerGui

-- Keep one visible cursor while the menu is open: hide Roblox's default icon
-- and draw a single NEBULA cursor that follows the same mouse position.
local originalMouseIconEnabled = UserInputService.MouseIconEnabled
local originalMouseBehavior = UserInputService.MouseBehavior
local customCursor = Instance.new("Frame")
customCursor.Name = "NebulaCursor"
customCursor.Size = UDim2.fromOffset(10, 10)
customCursor.AnchorPoint = Vector2.new(0.5, 0.5)
customCursor.BackgroundColor3 = NEBULA_BLUE
customCursor.BorderSizePixel = 0
customCursor.Visible = false
customCursor.ZIndex = 1000
customCursor.Parent = gui
local cursorCorner = Instance.new("UICorner")
cursorCorner.CornerRadius = UDim.new(1, 0)
cursorCorner.Parent = customCursor
local cursorStroke = Instance.new("UIStroke")
cursorStroke.Color = PREMIUM_GOLD
cursorStroke.Thickness = 1.5
cursorStroke.Parent = customCursor

-- Run after Roblox's camera update so first-person mouse locking does not
-- immediately recapture the pointer while the panel is open.
RunService:BindToRenderStep("NebulaCursorControl", Enum.RenderPriority.Last.Value, function()
    if menuOpen and customCursor.Visible then
        -- Keep the real Roblox icon hidden and unlock the mouse for UI clicks.
        if UserInputService.MouseIconEnabled then
            UserInputService.MouseIconEnabled = false
        end
        if UserInputService.MouseBehavior ~= Enum.MouseBehavior.Default then
            UserInputService.MouseBehavior = Enum.MouseBehavior.Default
        end
        local mousePosition = UserInputService:GetMouseLocation()
        customCursor.Position = UDim2.fromOffset(mousePosition.X, mousePosition.Y)
    end
end)

local main = Instance.new("Frame")

main.Name = "Main"

main.Size = UDim2.fromOffset(650, 450)

main.Position = UDim2.new(0.5, -325, 0.5, -225)

main.BackgroundColor3 = BG

main.BorderSizePixel = 0

main.Parent = gui

Instance.new("UICorner", main).CornerRadius = UDim.new(0, 12)


local mainStroke = Instance.new("UIStroke")

mainStroke.Color = PURPLE

mainStroke.Thickness = 1.5

mainStroke.Parent = main

-- No animated overlay or outline pulse; only the panel open/close transitions remain.

local top = Instance.new("Frame")

top.Size = UDim2.new(1, 0, 0, 76)

top.BackgroundColor3 = Color3.fromRGB(32, 21, 50)

top.BorderSizePixel = 0

top.Parent = main

Instance.new("UICorner", top).CornerRadius = UDim.new(0, 12)

local title = Instance.new("TextLabel")

title.Size = UDim2.new(1, -65, 0, 44)

title.Position = UDim2.fromOffset(18, 5)

title.BackgroundTransparency = 1

title.Text = BRAND_RICH_TEXT
title.RichText = true
title.TextColor3 = WHITE

title.TextXAlignment = Enum.TextXAlignment.Left

title.Font = Enum.Font.GothamBlack

title.TextSize = 23

title.Parent = top

-- Animate the actual title with a brief 1011101-style binary decode.
-- This changes only the title text; it does not create another overlay.
local titleAnimationToken = 0
local function animateTitleBinary()
    titleAnimationToken += 1
    local token = titleAnimationToken

    local function binaryChunk(length)
        local digits = table.create(length)
        for i = 1, length do
            digits[i] = math.random(0, 1) == 1 and "1" or "0"
        end
        return table.concat(digits)
    end

    task.spawn(function()
        for frame = 1, 8 do
            if token ~= titleAnimationToken or not title.Parent then return end
            local nebulaBits = frame == 1 and "1011101" or binaryChunk(7)
            local premiumBits = binaryChunk(7)
            local hackingBits = binaryChunk(7)
            title.Text = '' .. nebulaBits .. ' // '
                .. '' .. premiumBits .. ' // '
                .. '' .. hackingBits .. ' '
                .. 'V11'
            task.wait(0.055)
        end
        if token == titleAnimationToken and title.Parent then
            title.Text = BRAND_RICH_TEXT
        end
    end)
end

local subtitle = Instance.new("TextLabel")

subtitle.Size = UDim2.new(1, -25, 0, 20)

subtitle.Position = UDim2.fromOffset(19, 45)

subtitle.BackgroundTransparency = 1

subtitle.Text = ""
subtitle.Visible = false

subtitle.TextColor3 = PURPLE

subtitle.TextXAlignment = Enum.TextXAlignment.Left

subtitle.Font = Enum.Font.Code

subtitle.TextSize = 12

subtitle.Parent = top

local close = Instance.new("TextButton")

close.Size = UDim2.fromOffset(36, 36)

close.Position = UDim2.new(1, -47, 0, 17)

close.BackgroundColor3 = Color3.fromRGB(78, 37, 102)

close.Text = "×"

close.TextColor3 = WHITE

close.Font = Enum.Font.GothamBold

close.TextSize = 25

close.Parent = top

Instance.new("UICorner", close).CornerRadius = UDim.new(0, 8)

local sidebar = Instance.new("Frame")

sidebar.Position = UDim2.fromOffset(12, 88)

sidebar.Size = UDim2.new(0, 165, 1, -126)

sidebar.BackgroundColor3 = PANEL

sidebar.BorderSizePixel = 0

sidebar.Parent = main

Instance.new("UICorner", sidebar).CornerRadius = UDim.new(0, 8)

local sideLayout = Instance.new("UIListLayout")

sideLayout.Padding = UDim.new(0, 7)

sideLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center

sideLayout.SortOrder = Enum.SortOrder.LayoutOrder

sideLayout.Parent = sidebar

local sidePad = Instance.new("UIPadding")

sidePad.PaddingTop = UDim.new(0, 10)

sidePad.Parent = sidebar

local content = Instance.new("ScrollingFrame")

content.Position = UDim2.fromOffset(190, 88)

content.Size = UDim2.new(1, -202, 1, -126)

content.BackgroundColor3 = PANEL

content.BorderSizePixel = 0

content.ScrollBarThickness = 3

content.ScrollBarImageColor3 = PURPLE

content.AutomaticCanvasSize = Enum.AutomaticSize.Y

content.CanvasSize = UDim2.new()

content.Parent = main

Instance.new("UICorner", content).CornerRadius = UDim.new(0, 8)

local contentLayout = Instance.new("UIListLayout")

contentLayout.Padding = UDim.new(0, 7)

contentLayout.SortOrder = Enum.SortOrder.LayoutOrder

contentLayout.Parent = content

local contentPad = Instance.new("UIPadding")

contentPad.PaddingTop = UDim.new(0, 10)

contentPad.PaddingLeft = UDim.new(0, 10)

contentPad.PaddingRight = UDim.new(0, 10)

contentPad.PaddingBottom = UDim.new(0, 10)

contentPad.Parent = content

local status = Instance.new("TextLabel")

status.Position = UDim2.new(0, 12, 1, -31)

status.Size = UDim2.new(1, -24, 0, 23)

status.BackgroundTransparency = 1

status.Text = "SYSTEM READY // NOSNIY ADMIN"

status.TextColor3 = Color3.fromRGB(190, 165, 220)

status.Font = Enum.Font.Code

status.TextSize = 10

status.TextXAlignment = Enum.TextXAlignment.Left

status.Parent = main

-- Floating reopen button

local reopen = Instance.new("TextButton")

reopen.Name = "FloatingNebulaButton"

reopen.Size = UDim2.fromOffset(54, 54)

reopen.Position = UDim2.new(0, 18, 0.5, 0)

reopen.BackgroundColor3 = BG

reopen.Text = "👨🏻💻"
reopen.RichText = false
reopen.TextColor3 = WHITE

reopen.Font = Enum.Font.GothamBold

reopen.TextSize = 28

reopen.Visible = false

reopen.Active = true

reopen.Parent = gui

Instance.new("UICorner", reopen).CornerRadius = UDim.new(0, 9)

local reopenStroke = Instance.new("UIStroke")

reopenStroke.Color = PURPLE

reopenStroke.Thickness = 1.5

reopenStroke.Parent = reopen

-- Draggable function

local function makeDraggable(handle, target, ignoreButton)

    local dragging = false

    local dragStart, startPosition, activeInput

    handle.InputBegan:Connect(function(input)

        if ignoreButton and input.UserInputType ~= Enum.UserInputType.MouseButton1 and input.UserInputType ~= Enum.UserInputType.Touch then

            return

        end

        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then

            dragging = true

            dragStart = input.Position

            startPosition = target.Position

            activeInput = input

            input.Changed:Connect(function()

                if input.UserInputState == Enum.UserInputState.End then

                    dragging = false

                end

            end)

        end

    end)

    UserInputService.InputChanged:Connect(function(input)

        if not dragging then return end

        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then

            if activeInput and activeInput.UserInputType == Enum.UserInputType.Touch and input ~= activeInput and input.UserInputType ~= Enum.UserInputType.MouseMovement then

                return

            end

            local delta = input.Position - dragStart

            target.Position = UDim2.new(

                startPosition.X.Scale,

                startPosition.X.Offset + delta.X,

                startPosition.Y.Scale,

                startPosition.Y.Offset + delta.Y

            )

        end

    end)

end

makeDraggable(top, main, false)

makeDraggable(reopen, reopen, false)

local openingAnimationToken = 0

local function playNebulaOpenAnimation()
    openingAnimationToken += 1
    local token = openingAnimationToken

    local intro = Instance.new("Frame")
    intro.Name = "NebulaBinaryIntro"
    intro.Size = UDim2.fromScale(1, 1)
    intro.Position = UDim2.fromScale(0, 0)
    intro.BackgroundColor3 = Color3.fromRGB(3, 4, 10)
    intro.BackgroundTransparency = 1
    intro.BorderSizePixel = 0
    intro.ZIndex = 100
    intro.Parent = gui

    local left = Instance.new("Frame")
    left.Name = "BinarySide"
    left.Size = UDim2.new(0.5, 0, 1, 0)
    left.Position = UDim2.new(-0.5, 0, 0, 0)
    left.BackgroundColor3 = Color3.fromRGB(7, 5, 15)
    left.BackgroundTransparency = 0.08
    left.BorderSizePixel = 0
    left.ClipsDescendants = true
    left.ZIndex = 101
    left.Parent = intro

    local right = Instance.new("Frame")
    right.Name = "BrandSide"
    right.Position = UDim2.new(1, 0, 0, 0)
    right.Size = UDim2.new(0.5, 0, 1, 0)
    right.BackgroundColor3 = Color3.fromRGB(5, 6, 12)
    right.BackgroundTransparency = 0.08
    right.BorderSizePixel = 0
    right.ClipsDescendants = true
    right.ZIndex = 101
    right.Parent = intro

    local leftStroke = Instance.new("UIStroke")
    leftStroke.Color = PURPLE
    leftStroke.Thickness = 1.5
    leftStroke.Transparency = 0.12
    leftStroke.Parent = left

    local binaryRows = {}
    local function makeBinaryText(length)
        local chunks = table.create(length)
        for i = 1, length do
            if math.random(0, 1) == 1 then
                chunks[i] = '1'
            else
                chunks[i] = '0'
            end
        end
        return table.concat(chunks)
    end

    for row = 1, 13 do
        local binary = Instance.new("TextLabel")
        binary.Name = "BinaryRow" .. row
        binary.BackgroundTransparency = 1
        binary.Position = UDim2.new(0, 18 + ((row % 3) * 15), 0, (row - 1) * 43 - 20)
        binary.Size = UDim2.new(1, -26, 0, 34)
        binary.Font = Enum.Font.Code
        binary.TextSize = 23
        binary.TextXAlignment = Enum.TextXAlignment.Left
        binary.RichText = true
        binary.Text = makeBinaryText(25)
        binary.TextColor3 = WHITE
        binary.TextTransparency = 0.18
        binary.ZIndex = 102
        binary.Parent = left
        table.insert(binaryRows, binary)
    end

    -- Smooth, low-cost data flicker; cancel immediately if the intro is closed.
    task.spawn(function()
        while token == openingAnimationToken and intro.Parent do
            for _, binary in ipairs(binaryRows) do
                if binary.Parent and math.random() > 0.22 then
                    binary.Text = makeBinaryText(25)
                end
            end
            task.wait(0.11)
        end
    end)

    local accent = Instance.new("Frame")
    accent.Name = "AccentBar"
    accent.AnchorPoint = Vector2.new(0.5, 0.5)
    accent.Position = UDim2.new(0.5, 0, 0.365, 0)
    accent.Size = UDim2.new(0, 0, 0, 3)
    accent.BackgroundColor3 = PURPLE
    accent.BorderSizePixel = 0
    accent.ZIndex = 103
    accent.Parent = right

    local brand = Instance.new("TextLabel")
    brand.Name = "IntroBrand"
    brand.BackgroundTransparency = 1
    brand.AnchorPoint = Vector2.new(0.5, 0.5)
    brand.Position = UDim2.new(0.5, 0, 0.445, 14)
    brand.Size = UDim2.new(0.94, 0, 0, 58)
    brand.Font = Enum.Font.GothamBlack
    brand.Text = BRAND_RICH_TEXT
    brand.RichText = true
    brand.TextColor3 = WHITE
    brand.TextSize = 24
    brand.TextScaled = true
    brand.TextTransparency = 1
    brand.ZIndex = 103
    brand.Parent = right

    local brandStroke = Instance.new("UIStroke")
    brandStroke.Color = PURPLE
    brandStroke.Thickness = 1.2
    brandStroke.Transparency = 1
    brandStroke.Parent = brand

    local status = Instance.new("TextLabel")
    status.Name = "IntroStatus"
    status.BackgroundTransparency = 1
    status.AnchorPoint = Vector2.new(0.5, 0.5)
    status.Position = UDim2.new(0.5, 0, 0.535, 12)
    status.Size = UDim2.new(0.88, 0, 0, 26)
    status.Font = Enum.Font.Code
    status.Text = ""
    status.TextColor3 = PURPLE
    status.TextTransparency = 1
    status.TextSize = 14
    status.ZIndex = 103
    status.Parent = right

    TweenService:Create(intro, TweenInfo.new(0.22, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
        BackgroundTransparency = 0.04
    }):Play()
    TweenService:Create(left, TweenInfo.new(0.48, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
        Position = UDim2.new(0, 0, 0, 0)
    }):Play()
    TweenService:Create(right, TweenInfo.new(0.48, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
        Position = UDim2.new(0.5, 0, 0, 0)
    }):Play()
    TweenService:Create(accent, TweenInfo.new(0.42, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
        Size = UDim2.new(0.66, 0, 0, 3)
    }):Play()
    TweenService:Create(brand, TweenInfo.new(0.42, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
        Position = UDim2.new(0.5, 0, 0.445, 0),
        TextTransparency = 0
    }):Play()
    TweenService:Create(brandStroke, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
        Transparency = 0.2
    }):Play()
    TweenService:Create(status, TweenInfo.new(0.32, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
        Position = UDim2.new(0.5, 0, 0.535, 0),
        TextTransparency = 0
    }):Play()

    local initializing = "[ INITIALIZING SYSTEM... ]"
    task.spawn(function()
        for i = 1, #initializing do
            if token ~= openingAnimationToken or not intro.Parent then return end
            status.Text = string.sub(initializing, 1, i)
            task.wait(0.022)
        end
    end)

    task.delay(1.12, function()
        if token ~= openingAnimationToken or not intro.Parent then
            if intro.Parent then intro:Destroy() end
            return
        end
        status.Text = "[ ACCESS GRANTED // NEBULA ONLINE ]"
        status.TextColor3 = Color3.fromRGB(120, 255, 177)
        TweenService:Create(accent, TweenInfo.new(0.18, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
            BackgroundColor3 = Color3.fromRGB(120, 255, 177)
        }):Play()
        TweenService:Create(brandStroke, TweenInfo.new(0.18), {
            Color = Color3.fromRGB(120, 255, 177),
            Transparency = 0.08
        }):Play()

        task.wait(0.36)
        if token ~= openingAnimationToken or not intro.Parent then return end

        for _, obj in ipairs(intro:GetDescendants()) do
            if obj:IsA("GuiObject") then
                local props = {BackgroundTransparency = 1}
                if obj:IsA("TextLabel") then props.TextTransparency = 1 end
                TweenService:Create(obj, TweenInfo.new(0.28, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), props):Play()
            elseif obj:IsA("UIStroke") then
                TweenService:Create(obj, TweenInfo.new(0.22), {Transparency = 1}):Play()
            end
        end
        TweenService:Create(intro, TweenInfo.new(0.28, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
            BackgroundTransparency = 1
        }):Play()

        task.delay(0.3, function()
            if intro.Parent then intro:Destroy() end
            if token == openingAnimationToken then
                main.Visible = true
                main.BackgroundTransparency = 0
                main.Position = UDim2.new(0.5, -325, 0.5, -210)
                main.Size = UDim2.fromOffset(0, 0)
                local guiOpenTween = TweenService:Create(main, TweenInfo.new(0.48, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
                    Size = UDim2.fromOffset(650, 450),
                    Position = UDim2.new(0.5, -325, 0.5, -225),
                    BackgroundTransparency = 0
                })
                guiOpenTween:Play()
            end
        end)
    end)
end

local function setMenu(open)
    menuOpen = open
    if open then
        -- Use the custom NEBULA cursor and prevent the default cursor showing twice.
        UserInputService.MouseBehavior = Enum.MouseBehavior.Default
        UserInputService.MouseIconEnabled = false
        customCursor.Visible = true
        main.Visible = false
        reopen.Visible = false
        animateTitleBinary()
        playNebulaOpenAnimation()
    else
        openingAnimationToken += 1
        local closeToken = openingAnimationToken
        local intro = gui:FindFirstChild("NebulaBinaryIntro")
        if intro then intro:Destroy() end
        reopen.Visible = true
        customCursor.Visible = false
        UserInputService.MouseIconEnabled = originalMouseIconEnabled
        UserInputService.MouseBehavior = originalMouseBehavior

        -- Smoothly shrink and lift the panel instead of abruptly hiding it.
        if main.Visible then
            TweenService:Create(main, TweenInfo.new(0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.In), {
                Size = UDim2.fromOffset(610, 410),
                Position = UDim2.new(0.5, -305, 0.5, -220),
                BackgroundTransparency = 0.12
            }):Play()
            task.delay(0.21, function()
                if not menuOpen and closeToken == openingAnimationToken then
                    main.Visible = false
                    main.Size = UDim2.fromOffset(650, 450)
                    main.Position = UDim2.new(0.5, -325, 0.5, -225)
                    main.BackgroundTransparency = 0
                end
            end)
        else
            main.Visible = false
        end
    end
end

close.MouseButton1Click:Connect(function() setMenu(false) end)

reopen.MouseButton1Click:Connect(function() setMenu(true) end)

-- Apply the single-cursor setup on startup (menuOpen starts true).
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = false
customCursor.Visible = true

-- GUI HELPERS

local function clearContent()

    for _, child in ipairs(content:GetChildren()) do

        if child ~= contentLayout and child ~= contentPad and child:IsA("GuiObject") then

            child:Destroy()

        end

    end

end

local function addHeading(text)

    local label = Instance.new("TextLabel")

    label.Size = UDim2.new(1, -4, 0, 27)

    label.BackgroundTransparency = 1

    label.Text = "  " .. text

    label.TextColor3 = PURPLE

    label.Font = Enum.Font.GothamBold

    label.TextSize = 13

    label.TextXAlignment = Enum.TextXAlignment.Left

    label.Parent = content

end

local function addButton(text, callback)

    local button = Instance.new("TextButton")

    button.Size = UDim2.new(1, -4, 0, 38)

    button.BackgroundColor3 = Color3.fromRGB(38, 29, 54)

    button.Text = text

    button.TextColor3 = WHITE

    button.Font = Enum.Font.GothamMedium

    button.TextSize = 12

    button.AutoButtonColor = false

    button.Parent = content

    Instance.new("UICorner", button).CornerRadius = UDim.new(0, 6)

    local stroke = Instance.new("UIStroke")

    stroke.Color = Color3.fromRGB(69, 51, 91)

    stroke.Parent = button

    button.MouseEnter:Connect(function()

        TweenService:Create(button, TweenInfo.new(0.12), { BackgroundColor3 = Color3.fromRGB(61, 39, 82) }):Play()

    end)

    button.MouseLeave:Connect(function()

        TweenService:Create(button, TweenInfo.new(0.12), { BackgroundColor3 = Color3.fromRGB(38, 29, 54) }):Play()

    end)

    button.MouseButton1Click:Connect(callback)

    return button

end

-- TEAM CHECK HELPER

local function isSameTeam(targetModel)

    if not enabled["Team Check"] then return false end

    local targetPlayer = Players:GetPlayerFromCharacter(targetModel)

    if targetPlayer and player then

        if targetPlayer.Team ~= nil and player.Team ~= nil then

            return targetPlayer.Team == player.Team

        elseif targetPlayer.TeamColor == player.TeamColor then

            return true

        end

    end

    return false

end

-- WALL CHECK HELPER

local function isVisible(targetPart)

    if not enabled["Wall Check"] then return true end

    local camera = workspace.CurrentCamera

    if not camera or not targetPart then return false end

    local origin = camera.CFrame.Position

    local destination = targetPart.Position

    local direction = destination - origin

    local raycastParams = RaycastParams.new()

    raycastParams.FilterType = Enum.RaycastFilterType.Exclude

    local ignoreList = {}

    if player.Character then table.insert(ignoreList, player.Character) end

    if targetPart.Parent then table.insert(ignoreList, targetPart.Parent) end

    raycastParams.FilterDescendantsInstances = ignoreList

    local result = workspace:Raycast(origin, direction, raycastParams)

    return result == nil

end

-- TARGET SCANNING LOGIC
-- Only living enemy player characters and models in TrainingDummies are targetable.
local function getValidTargets()
    local targets = {}
    local seen = {}

    local function addTarget(model)
        if not model or model == player.Character or seen[model] then return end
        local humanoid = model:FindFirstChildOfClass("Humanoid")
        local head = model:FindFirstChild("Head")
        if not humanoid or humanoid.Health  0 and part and part:IsA("BasePart") then
            local screenPosition, onScreen = camera:WorldToViewportPoint(part.Position)
            if onScreen and screenPosition.Z > 0 and isVisible(part) then
                local point = Vector2.new(screenPosition.X, screenPosition.Y)
                local distance = (point - screenCenter).Magnitude
                if distance < closestDistance then
                    closestDistance = distance
                    closestPart = part
                end
            end
        end
    end

    return closestPart
end

local function processAimbot(deltaTime)
    if not enabled["Aimbot"] or not isRightMouseDown then
        currentAimTarget = nil
        return
    end
    if UserInputService:GetFocusedTextBox() then return end

    local camera = workspace.CurrentCamera
    if not camera then return end

    -- Keep the same target between frames to reduce jitter/target hopping.
    if not currentAimTarget or not currentAimTarget.Parent then
        currentAimTarget = getClosestAimTarget()
    else
        local model = currentAimTarget:FindFirstAncestorOfClass("Model")
        local humanoid = model and model:FindFirstChildOfClass("Humanoid")
        if not model or (humanoid and humanoid.Health <= 0) or not isVisible(currentAimTarget) then
            currentAimTarget = getClosestAimTarget()
        end
    end

    local target = currentAimTarget
    if not target or not target.Parent then return end

    local direction = target.Position - camera.CFrame.Position
    if direction.Magnitude  0 and p2.Z > 0 then

                    local delta = Vector2.new(p2.X - p1.X, p2.Y - p1.Y)

                    line.Position = UDim2.fromOffset((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2)

                    line.Size = UDim2.fromOffset(delta.Magnitude, 2)

                    line.Rotation = math.deg(math.atan2(delta.Y, delta.X))

                    line.Visible = true

                else

                    line.Visible = false

                end

            elseif line then

                line.Visible = false

            end

        end

        for index = #bones + 1, #lines do

            lines[index].Visible = false

        end

    end

    for model in pairs(skeletonLines) do

        if not validSet[model] then removeESP(model) end

    end

end

-- SNOW EFFECT

local snowGui = Instance.new("ScreenGui")

snowGui.Name = "NebulaSnow"

snowGui.IgnoreGuiInset = true

snowGui.ResetOnSpawn = false

snowGui.DisplayOrder = 5

snowGui.Parent = playerGui

local function setSnow(state)

    snowEnabled = state

    if not state then

        snowGui:ClearAllChildren()

        status.Text = "SNOWING DISABLED"

        return

    end

    status.Text = "SNOWING ENABLED"

    if snowRunning then return end

    snowRunning = true

    task.spawn(function()

        while snowEnabled do

            local flake = Instance.new("TextLabel")

            flake.BackgroundTransparency = 1

            flake.Text = "❄"

            flake.TextColor3 = Color3.fromRGB(238, 243, 255)

            flake.TextTransparency = math.random(0, 35) / 100

            flake.TextSize = math.random(12, 24)

            flake.Font = Enum.Font.Gotham

            flake.AnchorPoint = Vector2.new(0.5, 0.5)

            flake.Position = UDim2.fromScale(math.random(0, 100) / 100, -0.04)

            flake.Size = UDim2.fromOffset(30, 30)

            flake.Parent = snowGui

            local duration = math.random(5, 10)

            local startX = flake.Position.X.Scale

            local drift = math.random(-12, 12) / 100

            TweenService:Create(flake, TweenInfo.new(duration, Enum.EasingStyle.Linear), {

                Position = UDim2.fromScale(math.clamp(startX + drift, 0, 1), 1.05),

                Rotation = math.random(-180, 180)

            }):Play()

            task.delay(duration, function()

                if flake.Parent then flake:Destroy() end

            end)

            task.wait(0.16)

        end

        snowRunning = false

    end)

end

-- MOTION BLUR

blurEffect = Lighting:FindFirstChild("NebulaMotionBlur")

if not blurEffect or not blurEffect:IsA("BlurEffect") then

    blurEffect = Instance.new("BlurEffect")

    blurEffect.Name = "NebulaMotionBlur"

    blurEffect.Parent = Lighting

end

blurEffect.Size = 0

blurEffect.Enabled = false

local function resetMotionBlur()

    currentBlur = 0

    lastCameraLook = nil

    if blurEffect then

        blurEffect.Size = 0

        blurEffect.Enabled = false

    end

end

local function updateMotionBlur(deltaTime)

    if not motionBlurEnabled or fpsBoostEnabled then

        if currentBlur ~= 0 or blurEffect.Enabled then

            currentBlur = 0

            blurEffect.Size = 0

            blurEffect.Enabled = false

        end

        lastCameraLook = nil

        return

    end

    local camera = workspace.CurrentCamera

    if not camera then resetMotionBlur() return end

    local currentLook = camera.CFrame.LookVector

    if not lastCameraLook then

        lastCameraLook = currentLook

        blurEffect.Enabled = true

        blurEffect.Size = currentBlur

        return

    end

    local movement = (currentLook - lastCameraLook).Magnitude

    lastCameraLook = currentLook

    local targetBlur = 0

    if movement > BLUR_THRESHOLD then

        targetBlur = math.clamp(movement * BLUR_SENSITIVITY, 0, BLUR_MAX)

    end

    local dt = math.min(deltaTime, 0.1)

    local alpha = 1 - math.exp(-BLUR_RESPONSE * dt)

    currentBlur += (targetBlur - currentBlur) * alpha

    currentBlur = math.clamp(currentBlur, 0, BLUR_MAX)

    blurEffect.Size = currentBlur

    blurEffect.Enabled = currentBlur > 0.05

end

-- FPS BOOST

local function setFPSBoost(state)

    if fpsBoostEnabled == state then return end

    fpsBoostEnabled = state

    if state then

        originalShadows = Lighting.GlobalShadows

        table.clear(originalEffects)

        for _, effect in ipairs(Lighting:GetDescendants()) do

            if effect:IsA("PostEffect") then

                originalEffects[effect] = effect.Enabled

                effect.Enabled = false

            end

        end

        resetMotionBlur()

        Lighting.GlobalShadows = false

        pcall(function()

            settings().Rendering.QualityLevel = Enum.QualityLevel.Level01

        end)

        status.Text = "FPS BOOST ENABLED"

    else

        for effect, wasEnabled in pairs(originalEffects) do

            if effect.Parent and effect ~= blurEffect then

                effect.Enabled = wasEnabled

            end

        end

        table.clear(originalEffects)

        Lighting.GlobalShadows = originalShadows

        pcall(function()

            settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic

        end)

        resetMotionBlur()

        status.Text = "FPS BOOST DISABLED"

    end

end

-- NOCLIP

local function setNoclip(state)

    noclipEnabled = state

    status.Text = "NOCLIP: " .. (state and "ON" or "OFF")

    if not state then

        for part, originalValue in pairs(originalCollisions) do

            if part.Parent then

                part.CanCollide = originalValue

            end

        end

        table.clear(originalCollisions)

    end

end

RunService.Stepped:Connect(function()

    if not noclipEnabled then return end

    local character = player.Character

    if not character then return end

    for _, part in ipairs(character:GetDescendants()) do

        if part:IsA("BasePart") then

            if originalCollisions[part] == nil then

                originalCollisions[part] = part.CanCollide

            end

            part.CanCollide = false

        end

    end

end)

player.CharacterAdded:Connect(function()

    table.clear(originalCollisions)

end)

-- MOVEMENT MODULE (for your own Roblox Studio test game)
-- Player teleport is a one-shot action. Loop teleport uses only designated test points.
local flyEnabled = false
local flySpeed = 60
local loopTeleportEnabled = false
local walkSpeedValue = 16
local jumpPowerValue = 50
local selectedTeleportUserId = nil
local movementLoopToken = 0
local flightVelocity = nil
local flightGyro = nil
local flightConnection = nil

local function getCharacterParts()
    local character = player.Character
    if not character then return nil, nil, nil end
    return character, character:FindFirstChildOfClass("Humanoid"), character:FindFirstChild("HumanoidRootPart")
end

local function clearFlightObjects()
    if flightConnection then
        flightConnection:Disconnect()
        flightConnection = nil
    end
    if flightVelocity then
        flightVelocity:Destroy()
        flightVelocity = nil
    end
    if flightGyro then
        flightGyro:Destroy()
        flightGyro = nil
    end
end

local function setFly(state)
    flyEnabled = state
    clearFlightObjects()
    local _, humanoid, root = getCharacterParts()

    if not state then
        if humanoid then
            humanoid.PlatformStand = false
            humanoid:ChangeState(Enum.HumanoidStateType.GettingUp)
        end
        status.Text = "FLY: OFF"
        return
    end

    if not humanoid or not root then
        flyEnabled = false
        status.Text = "FLY FAILED: CHARACTER NOT READY"
        return
    end

    flightVelocity = Instance.new("BodyVelocity")
    flightVelocity.Name = "NebulaFlightVelocity"
    flightVelocity.MaxForce = Vector3.new(1e6, 1e6, 1e6)
    flightVelocity.P = 1e4
    flightVelocity.Velocity = Vector3.zero
    flightVelocity.Parent = root

    flightGyro = Instance.new("BodyGyro")
    flightGyro.Name = "NebulaFlightGyro"
    flightGyro.MaxTorque = Vector3.new(1e6, 1e6, 1e6)
    flightGyro.P = 8e3
    flightGyro.CFrame = workspace.CurrentCamera and workspace.CurrentCamera.CFrame or root.CFrame
    flightGyro.Parent = root

    flightConnection = RunService.Heartbeat:Connect(function()
        if not flyEnabled or not root.Parent or not flightVelocity or not flightGyro then
            return
        end
        local camera = workspace.CurrentCamera
        if not camera then return end

        local direction = Vector3.zero
        if UserInputService:IsKeyDown(Enum.KeyCode.W) then direction += camera.CFrame.LookVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.S) then direction -= camera.CFrame.LookVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.D) then direction += camera.CFrame.RightVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.A) then direction -= camera.CFrame.RightVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.Space) then direction += Vector3.yAxis end
        if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then direction -= Vector3.yAxis end
        if direction.Magnitude > 0 then direction = direction.Unit end

        flightVelocity.Velocity = direction * flySpeed
        flightGyro.CFrame = CFrame.lookAt(root.Position, root.Position + camera.CFrame.LookVector)
    end)

    status.Text = "FLY: ON // WASD + SPACE/CTRL // SPEED " .. flySpeed
end

local function getTestPoints()
    local folder = workspace:FindFirstChild("NebulaTestPoints")
    local points = {}
    if folder then
        for _, object in ipairs(folder:GetChildren()) do
            if object:IsA("BasePart") then table.insert(points, object) end
        end
    end
    table.sort(points, function(a, b) return a.Name < b.Name end)
    return points
end

local function teleportToPlayer()
    local targetPlayer = nil
    if selectedTeleportUserId then
        for _, candidate in ipairs(Players:GetPlayers()) do
            if candidate.UserId == selectedTeleportUserId then
                targetPlayer = candidate
                break
            end
        end
    end

    local _, humanoid, root = getCharacterParts()
    local targetCharacter = targetPlayer and targetPlayer.Character
    local targetRoot = targetCharacter and targetCharacter:FindFirstChild("HumanoidRootPart")

    if not root or not humanoid or humanoid.Health <= 0 then
        status.Text = "TELEPORT FAILED: YOUR CHARACTER NOT READY"
        return
    end
    if not targetPlayer or targetPlayer == player or not targetRoot then
        status.Text = "SELECT AN AVAILABLE PLAYER FIRST"
        return
    end

    -- Use only in your own Studio test place / authorized admin system.
    root.CFrame = targetRoot.CFrame * CFrame.new(3, 0, 0)
    status.Text = "TELEPORTED BESIDE " .. targetPlayer.Name
end

local function teleportToNextTestPoint()
    local _, humanoid, root = getCharacterParts()
    if not root or not humanoid or humanoid.Health  0 then
                root.CFrame = currentPoints[index].CFrame + Vector3.new(0, 3, 0)
                status.Text = "LOOP TELEPORT: " .. currentPoints[index].Name
            end
            task.wait(2)
        end
    end)
end

local function setMovementStats()
    local _, humanoid = getCharacterParts()
    if not humanoid then
        status.Text = "MOVEMENT SETTINGS APPLY AFTER RESPAWN"
        return
    end
    humanoid.WalkSpeed = walkSpeedValue
    humanoid.UseJumpPower = true
    humanoid.JumpPower = jumpPowerValue
    status.Text = string.format("WALK SPEED: %d // JUMP POWER: %d", walkSpeedValue, jumpPowerValue)
end

player.CharacterAdded:Connect(function()
    task.wait(0.5)
    if flyEnabled then setFly(true) end
    setMovementStats()
    table.clear(originalCollisions)
end)

-- PAGES & NAVIGATION

local pages = {}

local function showPage(name)

    clearContent()

    status.Text = "MODULE: " .. name

    if pages[name] then

        pages[name]()

    end

end

pages["OVERVIEW"] = function()

    addHeading("SYSTEM OVERVIEW")

    addButton("NEBULA // ADMIN PANEL", function()

        status.Text = "NEBULA SYSTEMS ONLINE"

    end)

    addButton("Scan Targets (Players & Dummies)", function()

        local targets = getValidTargets()

        status.Text = "TARGETS DETECTED: " .. #targets

    end)

    addButton("Toggle menu  [RightShift]", function()

        setMenu(false)

    end)

    addHeading("MODULE INFORMATION")

    addButton("Combat modules: active", function()

        status.Text = "COMBAT MODULES OPERATIONAL"

    end)

end

pages["VISUALS"] = function()

    addHeading("TARGET VISUALS")

    addButton(

        "Health / Name / Distance ESP: " .. (enabled["Health / Name / Distance ESP"] and "ON" or "OFF"),

        function()

            enabled["Health / Name / Distance ESP"] = not enabled["Health / Name / Distance ESP"]

            if not enabled["Health / Name / Distance ESP"] then

                for model in pairs(espObjects) do removeESP(model) end

            end

            status.Text = "TARGET ESP: " .. (enabled["Health / Name / Distance ESP"] and "ON" or "OFF")

            showPage("VISUALS")

        end

    )

    addButton(

        "Skeleton ESP: " .. (enabled["Skeleton ESP"] and "ON" or "OFF"),

        function()

            enabled["Skeleton ESP"] = not enabled["Skeleton ESP"]

            status.Text = "SKELETON ESP: " .. (enabled["Skeleton ESP"] and "ON" or "OFF")

            showPage("VISUALS")

        end

    )

    addHeading("ENVIRONMENT EFFECTS")

    addButton("Snowing: " .. (snowEnabled and "ON" or "OFF"), function()

        setSnow(not snowEnabled)

        showPage("VISUALS")

    end)

    addButton("FPS Boost: " .. (fpsBoostEnabled and "ON" or "OFF"), function()

        setFPSBoost(not fpsBoostEnabled)

        showPage("VISUALS")

    end)

    addButton("Motion Blur: " .. (motionBlurEnabled and "ON" or "OFF"), function()

        motionBlurEnabled = not motionBlurEnabled

        resetMotionBlur()

        status.Text = "MOTION BLUR: " .. (motionBlurEnabled and "ON" or "OFF")

        showPage("VISUALS")

    end)

    addButton("Refresh target visuals", function()

        updateESP()

        updateSkeletons()

        status.Text = "VISUALS REFRESHED"

    end)

end

pages["MOVEMENT"] = function()
    addHeading("CHARACTER MOVEMENT")

    addButton("Fly: " .. (flyEnabled and "ON" or "OFF"), function()
        setFly(not flyEnabled)
        showPage("MOVEMENT")
    end)

    addButton("Flight Speed: " .. flySpeed .. " (click to cycle)", function()
        local speeds = {30, 60, 90, 120}
        local index = table.find(speeds, flySpeed) or 1
        flySpeed = speeds[(index % #speeds) + 1]
        if flyEnabled then setFly(true) end
        status.Text = "FLIGHT SPEED: " .. flySpeed
        showPage("MOVEMENT")
    end)

    addButton("Walk Speed: " .. walkSpeedValue .. " (click to cycle)", function()
        local speeds = {16, 24, 32, 40}
        local index = table.find(speeds, walkSpeedValue) or 1
        walkSpeedValue = speeds[(index % #speeds) + 1]
        setMovementStats()
        showPage("MOVEMENT")
    end)

    addButton("Jump Power: " .. jumpPowerValue .. " (click to cycle)", function()
        local powers = {50, 65, 80, 100}
        local index = table.find(powers, jumpPowerValue) or 1
        jumpPowerValue = powers[(index % #powers) + 1]
        setMovementStats()
        showPage("MOVEMENT")
    end)

    addButton("Noclip / Phase: " .. (noclipEnabled and "ON" or "OFF"), function()
        setNoclip(not noclipEnabled)
        showPage("MOVEMENT")
    end)

    addButton("Restore character collisions", function()
        setNoclip(false)
        status.Text = "COLLISIONS RESTORED"
        showPage("MOVEMENT")
    end)

    addHeading("TELEPORT")
    addButton("Cycle player target", function()
        local choices = {}
        for _, candidate in ipairs(Players:GetPlayers()) do
            if candidate ~= player and candidate.Character
                and candidate.Character:FindFirstChild("HumanoidRootPart") then
                table.insert(choices, candidate)
            end
        end
        table.sort(choices, function(a, b) return a.Name < b.Name end)
        if #choices == 0 then
            selectedTeleportUserId = nil
            status.Text = "NO OTHER PLAYERS AVAILABLE"
        else
            local currentIndex = 0
            for index, candidate in ipairs(choices) do
                if candidate.UserId == selectedTeleportUserId then currentIndex = index break end
            end
            local nextPlayer = choices[(currentIndex % #choices) + 1]
            selectedTeleportUserId = nextPlayer.UserId
            status.Text = "TELEPORT TARGET: " .. nextPlayer.Name
        end
    end)

    addButton("Teleport to selected player", function()
        teleportToPlayer()
    end)

    addButton("Teleport to next test point", function()
        teleportToNextTestPoint()
    end)

    addButton("Loop Teleport: " .. (loopTeleportEnabled and "ON" or "OFF"), function()
        setLoopTeleport(not loopTeleportEnabled)
        showPage("MOVEMENT")
    end)

    addButton("STOP Loop Teleport", function()
        setLoopTeleport(false)
        showPage("MOVEMENT")
    end)

    addButton("Reset movement settings", function()
        setFly(false)
        setLoopTeleport(false)
        walkSpeedValue = 16
        jumpPowerValue = 50
        flySpeed = 60
        setMovementStats()
        status.Text = "MOVEMENT SETTINGS RESET"
        showPage("MOVEMENT")
    end)

    addHeading("TEST POINT SETUP")
    addButton("Test point setup instructions", function()
        status.Text = "CREATE Workspace.NebulaTestPoints AND ADD PARTS"
    end)

    addHeading("SERVER FEATURES")
    addButton("God Mode", function()
        status.Text = "GOD MODE REQUIRES SERVER-SIDE LOGIC"
    end)
    addButton("Hitbox Expansion", function()
        status.Text = "USE SERVER-CONTROLLED HITBOXES"
    end)
end

pages["COMBAT LAB"] = function()

    addHeading("COMBAT MODULES")

    -- Clickable smoothness slider (0 = fast, 100 = smooth/slow).
    local smoothLabel = Instance.new("TextLabel")
    smoothLabel.Size = UDim2.new(1, -4, 0, 24)
    smoothLabel.BackgroundTransparency = 1
    smoothLabel.Text = "Aim Smoothness: " .. AIM_SMOOTHNESS .. " / 100"
    smoothLabel.TextColor3 = WHITE
    smoothLabel.Font = Enum.Font.GothamMedium
    smoothLabel.TextSize = 12
    smoothLabel.TextXAlignment = Enum.TextXAlignment.Left
    smoothLabel.Parent = content

    local slider = Instance.new("TextButton")
    slider.Size = UDim2.new(1, -12, 0, 20)
    slider.BackgroundColor3 = Color3.fromRGB(38, 29, 54)
    slider.Text = ""
    slider.AutoButtonColor = false
    slider.Parent = content
    Instance.new("UICorner", slider).CornerRadius = UDim.new(0, 8)

    local fill = Instance.new("Frame")
    fill.Size = UDim2.new(AIM_SMOOTHNESS / 100, 0, 1, 0)
    fill.BackgroundColor3 = PURPLE
    fill.BorderSizePixel = 0
    fill.Parent = slider
    Instance.new("UICorner", fill).CornerRadius = UDim.new(0, 8)

    local function setAimSmoothnessFromX(x)
        local width = math.max(slider.AbsoluteSize.X, 1)
        local fraction = math.clamp((x - slider.AbsolutePosition.X) / width, 0, 1)
        AIM_SMOOTHNESS = math.clamp(math.floor(fraction * 100 + 0.5), 0, 100)
        smoothLabel.Text = "Aim Smoothness: " .. AIM_SMOOTHNESS .. " / 100"
        fill.Size = UDim2.new(AIM_SMOOTHNESS / 100, 0, 1, 0)
    end

    local draggingSmoothness = false

    slider.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1
            or input.UserInputType == Enum.UserInputType.Touch then
            draggingSmoothness = true
            local pointerX = input.Position.X
            setAimSmoothnessFromX(pointerX)
        end
    end)

    UserInputService.InputChanged:Connect(function(input)
        if draggingSmoothness and (input.UserInputType == Enum.UserInputType.MouseMovement
            or input.UserInputType == Enum.UserInputType.Touch) then
            setAimSmoothnessFromX(input.Position.X)
        end
    end)

    UserInputService.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1
            or input.UserInputType == Enum.UserInputType.Touch then
            draggingSmoothness = false
        end
    end)

    addButton("Reset Smoothness to 50", function()
        AIM_SMOOTHNESS = 50
        smoothLabel.Text = "Aim Smoothness: " .. AIM_SMOOTHNESS .. " / 100"
        fill.Size = UDim2.new(AIM_SMOOTHNESS / 100, 0, 1, 0)
        status.Text = "AIM SMOOTHNESS RESET TO 50"
    end)

    for _, name in ipairs({"Aimbot", "Aimbot Auto-Fire", "Silent Aim", "Trigger Bot", "Team Check", "Wall Check"}) do

        addButton(

            name .. ": " .. (enabled[name] and "ON" or "OFF"),

            function()

                enabled[name] = not enabled[name]

                status.Text = name .. ": " .. (enabled[name] and "ACTIVE" or "OFF")

                showPage("COMBAT LAB")

            end

        )

    end

    addHeading("INSTRUCTIONS")

    addButton("Aimbot: Hold Right-Click to lock on", function()

        status.Text = "AIMBOT USES HOLD RIGHT-CLICK"

    end)

end

for _, pageName in ipairs({"OVERVIEW", "VISUALS", "MOVEMENT", "COMBAT LAB"}) do

    local button = Instance.new("TextButton")

    button.Size = UDim2.new(1, -12, 0, 36)

    button.BackgroundColor3 = Color3.fromRGB(39, 29, 55)

    button.Text = pageName

    button.TextColor3 = WHITE

    button.Font = Enum.Font.GothamBold

    button.TextSize = 11

    button.AutoButtonColor = false

    button.Parent = sidebar

    Instance.new("UICorner", button).CornerRadius = UDim.new(0, 6)

    button.MouseButton1Click:Connect(function()

        showPage(pageName)

    end)

end

-- KEYBIND AND MOUSE INPUT HANDLERS

UserInputService.InputBegan:Connect(function(input, processed)

    -- B toggles the panel unless the player is typing into a text box.
    if input.KeyCode == Enum.KeyCode.B then
        if UserInputService:GetFocusedTextBox() then return end
        setMenu(not menuOpen)
        return
    end

    if processed then return end

    -- Keep RightShift as an alternate toggle shortcut.
    if input.KeyCode == Enum.KeyCode.RightShift then
        if UserInputService:GetFocusedTextBox() then return end
        setMenu(not menuOpen)
    elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
        isRightMouseDown = true
    end

end)

UserInputService.InputEnded:Connect(function(input)

    if input.UserInputType == Enum.UserInputType.MouseButton2 then

        isRightMouseDown = false

    end

end)

-- Run after the Roblox camera update so the smooth practice aim is not overwritten.
RunService:BindToRenderStep("NebulaAimbotStep", Enum.RenderPriority.Camera.Value + 1, function(deltaTime)
    processAimbot(deltaTime)
end)

-- MAIN RENDER LOOP

RunService.RenderStepped:Connect(function(deltaTime)

    updateESP()

    updateSkeletons()

    updateMotionBlur(deltaTime)

    processTriggerbot()

    forceWeaponAim()

end)

showPage("OVERVIEW")

-- Play the binary hacker-style intro on initial launch too.
setMenu(true)

print("NEBULA // PREMIUM // HACKING V11 loaded")

Comments (0)

No comments yet. Be the first!