Universal Script – EZ AIM V2 - Verified script for Universal Roblox
Key RequiredUniversal

Universal Script – EZ AIM V2

Universal ScriptTeamMahmedplaceTeamMahmedplace 643 views 1.9K executesUpdated Oct 22, 2026
Unrated
00
Lua Script•678 lines (24998 chars)
--[[ EZ AIM V2 | Mobile Delta | Enhanced Edition ]]
-- Fixed: aim camera ordering, wallcheck behind-target bug, teamcheck nil-team,
--        sticky aim churn. Added: smoothness slider, prediction, aim part picker,
--        lock line, tabbed GUI, full cleanup on re-execute.

local Players   = game:GetService("Players")
local RunService= game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local UIS       = game:GetService("UserInputService")
local Camera    = Workspace.CurrentCamera
local LP        = Players.LocalPlayer

local hasDrawing = false
pcall(function() if Drawing and Drawing.new then hasDrawing = true end end)

------------------------------------------------------------
-- CLEANUP ON RE-EXECUTE
------------------------------------------------------------
if _G.EZ_AIM_V2_Cleanup then pcall(_G.EZ_AIM_V2_Cleanup) end
local Cleanup = {}
_G.EZ_AIM_V2_Cleanup = function()
    for _, fn in ipairs(Cleanup) do pcall(fn) end
end

------------------------------------------------------------
-- CONFIG
------------------------------------------------------------
local AIM_PARTS = { "Head", "HumanoidRootPart", "UpperTorso", "LowerTorso", "Torso" }
local AIM_INDEX = 1

local Config = {
    Aimbot     = true,
    StickyAim  = true,
    TeamCheck  = true,
    WallCheck  = true,
    ESP        = true,
    Tracers    = true,
    Rainbow    = true,
    ShowFOV    = true,
    LockLine   = true,
    AimPart    = AIM_PARTS[AIM_INDEX],
    FOV        = 200,
    Smoothness = 0.30,   -- 0.01 slow → 1.0 instant
    Prediction = 20,     -- 0 → 100
}
local RainbowHue = 0

------------------------------------------------------------
-- GUI PARENT
------------------------------------------------------------
local GuiParent
pcall(function() GuiParent = gethui() end)
if not GuiParent then
    local ok, cg = pcall(function() return game:GetService("CoreGui") end)
    GuiParent = ok and cg or LP:WaitForChild("PlayerGui")
end

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "EZ_AIM_V2"
ScreenGui.ResetOnSpawn = false
ScreenGui.IgnoreGuiInset = true
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.DisplayOrder = 999
ScreenGui.Parent = GuiParent
table.insert(Cleanup, function() ScreenGui:Destroy() end)

------------------------------------------------------------
-- DRAGGABLE TOGGLE
------------------------------------------------------------
local Toggle = Instance.new("TextButton")
Toggle.Size = UDim2.fromOffset(48, 48)
Toggle.AnchorPoint = Vector2.new(1, 0)
Toggle.Position = UDim2.new(1, -14, 0, 14)
Toggle.BackgroundColor3 = Color3.fromRGB(18, 18, 26)
Toggle.BorderSizePixel = 0
Toggle.Text = "EZ"
Toggle.TextColor3 = Color3.fromRGB(0, 220, 255)
Toggle.Font = Enum.Font.GothamBlack
Toggle.TextSize = 18
Toggle.AutoButtonColor = false
Toggle.Active = true
Toggle.Parent = ScreenGui
Instance.new("UICorner", Toggle).CornerRadius = UDim.new(0, 12)
local tstroke = Instance.new("UIStroke", Toggle)
tstroke.Color = Color3.fromRGB(0, 220, 255)
tstroke.Thickness = 1.8

------------------------------------------------------------
-- PANEL (autoscale + draggable header)
------------------------------------------------------------
local Panel = Instance.new("Frame")
Panel.Size = UDim2.fromOffset(340, 440)
Panel.AnchorPoint = Vector2.new(0.5, 0.5)
Panel.Position = UDim2.new(0.5, 0, 0.5, 0)
Panel.BackgroundColor3 = Color3.fromRGB(14, 14, 20)
Panel.BorderSizePixel = 0
Panel.Visible = false
Panel.Parent = ScreenGui
Instance.new("UICorner", Panel).CornerRadius = UDim.new(0, 14)
local pstroke = Instance.new("UIStroke", Panel)
pstroke.Color = Color3.fromRGB(0, 220, 255)
pstroke.Thickness = 1.4

local PanelScale = Instance.new("UIScale")
PanelScale.Parent = Panel

local function fitPanel()
    local vp = Camera.ViewportSize
    local s = math.min(vp.X / 1600, vp.Y / 900)
    PanelScale.Scale = math.clamp(s, 0.72, 1.12)
end
fitPanel()
Camera:GetPropertyChangedSignal("ViewportSize"):Connect(fitPanel)

------------------------------------------------------------
-- HEADER (drag handle)
------------------------------------------------------------
local Header = Instance.new("TextButton")
Header.Size = UDim2.new(1, -16, 0, 34)
Header.Position = UDim2.new(0, 8, 0, 8)
Header.BackgroundColor3 = Color3.fromRGB(24, 24, 34)
Header.BorderSizePixel = 0
Header.Text = "EZ AIM V2"
Header.Font = Enum.Font.GothamBlack
Header.TextSize = 16
Header.TextColor3 = Color3.fromRGB(0, 220, 255)
Header.AutoButtonColor = false
Header.Parent = Panel
Instance.new("UICorner", Header).CornerRadius = UDim.new(0, 8)

------------------------------------------------------------
-- TAB BAR
------------------------------------------------------------
local TabBar = Instance.new("Frame")
TabBar.Size = UDim2.new(1, -16, 0, 28)
TabBar.Position = UDim2.new(0, 8, 0, 46)
TabBar.BackgroundTransparency = 1
TabBar.Parent = Panel
local TabLayout = Instance.new("UIListLayout", TabBar)
TabLayout.FillDirection = Enum.FillDirection.Horizontal
TabLayout.Padding = UDim.new(0, 4)

local function makeTab(text)
    local b = Instance.new("TextButton")
    b.Size = UDim2.new(0.5, -2, 1, 0)
    b.BackgroundColor3 = Color3.fromRGB(26, 26, 36)
    b.BorderSizePixel = 0
    b.Text = text
    b.Font = Enum.Font.GothamBold
    b.TextSize = 13
    b.TextColor3 = Color3.fromRGB(180, 180, 200)
    b.AutoButtonColor = false
    b.Parent = TabBar
    Instance.new("UICorner", b).CornerRadius = UDim.new(0, 8)
    return b
end
local tabAim    = makeTab("AIM")
local tabVisual = makeTab("VISUAL")

------------------------------------------------------------
-- CONTENT FRAMES
------------------------------------------------------------
local Content = Instance.new("Frame")
Content.Size = UDim2.new(1, -16, 1, -84)
Content.Position = UDim2.new(0, 8, 0, 80)
Content.BackgroundTransparency = 1
Content.Parent = Panel

local function makePage()
    local p = Instance.new("ScrollingFrame")
    p.Size = UDim2.new(1, 0, 1, 0)
    p.BackgroundTransparency = 1
    p.BorderSizePixel = 0
    p.CanvasSize = UDim2.new(0, 0, 0, 0)
    p.AutomaticCanvasSize = Enum.AutomaticSize.Y
    p.ScrollBarThickness = 3
    p.ScrollBarImageColor3 = Color3.fromRGB(0, 200, 255)
    p.Parent = Content
    local l = Instance.new("UIListLayout", p)
    l.Padding = UDim.new(0, 4)
    l.SortOrder = Enum.SortOrder.LayoutOrder
    return p
end
local AimPage    = makePage()
local VisualPage = makePage()

local function setTab(tab)
    AimPage.Visible    = (tab == "aim")
    VisualPage.Visible = (tab == "visual")
    tabAim.BackgroundColor3    = (tab == "aim")    and Color3.fromRGB(0, 180, 220) or Color3.fromRGB(26, 26, 36)
    tabAim.TextColor3          = (tab == "aim")    and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(180, 180, 200)
    tabVisual.BackgroundColor3 = (tab == "visual") and Color3.fromRGB(0, 180, 220) or Color3.fromRGB(26, 26, 36)
    tabVisual.TextColor3       = (tab == "visual") and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(180, 180, 200)
end
tabAim.MouseButton1Click:Connect(function() setTab("aim") end)
tabVisual.MouseButton1Click:Connect(function() setTab("visual") end)
setTab("aim")

------------------------------------------------------------
-- ROW BUILDERS
------------------------------------------------------------
local function makeToggle(parent, label, key, order)
    local row = Instance.new("TextButton")
    row.Size = UDim2.new(1, 0, 0, 30)
    row.BackgroundColor3 = Color3.fromRGB(26, 26, 36)
    row.BorderSizePixel = 0
    row.Text = ""
    row.AutoButtonColor = false
    row.LayoutOrder = order
    row.Parent = parent
    Instance.new("UICorner", row).CornerRadius = UDim.new(0, 8)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -64, 1, 0)
    lbl.Position = UDim2.new(0, 12, 0, 0)
    lbl.BackgroundTransparency = 1
    lbl.Text = label
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Font = Enum.Font.GothamBold
    lbl.TextSize = 12
    lbl.TextColor3 = Color3.fromRGB(225, 225, 235)
    lbl.Parent = row

    local pill = Instance.new("Frame")
    pill.Size = UDim2.fromOffset(38, 18)
    pill.Position = UDim2.new(1, -50, 0.5, -9)
    pill.BackgroundColor3 = Config[key] and Color3.fromRGB(0, 200, 100) or Color3.fromRGB(70, 30, 40)
    pill.Parent = row
    Instance.new("UICorner", pill).CornerRadius = UDim.new(1, 0)

    local knob = Instance.new("Frame")
    knob.Size = UDim2.fromOffset(14, 14)
    knob.Position = Config[key] and UDim2.new(1, -17, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
    knob.BackgroundColor3 = Color3.fromRGB(240, 240, 250)
    knob.Parent = pill
    Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)

    row.MouseButton1Click:Connect(function()
        Config[key] = not Config[key]
        pill.BackgroundColor3 = Config[key] and Color3.fromRGB(0, 200, 100) or Color3.fromRGB(70, 30, 40)
        knob.Position = Config[key] and UDim2.new(1, -17, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
        if key == "ShowFOV" and FOVCircle then
            FOVCircle.Visible = Config.ShowFOV
        end
    end)
end

local function makeSlider(parent, label, min, max, key, order, fmt)
    local row = Instance.new("Frame")
    row.Size = UDim2.new(1, 0, 0, 48)
    row.BackgroundColor3 = Color3.fromRGB(26, 26, 36)
    row.BorderSizePixel = 0
    row.LayoutOrder = order
    row.Parent = parent
    Instance.new("UICorner", row).CornerRadius = UDim.new(0, 8)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -20, 0, 20)
    lbl.Position = UDim2.new(0, 12, 0, 4)
    lbl.BackgroundTransparency = 1
    lbl.Text = label
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Font = Enum.Font.GothamBold
    lbl.TextSize = 12
    lbl.TextColor3 = Color3.fromRGB(225, 225, 235)
    lbl.Parent = row

    local bar = Instance.new("Frame")
    bar.Size = UDim2.new(1, -24, 0, 10)
    bar.Position = UDim2.new(0, 12, 0, 30)
    bar.BackgroundColor3 = Color3.fromRGB(44, 44, 58)
    bar.BorderSizePixel = 0
    bar.Parent = row
    Instance.new("UICorner", bar).CornerRadius = UDim.new(1, 0)

    local fill = Instance.new("Frame")
    fill.Size = UDim2.new((Config[key] - min) / (max - min), 0, 1, 0)
    fill.BackgroundColor3 = Color3.fromRGB(0, 220, 255)
    fill.BorderSizePixel = 0
    fill.Parent = bar
    Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0)

    local function refresh()
        lbl.Text = fmt(label, Config[key])
        fill.Size = UDim2.new((Config[key] - min) / (max - min), 0, 1, 0)
    end
    refresh()

    local dragging = false
    local function updateFromX(x)
        local rel = math.clamp((x - bar.AbsolutePosition.X) / bar.AbsoluteSize.X, 0, 1)
        Config[key] = min + rel * (max - min)
        refresh()
    end
    bar.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            updateFromX(i.Position.X)
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if dragging and (i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch) then
            updateFromX(i.Position.X)
        end
    end)
    UIS.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then
            dragging = false
        end
    end)
end

local function makeCycle(parent, label, key, order, getDisplay, onTap)
    local row = Instance.new("TextButton")
    row.Size = UDim2.new(1, 0, 0, 30)
    row.BackgroundColor3 = Color3.fromRGB(26, 26, 36)
    row.BorderSizePixel = 0
    row.Text = ""
    row.AutoButtonColor = false
    row.LayoutOrder = order
    row.Parent = parent
    Instance.new("UICorner", row).CornerRadius = UDim.new(0, 8)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -12, 1, 0)
    lbl.Position = UDim2.new(0, 12, 0, 0)
    lbl.BackgroundTransparency = 1
    lbl.Text = label .. ": " .. getDisplay()
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Font = Enum.Font.GothamBold
    lbl.TextSize = 12
    lbl.TextColor3 = Color3.fromRGB(225, 225, 235)
    lbl.Parent = row

    row.MouseButton1Click:Connect(function()
        onTap()
        lbl.Text = label .. ": " .. getDisplay()
    end)
end

------------------------------------------------------------
-- POPULATE AIM TAB
------------------------------------------------------------
makeToggle(AimPage, "Aimbot",     "Aimbot",    1)
makeToggle(AimPage, "Sticky Aim", "StickyAim", 2)
makeToggle(AimPage, "Team Check", "TeamCheck", 3)
makeToggle(AimPage, "Wall Check", "WallCheck", 4)
makeCycle(AimPage, "Aim Part",    "AimPart",   5,
    function() return Config.AimPart end,
    function()
        AIM_INDEX = (AIM_INDEX % #AIM_PARTS) + 1
        Config.AimPart = AIM_PARTS[AIM_INDEX]
    end)
makeSlider(AimPage, "FOV Radius", 40, 500, "FOV", 6, function(_, v) return "FOV Radius: " .. math.floor(v) end)
makeSlider(AimPage, "Smoothness", 0.01, 1.00, "Smoothness", 7, function(_, v) return string.format("Smoothness: %.2f", v) end)
makeSlider(AimPage, "Prediction", 0, 100, "Prediction", 8, function(_, v) return "Prediction: " .. math.floor(v) end)

------------------------------------------------------------
-- POPULATE VISUAL TAB
------------------------------------------------------------
makeToggle(VisualPage, "ESP Highlight", "ESP",      1)
makeToggle(VisualPage, "Tracers",       "Tracers",  2)
makeToggle(VisualPage, "Rainbow Mode",  "Rainbow",  3)
makeToggle(VisualPage, "Show FOV",      "ShowFOV",  4)
makeToggle(VisualPage, "Lock Line",     "LockLine", 5)

------------------------------------------------------------
-- TOGGLE BUTTON (only this opens/closes the panel)
------------------------------------------------------------
do
    local drag, moved, start, origin
    Toggle.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then
            drag, moved = true, false
            start, origin = i.Position, Toggle.Position
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if drag and (i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch) then
            local d = i.Position - start
            if d.Magnitude > 6 then moved = true end
            Toggle.Position = UDim2.new(origin.X.Scale, origin.X.Offset + d.X, origin.Y.Scale, origin.Y.Offset + d.Y)
        end
    end)
    UIS.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then
            if drag and not moved then
                Panel.Visible = not Panel.Visible
            end
            drag  = false
            moved = false
        end
    end)
end

------------------------------------------------------------
-- PANEL DRAG (via header)
------------------------------------------------------------
do
    local drag, start, origin
    Header.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then
            drag, start, origin = true, i.Position, Panel.Position
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if drag and (i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch) then
            local d = i.Position - start
            Panel.Position = UDim2.new(origin.X.Scale, origin.X.Offset + d.X, origin.Y.Scale, origin.Y.Offset + d.Y)
        end
    end)
    UIS.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then
            drag = false
        end
    end)
end

------------------------------------------------------------
-- DRAWINGS
------------------------------------------------------------
local FOVCircle, LockLine

if hasDrawing then
    FOVCircle = Drawing.new("Circle")
    FOVCircle.Thickness = 1.5
    FOVCircle.NumSides = 72
    FOVCircle.Transparency = 1
    FOVCircle.Filled = false
    FOVCircle.Visible = Config.ShowFOV
    table.insert(Cleanup, function() FOVCircle:Remove() end)

    LockLine = Drawing.new("Line")
    LockLine.Thickness = 2
    LockLine.Color = Color3.fromRGB(255, 60, 60)
    LockLine.Transparency = 0.6
    LockLine.Visible = false
    table.insert(Cleanup, function() LockLine:Remove() end)
end

------------------------------------------------------------
-- ESP STORAGE
------------------------------------------------------------
local Highlights, Tracers = {}, {}

local function clearESP(plr)
    if Highlights[plr] then pcall(function() Highlights[plr]:Destroy() end); Highlights[plr] = nil end
    if Tracers[plr] then pcall(function() Tracers[plr]:Remove() end); Tracers[plr] = nil end
end

local function addESP(plr)
    local char = plr.Character
    if not char or not char:FindFirstChildOfClass("Humanoid") then return end
    clearESP(plr)
    local hl = Instance.new("Highlight")
    hl.FillColor = Color3.fromRGB(0, 220, 255)
    hl.OutlineColor = Color3.fromRGB(255, 255, 255)
    hl.FillTransparency = 0.55
    hl.OutlineTransparency = 0
    hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
    hl.Adornee = char
    hl.Parent = char
    Highlights[plr] = hl

    if hasDrawing then
        local tr = Drawing.new("Line")
        tr.Thickness = 1.4
        tr.Transparency = 0.85
        tr.Visible = false
        Tracers[plr] = tr
    end
end

------------------------------------------------------------
-- HELPERS
------------------------------------------------------------
local function isAlive(plr)
    local c = plr.Character
    local h = c and c:FindFirstChildOfClass("Humanoid")
    return h ~= nil and h.Health > 0
end

local function isTeammate(plr)
    if not Config.TeamCheck then return false end
    if not LP.Team then return false end
    return plr.Team == LP.Team
end

local function isVisible(targetPart)
    if not Config.WallCheck then return true end
    local origin = Camera.CFrame.Position
    local direction = targetPart.Position - origin
    if direction.Magnitude < 0.1 then return true end
    local params = RaycastParams.new()
    params.FilterType = Enum.RaycastFilterType.Exclude
    local filter = {}
    if LP.Character then filter[#filter + 1] = LP.Character end
    if targetPart.Parent then filter[#filter + 1] = targetPart.Parent end
    params.FilterDescendantsInstances = filter
    params.IgnoreWater = true
    local result = Workspace:Raycast(origin, direction, params)
    return result == nil
end

local function getAimPos(part)
    local pos = part.Position
    if Config.Prediction > 0 then
        local vel = part.AssemblyLinearVelocity or Vector3.zero
        local lookahead = Config.Prediction * 0.005
        pos = pos + vel * lookahead
    end
    return pos
end

local function findCandidate()
    local center = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
    local best, bestDist = nil, Config.FOV
    for _, plr in ipairs(Players:GetPlayers()) do
        if plr ~= LP and isAlive(plr) and not isTeammate(plr) then
            local char = plr.Character
            local part = char:FindFirstChild(Config.AimPart) or char:FindFirstChild("HumanoidRootPart")
            if part then
                local sp, onScreen = Camera:WorldToViewportPoint(part.Position)
                if onScreen then
                    local d = (Vector2.new(sp.X, sp.Y) - center).Magnitude
                    if d < bestDist and isVisible(part) then
                        bestDist = d
                        best = { part = part, plr = plr }
                    end
                end
            end
        end
    end
    return best
end

local function stickyValid(t)
    if not t or not t.part or not t.part.Parent then return false end
    local char = t.part.Parent
    local hum = char:FindFirstChildOfClass("Humanoid")
    if not hum or hum.Health <= 0 then return false end
    local plr = Players:GetPlayerFromCharacter(char)
    if not plr or plr == LP then return false end
    if isTeammate(plr) then return false end
    if not isVisible(t.part) then return false end
    -- reject if camera is looking > 90° away (target behind)
    local toTarget = (t.part.Position - Camera.CFrame.Position)
    if toTarget.Magnitude > 0.1 and toTarget.Unit:Dot(Camera.CFrame.LookVector) < 0 then
        return false
    end
    return true
end

------------------------------------------------------------
-- ONE RENDER LOOP, CAMERA PRIORITY +1
-- (runs after default camera, so aim camera write wins cleanly)
------------------------------------------------------------
local StickyTarget = nil

local function renderStep(dt)
    RainbowHue = (RainbowHue + dt * 0.4) % 1
    local rainbow = Color3.fromHSV(RainbowHue, 1, 1)
    local accent  = Config.Rainbow and rainbow or Color3.fromRGB(0, 220, 255)

    local vp     = Camera.ViewportSize
    local center = Vector2.new(vp.X / 2, vp.Y / 2)

    -- FOV circle (locked center)
    if FOVCircle then
        FOVCircle.Position = center
        FOVCircle.Radius   = Config.FOV
        FOVCircle.Visible  = Config.ShowFOV
        FOVCircle.Color    = accent
    end

    -- ESP
    for _, plr in ipairs(Players:GetPlayers()) do
        if plr == LP then continue end
        local alive = isAlive(plr)
        local skip  = isTeammate(plr)

        if Config.ESP and alive and not skip then
            if not Highlights[plr] or Highlights[plr].Adornee ~= plr.Character then
                addESP(plr)
            end
            local hl = Highlights[plr]
            if hl then
                hl.Enabled = true
                hl.FillColor    = Config.Rainbow and rainbow or Color3.fromRGB(0, 220, 255)
                hl.OutlineColor = Config.Rainbow and Color3.fromHSV((RainbowHue + 0.5) % 1, 1, 1) or Color3.fromRGB(255, 255, 255)
            end
        else
            if Highlights[plr] then Highlights[plr].Enabled = false end
        end

        local tr = Tracers[plr]
        if tr then
            local hrp = plr.Character and plr.Character:FindFirstChild("HumanoidRootPart")
            if Config.Tracers and Config.ESP and alive and not skip and hrp then
                local sp, on = Camera:WorldToViewportPoint(hrp.Position)
                if on then
                    tr.From    = Vector2.new(vp.X / 2, vp.Y)
                    tr.To      = Vector2.new(sp.X, sp.Y)
                    tr.Color   = accent
                    tr.Visible = true
                else
                    tr.Visible = false
                end
            else
                tr.Visible = false
            end
        end
    end

    -- Aimbot: pick target, then write camera (safe ordering)
    local activeTarget = nil
    if Config.Aimbot then
        if Config.StickyAim and stickyValid(StickyTarget) then
            activeTarget = StickyTarget
        else
            StickyTarget = nil
            local c = findCandidate()
            if c then
                activeTarget = c
                if Config.StickyAim then StickyTarget = c end
            end
        end

        if activeTarget then
            local aimPos = getAimPos(activeTarget.part)
            local desired = CFrame.lookAt(Camera.CFrame.Position, aimPos)
            local alpha = math.clamp(Config.Smoothness * (dt * 60), 0, 1)
            Camera.CFrame = Camera.CFrame:Lerp(desired, alpha)
        end
    else
        StickyTarget = nil
    end

    -- Lock line
    if LockLine then
        if activeTarget then
            local sp, on = Camera:WorldToViewportPoint(activeTarget.part.Position)
            if on then
                LockLine.From    = center
                LockLine.To      = Vector2.new(sp.X, sp.Y)
                LockLine.Color   = Config.Rainbow and rainbow or Color3.fromRGB(255, 60, 60)
                LockLine.Visible = Config.LockLine
            else
                LockLine.Visible = false
            end
        else
            LockLine.Visible = false
        end
    end
end

pcall(function()
    RunService:UnbindFromRenderStep("EZ_AIM_V2_Render")
end)
RunService:BindToRenderStep("EZ_AIM_V2_Render", Enum.RenderPriority.Camera.Value + 1, renderStep)
table.insert(Cleanup, function() pcall(function() RunService:UnbindFromRenderStep("EZ_AIM_V2_Render") end) end)

------------------------------------------------------------
-- PLAYER HOOKS
------------------------------------------------------------
local function hookPlr(p)
    if p == LP then return end
    if p.Character then task.wait(0.5); addESP(p) end
    p.CharacterAdded:Connect(function()
        task.wait(0.5)
        addESP(p)
    end)
end

for _, p in ipairs(Players:GetPlayers()) do hookPlr(p) end
Players.PlayerAdded:Connect(hookPlr)
Players.PlayerRemoving:Connect(clearESP)
LP.CharacterAdded:Connect(function() StickyTarget = nil end)

How to Execute Universal Script – EZ AIM V2

Step 1: Copy Code: Click the Copy Code button in the viewer above to grab the clean Lua loadstring.

Step 2: Launch Executor: Open a compatible, unpatched executor. If you need one, check our Roblox Executors Directory.

Step 3: Join Experience: Launch Roblox and join Universal Script.

Step 4: Attach & Run: Attach/inject your executor into the Roblox process, paste the code into the script tab, and press Execute.

Created By

TeamMahmedplace
TeamMahmedplace
Script Creator
View Author Profile

Features & Information

Execute Universal Script – EZ AIM V2. Key system required, created by TeamMahmedplace, updated Oct 22, 2026. Tested and working on supported executors.

Script Changelog (1)

@TeamMahmedplaceOct 22, 2026

Create script

Community Comments (0)

No comments yet for this script.

Frequently Asked Questions

How do I execute Universal Script – EZ AIM V2 in Roblox?

To run Universal Script – EZ AIM V2, copy the Lua loadstring from the code viewer above, launch Roblox and join Universal Script, attach a working executor (such as Potassium, Solara, or Delta from our Executors directory), paste the code into your executor console, and click Execute.

Is Universal Script – EZ AIM V2 keyless or does it require an access key?

Universal Script – EZ AIM V2 requires an access key. You can retrieve the official key directly using the Get Script Key link provided above.

Is Universal Script – EZ AIM V2 currently safe and working?

This script is active and operational. Always test scripts using a secondary (alt) Roblox account to safeguard your main profile against anti-cheat bans.