Op esp
Key Required

Op esp

Lethal Ape (?)gonz4349gonz4349 1.5K views 11.2K executesUpdated Jul 15, 2026
2.5/ 5(2 votes)
1150% Positive
Lua Script•335 lines (12720 chars)
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local CoreGui = game:GetService("CoreGui")
local Workspace = workspace
local UserInputService = game:GetService("UserInputService")

getgenv().ESP_Monsters = true
getgenv().ESP_Loot = true
getgenv().ESP_MaxDistance = 300

local DEPTH_MODE = pcall(function() return Enum.HighlightDepthMode.AlwaysOnTop end) and Enum.HighlightDepthMode.AlwaysOnTop or "AlwaysOnTop"

local MONSTER_COLOR = Color3.fromRGB(255, 30, 30)
local MONSTER_NAME_COLOR = Color3.fromRGB(255, 100, 100)
local LOOT_COLORS = {
    Gold = {highlight = Color3.fromRGB(255, 215, 0), name = Color3.fromRGB(255, 200, 0)},
    Copper = {highlight = Color3.fromRGB(218, 165, 32), name = Color3.fromRGB(200, 140, 20)},
    Diamond = {highlight = Color3.fromRGB(0, 255, 255), name = Color3.fromRGB(100, 255, 255)}
}

local activeESP = {}

local function getPlayerPos()
    local char = LocalPlayer.Character
    if char and char:FindFirstChild("HumanoidRootPart") then
        return char.HumanoidRootPart.Position
    end
    return nil
end

local MONSTER_BLACKLIST = {
    "jumpscare", "scare", "decoy", "fake", "static", "prop", "corpse", "dead",
    "body", "ragdoll", "dummy", "visual", "effect", "particle", "screen",
    "ui", "gui", "sound", "trigger", "ambient", "decoration"
}
local MONSTER_WHITELIST = {
    "ape", "monster", "enemy", "mutant", "creature", "beast", "gorilla",
    "killer", "hunter", "predator", "nightmare", "terror"
}

local function isRealMonster(model)
    local hum = model:FindFirstChild("Humanoid")
    if not hum or hum.Health <= 0 then return false end
    if Players:GetPlayerFromCharacter(model) then return false end
    local hasAI = false
    for _, child in ipairs(model:GetChildren()) do
        if child:IsA("Script") or child:IsA("LocalScript") or child:IsA("ModuleScript") then
            local n = child.Name:lower()
            if n:find("ai") or n:find("brain") or n:find("behavior") or
               n:find("movement") or n:find("chase") or n:find("attack") or
               n:find("path") or n:find("wander") or n:find("roam") then
                hasAI = true; break
            end
        end
    end
    local modelName = model.Name:lower()
    for _, kw in ipairs(MONSTER_BLACKLIST) do if modelName:find(kw) then return false end end
    if hasAI then return true end
    for _, kw in ipairs(MONSTER_WHITELIST) do if modelName:find(kw) then return true end end
    local parts, hasRootPart = 0, false
    for _, child in ipairs(model:GetChildren()) do
        if child:IsA("BasePart") then
            parts = parts + 1
            if child.Name == "HumanoidRootPart" then hasRootPart = true end
        end
    end
    if parts >= 3 and hasRootPart then
        local root = model:FindFirstChild("HumanoidRootPart")
        if root and root:IsA("BasePart") and root.AssemblyLinearVelocity.Magnitude > 0.1 then return true end
        return hasAI
    end
    return false
end

local function clearAllESP()
    for _, obj in ipairs(activeESP) do
        pcall(function() obj:Destroy() end)
    end
    activeESP = {}
end

local function addHighlight(obj, color, name)
    local hl = Instance.new("Highlight")
    hl.Name = name or "ESP"
    hl.FillColor = color
    hl.FillTransparency = 0.4
    hl.OutlineColor = color
    hl.OutlineTransparency = 0
    pcall(function() hl.DepthMode = DEPTH_MODE end)
    hl.Adornee = obj
    hl.Parent = CoreGui
    table.insert(activeESP, hl)
    return hl
end

local function addBillboard(obj, color, text, maxDist)
    local bb = Instance.new("BillboardGui")
    bb.Name = "ESP_Label"
    bb.Size = UDim2.new(0, 100, 0, 30)
    bb.StudsOffset = Vector3.new(0, 2.5, 0)
    bb.AlwaysOnTop = true
    bb.MaxDistance = maxDist or getgenv().ESP_MaxDistance
    local tl = Instance.new("TextLabel")
    tl.Size = UDim2.new(1, 0, 1, 0)
    tl.BackgroundTransparency = 1
    tl.Text = text or obj.Name
    tl.TextColor3 = color
    tl.TextStrokeTransparency = 0.3
    tl.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
    tl.Font = Enum.Font.SourceSansBold   -- unchanged, as only GUI text becomes cursive
    tl.TextSize = 14
    tl.TextScaled = false
    tl.Parent = bb
    bb.Adornee = obj
    bb.Parent = CoreGui
    table.insert(activeESP, bb)
    return bb
end

local function rescanESP()
    clearAllESP()
    if not getgenv().ESP_Monsters and not getgenv().ESP_Loot then return end

    local maxDist = getgenv().ESP_MaxDistance
    local playerPos = getPlayerPos()
    for _, obj in ipairs(Workspace:GetDescendants()) do
        pcall(function()
            if playerPos then
                local objPos = nil
                if obj:IsA("BasePart") then objPos = obj.Position
                elseif obj:IsA("Model") and obj.PrimaryPart then objPos = obj.PrimaryPart.Position end
                if objPos and (objPos - playerPos).Magnitude > maxDist then return end
            end
            if getgenv().ESP_Monsters and obj:IsA("Model") and isRealMonster(obj) then
                addHighlight(obj, MONSTER_COLOR, obj.Name)
                addBillboard(obj, MONSTER_NAME_COLOR, obj.Name, math.floor(maxDist * 0.6))
            end
            if getgenv().ESP_Loot and obj:IsA("BasePart") then
                local lootData = LOOT_COLORS[obj.Name]
                if lootData then
                    addHighlight(obj, lootData.highlight, obj.Name)
                    addBillboard(obj, lootData.name, obj.Name, math.floor(maxDist * 0.6))
                end
            end
        end)
    end
end

local function toggleMonsters(enabled)
    getgenv().ESP_Monsters = enabled
    rescanESP()
end
local function toggleLoot(enabled)
    getgenv().ESP_Loot = enabled
    rescanESP()
end

rescanESP()

local function createGUI()
    local gui = Instance.new("ScreenGui")
    gui.Name = "PotatoESP"
    gui.ResetOnSpawn = false
    gui.Parent = CoreGui

    local mainFrame = Instance.new("Frame")
    mainFrame.Size = UDim2.new(0, 240, 0, 220)
    mainFrame.Position = UDim2.new(0, 30, 0, 30)
    mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
    mainFrame.BorderSizePixel = 0
    mainFrame.Active = true
    mainFrame.Draggable = true
    mainFrame.Parent = gui
    Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0, 8)

    -- Title with cursive font
    local titleLabel = Instance.new("TextLabel")
    titleLabel.Size = UDim2.new(1, -20, 0, 30)
    titleLabel.Position = UDim2.new(0, 10, 0, 8)
    titleLabel.BackgroundTransparency = 1
    titleLabel.Text = "Gonzas Apes"
    titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
    titleLabel.Font = Enum.Font.SourceSansItalic  -- cursive
    titleLabel.TextSize = 16
    titleLabel.TextXAlignment = Enum.TextXAlignment.Left
    titleLabel.Parent = mainFrame

    local yPos = 45
    local function makeToggle(name, initial, callback)
        local frame = Instance.new("Frame")
        frame.Size = UDim2.new(1, -20, 0, 40)
        frame.Position = UDim2.new(0, 10, 0, yPos)
        frame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
        frame.BorderSizePixel = 0
        frame.Parent = mainFrame
        Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 6)

        local label = Instance.new("TextLabel")
        label.Size = UDim2.new(0, 100, 1, 0)
        label.Position = UDim2.new(0, 10, 0, 0)
        label.BackgroundTransparency = 1
        label.Text = name
        label.TextColor3 = Color3.fromRGB(200, 200, 200)
        label.Font = Enum.Font.SourceSansItalic  -- cursive
        label.TextSize = 14
        label.TextXAlignment = Enum.TextXAlignment.Left
        label.Parent = frame

        local btn = Instance.new("TextButton")
        btn.Size = UDim2.new(0, 60, 0, 28)
        btn.Position = UDim2.new(1, -70, 0, 6)
        btn.BackgroundColor3 = initial and Color3.fromRGB(60, 180, 60) or Color3.fromRGB(180, 50, 50)
        btn.TextColor3 = Color3.fromRGB(255, 255, 255)
        btn.Font = Enum.Font.SourceSansItalic  -- cursive
        btn.TextSize = 12
        btn.Text = initial and "ON" or "OFF"
        btn.BorderSizePixel = 0
        btn.AutoButtonColor = false
        btn.Parent = frame
        Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 14)

        local debounce = false
        btn.MouseButton1Click:Connect(function()
            if debounce then return end
            debounce = true
            initial = not initial
            btn.Text = initial and "ON" or "OFF"
            btn.BackgroundColor3 = initial and Color3.fromRGB(60, 180, 60) or Color3.fromRGB(180, 50, 50)
            callback(initial)
            wait(0.2)
            debounce = false
        end)
        yPos = yPos + 46
    end

    makeToggle("MONSTERS", getgenv().ESP_Monsters, toggleMonsters)
    makeToggle("LOOT", getgenv().ESP_Loot, toggleLoot)

    local sliderFrame = Instance.new("Frame")
    sliderFrame.Size = UDim2.new(1, -20, 0, 70)
    sliderFrame.Position = UDim2.new(0, 10, 0, yPos)
    sliderFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
    sliderFrame.BorderSizePixel = 0
    sliderFrame.Parent = mainFrame
    Instance.new("UICorner", sliderFrame).CornerRadius = UDim.new(0, 6)

    local sliderLabel = Instance.new("TextLabel")
    sliderLabel.Size = UDim2.new(1, -10, 0, 20)
    sliderLabel.Position = UDim2.new(0, 5, 0, 5)
    sliderLabel.BackgroundTransparency = 1
    sliderLabel.Text = "Distance: " .. getgenv().ESP_MaxDistance
    sliderLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
    sliderLabel.Font = Enum.Font.SourceSansItalic  -- cursive
    sliderLabel.TextSize = 12
    sliderLabel.TextXAlignment = Enum.TextXAlignment.Left
    sliderLabel.Parent = sliderFrame

    local sliderTrack = Instance.new("Frame")
    sliderTrack.Size = UDim2.new(1, -30, 0, 10)
    sliderTrack.Position = UDim2.new(0, 15, 0, 32)
    sliderTrack.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    sliderTrack.BorderSizePixel = 0
    sliderTrack.Parent = sliderFrame
    Instance.new("UICorner", sliderTrack).CornerRadius = UDim.new(0, 5)

    local sliderFill = Instance.new("Frame")
    sliderFill.Size = UDim2.new((getgenv().ESP_MaxDistance - 50) / 950, 0, 1, 0)
    sliderFill.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
    sliderFill.BorderSizePixel = 0
    sliderFill.Parent = sliderTrack
    Instance.new("UICorner", sliderFill).CornerRadius = UDim.new(0, 5)

    local sliderKnob = Instance.new("TextButton")
    sliderKnob.Size = UDim2.new(0, 22, 0, 22)
    sliderKnob.Position = UDim2.new((getgenv().ESP_MaxDistance - 50) / 950, -11, 0, -6)
    sliderKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
    sliderKnob.Text = ""
    sliderKnob.BorderSizePixel = 0
    sliderKnob.AutoButtonColor = false
    sliderKnob.Parent = sliderTrack
    Instance.new("UICorner", sliderKnob).CornerRadius = UDim.new(1, 0)

    local minDist, maxDist = 50, 1000
    local isDragging = false
    local function updateSlider(percent)
        percent = math.clamp(percent, 0, 1)
        local distance = math.floor((minDist + (maxDist - minDist) * percent) / 10) * 10
        getgenv().ESP_MaxDistance = distance
        sliderLabel.Text = "Distance: " .. distance
        sliderFill.Size = UDim2.new(percent, 0, 1, 0)
        sliderKnob.Position = UDim2.new(percent, -11, 0, -6)
        if getgenv().ESP_Monsters or getgenv().ESP_Loot then
            rescanESP()
        end
    end
    local function getPercent(input)
        local absPos = sliderTrack.AbsolutePosition
        local absSize = sliderTrack.AbsoluteSize
        return (input.Position.X - absPos.X) / absSize.X
    end

    sliderKnob.MouseButton1Down:Connect(function() isDragging = true end)
    sliderTrack.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            isDragging = true
            updateSlider(getPercent(input))
        end
    end)
    UserInputService.InputChanged:Connect(function(input)
        if isDragging and input.UserInputType == Enum.UserInputType.MouseMovement then
            updateSlider(getPercent(input))
        end
    end)
    UserInputService.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then isDragging = false end
    end)
    sliderFill.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            isDragging = true
            updateSlider(getPercent(input))
        end
    end)

    UserInputService.InputBegan:Connect(function(input, gameProcessed)
        if gameProcessed then return end
        if input.KeyCode == Enum.KeyCode.K then
            gui.Enabled = not gui.Enabled
        end
    end)

    print("GUI loaded.")
end

createGUI()
print("lol.")

Features & Information

Esp: Monsters, Loot

Community Comments (1)

colitapepe0colitapepe0Jul 16, 2026

Not to offend or anything but I expected something from a horror game

More Scripts for Lethal Ape (?)