Universal ESP and AIMBOT WORKS FOR XENO (FIXED)
Key RequiredUniversal

Universal ESP and AIMBOT WORKS FOR XENO (FIXED)

Universal Scriptk*emayman2010k*emayman2010 5.1K views 706 executesUpdated Dec 12, 2025
0.0/ 5(2 votes)
020% Positive
Lua Scriptβ€’1165 lines (42475 chars)
-- LocalScript: paste into StarterPlayer > StarterPlayerScripts
-- ALL-IN-ONE: ESP + Aimbot with GUI (no dependencies)

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- Settings
local HIGHLIGHT_COLOR = Color3.fromRGB(255, 60, 60)
local MAX_LOCK_DIST = 1000
local DEFAULT_AIMBOT_FOV = 70 -- aimbot detection FOV (separate from camera)
local DEFAULT_SMOOTH = 30 -- 1..100

-- State
local espEnabled = true
local aimbotEnabled = false
local aimPart = "Head"
local smoothness = DEFAULT_SMOOTH
local aimbotFov = DEFAULT_AIMBOT_FOV
local filterMode = "All"
local aimbotActive = false
local currentTarget = nil
local cameraConn = nil
local tagMap = {}
local walkSpeed = 16
local flyEnabled = false
local flyConn = nil
local infiniteJumpEnabled = false
local triggerBotEnabled = false

-- Create red highlight
local function createHighlight(character, color)
    if not character or not character:IsA("Model") then return end
    local existing = character:FindFirstChild("_Highlighter")
    if existing then return existing end

    local highlight = Instance.new("Highlight")
    highlight.Name = "_Highlighter"
    highlight.Adornee = character
    highlight.FillColor = color or Color3.fromRGB(230, 60, 60)
    highlight.OutlineColor = Color3.fromRGB(30, 0, 0)
    highlight.FillTransparency = 0.35
    highlight.OutlineTransparency = 0
    highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
    highlight.Parent = character
    return highlight
end

-- Create nametag above head
local function createNameTag(player, localPlayerGui)
    if not player or not localPlayerGui then return end
    local character = player.Character
    if not character then return end
    local head = character:FindFirstChild("Head")
    if not head then return end

    local tagName = "NameTag_" .. player.UserId
    local old = localPlayerGui:FindFirstChild(tagName)
    if old then old:Destroy() end

    local billboard = Instance.new("BillboardGui")
    billboard.Name = tagName
    billboard.Adornee = head
    billboard.AlwaysOnTop = true
    billboard.Size = UDim2.new(0, 220, 0, 65)
    billboard.StudsOffset = Vector3.new(0, 2.6, 0)
    billboard.Parent = localPlayerGui

    local bg = Instance.new("Frame")
    bg.Size = UDim2.new(1, 0, 1, 0)
    bg.BackgroundTransparency = 0.35
    bg.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
    bg.BorderSizePixel = 0
    bg.Parent = billboard

    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(0, 10)
    corner.Parent = bg

    local gradient = Instance.new("UIGradient")
    gradient.Color = ColorSequence.new({
        ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 80, 80)),
        ColorSequenceKeypoint.new(1, Color3.fromRGB(180, 30, 30)),
    })
    gradient.Rotation = 90
    gradient.Parent = bg

    local stroke = Instance.new("UIStroke")
    stroke.Color = Color3.fromRGB(0, 0, 0)
    stroke.Transparency = 0.6
    stroke.Thickness = 2
    stroke.Parent = bg

    local nameLabel = Instance.new("TextLabel")
    nameLabel.Size = UDim2.new(1, -12, 0.5, -6)
    nameLabel.Position = UDim2.new(0, 6, 0, 4)
    nameLabel.BackgroundTransparency = 1
    nameLabel.Text = (player.DisplayName ~= "" and player.DisplayName) or player.Name
    nameLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
    nameLabel.Font = Enum.Font.GothamBold
    nameLabel.TextScaled = true
    nameLabel.TextStrokeTransparency = 0
    nameLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
    nameLabel.Parent = bg

    local distLabel = Instance.new("TextLabel")
    distLabel.Name = "DistLabel"
    distLabel.Size = UDim2.new(1, -12, 0.25, -2)
    distLabel.Position = UDim2.new(0, 6, 0.42, 0)
    distLabel.BackgroundTransparency = 1
    distLabel.Text = ""
    distLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
    distLabel.Font = Enum.Font.GothamBold
    distLabel.TextScaled = true
    distLabel.TextStrokeTransparency = 0.5
    distLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
    distLabel.TextXAlignment = Enum.TextXAlignment.Right
    distLabel.Parent = bg

    -- Health bar background
    local healthBarBg = Instance.new("Frame")
    healthBarBg.Size = UDim2.new(1, -12, 0.25, -4)
    healthBarBg.Position = UDim2.new(0, 6, 0.72, 2)
    healthBarBg.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    healthBarBg.BorderSizePixel = 0
    healthBarBg.Parent = bg

    local healthCorner = Instance.new("UICorner")
    healthCorner.CornerRadius = UDim.new(0, 4)
    healthCorner.Parent = healthBarBg

    -- Health bar fill
    local healthFill = Instance.new("Frame")
    healthFill.Size = UDim2.new(1, 0, 1, 0)
    healthFill.Position = UDim2.new(0, 0, 0, 0)
    healthFill.BackgroundColor3 = Color3.fromRGB(0, 200, 0)
    healthFill.BorderSizePixel = 0
    healthFill.Parent = healthBarBg

    local fillCorner = Instance.new("UICorner")
    fillCorner.CornerRadius = UDim.new(0, 4)
    fillCorner.Parent = healthFill

    -- Health number label
    local healthLabel = Instance.new("TextLabel")
    healthLabel.Name = "HealthLabel"
    healthLabel.Size = UDim2.new(1, 0, 1, 0)
    healthLabel.Position = UDim2.new(0, 0, 0, 0)
    healthLabel.BackgroundTransparency = 1
    healthLabel.Text = "100"
    healthLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
    healthLabel.Font = Enum.Font.GothamBold
    healthLabel.TextScaled = true
    healthLabel.TextSize = 16
    healthLabel.TextStrokeTransparency = 0
    healthLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
    healthLabel.Parent = healthBarBg

    -- Distance update loop + health update
    local lastUpdate = 0
    local updateInterval = 0.12
    local conn
    conn = RunService.Heartbeat:Connect(function(dt)
        lastUpdate = lastUpdate + dt
        if lastUpdate < updateInterval then return end
        lastUpdate = 0

        if not player or not player.Parent then
            conn:Disconnect()
            if billboard and billboard.Parent then billboard:Destroy() end
            tagMap[player] = nil
            return
        end

        local localChar = LocalPlayer.Character
        local localRoot = localChar and (localChar:FindFirstChild("HumanoidRootPart") or localChar:FindFirstChild("Head"))
        local targetChar = player.Character
        local targetRoot = targetChar and (targetChar:FindFirstChild("HumanoidRootPart") or targetChar:FindFirstChild("Head"))

        if not localRoot or not targetRoot then
            distLabel.Text = ""
            return
        end

        local dist = (localRoot.Position - targetRoot.Position).Magnitude
        if dist >= 1000 then
            distLabel.Text = string.format("%.1fk", dist / 1000)
        else
            distLabel.Text = string.format("%.1fm", dist)
        end

        -- Update health bar
        local humanoid = targetChar and targetChar:FindFirstChild("Humanoid")
        if humanoid then
            local maxHealth = humanoid.MaxHealth
            local currentHealth = humanoid.Health
            local healthPercent = currentHealth / maxHealth

            -- Set fill size
            healthFill.Size = UDim2.new(healthPercent, 0, 1, 0)

            -- Update health label with current health value
            local healthLabel = healthBarBg:FindFirstChild("HealthLabel")
            if healthLabel then
                healthLabel.Text = tostring(math.floor(currentHealth))
            end

            -- Change color based on health
            if currentHealth <= 0 then
                healthFill.BackgroundColor3 = Color3.fromRGB(0, 0, 0) -- Black when dead
            elseif healthPercent > 0.6 then
                healthFill.BackgroundColor3 = Color3.fromRGB(0, 220, 0) -- Green when high
            elseif healthPercent > 0.3 then
                healthFill.BackgroundColor3 = Color3.fromRGB(255, 220, 0) -- Yellow when medium
            else
                healthFill.BackgroundColor3 = Color3.fromRGB(255, 50, 50) -- Red when low
            end
        end
    end)

    if not tagMap[player] then tagMap[player] = {} end
    tagMap[player].nametag = billboard
    tagMap[player].conn = conn
    return billboard
end

-- Helpers
local function passesFilter(player)
    if filterMode == "All" then return true end
    if filterMode == "Team" then
        if LocalPlayer.Team and player.Team then return LocalPlayer.Team == player.Team end
        return false
    end
    if filterMode == "Friends" then
        local ok, res = pcall(function() return LocalPlayer:IsFriendsWith(player.UserId) end)
        return ok and res
    end
    if filterMode == "Enemies" then
        if LocalPlayer.Team and player.Team then return LocalPlayer.Team ~= player.Team end
        local ok, res = pcall(function() return LocalPlayer:IsFriendsWith(player.UserId) end)
        return not (ok and res)
    end
    return true
end

local function createESPFor(player)
    if not player or player == LocalPlayer then return end
    if not passesFilter(player) then
        removeESPFor(player)
        return
    end

    if not tagMap[player] then tagMap[player] = {} end

    local character = player.Character
    -- If character exists, create or repair the highlight and nametag
    if character then
        if not (tagMap[player].highlight and tagMap[player].highlight.Parent) then
            local hl = createHighlight(character, HIGHLIGHT_COLOR)
            tagMap[player].highlight = hl
        end
        if not (tagMap[player].nametag and tagMap[player].nametag.Parent) then
            local nt = createNameTag(player, LocalPlayer:WaitForChild("PlayerGui"))
            tagMap[player].nametag = nt
        end
    end

    -- Attach CharacterAdded listener once so we can rematerialize ESP on respawn
    if not tagMap[player].charConn then
        tagMap[player].charConn = player.CharacterAdded:Connect(function(char)
            if not passesFilter(player) then return end
            wait(0.05)
            createESPFor(player)
        end)
    end

    -- Attach CharacterRemoving listener to clean up per-death and allow re-creation
    if not tagMap[player].charRemovingConn then
        tagMap[player].charRemovingConn = player.CharacterRemoving:Connect(function()
            if tagMap[player] then
                if tagMap[player].highlight and tagMap[player].highlight.Parent then
                    tagMap[player].highlight:Destroy()
                end
                if tagMap[player].nametag and tagMap[player].nametag.Parent then
                    tagMap[player].nametag:Destroy()
                end
                if tagMap[player].conn then
                    tagMap[player].conn:Disconnect()
                    tagMap[player].conn = nil
                end
                tagMap[player].highlight = nil
                tagMap[player].nametag = nil
            end
        end)
    end
end

local function removeESPFor(player)
    local entry = tagMap[player]
    if entry then
        if entry.highlight and entry.highlight.Parent then entry.highlight:Destroy() end
        if entry.nametag and entry.nametag.Parent then entry.nametag:Destroy() end
        if entry.conn then entry.conn:Disconnect() end
        if entry.charConn then entry.charConn:Disconnect() end
        if entry.charRemovingConn then entry.charRemovingConn:Disconnect() end
        tagMap[player] = nil
    else
        local playerGui = LocalPlayer:FindFirstChild("PlayerGui")
        if playerGui then
            local name = "NameTag_" .. player.UserId
            local old = playerGui:FindFirstChild(name)
            if old then old:Destroy() end
        end
    end
end

local function refreshAllESP()
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= LocalPlayer then
            if espEnabled and passesFilter(p) then
                createESPFor(p)
            else
                removeESPFor(p)
            end
        end
    end
end

-- Aimbot
local function getAimPart(player)
    if not player.Character then return nil end
    if aimPart == "Head" then return player.Character:FindFirstChild("Head") end
    return player.Character:FindFirstChild("HumanoidRootPart") or player.Character:FindFirstChild("Torso")
end

local function angleToCamera(pos)
    local camCFrame = Camera.CFrame
    local forward = camCFrame.LookVector
    local dir = (pos - camCFrame.Position).Unit
    local dot = forward:Dot(dir)
    local angle = math.acos(math.clamp(dot, -1, 1))
    return angle
end

local function findBestTarget()
    local best, bestScore = nil, math.huge
    local halfFovRad = math.rad(aimbotFov/2)
    local camPos = Camera.CFrame.Position
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= LocalPlayer and p.Character and passesFilter(p) then
            local aim = getAimPart(p)
            if aim then
                local dist = (aim.Position - camPos).Magnitude
                if dist <= MAX_LOCK_DIST then
                    local ang = angleToCamera(aim.Position)
                    if ang <= halfFovRad then
                        local score = ang + (dist / 10000)
                        if score < bestScore then
                            bestScore = score
                            best = p
                        end
                    end
                end
            end
        end
    end
    return best
end

local function engageAimbot(target)
    if not target or not target.Character then return end
    if cameraConn then cameraConn:Disconnect() cameraConn = nil end
    currentTarget = target
    
    -- Lerp camera without locking it - keeps player movement free
    cameraConn = RunService.RenderStepped:Connect(function()
        if not currentTarget or not currentTarget.Character then
            if cameraConn then cameraConn:Disconnect() cameraConn = nil end
            currentTarget = nil
            return
        end
        local aim = getAimPart(currentTarget)
        if not aim then return end
        local camPos = Camera.CFrame.Position
        local desired = CFrame.new(camPos, aim.Position)
        local alpha = math.clamp(1 - (smoothness / 200), 0.01, 0.95)
        Camera.CFrame = Camera.CFrame:Lerp(desired, alpha)

        -- Attempt trigger if enabled and aligned on target
        if triggerBotEnabled then
            local dist = (aim.Position - camPos).Magnitude
            local ang = angleToCamera(aim.Position)
            if dist <= MAX_LOCK_DIST and ang <= math.rad(aimbotFov/2) then
                local myChar = LocalPlayer.Character
                if myChar then
                    local tool = myChar:FindFirstChildOfClass("Tool")
                    if tool and tool.Parent == myChar then
                        pcall(function() tool:Activate() end)
                    end
                end
            end
        end
    end)
end

local function disengageAimbot()
    if cameraConn then cameraConn:Disconnect() cameraConn = nil end
    currentTarget = nil
end

-- Fly system
local function engageFly()
    if flyConn then flyConn:Disconnect() flyConn = nil end
    if not LocalPlayer.Character then return end
    
    local humanoid = LocalPlayer.Character:FindFirstChild("Humanoid")
    local rootPart = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not humanoid or not rootPart then return end
    
    humanoid.PlatformStand = true
    flyConn = RunService.RenderStepped:Connect(function()
        if not LocalPlayer.Character or not rootPart.Parent then
            humanoid.PlatformStand = false
            if flyConn then flyConn:Disconnect() flyConn = nil end
            return
        end
        
        local cam = Camera
        local moveDir = Vector3.new(0, 0, 0)
        
        if UserInputService:IsKeyDown(Enum.KeyCode.W) then
            moveDir = moveDir + cam.CFrame.LookVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.A) then
            moveDir = moveDir - cam.CFrame.RightVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.S) then
            moveDir = moveDir - cam.CFrame.LookVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.D) then
            moveDir = moveDir + cam.CFrame.RightVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.Space) then
            moveDir = moveDir + Vector3.new(0, 1, 0)
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then
            moveDir = moveDir - Vector3.new(0, 1, 0)
        end
        
        if moveDir.Magnitude > 0 then
            moveDir = moveDir.Unit
        end
        
        rootPart.AssemblyLinearVelocity = moveDir * 50
    end)
end

local function disengageFly()
    if flyConn then flyConn:Disconnect() flyConn = nil end
    if LocalPlayer.Character then
        local humanoid = LocalPlayer.Character:FindFirstChild("Humanoid")
        if humanoid then humanoid.PlatformStand = false end
    end
end

-- GUI creation
local function makeGui()
    local playerGui = LocalPlayer:WaitForChild("PlayerGui")
    local existing = playerGui:FindFirstChild("RH_GUI")
    if existing then existing:Destroy() end

    local screen = Instance.new("ScreenGui")
    screen.Name = "RH_GUI"
    screen.ResetOnSpawn = false
    screen.Parent = playerGui

    -- Main panel - larger, more elegant
    local panel = Instance.new("Frame")
    panel.Name = "Panel"
    panel.Size = UDim2.new(0, 500, 0, 340)
    panel.Position = UDim2.new(0, 20, 0, 20)
    panel.BackgroundColor3 = Color3.fromRGB(15, 15, 25)
    panel.BorderSizePixel = 0
    panel.Parent = screen

    local panelCorner = Instance.new("UICorner")
    panelCorner.CornerRadius = UDim.new(0, 20)
    panelCorner.Parent = panel

    local panelStroke = Instance.new("UIStroke")
    panelStroke.Color = Color3.fromRGB(255, 30, 60)
    panelStroke.Transparency = 0.3
    panelStroke.Thickness = 3
    panelStroke.Parent = panel

    -- Background gradient
    local bgGradient = Instance.new("UIGradient")
    bgGradient.Color = ColorSequence.new({
        ColorSequenceKeypoint.new(0, Color3.fromRGB(25, 10, 15)),
        ColorSequenceKeypoint.new(1, Color3.fromRGB(15, 15, 30)),
    })
    bgGradient.Rotation = 45
    bgGradient.Parent = panel

    -- Title bar for dragging
    local titleBar = Instance.new("Frame")
    titleBar.Name = "TitleBar"
    titleBar.Size = UDim2.new(1, 0, 0, 60)
    titleBar.Position = UDim2.new(0, 0, 0, 0)
    titleBar.BackgroundColor3 = Color3.fromRGB(20, 10, 20)
    titleBar.BackgroundTransparency = 0
    titleBar.BorderSizePixel = 0
    titleBar.ZIndex = 3
    titleBar.Parent = panel

    local titleCorner = Instance.new("UICorner")
    titleCorner.CornerRadius = UDim.new(0, 20)
    titleCorner.Parent = titleBar

    -- Title
    local title = Instance.new("TextLabel")
    title.Size = UDim2.new(1, -40, 1, 0)
    title.Position = UDim2.new(0, 20, 0, 0)
    title.BackgroundTransparency = 1
    title.Text = "🩸 CRIMSON AIMBOT+ESP"
    title.Font = Enum.Font.GothamBold
    title.TextSize = 24
    title.TextColor3 = Color3.fromRGB(255, 50, 80)
    title.TextXAlignment = Enum.TextXAlignment.Left
    title.Parent = titleBar

    -- Divider line
    local divider1 = Instance.new("Frame")
    divider1.Size = UDim2.new(1, 0, 0, 2)
    divider1.Position = UDim2.new(0, 0, 0, 60)
    divider1.BackgroundColor3 = Color3.fromRGB(255, 30, 60)
    divider1.BorderSizePixel = 0
    divider1.ZIndex = 3
    divider1.Parent = panel

    -- Button factory - premium style
    local function makeBtn(text, pos, size, bgColor)
        local btn = Instance.new("TextButton")
        btn.Size = size or UDim2.new(0, 110, 0, 40)
        btn.Position = pos
        btn.BackgroundColor3 = bgColor
        btn.TextColor3 = Color3.fromRGB(255, 255, 255)
        btn.Font = Enum.Font.GothamBold
        btn.TextSize = 12
        btn.Text = text
        btn.BorderSizePixel = 0
        btn.AutoButtonColor = false
        btn.ZIndex = 4
        btn.Parent = panel

        local btnCorner = Instance.new("UICorner")
        btnCorner.CornerRadius = UDim.new(0, 10)
        btnCorner.Parent = btn

        local btnStroke = Instance.new("UIStroke")
        btnStroke.Color = Color3.fromRGB(255, 255, 255)
        btnStroke.Transparency = 0.8
        btnStroke.Thickness = 1
        btnStroke.Parent = btn

        btn.MouseEnter:Connect(function()
            btn.BackgroundColor3 = Color3.fromRGB(
                math.min(bgColor.R * 255 + 50, 255) / 255,
                math.min(bgColor.G * 255 + 50, 255) / 255,
                math.min(bgColor.B * 255 + 50, 255) / 255
            )
            btnStroke.Transparency = 0.3
        end)
        btn.MouseLeave:Connect(function()
            btn.BackgroundColor3 = bgColor
            btnStroke.Transparency = 0.8
        end)
        return btn
    end

    -- Top row buttons moved into the Main tab

    -- Tab buttons
    local mainTabBtn = Instance.new("TextButton")
    mainTabBtn.Name = "MainTab"
    mainTabBtn.Size = UDim2.new(0, 120, 0, 30)
    mainTabBtn.Position = UDim2.new(0, 15, 0, 40)
    mainTabBtn.BackgroundColor3 = Color3.fromRGB(220, 60, 80)
    mainTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    mainTabBtn.Font = Enum.Font.GothamBold
    mainTabBtn.TextSize = 11
    mainTabBtn.Text = "MAIN"
    mainTabBtn.BorderSizePixel = 0
    mainTabBtn.AutoButtonColor = false
    mainTabBtn.ZIndex = 4
    mainTabBtn.Parent = panel

    local miscTabBtn = Instance.new("TextButton")
    miscTabBtn.Name = "MiscTab"
    miscTabBtn.Size = UDim2.new(0, 120, 0, 30)
    miscTabBtn.Position = UDim2.new(0, 150, 0, 40)
    miscTabBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 100)
    miscTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    miscTabBtn.Font = Enum.Font.GothamBold
    miscTabBtn.TextSize = 11
    miscTabBtn.Text = "MISC"
    miscTabBtn.BorderSizePixel = 0
    miscTabBtn.AutoButtonColor = false
    miscTabBtn.ZIndex = 4
    miscTabBtn.Parent = panel

    local tabCorner1 = Instance.new("UICorner")
    tabCorner1.CornerRadius = UDim.new(0, 8)
    tabCorner1.Parent = mainTabBtn

    local tabCorner2 = Instance.new("UICorner")
    tabCorner2.CornerRadius = UDim.new(0, 8)
    tabCorner2.Parent = miscTabBtn

    -- Tab containers
    local mainTabContainer = Instance.new("Frame")
    mainTabContainer.Name = "MainTab"
    mainTabContainer.Size = UDim2.new(1, -30, 0, 260)
    mainTabContainer.Position = UDim2.new(0, 15, 0, 120)
    mainTabContainer.BackgroundTransparency = 1
    mainTabContainer.BorderSizePixel = 0
    mainTabContainer.ZIndex = 3
    mainTabContainer.Parent = panel

    local miscTabContainer = Instance.new("Frame")
    miscTabContainer.Name = "MiscTab"
    miscTabContainer.Size = UDim2.new(1, -30, 0, 260)
    miscTabContainer.Position = UDim2.new(0, 15, 0, 120)
    miscTabContainer.BackgroundTransparency = 1
    miscTabContainer.BorderSizePixel = 0
    miscTabContainer.Visible = false
    miscTabContainer.ZIndex = 3
    miscTabContainer.Parent = panel

    local currentTab = "Main"
    
    mainTabBtn.MouseButton1Click:Connect(function()
        if currentTab ~= "Main" then
            currentTab = "Main"
            mainTabBtn.BackgroundColor3 = Color3.fromRGB(220, 60, 80)
            miscTabBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 100)
            mainTabContainer.Visible = true
            miscTabContainer.Visible = false
        end
    end)

    miscTabBtn.MouseButton1Click:Connect(function()
        if currentTab ~= "Misc" then
            currentTab = "Misc"
            mainTabBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 100)
            miscTabBtn.BackgroundColor3 = Color3.fromRGB(220, 60, 80)
            mainTabContainer.Visible = false
            miscTabContainer.Visible = true
        end
    end)

    -- FOV Section
    local fovLabel = Instance.new("TextLabel")
    fovLabel.Size = UDim2.new(0, 120, 0, 22)
    fovLabel.Position = UDim2.new(0, 0, 0, 0)
    fovLabel.BackgroundTransparency = 1
    fovLabel.Text = "πŸ“ FOV RADIUS"
    fovLabel.Font = Enum.Font.GothamBold
    fovLabel.TextSize = 13
    fovLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
    fovLabel.TextXAlignment = Enum.TextXAlignment.Left
    fovLabel.ZIndex = 4
    fovLabel.Parent = mainTabContainer

    local fovValue = Instance.new("TextLabel")
    fovValue.Size = UDim2.new(0, 60, 0, 22)
    fovValue.Position = UDim2.new(0, 380, 0, 0)
    fovValue.BackgroundTransparency = 1
    fovValue.Text = aimbotFov .. "Β°"
    fovValue.Font = Enum.Font.GothamBold
    fovValue.TextSize = 15
    fovValue.TextColor3 = Color3.fromRGB(255, 100, 100)
    fovValue.TextXAlignment = Enum.TextXAlignment.Right
    fovValue.ZIndex = 4
    fovValue.Parent = mainTabContainer

    -- FOV slider background
    local fovSliderBg = Instance.new("Frame")
    fovSliderBg.Size = UDim2.new(1, 0, 0, 8)
    fovSliderBg.Position = UDim2.new(0, 0, 0, 30)
    fovSliderBg.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
    fovSliderBg.BorderSizePixel = 0
    fovSliderBg.ZIndex = 4
    fovSliderBg.Parent = mainTabContainer

    local fovSliderBgCorner = Instance.new("UICorner")
    fovSliderBgCorner.CornerRadius = UDim.new(0, 4)
    fovSliderBgCorner.Parent = fovSliderBg

    local fovFill = Instance.new("Frame")
    fovFill.Size = UDim2.new((aimbotFov - 10) / 150, 0, 1, 0)
    fovFill.Position = UDim2.new(0, 0, 0, 0)
    fovFill.BackgroundColor3 = Color3.fromRGB(255, 100, 100)
    fovFill.BorderSizePixel = 0
    fovFill.ZIndex = 5
    fovFill.Parent = fovSliderBg

    local fovFillCorner = Instance.new("UICorner")
    fovFillCorner.CornerRadius = UDim.new(0, 4)
    fovFillCorner.Parent = fovFill

    -- Smoothness Section
    local smLabel = Instance.new("TextLabel")
    smLabel.Size = UDim2.new(0, 150, 0, 22)
    smLabel.Position = UDim2.new(0, 0, 0, 60)
    smLabel.BackgroundTransparency = 1
    smLabel.Text = "βš™ AIM SMOOTHNESS"
    smLabel.Font = Enum.Font.GothamBold
    smLabel.TextSize = 13
    smLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
    smLabel.TextXAlignment = Enum.TextXAlignment.Left
    smLabel.ZIndex = 4
    smLabel.Parent = mainTabContainer

    local smValue = Instance.new("TextLabel")
    smValue.Size = UDim2.new(0, 60, 0, 22)
    smValue.Position = UDim2.new(0, 380, 0, 60)
    smValue.BackgroundTransparency = 1
    smValue.Text = smoothness
    smValue.Font = Enum.Font.GothamBold
    smValue.TextSize = 15
    smValue.TextColor3 = Color3.fromRGB(100, 180, 255)
    smValue.TextXAlignment = Enum.TextXAlignment.Right
    smValue.ZIndex = 4
    smValue.Parent = mainTabContainer

    -- Smoothness slider background
    local smSliderBg = Instance.new("Frame")
    smSliderBg.Size = UDim2.new(1, 0, 0, 8)
    smSliderBg.Position = UDim2.new(0, 0, 0, 90)
    smSliderBg.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
    smSliderBg.BorderSizePixel = 0
    smSliderBg.ZIndex = 4
    smSliderBg.Parent = mainTabContainer

    local smSliderBgCorner = Instance.new("UICorner")
    smSliderBgCorner.CornerRadius = UDim.new(0, 4)
    smSliderBgCorner.Parent = smSliderBg

    local smFill = Instance.new("Frame")
    smFill.Size = UDim2.new(smoothness / 100, 0, 1, 0)
    smFill.Position = UDim2.new(0, 0, 0, 0)
    smFill.BackgroundColor3 = Color3.fromRGB(100, 180, 255)
    smFill.BorderSizePixel = 0
    smFill.ZIndex = 5
    smFill.Parent = smSliderBg

    local smFillCorner = Instance.new("UICorner")
    smFillCorner.CornerRadius = UDim.new(0, 4)
    smFillCorner.Parent = smFill

    -- Top row - Toggle buttons (for Main tab)
    local espBtn = makeBtn("πŸ” ESP", UDim2.new(0, 0, 0, 130), UDim2.new(0, 110, 0, 40), Color3.fromRGB(220, 60, 80))
    espBtn.Parent = mainTabContainer
    local aimBtn = makeBtn("🎯 AIMBOT", UDim2.new(0, 120, 0, 130), UDim2.new(0, 110, 0, 40), Color3.fromRGB(60, 100, 160))
    aimBtn.Parent = mainTabContainer
    local partBtn = makeBtn("πŸ‘€ HEAD", UDim2.new(0, 240, 0, 130), UDim2.new(0, 110, 0, 40), Color3.fromRGB(100, 150, 80))
    partBtn.Parent = mainTabContainer
    local filterBtn = makeBtn("πŸ›‘ ALL", UDim2.new(0, 360, 0, 130), UDim2.new(0, 100, 0, 40), Color3.fromRGB(160, 120, 60))
    filterBtn.Parent = mainTabContainer

    -- Trigger bot button
    local triggerBtn = makeBtn("⚑ TRIGGER", UDim2.new(0, 360, 0, 180), UDim2.new(0, 100, 0, 40), Color3.fromRGB(200, 60, 140))
    triggerBtn.Parent = mainTabContainer

    -- Misc tab content
    local wsLabel = Instance.new("TextLabel")
    wsLabel.Size = UDim2.new(0, 150, 0, 22)
    wsLabel.Position = UDim2.new(0, 0, 0, 10)
    wsLabel.BackgroundTransparency = 1
    wsLabel.Text = "πŸƒ WALKSPEED"
    wsLabel.Font = Enum.Font.GothamBold
    wsLabel.TextSize = 13
    wsLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
    wsLabel.TextXAlignment = Enum.TextXAlignment.Left
    wsLabel.ZIndex = 4
    wsLabel.Parent = miscTabContainer

    local wsValue = Instance.new("TextLabel")
    wsValue.Size = UDim2.new(0, 60, 0, 22)
    wsValue.Position = UDim2.new(0, 380, 0, 10)
    wsValue.BackgroundTransparency = 1
    wsValue.Text = walkSpeed
    wsValue.Font = Enum.Font.GothamBold
    wsValue.TextSize = 15
    wsValue.TextColor3 = Color3.fromRGB(100, 220, 150)
    wsValue.TextXAlignment = Enum.TextXAlignment.Right
    wsValue.ZIndex = 4
    wsValue.Parent = miscTabContainer

    -- Walkspeed slider
    local wsSliderBg = Instance.new("Frame")
    wsSliderBg.Size = UDim2.new(1, 0, 0, 8)
    wsSliderBg.Position = UDim2.new(0, 0, 0, 40)
    wsSliderBg.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
    wsSliderBg.BorderSizePixel = 0
    wsSliderBg.ZIndex = 4
    wsSliderBg.Parent = miscTabContainer

    local wsSliderCorner = Instance.new("UICorner")
    wsSliderCorner.CornerRadius = UDim.new(0, 4)
    wsSliderCorner.Parent = wsSliderBg

    local wsFill = Instance.new("Frame")
    wsFill.Size = UDim2.new((walkSpeed - 5) / 95, 0, 1, 0)
    wsFill.Position = UDim2.new(0, 0, 0, 0)
    wsFill.BackgroundColor3 = Color3.fromRGB(100, 220, 150)
    wsFill.BorderSizePixel = 0
    wsFill.ZIndex = 5
    wsFill.Parent = wsSliderBg

    local wsFillCorner = Instance.new("UICorner")
    wsFillCorner.CornerRadius = UDim.new(0, 4)
    wsFillCorner.Parent = wsFill

    -- Fly button
    local flyBtn = makeBtn("πŸ›Έ FLY", UDim2.new(0, 0, 0, 80), UDim2.new(0, 150, 0, 40), Color3.fromRGB(100, 150, 200))
    flyBtn.Parent = miscTabContainer

    -- Infinite Jump toggle
    local jumpBtn = makeBtn("♾️ INF JUMP", UDim2.new(0, 170, 0, 80), UDim2.new(0, 150, 0, 40), Color3.fromRGB(180, 100, 150))
    jumpBtn.Parent = miscTabContainer

    -- FOV Section (moved below to original location)

    -- Status bar
    local statusBg = Instance.new("Frame")
    statusBg.Size = UDim2.new(1, -30, 0, 35)
    statusBg.Position = UDim2.new(0, 15, 0, 270)
    statusBg.BackgroundColor3 = Color3.fromRGB(30, 40, 50)
    statusBg.BackgroundTransparency = 0.3
    statusBg.BorderSizePixel = 0
    statusBg.ZIndex = 4
    statusBg.Parent = panel

    local statusCorner = Instance.new("UICorner")
    statusCorner.CornerRadius = UDim.new(0, 10)
    statusCorner.Parent = statusBg

    local statusLabel = Instance.new("TextLabel")
    statusLabel.Size = UDim2.new(1, -20, 1, 0)
    statusLabel.Position = UDim2.new(0, 10, 0, 0)
    statusLabel.BackgroundTransparency = 1
    statusLabel.Text = "πŸ’¬ Right Click + Hold to aim"
    statusLabel.Font = Enum.Font.Gotham
    statusLabel.TextSize = 12
    statusLabel.TextColor3 = Color3.fromRGB(180, 220, 255)
    statusLabel.TextXAlignment = Enum.TextXAlignment.Left
    statusLabel.ZIndex = 5
    statusLabel.Parent = statusBg

    -- FOV circle
    local fovCircle = Instance.new("Frame")
    fovCircle.Name = "FOVCircle"
    fovCircle.Size = UDim2.new(0, 200, 0, 200)
    fovCircle.AnchorPoint = Vector2.new(0.5, 0.5)
    fovCircle.Position = UDim2.new(0.5, 0, 0.5, 0)
    fovCircle.BackgroundTransparency = 1
    fovCircle.BorderSizePixel = 0
    fovCircle.Parent = screen

    local fovCorner = Instance.new("UICorner")
    fovCorner.CornerRadius = UDim.new(1, 0)
    fovCorner.Parent = fovCircle

    local fovStroke = Instance.new("UIStroke")
    fovStroke.Color = Color3.fromRGB(255, 100, 100)
    fovStroke.Thickness = 2
    fovStroke.Transparency = 0.6
    fovStroke.Parent = fovCircle

    -- Drag functionality
    local dragging = false
    local dragStart = nil
    local panelStart = nil
    local panelMinimized = false
    local originalPosition = panel.Position

    titleBar.InputBegan:Connect(function(input, gpe)
        if gpe then return end
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            dragStart = game.Players.LocalPlayer:GetMouse().X
            panelStart = panel.Position.X.Offset
        end
    end)

    UserInputService.InputEnded:Connect(function(input, gpe)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = false
        end
    end)

    RunService.RenderStepped:Connect(function()
        if dragging and dragStart then
            local mouse = game.Players.LocalPlayer:GetMouse()
            local delta = mouse.X - dragStart
            panel.Position = UDim2.new(0, panelStart + delta, panel.Position.Y.Scale, panel.Position.Y.Offset)
        end
    end)

    -- Button connections
    espBtn.MouseButton1Click:Connect(function()
        espEnabled = not espEnabled
        espBtn.Text = espEnabled and "πŸ” ESP" or "πŸ” OFF"
        refreshAllESP()
    end)

    aimBtn.MouseButton1Click:Connect(function()
        aimbotEnabled = not aimbotEnabled
        aimBtn.Text = aimbotEnabled and "🎯 AIMBOT" or "🎯 OFF"
        if not aimbotEnabled then disengageAimbot() end
    end)

    partBtn.MouseButton1Click:Connect(function()
        if aimPart == "Head" then 
            aimPart = "HumanoidRootPart" 
            partBtn.Text = "πŸ‘€ BODY"
        else 
            aimPart = "Head" 
            partBtn.Text = "πŸ‘€ HEAD" 
        end
    end)

    local filterModes = { "All", "Team", "Friends", "Enemies" }
    local filterIndex = 1
    filterBtn.MouseButton1Click:Connect(function()
        filterIndex = filterIndex % #filterModes + 1
        filterMode = filterModes[filterIndex]
        filterBtn.Text = "πŸ›‘ " .. filterMode:upper()
        refreshAllESP()
    end)

    -- Trigger bot toggle
    triggerBtn.MouseButton1Click:Connect(function()
        triggerBotEnabled = not triggerBotEnabled
        triggerBtn.Text = triggerBotEnabled and "⚑ ON" or "⚑ TRIGGER"
    end)

    -- FOV slider
    fovSliderBg.InputBegan:Connect(function(input, gpe)
        if gpe then return end
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            local connection
            connection = RunService.RenderStepped:Connect(function()
                local mouse = game.Players.LocalPlayer:GetMouse()
                local relX = mouse.X - fovSliderBg.AbsolutePosition.X
                local pct = math.clamp(relX / fovSliderBg.AbsoluteSize.X, 0, 1)
                aimbotFov = math.floor(10 + pct * 150)
                fovValue.Text = aimbotFov .. "Β°"
                fovFill.Size = UDim2.new((aimbotFov - 10) / 150, 0, 1, 0)
                local radius = math.clamp((aimbotFov/120) * math.min(Camera.ViewportSize.X, Camera.ViewportSize.Y) * 0.35, 40, 800)
                fovCircle.Size = UDim2.new(0, radius*2, 0, radius*2)
            end)
            UserInputService.InputEnded:Connect(function(input2, gpe2)
                if input2.UserInputType == Enum.UserInputType.MouseButton1 then
                    connection:Disconnect()
                end
            end)
        end
    end)

    -- Smoothness slider
    smSliderBg.InputBegan:Connect(function(input, gpe)
        if gpe then return end
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            local connection
            connection = RunService.RenderStepped:Connect(function()
                local mouse = game.Players.LocalPlayer:GetMouse()
                local relX = mouse.X - smSliderBg.AbsolutePosition.X
                local pct = math.clamp(relX / smSliderBg.AbsoluteSize.X, 0, 1)
                smoothness = math.floor(pct * 100)
                smValue.Text = smoothness
                smFill.Size = UDim2.new(smoothness / 100, 0, 1, 0)
            end)
            UserInputService.InputEnded:Connect(function(input2, gpe2)
                if input2.UserInputType == Enum.UserInputType.MouseButton1 then
                    connection:Disconnect()
                end
            end)
        end
    end)

    -- Walkspeed slider
    wsSliderBg.InputBegan:Connect(function(input, gpe)
        if gpe then return end
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            local connection
            connection = RunService.RenderStepped:Connect(function()
                local mouse = game.Players.LocalPlayer:GetMouse()
                local relX = mouse.X - wsSliderBg.AbsolutePosition.X
                local pct = math.clamp(relX / wsSliderBg.AbsoluteSize.X, 0, 1)
                walkSpeed = math.floor(5 + pct * 95)
                wsValue.Text = walkSpeed
                wsFill.Size = UDim2.new((walkSpeed - 5) / 95, 0, 1, 0)
                
                if LocalPlayer.Character then
                    local humanoid = LocalPlayer.Character:FindFirstChild("Humanoid")
                    if humanoid then
                        humanoid.WalkSpeed = walkSpeed
                    end
                end
            end)
            UserInputService.InputEnded:Connect(function(input2, gpe2)
                if input2.UserInputType == Enum.UserInputType.MouseButton1 then
                    connection:Disconnect()
                end
            end)
        end
    end)

    -- Fly button
    flyBtn.MouseButton1Click:Connect(function()
        flyEnabled = not flyEnabled
        flyBtn.Text = flyEnabled and "πŸ›Έ ON" or "πŸ›Έ FLY"
        if flyEnabled then
            engageFly()
        else
            disengageFly()
        end
    end)

    -- Infinite jump
    jumpBtn.MouseButton1Click:Connect(function()
        infiniteJumpEnabled = not infiniteJumpEnabled
        jumpBtn.Text = infiniteJumpEnabled and "♾️ ON" or "♾️ INF JUMP"
    end)

    -- K key to minimize (move off-screen)
    UserInputService.InputBegan:Connect(function(input, processed)
        if processed then return end
        if input.KeyCode == Enum.KeyCode.K then
            panelMinimized = not panelMinimized
            if panelMinimized then
                panel.Position = UDim2.new(0, -550, 0, 20)
            else
                panel.Position = originalPosition
            end
        end
    end)

    -- Right mouse hold
    UserInputService.InputBegan:Connect(function(input, processed)
        if processed then return end
        if input.UserInputType == Enum.UserInputType.MouseButton2 then
            if aimbotEnabled then
                aimbotActive = true
                currentTarget = findBestTarget()
                if currentTarget then engageAimbot(currentTarget) end
            end
        end
    end)
    UserInputService.InputEnded:Connect(function(input, processed)
        if input.UserInputType == Enum.UserInputType.MouseButton2 then
            aimbotActive = false
            disengageAimbot()
        end
    end)

    -- Update loop
    RunService.Heartbeat:Connect(function()
        fovCircle.Position = UDim2.new(0.5, 0, 0.5, 0)
        local radius = math.clamp((aimbotFov/120) * math.min(Camera.ViewportSize.X, Camera.ViewportSize.Y) * 0.35, 40, 800)
        fovCircle.Size = UDim2.new(0, radius*2, 0, radius*2)

        if aimbotActive and aimbotEnabled and (not currentTarget or not currentTarget.Character) then
            local best = findBestTarget()
            if best then
                currentTarget = best
                engageAimbot(best)
            end
        end

        -- Trigger bot (non-aimbot): find target and attempt to fire when aligned
        if triggerBotEnabled and (not aimbotActive or not aimbotEnabled) then
            local best = findBestTarget()
            if best and best.Character then
                local aim = getAimPart(best)
                if aim then
                    local camPos = Camera.CFrame.Position
                    local dist = (aim.Position - camPos).Magnitude
                    local ang = angleToCamera(aim.Position)
                    if dist <= MAX_LOCK_DIST and ang <= math.rad(aimbotFov/2) then
                        local myChar = LocalPlayer.Character
                        if myChar then
                            local tool = myChar:FindFirstChildOfClass("Tool")
                            if tool and tool.Parent == myChar then
                                pcall(function() tool:Activate() end)
                            end
                        end
                    end
                end
            end
        end
    end)

    return screen
end

-- Initialization
makeGui()
refreshAllESP()

-- Player connections
Players.PlayerAdded:Connect(function(p)
    if p ~= LocalPlayer then
        p.CharacterAdded:Connect(function()
            wait(0.1)
            if espEnabled and passesFilter(p) then createESPFor(p) end
        end)
    end
end)

Players.PlayerRemoving:Connect(function(p)
    removeESPFor(p)
end)


LocalPlayer.CharacterAdded:Connect(function()
    disengageAimbot()
    refreshAllESP()
    disengageFly()
    
    -- Set walkspeed
    local humanoid = LocalPlayer.Character:FindFirstChild("Humanoid")
    if humanoid then
        humanoid.WalkSpeed = walkSpeed
    end
    
    -- Handle infinite jump
    if infiniteJumpEnabled then
        local humanoid = LocalPlayer.Character:FindFirstChild("Humanoid")
        if humanoid then
            humanoid.Jumping:Connect(function()
                if infiniteJumpEnabled then
                    humanoid:ChangeState(Enum.HumanoidStateType.Landed)
                end
            end)
        end
    end
end)

-- Infinite jump input handler
UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end
    if infiniteJumpEnabled and input.KeyCode == Enum.KeyCode.Space then
        local humanoid = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid")
        if humanoid then
            humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
        end
    end
end)
print("βœ… RedHighlighter loaded - FOV is for aimbot detection, camera stays free")

Features & Information

its a universal aimbot and esp i made this in like 1 hour so ye but its good K TO HIDE GUI

Community Comments (7)

billy1billy1Dec 12, 2025

aimbot thinks yourself is an enemie to point at pls correct it

voidhatesvoidhatesDec 13, 2025

gui or wtv isnt even opening on mobile

mykpatmykpatDec 13, 2025

its so ahh i can t close menu and esp and aim its trash

k*emayman2010k*emayman2010Dec 13, 2025

@mykpat k closes the gui buddy and the esp and and aimbot are working for me tf do you mean?

k*emayman2010k*emayman2010Dec 14, 2025

@billy1 nah it works for me idk what your talking about maybe the game your playing is the one doing that?

aryaAXaryaAXDec 20, 2025

made with cahtgpt ahh

zorvixa2zorvixa2Feb 18, 2026

chatgpt kiddo

More Scripts for Universal Scripts