[FPS] One Tap Script (NO KEY) – Aimbot, Jump Speed

PUBLISHEDUPDATED
What changed
  • 2026-10-18 — Added Script #6: Updated for FPS Update.
  • 2026-10-14 — Added Script #5: Fly & More.
  • 2026-10-09 — Added Script #4: Snowy Hub.
  • 2026-10-09 — Added Script #3: Aimbot esp wallcheck smoothness.
  • 2026-10-09 — Added Script #2: Aimbot & More.
Verified Working1 Active ScriptKeyless

If you’re grinding through One Tap on Roblox and want to speed up your progression, you’ve come to the right place.

This guide covers the best working One Tap scripts for today, complete with features like auto grind, unlock hidden features, and fast wins.

What Is a One Tap Script?

A One Tap script is a Roblox exploit tool that automates repetitive gameplay tasks. These scripts help players:

  • Auto Shoot
  • Enable Aimbot
  • Walk Speed
  • Jump Speed

Unlike outdated scripts, the ones listed below are tested, functional, and regularly updated for today.

Best Working One Tap Scripts

Working ScriptFree
loadstring(game:HttpGet("https://raw.githubusercontent.com/swish-hub/one-tap/refs/heads/main/script.lua"))()
Compatible executors: HydrogenMacSploitAWP.GGDelta

Script #2 Aimbot & More

Script #2 · Aimbot & MoreFree
AimbotSilent AimFlyNoclipInfinite Jump
loadstring(game:HttpGet("https://raw.githubusercontent.com/rblxshop/Rblxscripts/refs/heads/main/Onetap.lua"))()
Executor compatibility changes over time. Check current reports before testing.

Script #3 Aimbot esp wallcheck smoothness

Script #3 · Aimbot esp wallcheck smoothnessFree
ESPAimbotSilent AimFlyNoclipInfinite Jump
loadstring(game:HttpGet("https://pastebin.com/raw/CgK8na0G"))()
Executor compatibility changes over time. Check current reports before testing.

Script #4 Snowy Hub

Script #4 · Snowy HubFree
ESPAimbotSilent Aim
loadstring(game:HttpGet("https://flowauth.net/v1/ui/a87f00d9adf63658655fcd02ab86a4ef.lua"))()
Executor compatibility changes over time. Check current reports before testing.

Script #5 Fly & More

Script #5 · Fly & MoreFree
Fly
--[[

    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 = '<font color="#37A0FF">NEBULA</font> // <font color="#FFC437">PREMIUM</font> // <font color="#41EB7D">HACKING</font> <font color="#FFFFFF">V11</font>'

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 = '<font color="#37A0FF">' .. nebulaBits .. '</font> // '
                .. '<font color="#FFC437">' .. premiumBits .. '</font> // '
                .. '<font color="#41EB7D">' .. hackingBits .. '</font> '
                .. '<font color="#FFFFFF">V11</font>'
            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] = '<font color="#A855F7">1</font>'
            else
                chunks[i] = '<font color="#FFFFFF">0</font>'
            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 or not head or not head:IsA("BasePart") then
            return
        end
        seen[model] = true
        table.insert(targets, model)
    end

    for _, otherPlayer in ipairs(Players:GetPlayers()) do
        if otherPlayer ~= player and otherPlayer.Character then
            if not isSameTeam(otherPlayer.Character) then
                addTarget(otherPlayer.Character)
            end
        end
    end

    local dummyFolder = workspace:FindFirstChild("TrainingDummies")
    if dummyFolder then
        for _, object in ipairs(dummyFolder:GetChildren()) do
            if object:IsA("Model") then
                addTarget(object)
            end
        end
    else
        -- Studio fallback for NPCs placed directly under Workspace.
        for _, object in ipairs(workspace:GetChildren()) do
            if object:IsA("Model") and not Players:GetPlayerFromCharacter(object) then
                addTarget(object)
            end
        end
    end

    return targets
end

-- SMOOTH AIM ASSIST (OWN-GAME PLAYERS + TRAINING DUMMIES)
-- Camera-only assist. Keep authoritative weapon hit validation on the server.
local AIMBOT_FOV = 250 -- pixels from the centre of the screen
-- 0 = fastest tracking; 100 = smoothest/slower tracking.
local AIM_SMOOTHNESS = 50
local currentAimTarget = nil

local function getClosestAimTarget()
    local camera = workspace.CurrentCamera
    if not camera then return nil end

    local screenCenter = camera.ViewportSize / 2
    local closestPart = nil
    local closestDistance = AIMBOT_FOV

    for _, model in ipairs(getValidTargets()) do
        local humanoid = model:FindFirstChildOfClass("Humanoid")
        local part = model:FindFirstChild("Head") or model:FindFirstChild("HumanoidRootPart")

        if humanoid and 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.001 then return end

    local desiredCFrame = CFrame.lookAt(camera.CFrame.Position, target.Position)
    local dt = math.clamp(deltaTime or 0, 0, 0.1)
    -- 0 = fastest response; 100 = smoothest, but still responsive.
    -- The curved scale keeps high values from becoming nearly unusably slow.
    local smoothness = math.clamp(AIM_SMOOTHNESS, 0, 100)
    local response = 60 / (1 + smoothness / 12)
    local alpha = 1 - math.exp(-response * dt)
    camera.CFrame = camera.CFrame:Lerp(desiredCFrame, alpha)
end

-- Disabled: no weapon remotes, ray interception, or shot redirection.
local function forceWeaponAim()
    -- Intentionally empty.
end

-- Triggerbot disabled; automatic firing at other players is not implemented.
local function processTriggerbot()
    -- Intentionally empty.
end

-- ESP CLEANUP & CREATION

local function removeESP(model)

    if espObjects[model] then

        espObjects[model]:Destroy()

        espObjects[model] = nil

    end

    if skeletonLines[model] then

        for _, line in ipairs(skeletonLines[model]) do line:Destroy() end

        skeletonLines[model] = nil

    end

end

local function createESP(model)

    if espObjects[model] then return end

    local humanoid = model:FindFirstChildOfClass("Humanoid")

    local head = model:FindFirstChild("Head")

    if not humanoid or not head or not head:IsA("BasePart") then return end

    local billboard = Instance.new("BillboardGui")

    billboard.Name = "NebulaPracticeESP"

    billboard.Adornee = head

    billboard.Size = UDim2.fromOffset(220, 48)

    billboard.StudsOffset = Vector3.new(0, 2.7, 0)

    billboard.AlwaysOnTop = true

    billboard.Parent = gui

    local label = Instance.new("TextLabel")

    label.Name = "Info"

    label.Size = UDim2.fromScale(1, 1)

    label.BackgroundTransparency = 1

    label.TextColor3 = Color3.fromRGB(219, 192, 255)

    label.TextStrokeTransparency = 0.25

    label.Font = Enum.Font.GothamBold

    label.TextSize = 12

    label.TextWrapped = true

    label.Parent = billboard

    espObjects[model] = billboard

end

local function updateESP()

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

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

        return

    end

    local targets = getValidTargets()

    local validSet = {}

    for _, model in ipairs(targets) do

        validSet[model] = true

        createESP(model)

        local billboard = espObjects[model]

        local head = model:FindFirstChild("Head")

        local humanoid = model:FindFirstChildOfClass("Humanoid")

        local character = player.Character

        local root = character and character:FindFirstChild("HumanoidRootPart")

        if billboard and head and humanoid and root then

            local distance = (head.Position - root.Position).Magnitude

            local label = billboard:FindFirstChild("Info")

            if label then

                label.Text = string.format(

                    "%s\nHP: %d / %d  |  %.0f studs",

                    model.Name,

                    math.max(0, humanoid.Health),

                    humanoid.MaxHealth,

                    distance

                )

            end

        end

    end

    for model in pairs(espObjects) do

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

    end

end

-- SKELETON ESP

local R15_BONES = {

    {"Head", "UpperTorso"}, {"UpperTorso", "LowerTorso"},

    {"UpperTorso", "LeftUpperArm"}, {"LeftUpperArm", "LeftLowerArm"}, {"LeftLowerArm", "LeftHand"},

    {"UpperTorso", "RightUpperArm"}, {"RightUpperArm", "RightLowerArm"}, {"RightLowerArm", "RightHand"},

    {"LowerTorso", "LeftUpperLeg"}, {"LeftUpperLeg", "LeftLowerLeg"}, {"LeftLowerLeg", "LeftFoot"},

    {"LowerTorso", "RightUpperLeg"}, {"RightUpperLeg", "RightLowerLeg"}, {"RightLowerLeg", "RightFoot"}

}

local R6_BONES = {

    {"Head", "Torso"}, {"Torso", "Left Arm"}, {"Torso", "Right Arm"},

    {"Torso", "Left Leg"}, {"Torso", "Right Leg"}

}

local function newSkeletonLine()

    local line = Instance.new("Frame")

    line.Name = "NebulaBone"

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

    line.BorderSizePixel = 0

    line.BackgroundColor3 = PURPLE

    line.Size = UDim2.fromOffset(1, 2)

    line.Visible = false

    line.ZIndex = 5

    line.Parent = gui

    return line

end

local function updateSkeletons()

    local camera = workspace.CurrentCamera

    if not camera then return end

    if not enabled["Skeleton ESP"] then

        for model, lines in pairs(skeletonLines) do

            for _, line in ipairs(lines) do line.Visible = false end

        end

        return

    end

    local targets = getValidTargets()

    local validSet = {}

    for _, model in ipairs(targets) do

        validSet[model] = true

        local bones = model:FindFirstChild("UpperTorso") and R15_BONES or R6_BONES

        if not skeletonLines[model] then

            skeletonLines[model] = {}

            for _ = 1, #R15_BONES do

                table.insert(skeletonLines[model], newSkeletonLine())

            end

        end

        local lines = skeletonLines[model]

        for index, bone in ipairs(bones) do

            local partA = model:FindFirstChild(bone[1])

            local partB = model:FindFirstChild(bone[2])

            local line = lines[index]

            if partA and partB and line then

                local p1, visible1 = camera:WorldToViewportPoint(partA.Position)

                local p2, visible2 = camera:WorldToViewportPoint(partB.Position)

                if visible1 and visible2 and p1.Z > 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
        status.Text = "TELEPORT FAILED: CHARACTER NOT READY"
        return false
    end

    local points = getTestPoints()
    if #points == 0 then
        status.Text = "ADD PARTS TO Workspace.NebulaTestPoints"
        return false
    end

    local pointIndex = (movementLoopToken % #points) + 1
    local point = points[pointIndex]
    root.CFrame = point.CFrame + Vector3.new(0, 3, 0)
    movementLoopToken = pointIndex
    status.Text = "TEST TELEPORT: " .. point.Name
    return true
end

local function setLoopTeleport(state)
    loopTeleportEnabled = state
    movementLoopToken += 1
    local token = movementLoopToken

    if not state then
        status.Text = "LOOP TELEPORT: STOPPED"
        return
    end

    local points = getTestPoints()
    if #points == 0 then
        loopTeleportEnabled = false
        status.Text = "ADD PARTS TO Workspace.NebulaTestPoints"
        return
    end

    status.Text = "LOOP TELEPORT: ON // TEST POINTS ONLY"
    task.spawn(function()
        local index = 0
        while loopTeleportEnabled and movementLoopToken == token do
            local currentPoints = getTestPoints()
            if #currentPoints == 0 then
                loopTeleportEnabled = false
                status.Text = "LOOP STOPPED: NO TEST POINTS"
                break
            end
            index = (index % #currentPoints) + 1
            local _, humanoid, root = getCharacterParts()
            if root and humanoid and 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")
Executor compatibility changes over time. Check current reports before testing.

Script #6 Aimbot & More (FPS Update)

Script #6 · Aimbot & MoreFree
AimbotEspFarm [problema]walkSpeedJump [problema]Gravity
loadstring(game:HttpGet("https://gist.githubusercontent.com/teteusousa560-cloud/2014d18f0c2af10ecca46fac9703050b/raw"))()
Executor compatibility changes over time. Check current reports before testing.

Updated and tested for the latest FPS Update, this script automates the newest event tasks so you can keep up without the extra grind.

Tested & Verified: This script was personally tested using MacSploit and confirmed working as of November 2026.

How to Use One Tap Scripts (Step-by-Step)

Follow this tutorial to execute the script safely:

Step 1: Download a Roblox Script Executor

Choose a trusted executor with high UNC/sUNC compatibility:

  • Hydrogen Executor (Recommended)
  • MacSploit
  • AWP.GG
  • Delta Executor
  • Fluxus
  • Codex

Step 2: Attach the Executor to Roblox

  • Launch One Tap on Roblox
  • Open your executor
  • Click “Attach” or “Inject”

Step 3: Copy and Paste the Script

Copy the script code from above and paste it into the executor’s script box.

Step 4: Execute the Script

Click “Execute” and wait for the GUI to appear. Features will activate automatically.

Safety Tips for Using One Tap Scripts

Important Warnings:

  • Use an alt account first – Test scripts on a secondary Roblox account to avoid main account bans
  • Choose high UNC executors – Low-quality executors increase detection risk
  • Avoid obvious automation – Don’t leave scripts running for hours unattended
  • Stay updated – Scripts can get patched; always use the latest version

One Tap Game Info

  • Game Name: One Tap
  • Developer: Stringless Banjo
  • Maturity Rating: Mild, Age 5+
  • Genre: Shooter
  • Subgenre: Deathmatch Shooter

Frequently Asked Questions (FAQ)

Is the One Tap script safe?

When used with a reputable executor and on an alt account, risk is minimized. However, all Roblox scripts carry some ban risk.

Do I need a script key?

No, the script listed above is 100% keyless and free to use.

What executor works best for One Tap?

Hydrogen and MacSploit are highly recommended for their stability and UNC support.

Can I get banned for using scripts?

Yes, using any third-party script violates Roblox’s Terms of Service and may result in account suspension. Always use an alt account.

Does the script work on mobile?

Most executors require PC. Mobile script execution is limited and less reliable.

Frequently Asked Questions

What is a One Tap script?

A One Tap script is third-party Lua code intended to run alongside the Roblox game through a compatible script executor.

What features does this One Tap script include?

Different scripts contain different code. This version includes: ESP, Aimbot, Silent Aim, Teleport, Speed Boost, Fly, Noclip, God Mode, Infinite Jump, Esp, Farm [problema], walkSpeed, Jump [problema], Gravity.

How do you use the One Tap script?

Pick a compatible executor such as Hydrogen, MacSploit, AWP.GG, Delta, Fluxus, Codex, launch Roblox and join the game, copy the complete Lua code from the script card above, paste it into the executor’s editor, and click Run or Execute. Compatibility changes over time, so a name here doesn’t guarantee current support.

Can a One Tap script get your Roblox account banned?

Yes. Third-party scripts can violate Roblox rules and may put an account at risk. Only use code from a source you trust, never enter your Roblox password into a script or executor, and test on an alternate account first.

Does the One Tap script work on mobile?

Check whether both the executor and the script support your device and the current Roblox version. Mobile executor support does not guarantee that every script will work.

Check out our Roblox Scripts hub and Roblox Games Directory for more.