Source ESPS AIM TRIGGER RADAR AND MORE
Key Required

Source ESPS AIM TRIGGER RADAR AND MORE

[FPS] Flickleetleet 2.3K views 65 executesUpdated Nov 27, 2025
5.0/ 5(5 votes)
50100% Positive
Lua Script•1533 lines (53312 chars)
-- This WILL NOT WORK ON LOW UNC EXECUTORS LIKE XENO
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stats = game:GetService("Stats")
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()

local Config = {
    ESP_Enabled = true,
    ESP_Boxes = true,
    ESP_Names = true,
    ESP_Distance = true,
    ESP_Skeleton = true,
    ESP_Weapons = true,
    ESP_MaxDist = 2000,
    ESP_Offscreen = true,
    ESP_AimDir = true,
    ESP_LookingAtYou = true,
    ESP_Tracers = false,
    ESP_Velocity = false,
    ESP_Shield = true,
    RADAR_Enabled = true,
    RADAR_Size = 120,
    RADAR_Circle = false,
    AIM_Enabled = false,
    AIM_FOV = 150,
    AIM_Smooth = 15,
    AIM_ShowFOV = true,
    AIM_WallCheck = true,
    AIM_IgnoreShielded = true,
    AIM_IgnoreLobby = true,
    TRIGGER_Enabled = false,
    TRIGGER_Delay = 80,
    RAGE_Enabled = false,
    RAGE_PrioVisible = true,
    RAGE_PrioThreat = true,
    RAGE_AutoShoot = true,
    MISC_WalkSpeed = 16,
    MISC_FOV = 70,
    MISC_FullBright = false,
    MISC_NoFog = false,
    MISC_AutoRespawn = false,
    MenuOpen = true
}

local Tuning = {
    VisibilityRefreshRate = 0.15,
    WeaponRefreshRate = 2.0,
    ShieldDuration = 1.5,
    
    BoxWidthRatio = 0.6,
    NameOffset = 18,
    DistOffset = 4,
    WeaponOffset = 8,
    LookingOffset = 35,
    ShieldOffset = 50,
    
    OffscreenEdgeDist = 50,
    OffscreenArrowSize = 12,
    AimLineLength = 15,
    LookingThreshold = 0.85,
    
    RadarRange = 150,
    RadarDotSize = 5,
    RadarArrowSize = 8,
    TriggerRadius = 30,
    
    RageShootDelay = 80,
    RageDistWeight = 100,
    RageVisibleWeight = 500,
    RageThreatWeight = 300,
    RageMaxDist = 500
}

local 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 R6Bones = {
    {"Head", "Torso"},
    {"Torso", "Left Arm"},
    {"Torso", "Right Arm"},
    {"Torso", "Left Leg"},
    {"Torso", "Right Leg"}
}

local Colors = {
    Enemy = Color3.fromRGB(255, 50, 50),
    EnemyVisible = Color3.fromRGB(0, 255, 0),
    Lobby = Color3.fromRGB(150, 150, 150),
    Shielded = Color3.fromRGB(255, 200, 0),
    Skeleton = Color3.fromRGB(255, 255, 255),
    SkeletonVisible = Color3.fromRGB(0, 255, 0),
    LookingAtYou = Color3.fromRGB(255, 255, 0),
    AimDir = Color3.fromRGB(255, 150, 0),
    Weapon = Color3.fromRGB(255, 200, 100),
    Tracer = Color3.fromRGB(255, 100, 100),
    RadarBg = Color3.fromRGB(20, 20, 20),
    RadarBorder = Color3.fromRGB(255, 50, 50),
    RadarYou = Color3.fromRGB(0, 255, 0),
    RadarEnemy = Color3.fromRGB(255, 50, 50),
    MenuBg = Color3.fromRGB(12, 12, 12),
    MenuHighlight = Color3.fromRGB(255, 50, 50),
    MenuOn = Color3.fromRGB(50, 255, 50),
    MenuOff = Color3.fromRGB(80, 80, 80),
    MenuText = Color3.fromRGB(150, 150, 150)
}

local Timers = {
    lastVisRefresh = 0,
    lastWeaponRefresh = 0,
    warningEnd = 0
}

local Cache = {
    visibility = {},
    weapons = {},
    shields = {}
}

local OriginalLighting = {
    Brightness = game.Lighting.Brightness,
    Ambient = game.Lighting.Ambient,
    OutdoorAmbient = game.Lighting.OutdoorAmbient,
    FogEnd = game.Lighting.FogEnd,
    FogStart = game.Lighting.FogStart
}

local Connections = {}
local Unloaded = false

local Team = {}

function Team.getPlayerFromCharacter(char)
    for _, p in pairs(Players:GetPlayers()) do
        if p.Character == char then return p end
    end
    return nil
end

function Team.isTeammate(char)
    local player = Team.getPlayerFromCharacter(char)
    if not player or not LocalPlayer.Team or not player.Team then return false end
    return player.Team == LocalPlayer.Team
end

function Team.isInLobby(char)
    local player = Team.getPlayerFromCharacter(char)
    if not player or not player.Team then return false end
    return player.Team.Name == "Lobby"
end

function Team.isShielded(char)
    return Cache.shields[char] and tick() < Cache.shields[char]
end

function Team.applyShield(char)
    Cache.shields[char] = tick() + Tuning.ShieldDuration
end

local Util = {}

function Util.isVisible(character)
    if not character then return false end
    local cam = workspace.CurrentCamera
    if not cam then return false end
    
    local origin = cam.CFrame.Position
    local parts = {"Head", "UpperTorso", "Torso", "HumanoidRootPart"}
    
    local rayParams = RaycastParams.new()
    rayParams.FilterType = Enum.RaycastFilterType.Blacklist
    local filter = {cam}
    if LocalPlayer.Character then table.insert(filter, LocalPlayer.Character) end
    table.insert(filter, character)
    rayParams.FilterDescendantsInstances = filter
    
    for _, partName in pairs(parts) do
        local part = character:FindFirstChild(partName)
        if part then
            local dir = (part.Position - origin)
            local result = workspace:Raycast(origin, dir.Unit * dir.Magnitude, rayParams)
            if not result or (result.Position - part.Position).Magnitude < 5 then
                return true
            end
        end
    end
    return false
end

function Util.isLookingAtYou(char)
    if not LocalPlayer.Character then return false end
    local myHead = LocalPlayer.Character:FindFirstChild("Head")
    local head = char:FindFirstChild("Head")
    if not myHead or not head then return false end
    local toYou = (myHead.Position - head.Position).Unit
    return toYou:Dot(head.CFrame.LookVector) > Tuning.LookingThreshold
end

function Util.getWeapon(char)
    local tool = char:FindFirstChildWhichIsA("Tool")
    if tool then return tool.Name end
    return nil
end

function Util.getName(char)
    for _, p in pairs(Players:GetPlayers()) do
        if p.Character == char then return p.Name end
    end
    return char.Name
end

function Util.isR6(char)
    return char:FindFirstChild("Torso") ~= nil
end

local Targets = {}

function Targets.refreshVisibility()
    local count = 0
    for _, player in ipairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character then
            count = count + 1
            if count > 20 then
                Cache.visibility[player] = false
            else
                Cache.visibility[player] = Util.isVisible(player.Character)
            end
        end
    end
end

function Targets.refreshWeapons()
    for _, player in ipairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character then
            Cache.weapons[player] = Util.getWeapon(player.Character)
        end
    end
end

local ESP = {
    cache = {},
    velocityData = {}
}

function ESP.create()
    local skel = {}
    for i = 1, 14 do
        skel[i] = Drawing.new("Line")
    end
    return {
        Box = {Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line")},
        Name = Drawing.new("Text"),
        Dist = Drawing.new("Text"),
        Weapon = Drawing.new("Text"),
        Skel = skel,
        Offscreen = Drawing.new("Triangle"),
        AimLine = Drawing.new("Line"),
        LookingText = Drawing.new("Text"),
        ShieldText = Drawing.new("Text"),
        Tracer = Drawing.new("Line"),
        VelLine = Drawing.new("Line"),
        VelArrow = Drawing.new("Triangle")
    }
end

function ESP.setup(esp)
    for _, l in pairs(esp.Box) do l.Thickness = 1 end
    esp.Name.Size = 14
    esp.Name.Font = Drawing.Fonts.Monospace
    esp.Name.Center = true
    esp.Name.Outline = true
    esp.Dist.Size = 12
    esp.Dist.Font = Drawing.Fonts.Monospace
    esp.Dist.Center = true
    esp.Dist.Outline = true
    esp.Weapon.Size = 12
    esp.Weapon.Font = Drawing.Fonts.Monospace
    esp.Weapon.Outline = true
    for _, l in pairs(esp.Skel) do l.Thickness = 1 end
    esp.Offscreen.Filled = true
    esp.Offscreen.Thickness = 2
    esp.AimLine.Thickness = 2
    esp.LookingText.Size = 14
    esp.LookingText.Font = Drawing.Fonts.Monospace
    esp.LookingText.Center = true
    esp.LookingText.Outline = true
    esp.ShieldText.Size = 14
    esp.ShieldText.Font = Drawing.Fonts.Monospace
    esp.ShieldText.Center = true
    esp.ShieldText.Outline = true
    esp.ShieldText.Color = Colors.Shielded
    esp.Tracer.Thickness = 1
    esp.Tracer.Color = Colors.Tracer
    esp.VelLine.Thickness = 2
    esp.VelLine.Color = Color3.fromRGB(0, 255, 255)
    esp.VelArrow.Filled = true
    esp.VelArrow.Color = Color3.fromRGB(0, 255, 255)
end

function ESP.hide(esp)
    for _, l in pairs(esp.Box) do l.Visible = false end
    esp.Name.Visible = false
    esp.Dist.Visible = false
    esp.Weapon.Visible = false
    for _, l in pairs(esp.Skel) do l.Visible = false end
    esp.Offscreen.Visible = false
    esp.AimLine.Visible = false
    esp.LookingText.Visible = false
    esp.ShieldText.Visible = false
    esp.Tracer.Visible = false
    esp.VelLine.Visible = false
    esp.VelArrow.Visible = false
end

function ESP.destroy(esp)
    pcall(function()
        for _, l in pairs(esp.Box) do l:Remove() end
        esp.Name:Remove()
        esp.Dist:Remove()
        esp.Weapon:Remove()
        for _, l in pairs(esp.Skel) do l:Remove() end
        esp.Offscreen:Remove()
        esp.AimLine:Remove()
        esp.LookingText:Remove()
        esp.ShieldText:Remove()
        esp.Tracer:Remove()
        esp.VelLine:Remove()
        esp.VelArrow:Remove()
    end)
end

function ESP.cleanup()
    local validPlayers = {}
    for _, p in ipairs(Players:GetPlayers()) do
        validPlayers[p] = true
    end
    for player, esp in pairs(ESP.cache) do
        if not validPlayers[player] then
            ESP.hide(esp)
            ESP.destroy(esp)
            ESP.cache[player] = nil
            ESP.velocityData[player] = nil
        end
    end
end

function ESP.hideAll()
    for _, esp in pairs(ESP.cache) do ESP.hide(esp) end
end

function ESP.step(cam, screenSize, screenCenter)
    if not Config.ESP_Enabled then
        ESP.hideAll()
        return
    end
    
    ESP.cleanup()
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        
        local char = player.Character
        if not char or not char:FindFirstChild("HumanoidRootPart") then
            if ESP.cache[player] then ESP.hide(ESP.cache[player]) end
        else
            local root = char:FindFirstChild("HumanoidRootPart")
            
            if not ESP.cache[player] then
                ESP.cache[player] = ESP.create()
                ESP.setup(ESP.cache[player])
            end
            local esp = ESP.cache[player]
            
            local myChar = LocalPlayer.Character
            local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
            local dist = myRoot and (root.Position - myRoot.Position).Magnitude or 0
            local isLobby = player.Team and player.Team.Name == "Lobby"
            
            if dist > Config.ESP_MaxDist then
                ESP.hide(esp)
            else
                ESP.render(esp, player, char, root, nil, cam, screenSize, screenCenter, dist, false, isLobby)
            end
        end
    end
end

function ESP.render(esp, player, char, root, hum, cam, screenSize, screenCenter, dist, isTeam, isLobby)
    local head = char:FindFirstChild("Head")
    local headPos = head and head.Position or (root.Position + Vector3.new(0, 2, 0))
    local feetPos = root.Position - Vector3.new(0, 3, 0)
    local topPos = headPos + Vector3.new(0, 0.5, 0)
    
    local rs, ron = cam:WorldToViewportPoint(root.Position)
    local hs = cam:WorldToViewportPoint(topPos)
    local fs = cam:WorldToViewportPoint(feetPos)
    
    local onScreen = ron and rs.Z > 0
    local visible = Cache.visibility[player] or false
    local shielded = Team.isShielded(char)
    
    local col
    if shielded and Config.ESP_Shield then
        col = Colors.Shielded
    elseif isLobby then
        col = Colors.Lobby
    else
        col = visible and Colors.EnemyVisible or Colors.Enemy
    end
    
    local skelCol = visible and Colors.SkeletonVisible or Colors.Skeleton
    local lookingAtYou = visible and Util.isLookingAtYou(char) or false
    
    if not onScreen then
        ESP.hide(esp)
        if Config.ESP_Offscreen and visible then
            local screenPos = cam:WorldToViewportPoint(root.Position)
            local dx, dy = screenPos.X - screenCenter.X, screenPos.Y - screenCenter.Y
            local angle = math.atan2(dy, dx)
            local arrowX = math.clamp(screenCenter.X + math.cos(angle) * (screenSize.X/2 - Tuning.OffscreenEdgeDist), Tuning.OffscreenEdgeDist, screenSize.X - Tuning.OffscreenEdgeDist)
            local arrowY = math.clamp(screenCenter.Y + math.sin(angle) * (screenSize.Y/2 - Tuning.OffscreenEdgeDist), Tuning.OffscreenEdgeDist, screenSize.Y - Tuning.OffscreenEdgeDist)
            local fwd = Vector2.new(math.cos(angle), math.sin(angle))
            local right = Vector2.new(-fwd.Y, fwd.X)
            local pos = Vector2.new(arrowX, arrowY)
            esp.Offscreen.PointA = pos + fwd * Tuning.OffscreenArrowSize
            esp.Offscreen.PointB = pos - fwd * Tuning.OffscreenArrowSize/2 - right * Tuning.OffscreenArrowSize/2
            esp.Offscreen.PointC = pos - fwd * Tuning.OffscreenArrowSize/2 + right * Tuning.OffscreenArrowSize/2
            esp.Offscreen.Color = Colors.EnemyVisible
            esp.Offscreen.Visible = true
        end
        return
    end
    
    esp.Offscreen.Visible = false
    local boxTop, boxBottom = hs.Y, fs.Y
    local boxHeight = math.abs(boxBottom - boxTop)
    local boxWidth = boxHeight * Tuning.BoxWidthRatio
    local cx = rs.X
    
    if Config.ESP_Boxes then
        esp.Box[1].From = Vector2.new(cx - boxWidth/2, boxTop)
        esp.Box[1].To = Vector2.new(cx + boxWidth/2, boxTop)
        esp.Box[2].From = Vector2.new(cx + boxWidth/2, boxTop)
        esp.Box[2].To = Vector2.new(cx + boxWidth/2, boxBottom)
        esp.Box[3].From = Vector2.new(cx + boxWidth/2, boxBottom)
        esp.Box[3].To = Vector2.new(cx - boxWidth/2, boxBottom)
        esp.Box[4].From = Vector2.new(cx - boxWidth/2, boxBottom)
        esp.Box[4].To = Vector2.new(cx - boxWidth/2, boxTop)
        for _, l in pairs(esp.Box) do l.Color = col; l.Visible = true end
    else
        for _, l in pairs(esp.Box) do l.Visible = false end
    end
    
    if Config.ESP_Names then
        esp.Name.Text = player.Name
        esp.Name.Position = Vector2.new(cx, hs.Y - Tuning.NameOffset)
        esp.Name.Color = col
        esp.Name.Visible = true
    else
        esp.Name.Visible = false
    end
    
    if Config.ESP_Distance then
        esp.Dist.Text = math.floor(dist) .. "m"
        esp.Dist.Position = Vector2.new(cx, fs.Y + Tuning.DistOffset)
        esp.Dist.Color = Color3.fromRGB(180, 180, 180)
        esp.Dist.Visible = true
    else
        esp.Dist.Visible = false
    end
    
    if Config.ESP_Weapons then
        local weapon = Cache.weapons[player]
        if weapon then
            esp.Weapon.Text = "[" .. weapon .. "]"
            esp.Weapon.Position = Vector2.new(cx + boxWidth/2 + Tuning.WeaponOffset, rs.Y)
            esp.Weapon.Color = Colors.Weapon
            esp.Weapon.Visible = true
        else
            esp.Weapon.Visible = false
        end
    else
        esp.Weapon.Visible = false
    end
    
    if Config.ESP_Skeleton then
        local bones = Util.isR6(char) and R6Bones or Bones
        for i, b in pairs(bones) do
            if esp.Skel[i] then
                local p1, p2 = char:FindFirstChild(b[1]), char:FindFirstChild(b[2])
                if p1 and p2 then
                    local s1, o1 = cam:WorldToViewportPoint(p1.Position)
                    local s2, o2 = cam:WorldToViewportPoint(p2.Position)
                    if o1 and o2 and s1.Z > 0 and s2.Z > 0 then
                        esp.Skel[i].From = Vector2.new(s1.X, s1.Y)
                        esp.Skel[i].To = Vector2.new(s2.X, s2.Y)
                        esp.Skel[i].Color = skelCol
                        esp.Skel[i].Visible = true
                    else
                        esp.Skel[i].Visible = false
                    end
                else
                    esp.Skel[i].Visible = false
                end
            end
        end
        for i = #bones + 1, #esp.Skel do
            if esp.Skel[i] then esp.Skel[i].Visible = false end
        end
    else
        for _, l in pairs(esp.Skel) do l.Visible = false end
    end
    
    if Config.ESP_AimDir and head then
        local aimEnd = head.Position + head.CFrame.LookVector * Tuning.AimLineLength
        local aimScreen, aimOn = cam:WorldToViewportPoint(aimEnd)
        local headScreen = cam:WorldToViewportPoint(head.Position)
        if aimOn and headScreen.Z > 0 then
            esp.AimLine.From = Vector2.new(headScreen.X, headScreen.Y)
            esp.AimLine.To = Vector2.new(aimScreen.X, aimScreen.Y)
            esp.AimLine.Color = Colors.AimDir
            esp.AimLine.Visible = true
        else
            esp.AimLine.Visible = false
        end
    else
        esp.AimLine.Visible = false
    end
    
    if Config.ESP_LookingAtYou and lookingAtYou then
        esp.LookingText.Text = "[!] LOOKING"
        esp.LookingText.Position = Vector2.new(cx, hs.Y - Tuning.LookingOffset)
        esp.LookingText.Color = Colors.LookingAtYou
        esp.LookingText.Visible = true
    else
        esp.LookingText.Visible = false
    end
    
    if Config.ESP_Shield and shielded then
        local remaining = Cache.shields[char] - tick()
        esp.ShieldText.Text = "[SHIELDED " .. string.format("%.1f", math.max(0, remaining)) .. "s]"
        esp.ShieldText.Position = Vector2.new(cx, hs.Y - Tuning.ShieldOffset)
        esp.ShieldText.Visible = true
    else
        esp.ShieldText.Visible = false
    end
    
    if Config.ESP_Tracers then
        esp.Tracer.From = Vector2.new(screenCenter.X, screenSize.Y)
        esp.Tracer.To = Vector2.new(cx, fs.Y)
        esp.Tracer.Color = visible and Colors.EnemyVisible or Colors.Tracer
        esp.Tracer.Visible = true
    else
        esp.Tracer.Visible = false
    end
    
    local vd = ESP.velocityData[player]
    if not vd then
        vd = {pos = root.Position, vel = Vector3.zero, time = tick()}
        ESP.velocityData[player] = vd
    end
    local now = tick()
    local dt = now - vd.time
    if dt > 0.03 then
        local rawVel = (root.Position - vd.pos) / dt
        vd.vel = vd.vel * 0.7 + rawVel * 0.3
        vd.pos = root.Position
        vd.time = now
    end
    
    if Config.ESP_Velocity then
        local velFlat = Vector3.new(vd.vel.X, 0, vd.vel.Z)
        local velMag = velFlat.Magnitude
        if velMag > 2 then
            local futurePos = root.Position + velFlat.Unit * math.clamp(velMag * 0.4, 5, 20)
            local futureScreen, futureOn = cam:WorldToViewportPoint(futurePos)
            if futureOn and futureScreen.Z > 0 then
                esp.VelLine.From = Vector2.new(rs.X, rs.Y)
                esp.VelLine.To = Vector2.new(futureScreen.X, futureScreen.Y)
                esp.VelLine.Visible = true
                local dx, dy = futureScreen.X - rs.X, futureScreen.Y - rs.Y
                local len = math.sqrt(dx*dx + dy*dy)
                if len > 5 then
                    local fx, fy = dx/len, dy/len
                    esp.VelArrow.PointA = Vector2.new(futureScreen.X, futureScreen.Y)
                    esp.VelArrow.PointB = Vector2.new(futureScreen.X - fx*10 + fy*5, futureScreen.Y - fy*10 - fx*5)
                    esp.VelArrow.PointC = Vector2.new(futureScreen.X - fx*10 - fy*5, futureScreen.Y - fy*10 + fx*5)
                    esp.VelArrow.Visible = true
                else
                    esp.VelArrow.Visible = false
                end
            else
                esp.VelLine.Visible = false
                esp.VelArrow.Visible = false
            end
        else
            esp.VelLine.Visible = false
            esp.VelArrow.Visible = false
        end
    else
        esp.VelLine.Visible = false
        esp.VelArrow.Visible = false
    end
end

local Radar = {
    bg = Drawing.new("Square"),
    circleBg = Drawing.new("Circle"),
    border = Drawing.new("Square"),
    circleBorder = Drawing.new("Circle"),
    cross1 = Drawing.new("Line"),
    cross2 = Drawing.new("Line"),
    center = Drawing.new("Triangle"),
    dots = {}
}

do
    Radar.bg.Filled = true
    Radar.bg.Color = Colors.RadarBg
    Radar.bg.Transparency = 0.8
    Radar.circleBg.Filled = true
    Radar.circleBg.Color = Colors.RadarBg
    Radar.circleBg.Transparency = 0.8
    Radar.circleBg.NumSides = 64
    Radar.border.Filled = false
    Radar.border.Color = Colors.RadarBorder
    Radar.border.Thickness = 2
    Radar.circleBorder.Filled = false
    Radar.circleBorder.Color = Colors.RadarBorder
    Radar.circleBorder.Thickness = 2
    Radar.circleBorder.NumSides = 64
    Radar.cross1.Color = Color3.fromRGB(40, 40, 40)
    Radar.cross1.Thickness = 1
    Radar.cross2.Color = Color3.fromRGB(40, 40, 40)
    Radar.cross2.Thickness = 1
    Radar.center.Filled = true
    Radar.center.Color = Colors.RadarYou
    for i = 1, 50 do
        local d = Drawing.new("Triangle")
        d.Filled = true
        d.Visible = false
        Radar.dots[i] = d
    end
end

function Radar.hideAll()
    Radar.bg.Visible = false
    Radar.circleBg.Visible = false
    Radar.border.Visible = false
    Radar.circleBorder.Visible = false
    Radar.center.Visible = false
    Radar.cross1.Visible = false
    Radar.cross2.Visible = false
    for _, d in pairs(Radar.dots) do d.Visible = false end
end

function Radar.step(cam)
    if not Config.RADAR_Enabled then
        Radar.hideAll()
        return
    end
    
    local size = Config.RADAR_Size
    local pos = Vector2.new(cam.ViewportSize.X - size - 20, 20)
    local center = pos + Vector2.new(size/2, size/2)
    
    if Config.RADAR_Circle then
        Radar.bg.Visible = false
        Radar.border.Visible = false
        Radar.circleBg.Position = center
        Radar.circleBg.Radius = size/2
        Radar.circleBg.Visible = true
        Radar.circleBorder.Position = center
        Radar.circleBorder.Radius = size/2
        Radar.circleBorder.Visible = true
    else
        Radar.circleBg.Visible = false
        Radar.circleBorder.Visible = false
        Radar.bg.Position = pos
        Radar.bg.Size = Vector2.new(size, size)
        Radar.bg.Visible = true
        Radar.border.Position = pos
        Radar.border.Size = Vector2.new(size, size)
        Radar.border.Visible = true
    end
    
    Radar.cross1.From = Vector2.new(center.X, pos.Y + 10)
    Radar.cross1.To = Vector2.new(center.X, pos.Y + size - 10)
    Radar.cross1.Visible = true
    Radar.cross2.From = Vector2.new(pos.X + 10, center.Y)
    Radar.cross2.To = Vector2.new(pos.X + size - 10, center.Y)
    Radar.cross2.Visible = true
    
    local myChar = LocalPlayer.Character
    local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
    local myLook = cam.CFrame.LookVector
    if not myRoot then
        Radar.center.Visible = false
        for _, d in pairs(Radar.dots) do d.Visible = false end
        return
    end
    
    local myAngle = math.atan2(-myLook.X, -myLook.Z)
    local cosA, sinA = math.cos(myAngle), math.sin(myAngle)
    local scale = (size/2 - 10) / Tuning.RadarRange
    local idx = 1
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        if idx > #Radar.dots then break end
        local char = player.Character
        if char then
            local root = char:FindFirstChild("HumanoidRootPart")
            if root then
                local isLobby = player.Team and player.Team.Name == "Lobby"
                local isShielded = Team.isShielded(char)
                local rx, rz = root.Position.X - myRoot.Position.X, root.Position.Z - myRoot.Position.Z
                local dist2D = math.sqrt(rx^2 + rz^2)
                if dist2D < Tuning.RadarRange then
                    local rotX = rx * cosA - rz * sinA
                    local rotZ = rx * sinA + rz * cosA
                    local radarX, radarY = rotX * scale, rotZ * scale
                    local maxD = size/2 - 8
                    local rDist = math.sqrt(radarX^2 + radarY^2)
                    if rDist > maxD then
                        radarX, radarY = radarX/rDist*maxD, radarY/rDist*maxD
                    end
                    local dotPos = center + Vector2.new(radarX, radarY)
                    local dot = Radar.dots[idx]
                    local head = char:FindFirstChild("Head")
                    local eAngle = head and math.atan2(-head.CFrame.LookVector.X, -head.CFrame.LookVector.Z) - myAngle or 0
                    local eFwd = Vector2.new(-math.sin(eAngle), -math.cos(eAngle))
                    local eRight = Vector2.new(-eFwd.Y, eFwd.X)
                    dot.PointA = dotPos + eFwd * Tuning.RadarDotSize
                    dot.PointB = dotPos - eFwd * Tuning.RadarDotSize/2 + eRight * Tuning.RadarDotSize/2
                    dot.PointC = dotPos - eFwd * Tuning.RadarDotSize/2 - eRight * Tuning.RadarDotSize/2
                    dot.Color = isLobby and Colors.Lobby or (isShielded and Colors.Shielded or Colors.RadarEnemy)
                    dot.Visible = true
                    idx = idx + 1
                end
            end
        end
    end
    
    for i = idx, #Radar.dots do Radar.dots[i].Visible = false end
    
    Radar.center.PointA = center + Vector2.new(0, -Tuning.RadarArrowSize)
    Radar.center.PointB = center + Vector2.new(-Tuning.RadarArrowSize/2, Tuning.RadarArrowSize/2)
    Radar.center.PointC = center + Vector2.new(Tuning.RadarArrowSize/2, Tuning.RadarArrowSize/2)
    Radar.center.Visible = true
end

local Aimbot = {
    aiming = false,
    locked = nil,
    fov = Drawing.new("Circle")
}

Aimbot.fov.Thickness = 1
Aimbot.fov.NumSides = 64
Aimbot.fov.Filled = false
Aimbot.fov.Transparency = 0.6

Connections.mb2down = Mouse.Button2Down:Connect(function()
    Aimbot.aiming = true
    Aimbot.locked = nil
end)

Connections.mb2up = Mouse.Button2Up:Connect(function()
    Aimbot.aiming = false
    Aimbot.locked = nil
end)

function Aimbot.getBest(cam)
    local center = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y/2)
    local myChar = LocalPlayer.Character
    local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
    if not myRoot then return nil end
    
    local best, bestDist = nil, math.huge
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        local char = player.Character
        if char then
            local root = char:FindFirstChild("HumanoidRootPart")
            if root then
                local isLobby = player.Team and player.Team.Name == "Lobby"
                local shielded = Team.isShielded(char)
                
                if Config.AIM_IgnoreLobby and isLobby then continue end
                if Config.AIM_IgnoreShielded and shielded then continue end
                if Config.AIM_WallCheck and not Cache.visibility[player] then continue end
                
                local head = char:FindFirstChild("Head")
                if head then
                    local sp, on = cam:WorldToViewportPoint(head.Position)
                    if on and sp.Z > 0 then
                        local sDist = (Vector2.new(sp.X, sp.Y) - center).Magnitude
                        if sDist <= Config.AIM_FOV then
                            local wDist = (root.Position - myRoot.Position).Magnitude
                            if wDist < bestDist then
                                bestDist = wDist
                                best = char
                            end
                        end
                    end
                end
            end
        end
    end
    
    return best
end

function Aimbot.step(cam, screenCenter)
    if Config.AIM_Enabled and Config.AIM_ShowFOV then
        Aimbot.fov.Position = screenCenter
        Aimbot.fov.Radius = Config.AIM_FOV
        Aimbot.fov.Color = (Aimbot.aiming and Aimbot.locked) and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(255, 255, 255)
        Aimbot.fov.Visible = true
    else
        Aimbot.fov.Visible = false
    end
end

RunService:BindToRenderStep("FlickAimbotCore", Enum.RenderPriority.Camera.Value + 1, function()
    if Unloaded or not Config.AIM_Enabled then return end
    local rmb = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
    if not (Aimbot.aiming or rmb) then
        Aimbot.locked = nil
        return
    end
    
    local cam = workspace.CurrentCamera
    if not cam then return end
    
    if not Aimbot.locked or not Aimbot.locked.Parent or not Aimbot.locked:FindFirstChild("Head") then
        Aimbot.locked = Aimbot.getBest(cam)
    end
    
    if not Aimbot.locked then return end
    
    local head = Aimbot.locked:FindFirstChild("Head")
    local hum = Aimbot.locked:FindFirstChild("Humanoid")
    if not head or not hum or hum.Health <= 0 then
        Aimbot.locked = nil
        return
    end
    
    local goal = CFrame.lookAt(cam.CFrame.Position, head.Position)
    local newCF
    if Config.AIM_Smooth <= 0 then
        newCF = goal
    else
        local alpha = math.clamp(0.9 - (Config.AIM_Smooth/100)*0.8, 0.1, 0.9)
        newCF = cam.CFrame:Lerp(goal, alpha)
    end
    cam.CFrame = newCF
end)

local Trigger = {
    active = false,
    lastShot = 0
}

function Trigger.check(cam)
    local center = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y/2)
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        local char = player.Character
        if not char then continue end
        local isLobby = player.Team and player.Team.Name == "Lobby"
        local shielded = Team.isShielded(char)
        if isLobby or shielded then continue end
        local visible = Cache.visibility[player]
        if not visible then continue end
        for _, pn in pairs({"Head", "UpperTorso", "Torso"}) do
            local p = char:FindFirstChild(pn)
            if p then
                local sp, on = cam:WorldToViewportPoint(p.Position)
                if on and sp.Z > 0 and (Vector2.new(sp.X, sp.Y) - center).Magnitude < Tuning.TriggerRadius then
                    return true
                end
            end
        end
    end
    return false
end

function Trigger.shoot()
    pcall(function()
        if mouse1click then
            mouse1click()
        end
    end)
    pcall(function()
        if mousebuttonclick then
            mousebuttonclick(1)
        end
    end)
    pcall(function()
        if click then
            click()
        end
    end)
end

function Trigger.run()
    Trigger.active = true
    while Config.TRIGGER_Enabled and not Unloaded do
        pcall(function()
            local cam = workspace.CurrentCamera
            if cam and Trigger.check(cam) then
                local now = tick() * 1000
                if now - Trigger.lastShot >= Config.TRIGGER_Delay then
                    Trigger.shoot()
                    Trigger.lastShot = now
                end
            end
        end)
        task.wait(0.016)
    end
    Trigger.active = false
end

task.spawn(function()
    while not Unloaded do
        if Config.TRIGGER_Enabled and not Trigger.active then
            task.spawn(Trigger.run)
        end
        task.wait(0.3)
    end
end)

local Rage = {
    active = false,
    currentTarget = nil,
    lastShot = 0,
    indicator = Drawing.new("Text")
}

Rage.indicator.Size = 18
Rage.indicator.Font = Drawing.Fonts.Monospace
Rage.indicator.Center = true
Rage.indicator.Outline = true
Rage.indicator.Color = Color3.fromRGB(255, 0, 0)
Rage.indicator.Text = "[RAGE ACTIVE]"
Rage.indicator.Visible = false

function Rage.scoreTarget(player, myRoot, cam)
    local char = player.Character
    if not char then return -1 end
    
    local root = char:FindFirstChild("HumanoidRootPart")
    if not root then return -1 end
    
    local hum = char:FindFirstChild("Humanoid")
    if hum and hum.Health <= 0 then return -1 end
    
    local isLobby = player.Team and player.Team.Name == "Lobby"
    if isLobby then return -1 end
    
    local shielded = Team.isShielded(char)
    if shielded then return -1 end
    
    local dist = (root.Position - myRoot.Position).Magnitude
    if dist > Tuning.RageMaxDist then return -1 end
    
    local score = 1000
    
    score = score - (dist / Tuning.RageMaxDist) * Tuning.RageDistWeight
    
    local visible = Cache.visibility[player]
    if visible and Config.RAGE_PrioVisible then
        score = score + Tuning.RageVisibleWeight
    end
    
    if Config.RAGE_PrioThreat then
        local head = char:FindFirstChild("Head")
        if head and myRoot then
            local myHead = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Head")
            if myHead then
                local toYou = (myHead.Position - head.Position).Unit
                local lookDot = toYou:Dot(head.CFrame.LookVector)
                if lookDot > 0.5 then
                    score = score + Tuning.RageThreatWeight * lookDot
                end
            end
        end
    end
    
    return score
end

function Rage.getBestTarget(cam)
    local myChar = LocalPlayer.Character
    local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
    if not myRoot then return nil end
    
    local best, bestScore = nil, -1
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end
        local score = Rage.scoreTarget(player, myRoot, cam)
        if score > bestScore then
            bestScore = score
            best = player.Character
        end
    end
    
    return best
end

function Rage.aimAt(target, cam)
    if not target then return end
    
    local head = target:FindFirstChild("Head")
    if not head then return end
    
    local goal = CFrame.lookAt(cam.CFrame.Position, head.Position)
    cam.CFrame = goal
end

function Rage.shoot()
    pcall(function()
        if mouse1click then mouse1click() end
    end)
    pcall(function()
        if mousebuttonclick then mousebuttonclick(1) end
    end)
    pcall(function()
        if click then click() end
    end)
end

function Rage.run()
    Rage.active = true
    while Config.RAGE_Enabled and not Unloaded do
        pcall(function()
            local cam = workspace.CurrentCamera
            if not cam then return end
            
            local target = Rage.getBestTarget(cam)
            
            if target and target ~= Rage.currentTarget then
                Rage.currentTarget = target
            end
            
            if not Rage.currentTarget or not Rage.currentTarget.Parent then
                Rage.currentTarget = target
            end
            
            if Rage.currentTarget then
                local hum = Rage.currentTarget:FindFirstChild("Humanoid")
                if hum and hum.Health <= 0 then
                    Rage.currentTarget = target
                end
                
                if Team.isShielded(Rage.currentTarget) then
                    Rage.currentTarget = target
                end
            end
            
            if Rage.currentTarget then
                Rage.aimAt(Rage.currentTarget, cam)
                
                if Config.RAGE_AutoShoot then
                    local now = tick() * 1000
                    if now - Rage.lastShot >= Tuning.RageShootDelay then
                        local visible = false
                        for _, p in ipairs(Players:GetPlayers()) do
                            if p.Character == Rage.currentTarget then
                                visible = Cache.visibility[p]
                                break
                            end
                        end
                        if visible then
                            Rage.shoot()
                            Rage.lastShot = now
                        end
                    end
                end
            end
        end)
        task.wait(0.016)
    end
    Rage.active = false
    Rage.currentTarget = nil
    Rage.indicator.Visible = false
end

function Rage.step(cam, screenCenter)
    if Config.RAGE_Enabled then
        Rage.indicator.Position = Vector2.new(screenCenter.X, 80)
        Rage.indicator.Visible = true
        
        if Rage.currentTarget then
            local name = "UNKNOWN"
            for _, p in ipairs(Players:GetPlayers()) do
                if p.Character == Rage.currentTarget then
                    name = p.Name
                    break
                end
            end
            Rage.indicator.Text = "[RAGE] -> " .. name
        else
            Rage.indicator.Text = "[RAGE ACTIVE]"
        end
    else
        Rage.indicator.Visible = false
    end
end

task.spawn(function()
    while not Unloaded do
        if Config.RAGE_Enabled and not Rage.active then
            task.spawn(Rage.run)
        end
        task.wait(0.3)
    end
end)

local Menu = {
    selected = 1,
    drawings = {},
    items = {
        {name = "ESP", key = "ESP_Enabled", type = "toggle"},
        {name = "  Boxes", key = "ESP_Boxes", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Names", key = "ESP_Names", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Distance", key = "ESP_Distance", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Skeleton", key = "ESP_Skeleton", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Weapons", key = "ESP_Weapons", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Aim Direction", key = "ESP_AimDir", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Looking At You", key = "ESP_LookingAtYou", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Shield Indicator", key = "ESP_Shield", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Offscreen", key = "ESP_Offscreen", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Tracers", key = "ESP_Tracers", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Velocity", key = "ESP_Velocity", type = "toggle", parent = "ESP_Enabled"},
        {name = "  Max Dist", key = "ESP_MaxDist", type = "slider", min = 500, max = 5000, step = 100, parent = "ESP_Enabled"},
        {name = "----------", type = "sep"},
        {name = "RADAR", key = "RADAR_Enabled", type = "toggle"},
        {name = "  Size", key = "RADAR_Size", type = "slider", min = 80, max = 200, step = 10, parent = "RADAR_Enabled"},
        {name = "  Circle Mode", key = "RADAR_Circle", type = "toggle", parent = "RADAR_Enabled"},
        {name = "----------", type = "sep"},
        {name = "AIMBOT", key = "AIM_Enabled", type = "toggle"},
        {name = "  FOV", key = "AIM_FOV", type = "slider", min = 50, max = 500, step = 25, parent = "AIM_Enabled"},
        {name = "  Smooth", key = "AIM_Smooth", type = "slider", min = 0, max = 100, step = 5, parent = "AIM_Enabled"},
        {name = "  Show FOV", key = "AIM_ShowFOV", type = "toggle", parent = "AIM_Enabled"},
        {name = "  Wall Check", key = "AIM_WallCheck", type = "toggle", parent = "AIM_Enabled"},
        {name = "  Ignore Shielded", key = "AIM_IgnoreShielded", type = "toggle", parent = "AIM_Enabled"},
        {name = "  Ignore Lobby", key = "AIM_IgnoreLobby", type = "toggle", parent = "AIM_Enabled"},
        {name = "----------", type = "sep"},
        {name = "TRIGGERBOT", key = "TRIGGER_Enabled", type = "toggle"},
        {name = "  Delay (ms)", key = "TRIGGER_Delay", type = "slider", min = 0, max = 200, step = 10, parent = "TRIGGER_Enabled"},
        {name = "----------", type = "sep"},
        {name = "RAGE BOT", key = "RAGE_Enabled", type = "toggle"},
        {name = "  Prio Visible", key = "RAGE_PrioVisible", type = "toggle", parent = "RAGE_Enabled"},
        {name = "  Prio Threats", key = "RAGE_PrioThreat", type = "toggle", parent = "RAGE_Enabled"},
        {name = "  Auto Shoot", key = "RAGE_AutoShoot", type = "toggle", parent = "RAGE_Enabled"},
        {name = "----------", type = "sep"},
        {name = "MISC", type = "label"},
        {name = "  Walk Speed", key = "MISC_WalkSpeed", type = "slider", min = 16, max = 24, step = 1},
        {name = "  Field of View", key = "MISC_FOV", type = "slider", min = 60, max = 120, step = 5},
        {name = "  Full Bright", key = "MISC_FullBright", type = "toggle"},
        {name = "  No Fog", key = "MISC_NoFog", type = "toggle"},
        {name = "  Auto Respawn", key = "MISC_AutoRespawn", type = "toggle"}
    },
    bg = Drawing.new("Square"),
    border = Drawing.new("Square"),
    title = Drawing.new("Text"),
    stats = Drawing.new("Text"),
    warning = {
        bg = Drawing.new("Square"),
        border = Drawing.new("Square"),
        title = Drawing.new("Text"),
        text1 = Drawing.new("Text"),
        text2 = Drawing.new("Text")
    }
}

Menu.bg.Position = Vector2.new(10, 10)
Menu.bg.Color = Colors.MenuBg
Menu.bg.Filled = true
Menu.bg.Transparency = 0.9
Menu.border.Position = Vector2.new(10, 10)
Menu.border.Color = Colors.MenuHighlight
Menu.border.Filled = false
Menu.border.Thickness = 1
Menu.title.Position = Vector2.new(18, 14)
Menu.title.Text = "FLICK | INS menu | HOME panic"
Menu.title.Size = 13
Menu.title.Font = Drawing.Fonts.Monospace
Menu.title.Color = Color3.fromRGB(100, 100, 100)
Menu.title.Outline = true
Menu.stats.Size = 12
Menu.stats.Font = Drawing.Fonts.Monospace
Menu.stats.Color = Color3.fromRGB(80, 80, 80)
Menu.stats.Outline = true

Menu.warning.bg.Filled = true
Menu.warning.bg.Color = Color3.fromRGB(20, 0, 0)
Menu.warning.bg.Transparency = 0.9
Menu.warning.bg.Visible = false
Menu.warning.border.Filled = false
Menu.warning.border.Color = Color3.fromRGB(255, 50, 50)
Menu.warning.border.Thickness = 2
Menu.warning.border.Visible = false
Menu.warning.title.Size = 16
Menu.warning.title.Font = Drawing.Fonts.Monospace
Menu.warning.title.Color = Color3.fromRGB(255, 50, 50)
Menu.warning.title.Outline = true
Menu.warning.title.Center = true
Menu.warning.title.Text = "!! WARNING !!"
Menu.warning.title.Visible = false
Menu.warning.text1.Size = 13
Menu.warning.text1.Font = Drawing.Fonts.Monospace
Menu.warning.text1.Color = Color3.fromRGB(255, 200, 200)
Menu.warning.text1.Outline = true
Menu.warning.text1.Center = true
Menu.warning.text1.Text = "Aimbot may get you banned!"
Menu.warning.text1.Visible = false
Menu.warning.text2.Size = 13
Menu.warning.text2.Font = Drawing.Fonts.Monospace
Menu.warning.text2.Color = Color3.fromRGB(255, 150, 150)
Menu.warning.text2.Outline = true
Menu.warning.text2.Center = true
Menu.warning.text2.Text = "Use at your own risk!"
Menu.warning.text2.Visible = false

for i = 1, #Menu.items do
    local t = Drawing.new("Text")
    t.Size = 13
    t.Font = Drawing.Fonts.Monospace
    t.Outline = true
    Menu.drawings[i] = t
end

function Menu.showWarning(cam)
    local cx = cam.ViewportSize.X / 2
    local w, h = 280, 80
    Menu.warning.bg.Position = Vector2.new(cx - w/2, 150)
    Menu.warning.bg.Size = Vector2.new(w, h)
    Menu.warning.bg.Visible = true
    Menu.warning.border.Position = Vector2.new(cx - w/2, 150)
    Menu.warning.border.Size = Vector2.new(w, h)
    Menu.warning.border.Visible = true
    Menu.warning.title.Position = Vector2.new(cx, 165)
    Menu.warning.title.Visible = true
    Menu.warning.text1.Position = Vector2.new(cx, 188)
    Menu.warning.text1.Visible = true
    Menu.warning.text2.Position = Vector2.new(cx, 205)
    Menu.warning.text2.Visible = true
    Timers.warningEnd = tick() + 3
end

function Menu.updateWarning()
    if Timers.warningEnd > 0 and tick() > Timers.warningEnd then
        Menu.warning.bg.Visible = false
        Menu.warning.border.Visible = false
        Menu.warning.title.Visible = false
        Menu.warning.text1.Visible = false
        Menu.warning.text2.Visible = false
        Timers.warningEnd = 0
    end
end

function Menu.step()
    if not Config.MenuOpen then
        Menu.bg.Visible = false
        Menu.border.Visible = false
        Menu.title.Visible = false
        Menu.stats.Visible = false
        for _, d in pairs(Menu.drawings) do d.Visible = false end
        return
    end
    
    local y, count = 32, 0
    for i, item in ipairs(Menu.items) do
        local d = Menu.drawings[i]
        local show = not item.parent or Config[item.parent]
        if show then
            count = count + 1
            d.Position = Vector2.new(18, y)
            if item.type == "sep" then
                d.Text = item.name
                d.Color = Color3.fromRGB(50, 50, 50)
            elseif item.type == "label" then
                d.Text = item.name
                d.Color = Color3.fromRGB(200, 200, 200)
            elseif item.type == "toggle" then
                local on = Config[item.key]
                d.Text = (i == Menu.selected and "> " or "  ") .. item.name .. (on and " ON" or " OFF")
                d.Color = i == Menu.selected and Colors.MenuHighlight or (on and Colors.MenuOn or Colors.MenuOff)
            elseif item.type == "slider" then
                d.Text = (i == Menu.selected and "> " or "  ") .. item.name .. " " .. math.floor(Config[item.key])
                d.Color = i == Menu.selected and Colors.MenuHighlight or Colors.MenuText
            end
            d.Visible = true
            y = y + 16
        else
            d.Visible = false
        end
    end
    
    local statsY = y + 8
    local ping = 0
    pcall(function()
        ping = math.floor(Stats.Network.ServerStatsItem["Data Ping"]:GetValue())
    end)
    local health = 0
    if LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") then
        health = math.floor(LocalPlayer.Character:FindFirstChildOfClass("Humanoid").Health)
    end
    Menu.stats.Text = "HP: " .. health .. " | Ping: " .. ping .. "ms"
    Menu.stats.Position = Vector2.new(18, statsY)
    Menu.stats.Visible = true
    
    Menu.bg.Size = Vector2.new(200, statsY - 10 + 20)
    Menu.border.Size = Vector2.new(200, statsY - 10 + 20)
    Menu.bg.Visible = true
    Menu.border.Visible = true
    Menu.title.Visible = true
end

local function ApplyMiscSettings()
    if LocalPlayer.Character then
        local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
        if humanoid then
            humanoid.WalkSpeed = Config.MISC_WalkSpeed
        end
    end
    
    workspace.CurrentCamera.FieldOfView = Config.MISC_FOV
    
    if Config.MISC_FullBright then
        game.Lighting.Brightness = 2
        game.Lighting.Ambient = Color3.fromRGB(255, 255, 255)
        game.Lighting.OutdoorAmbient = Color3.fromRGB(255, 255, 255)
    else
        game.Lighting.Brightness = OriginalLighting.Brightness
        game.Lighting.Ambient = OriginalLighting.Ambient
        game.Lighting.OutdoorAmbient = OriginalLighting.OutdoorAmbient
    end
    
    if Config.MISC_NoFog then
        game.Lighting.FogEnd = 100000
        game.Lighting.FogStart = 0
    else
        game.Lighting.FogEnd = OriginalLighting.FogEnd
        game.Lighting.FogStart = OriginalLighting.FogStart
    end
end

local autoRespawnLastFire = 0

local function AutoRespawnTick()
    if not Config.MISC_AutoRespawn then return end
    if not workspace:FindFirstChild(LocalPlayer.Name) then
        if tick() - autoRespawnLastFire >= 1 then
            local remotes = ReplicatedStorage:FindFirstChild("Remotes")
            if remotes and remotes:FindFirstChild("Command") then
                remotes.Command:FireServer("Play")
            end
            autoRespawnLastFire = tick()
        end
    end
end

local function Unload()
    if Unloaded then return end
    Unloaded = true
    Config.TRIGGER_Enabled = false
    Config.RAGE_Enabled = false
    Trigger.active = false
    Rage.active = false
    
    pcall(function() RunService:UnbindFromRenderStep("FlickAimbotCore") end)
    
    for _, c in pairs(Connections) do
        pcall(function() c:Disconnect() end)
    end
    
    for _, esp in pairs(ESP.cache) do ESP.destroy(esp) end
    
    Radar.bg:Remove()
    Radar.circleBg:Remove()
    Radar.border:Remove()
    Radar.circleBorder:Remove()
    Radar.cross1:Remove()
    Radar.cross2:Remove()
    Radar.center:Remove()
    for _, d in pairs(Radar.dots) do d:Remove() end
    
    Aimbot.fov:Remove()
    Rage.indicator:Remove()
    
    Menu.bg:Remove()
    Menu.border:Remove()
    Menu.title:Remove()
    Menu.stats:Remove()
    for _, d in pairs(Menu.drawings) do d:Remove() end
    Menu.warning.bg:Remove()
    Menu.warning.border:Remove()
    Menu.warning.title:Remove()
    Menu.warning.text1:Remove()
    Menu.warning.text2:Remove()
    
    game.Lighting.Brightness = OriginalLighting.Brightness
    game.Lighting.Ambient = OriginalLighting.Ambient
    game.Lighting.OutdoorAmbient = OriginalLighting.OutdoorAmbient
    game.Lighting.FogEnd = OriginalLighting.FogEnd
    game.Lighting.FogStart = OriginalLighting.FogStart
end

Connections.input = UserInputService.InputBegan:Connect(function(input, gp)
    if input.KeyCode == Enum.KeyCode.Home then
        Unload()
        return
    end
    if input.KeyCode == Enum.KeyCode.Insert and not gp then
        Config.MenuOpen = not Config.MenuOpen
        return
    end
    if not Config.MenuOpen then return end
    
    if input.KeyCode == Enum.KeyCode.Up then
        repeat
            Menu.selected = Menu.selected - 1
            if Menu.selected < 1 then Menu.selected = #Menu.items end
        until Menu.items[Menu.selected].type ~= "sep" and Menu.items[Menu.selected].type ~= "label" and (not Menu.items[Menu.selected].parent or Config[Menu.items[Menu.selected].parent])
    elseif input.KeyCode == Enum.KeyCode.Down then
        repeat
            Menu.selected = Menu.selected + 1
            if Menu.selected > #Menu.items then Menu.selected = 1 end
        until Menu.items[Menu.selected].type ~= "sep" and Menu.items[Menu.selected].type ~= "label" and (not Menu.items[Menu.selected].parent or Config[Menu.items[Menu.selected].parent])
    elseif input.KeyCode == Enum.KeyCode.Left or input.KeyCode == Enum.KeyCode.Right then
        local item = Menu.items[Menu.selected]
        if item and item.type == "toggle" then
            Config[item.key] = not Config[item.key]
            if item.key == "AIM_Enabled" and Config.AIM_Enabled then
                Menu.showWarning(workspace.CurrentCamera)
            end
            if item.key == "RAGE_Enabled" and Config.RAGE_Enabled then
                Menu.warning.text1.Text = "RAGE BOT IS VERY RISKY!"
                Menu.warning.text2.Text = "You WILL get reported and banned!"
                Menu.showWarning(workspace.CurrentCamera)
            end
        elseif item and item.type == "slider" then
            if input.KeyCode == Enum.KeyCode.Left then
                Config[item.key] = math.max(item.min, Config[item.key] - item.step)
            else
                Config[item.key] = math.min(item.max, Config[item.key] + item.step)
            end
        end
    end
end)

Connections.playerAdded = Players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(char)
        Team.applyShield(char)
    end)
end)

Connections.playerRemoving = Players.PlayerRemoving:Connect(function(player)
    Cache.visibility[player] = nil
    Cache.weapons[player] = nil
    if player.Character then
        Cache.shields[player.Character] = nil
    end
    if ESP.cache[player] then
        ESP.hide(ESP.cache[player])
        ESP.destroy(ESP.cache[player])
        ESP.cache[player] = nil
        ESP.velocityData[player] = nil
    end
end)

for _, player in pairs(Players:GetPlayers()) do
    if player ~= LocalPlayer then
        player.CharacterAdded:Connect(function(char)
            Team.applyShield(char)
        end)
    end
end

Connections.render = RunService.RenderStepped:Connect(function()
    if Unloaded then return end
    local cam = workspace.CurrentCamera
    if not cam then return end
    
    local screenSize = cam.ViewportSize
    local screenCenter = Vector2.new(screenSize.X/2, screenSize.Y/2)
    local now = tick()
    
    if now - Timers.lastVisRefresh > Tuning.VisibilityRefreshRate then
        Timers.lastVisRefresh = now
        Targets.refreshVisibility()
    end
    
    if now - Timers.lastWeaponRefresh > Tuning.WeaponRefreshRate then
        Timers.lastWeaponRefresh = now
        Targets.refreshWeapons()
    end
    
    ApplyMiscSettings()
    AutoRespawnTick()
    
    ESP.step(cam, screenSize, screenCenter)
    Radar.step(cam)
    Aimbot.step(cam, screenCenter)
    Rage.step(cam, screenCenter)
    Menu.updateWarning()
    Menu.step()
end)

Menu.step()

Features & Information

NOT FOR XENO USE HIGHER UNC EXECUTOR. I will see if I make a xeno script but the drawing apis are limited..This is open source, so if something is missing or could be better, change it or request it in the comments. NO MOBILE right now. this is a PC script. I'll release a separate mobile script later. Features: ESP: Boxes Names Distance Skeleton Weapons Aim Direction Looking At You indicator Shield Indicator (with timer) Offscreen arrows Tracers Velocity/Prediction Team Check (optional) Radar: Circle or Square mode Shows enemies, shielded players (orange), and lobby players Directional indicators Configurable size Aimbot: RMB Aimbot FOV Circle Smoothing Wall Check Ignore Shielded Ignore Lobby Moves Camera Triggerbot: Auto-shoot on crosshair Delay Visibility check (no wallbang) Ignores shielded/lobby players Misc: Walk Speed Field of View Full Bright No Fog Auto Respawn Radar Color-coding RAGE BOT (BAN CHANCE! USE WITH CAUTION)
#esp#aimbot#flick#free#source

Community Comments (4)

UmmidkwhattouseUmmidkwhattouseNov 27, 2025

Not bad

IeanIeanNov 27, 2025

doesnt work on xeno

Replying to @Iean
transdimensionaltransdimensionalNov 29, 2025

@Iean skill issue xeno is *

ltejeidacamacholtejeidacamachoNov 28, 2025

No me funciona

More Scripts for [FPS] Flick