ESP
Key RequiredUniversal

ESP

Universal ScriptL4RPL4RP 186 views 51 executesUpdated Mar 18, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•607 lines (10790 chars)
--================= SERVIÇOS =================

local Players = game:GetService("Players")

local RunService = game:GetService("RunService")

local Camera = workspace.CurrentCamera

local LocalPlayer = Players.LocalPlayer

local UIS = game:GetService("UserInputService")

--================= ESTADOS =================

local AIMBOT = false

local ESP = false

local FOV_ON = false

local ESP_NAME = false

local ESP_LINE = false

local ESP_DISTANCE = false

--================= CONFIG =================

local FOV_MIN = 40

local FOV_MAX = 220

local FOV_RADIUS = 120

local AIM_SMOOTHNESS = 0.25

local ESP_COLOR = Color3.fromRGB(255,255,255)

--================= FOV =================

local FOV = Drawing.new("Circle")

FOV.Visible = false

FOV.Radius = FOV_RADIUS

FOV.Thickness = 2

FOV.NumSides = 100

FOV.Filled = false

FOV.Color = Color3.fromRGB(255,80,80)

--================= FUNÇÕES =================

local function IsAlive(plr)

    return plr.Character

    and plr.Character:FindFirstChild("Humanoid")

    and plr.Character.Humanoid.Health > 0

end

local function WorldToScreen(pos)

    local s, v = Camera:WorldToViewportPoint(pos)

    return Vector2.new(s.X, s.Y), v

end

local function GetClosestHead()

    local closest, dist = nil, FOV_RADIUS

    for _, plr in ipairs(Players:GetPlayers()) do

        if plr ~= LocalPlayer and IsAlive(plr) then

            local head = plr.Character:FindFirstChild("Head")

            if head then

                local pos, vis = WorldToScreen(head.Position)

                if vis then

                    local mag = (pos - FOV.Position).Magnitude

                    if mag < dist then

                        dist = mag

                        closest = head

                    end

                end

            end

        end

    end

    return closest

end

--================= ESP =================

local ESP_Objects = {}

local function CreateESP(plr)

    if plr == LocalPlayer then return end

    local box = Drawing.new("Square")

    box.Visible = false

    box.Color = ESP_COLOR

    box.Thickness = 1.3

    box.Filled = false

    local name = Drawing.new("Text")

    name.Visible = false

    name.Color = ESP_COLOR

    name.Size = 13

    name.Center = true

    name.Outline = true

    local dist = Drawing.new("Text")

    dist.Visible = false

    dist.Color = ESP_COLOR

    dist.Size = 12

    dist.Center = true

    dist.Outline = true

    local line = Drawing.new("Line")

    line.Visible = false

    line.Color = ESP_COLOR

    line.Thickness = 1

    ESP_Objects[plr] = {Box=box,Name=name,Dist=dist,Line=line}

end

for _,p in ipairs(Players:GetPlayers()) do CreateESP(p) end

Players.PlayerAdded:Connect(CreateESP)

Players.PlayerRemoving:Connect(function(p)

    if ESP_Objects[p] then

        for _,v in pairs(ESP_Objects[p]) do v:Remove() end

        ESP_Objects[p] = nil

    end

end)

--================= UI =================

local gui = Instance.new("ScreenGui", game.CoreGui)

-- BOTÃO FLUTUANTE

local openBtn = Instance.new("TextButton", gui)

openBtn.Size = UDim2.fromOffset(55,55)

openBtn.Position = UDim2.new(0,15,0.5,-25)

openBtn.Text = "≡"

openBtn.TextSize = 26

openBtn.BackgroundColor3 = Color3.fromRGB(255,80,80)

openBtn.TextColor3 = Color3.new(1,1,1)

openBtn.BorderSizePixel = 0

Instance.new("UICorner", openBtn).CornerRadius = UDim.new(1,0)

-- PAINEL

local panel = Instance.new("Frame", gui)

panel.Size = UDim2.fromOffset(280,440)

panel.Position = UDim2.new(0.5,-140,0.5,-220)

panel.BackgroundColor3 = Color3.fromRGB(25,25,25)

panel.BorderSizePixel = 0

panel.Visible = false

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

openBtn.Activated:Connect(function()

    panel.Visible = not panel.Visible

end)

-- TITULO (DRAG DO PAINEL)

local title = Instance.new("TextLabel", panel)

title.Size = UDim2.new(1,0,0,40)

title.Text = "DESTROYR MOBILE"

title.TextColor3 = Color3.new(1,1,1)

title.TextSize = 14

title.BackgroundColor3 = Color3.fromRGB(20,20,20)

title.BorderSizePixel = 0

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

local draggingPanel = false

local dragStart, startPos

title.InputBegan:Connect(function(i)

    if i.UserInputType == Enum.UserInputType.Touch then

        draggingPanel = true

        dragStart = i.Position

        startPos = panel.Position

    end

end)

UIS.InputEnded:Connect(function(i)

    if i.UserInputType == Enum.UserInputType.Touch then

        draggingPanel = false

    end

end)

UIS.InputChanged:Connect(function(i)

    if draggingPanel and i.UserInputType == Enum.UserInputType.Touch then

        local delta = i.Position - dragStart

        panel.Position = startPos + UDim2.fromOffset(delta.X, delta.Y)

    end

end)

--================= ABAS =================

local function Tab(text,x)

    local b = Instance.new("TextButton", panel)

    b.Size = UDim2.fromOffset(85,28)

    b.Position = UDim2.fromOffset(x,45)

    b.Text = text

    b.TextSize = 12

    b.BackgroundColor3 = Color3.fromRGB(40,40,40)

    b.TextColor3 = Color3.new(1,1,1)

    b.BorderSizePixel = 0

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

    return b

end

local tabAim = Tab("AIM",10)

local tabESP = Tab("ESP",100)

local tabClose = Tab("EXIT",190)

-- FRAMES

local aimFrame = Instance.new("Frame", panel)

aimFrame.Position = UDim2.fromOffset(0,80)

aimFrame.Size = UDim2.new(1,0,1,-80)

aimFrame.BackgroundTransparency = 1

local espFrame = aimFrame:Clone()

espFrame.Parent = panel

espFrame.Visible = false

tabAim.Activated:Connect(function()

    aimFrame.Visible = true

    espFrame.Visible = false

end)

tabESP.Activated:Connect(function()

    aimFrame.Visible = false

    espFrame.Visible = true

end)

tabClose.Activated:Connect(function()

    panel.Visible = false

end)

--================= BOTÕES =================

local function Btn(parent,text,y)

    local b = Instance.new("TextButton", parent)

    b.Size = UDim2.new(1,-20,0,34)

    b.Position = UDim2.fromOffset(10,y)

    b.Text = text

    b.TextSize = 13

    b.BackgroundColor3 = Color3.fromRGB(40,40,40)

    b.TextColor3 = Color3.new(1,1,1)

    b.BorderSizePixel = 0

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

    return b

end

--================= AIM =================

local aimBtn = Btn(aimFrame,"Aimbot: OFF",10)

local fovBtn = Btn(aimFrame,"FOV: OFF",50)

local fovTxt = Instance.new("TextLabel", aimFrame)

fovTxt.Position = UDim2.fromOffset(10,95)

fovTxt.Size = UDim2.fromOffset(200,18)

fovTxt.TextColor3 = Color3.new(1,1,1)

fovTxt.BackgroundTransparency = 1

fovTxt.TextSize = 12

local sliderBg = Instance.new("Frame", aimFrame)

sliderBg.Position = UDim2.fromOffset(10,120)

sliderBg.Size = UDim2.fromOffset(240,10)

sliderBg.BackgroundColor3 = Color3.fromRGB(50,50,50)

sliderBg.BorderSizePixel = 0

Instance.new("UICorner", sliderBg).CornerRadius = UDim.new(1,0)

local sliderFill = Instance.new("Frame", sliderBg)

sliderFill.BackgroundColor3 = Color3.fromRGB(255,80,80)

sliderFill.BorderSizePixel = 0

Instance.new("UICorner", sliderFill).CornerRadius = UDim.new(1,0)

local draggingSlider = false

local function UpdateFOV(p)

    p = math.clamp(p,0,1)

    sliderFill.Size = UDim2.fromScale(p,1)

    FOV_RADIUS = math.floor(FOV_MIN + (FOV_MAX - FOV_MIN) * p)

    FOV.Radius = FOV_RADIUS

    fovTxt.Text = "FOV: "..math.floor(p*100).."%"

end

UpdateFOV(0.5)

sliderBg.InputBegan:Connect(function(i)

    if i.UserInputType == Enum.UserInputType.Touch then

        draggingSlider = true

    end

end)

UIS.InputEnded:Connect(function(i)

    if i.UserInputType == Enum.UserInputType.Touch then

        draggingSlider = false

    end

end)

UIS.InputChanged:Connect(function(i)

    if draggingSlider and i.UserInputType == Enum.UserInputType.Touch then

        local x = (i.Position.X - sliderBg.AbsolutePosition.X) / sliderBg.AbsoluteSize.X

        UpdateFOV(x)

    end

end)

aimBtn.Activated:Connect(function()

    AIMBOT = not AIMBOT

    aimBtn.Text = AIMBOT and "Aimbot: ON" or "Aimbot: OFF"

end)

fovBtn.Activated:Connect(function()

    FOV_ON = not FOV_ON

    FOV.Visible = FOV_ON

    fovBtn.Text = FOV_ON and "FOV: ON" or "FOV: OFF"

end)

--================= ESP =================

local espBtn = Btn(espFrame,"ESP Box: OFF",10)

local espNameBtn = Btn(espFrame,"ESP Name: OFF",50)

local espLineBtn = Btn(espFrame,"ESP Line: OFF",90)

local espDistBtn = Btn(espFrame,"ESP distance : OFF",130)

espBtn.Activated:Connect(function()

    ESP = not ESP

    espBtn.Text = ESP and "ESP Box: ON" or "ESP Box: OFF"

end)

espNameBtn.Activated:Connect(function()

    ESP_NAME = not ESP_NAME

    espNameBtn.Text = ESP_NAME and "ESP Nome: ON" or "ESP Nome: OFF"

end)

espLineBtn.Activated:Connect(function()

    ESP_LINE = not ESP_LINE

    espLineBtn.Text = ESP_LINE and "ESP Linha: ON" or "ESP Linha: OFF"

end)

espDistBtn.Activated:Connect(function()

    ESP_DISTANCE = not ESP_DISTANCE

    espDistBtn.Text = ESP_DISTANCE and "ESP Distância: ON" or "ESP Distância: OFF"

end)

--================= LOOP =================

RunService.RenderStepped:Connect(function()

    FOV.Position = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)

    if AIMBOT and FOV_ON then

        local head = GetClosestHead()

        if head then

            Camera.CFrame = Camera.CFrame:Lerp(

                CFrame.new(Camera.CFrame.Position, head.Position),

                AIM_SMOOTHNESS

            )

        end

    end

    for plr,esp in pairs(ESP_Objects) do

        if ESP and IsAlive(plr) and plr.Character:FindFirstChild("HumanoidRootPart") then

            local hrp = plr.Character.HumanoidRootPart

            local pos,vis = WorldToScreen(hrp.Position)

            if vis then

                local dist = (Camera.CFrame.Position-hrp.Position).Magnitude

                local size = math.clamp(1200/dist,22,110)

                esp.Box.Size = Vector2.new(size/1.8,size)

                esp.Box.Position = pos-esp.Box.Size/2

                esp.Box.Visible = true

                esp.Name.Text = plr.Name

                esp.Name.Position = Vector2.new(pos.X,pos.Y-size/2-14)

                esp.Name.Visible = ESP_NAME

                esp.Dist.Text = math.floor(dist).."m"

                esp.Dist.Position = Vector2.new(pos.X,pos.Y+size/2+2)

                esp.Dist.Visible = ESP_DISTANCE

                esp.Line.From = Vector2.new(Camera.ViewportSize.X/2,Camera.ViewportSize.Y)

                esp.Line.To = pos

                esp.Line.Visible = ESP_LINE

            else

                for _,v in pairs(esp) do v.Visible=false end

            end

        else

            for _,v in pairs(esp) do v.Visible=false end

        end

    end

end)

Features & Information

I'm still learning.

Community Comments (2)

DaddysLittleGirlDaddysLittleGirlMar 18, 2026

Confirmed works, good script bro, did you know you have this as "Paid"? and it isn't. Just a heads up.

AlizAlizMar 18, 2026

Pretty good

More Scripts for Universal Scripts