OPEN SOURCE ESP
Key Required

OPEN SOURCE ESP

[CURE] Violence Districtoverlyoverly 2.5K views 99 executesUpdated Nov 24, 2025
3.3/ 5(3 votes)
2167% Positive
Lua Script•268 lines (10131 chars)
-- not the best as of right now, but i will definitely update this overtime.
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
local ESP = {
    players = {}
}
local SHOW_DISTANCE = true
local SHOW_NAMES = true
local SHOW_BOXES = true
local SHOW_TRACERS = true
local MAX_DISTANCE = 500
local previousPositions = {}
function ESP:CreateDrawing(type, properties)
    local drawing = Drawing.new(type)
    for prop, value in pairs(properties) do
        drawing[prop] = value
    end
    return drawing
end
function ESP:Add(player)
    if player == LocalPlayer then return end
    
    local drawings = {
        boxTL = self:CreateDrawing("Line", {Thickness = 1}), 
        boxTR = self:CreateDrawing("Line", {Thickness = 1}),
        boxBL = self:CreateDrawing("Line", {Thickness = 1}), 
        boxBR = self:CreateDrawing("Line", {Thickness = 1}), 
        boxTLv = self:CreateDrawing("Line", {Thickness = 1}), 
        boxTRv = self:CreateDrawing("Line", {Thickness = 1}), 
        boxBLv = self:CreateDrawing("Line", {Thickness = 1}),
        boxBRv = self:CreateDrawing("Line", {Thickness = 1}), 
        tracer = self:CreateDrawing("Line", {Thickness = 1}),
        name = self:CreateDrawing("Text", {
            Size = 13,
            Center = true,
            Outline = false, 
            Font = 2 
        })
    }
    
    self.players[player] = drawings
end

function ESP:Remove(player)
    local drawings = self.players[player]
    if drawings then
        for _, drawing in pairs(drawings) do
            drawing:Remove()
        end
        self.players[player] = nil
    end
    previousPositions[tostring(player.UserId)] = nil
end

function ESP:GetTeamInfo(player)
    local isTeammate = false
    local teamName = "Enemy"
    local color = Color3.fromRGB(255, 50, 50)
    
    if player.Team then
        if player.Team == LocalPlayer.Team and not player.Neutral then
            isTeammate = true
            teamName = "Teammate"
            color = Color3.fromRGB(50, 255, 50)
        else
            teamName = player.Team.Name or "Enemy"
        end
    end
    
    if string.lower(player.Name) == "killer" or string.find(string.lower(player.Name), "killer") then
        teamName = "Killer"
        color = Color3.fromRGB(255, 0, 0)
    elseif string.find(string.lower(player.Name), "survivor") then
        teamName = "Survivor" 
        color = Color3.fromRGB(0, 255, 0)
    end
    
    return isTeammate, teamName, color
end

function ESP:GetCharacterBounds(character)
    local rootPart = character:FindFirstChild("HumanoidRootPart")
    local head = character:FindFirstChild("Head")
    
    if not rootPart or not head then
        return 20, 45 
    end
    
    local minX, maxX, minY, maxY, minZ, maxZ = rootPart.Position.X, rootPart.Position.X, rootPart.Position.Y, rootPart.Position.Y, rootPart.Position.Z, rootPart.Position.Z
    
    for _, part in pairs(character:GetChildren()) do
        if part:IsA("BasePart") then
            local partPos = part.Position
            local partSize = part.Size
            minX = math.min(minX, partPos.X - partSize.X/2)
            maxX = math.max(maxX, partPos.X + partSize.X/2)
            minY = math.min(minY, partPos.Y - partSize.Y/2)
            maxY = math.max(maxY, partPos.Y + partSize.Y/2)
        end
    end
    
    local width = (maxX - minX) * 2
    local height = (maxY - minY) * 1.5
    
    width = math.clamp(width, 15, 35)
    height = math.clamp(height, 40, 60)
    
    return width, height
end

function ESP:Update()
    for player, drawings in pairs(self.players) do
        local character = player.Character
        if not character then
            for _, drawing in pairs(drawings) do
                drawing.Visible = false
            end
            continue
        end
        
        local humanoid = character:FindFirstChildOfClass("Humanoid")
        local head = character:FindFirstChild("Head")
        local rootPart = character:FindFirstChild("HumanoidRootPart")
        
        if not humanoid or not head or not rootPart or humanoid.Health <= 0 then
            for _, drawing in pairs(drawings) do
                drawing.Visible = false
            end
            continue
        end
        
        local currentPos = rootPart.Position
        local playerKey = tostring(player.UserId)
        
        if not previousPositions[playerKey] then
            previousPositions[playerKey] = currentPos
        end
        
        local smoothFactor = 0.2
        local smoothedPos = previousPositions[playerKey] + (currentPos - previousPositions[playerKey]) * smoothFactor
        previousPositions[playerKey] = smoothedPos
        
        local headPos, headVisible = Camera:WorldToViewportPoint(head.Position)
        local rootPos, rootVisible = Camera:WorldToViewportPoint(smoothedPos)
        
        if not headVisible or not rootVisible then
            for _, drawing in pairs(drawings) do
                drawing.Visible = false
            end
            continue
        end
        
        local distance = (LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")) 
            and (LocalPlayer.Character.HumanoidRootPart.Position - smoothedPos).Magnitude 
            or 0
        
        if distance > MAX_DISTANCE then
            for _, drawing in pairs(drawings) do
                drawing.Visible = false
            end
            continue
        end
        
        local isTeammate, teamName, color = self:GetTeamInfo(player)
        local boxWidth, boxHeight = self:GetCharacterBounds(character)
        local distanceScale = math.clamp(50 / (distance / 10), 0.8, 1.2)
        boxWidth = boxWidth * distanceScale
        boxHeight = boxHeight * distanceScale
        boxWidth = math.max(boxWidth, 18)
        boxHeight = math.max(boxHeight, 42)
        local boxPos = Vector2.new(rootPos.X, rootPos.Y - boxHeight / 3)
        local cornerLength = math.clamp(boxWidth * 0.3, 6, 10)
        if SHOW_BOXES then
            drawings.boxTL.From = Vector2.new(boxPos.X - boxWidth/2, boxPos.Y - boxHeight/2)
            drawings.boxTL.To = Vector2.new(boxPos.X - boxWidth/2 + cornerLength, boxPos.Y - boxHeight/2)
            drawings.boxTL.Color = color
            drawings.boxTL.Visible = true
            
            drawings.boxTLv.From = Vector2.new(boxPos.X - boxWidth/2, boxPos.Y - boxHeight/2)
            drawings.boxTLv.To = Vector2.new(boxPos.X - boxWidth/2, boxPos.Y - boxHeight/2 + cornerLength)
            drawings.boxTLv.Color = color
            drawings.boxTLv.Visible = true
            
            drawings.boxTR.From = Vector2.new(boxPos.X + boxWidth/2, boxPos.Y - boxHeight/2)
            drawings.boxTR.To = Vector2.new(boxPos.X + boxWidth/2 - cornerLength, boxPos.Y - boxHeight/2)
            drawings.boxTR.Color = color
            drawings.boxTR.Visible = true
            
            drawings.boxTRv.From = Vector2.new(boxPos.X + boxWidth/2, boxPos.Y - boxHeight/2)
            drawings.boxTRv.To = Vector2.new(boxPos.X + boxWidth/2, boxPos.Y - boxHeight/2 + cornerLength)
            drawings.boxTRv.Color = color
            drawings.boxTRv.Visible = true
            
            drawings.boxBL.From = Vector2.new(boxPos.X - boxWidth/2, boxPos.Y + boxHeight/2)
            drawings.boxBL.To = Vector2.new(boxPos.X - boxWidth/2 + cornerLength, boxPos.Y + boxHeight/2)
            drawings.boxBL.Color = color
            drawings.boxBL.Visible = true
            
            drawings.boxBLv.From = Vector2.new(boxPos.X - boxWidth/2, boxPos.Y + boxHeight/2)
            drawings.boxBLv.To = Vector2.new(boxPos.X - boxWidth/2, boxPos.Y + boxHeight/2 - cornerLength)
            drawings.boxBLv.Color = color
            drawings.boxBLv.Visible = true
            
            drawings.boxBR.From = Vector2.new(boxPos.X + boxWidth/2, boxPos.Y + boxHeight/2)
            drawings.boxBR.To = Vector2.new(boxPos.X + boxWidth/2 - cornerLength, boxPos.Y + boxHeight/2)
            drawings.boxBR.Color = color
            drawings.boxBR.Visible = true
            
            drawings.boxBRv.From = Vector2.new(boxPos.X + boxWidth/2, boxPos.Y + boxHeight/2)
            drawings.boxBRv.To = Vector2.new(boxPos.X + boxWidth/2, boxPos.Y + boxHeight/2 - cornerLength)
            drawings.boxBRv.Color = color
            drawings.boxBRv.Visible = true
        end
        
        if SHOW_TRACERS then
            drawings.tracer.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y)
            drawings.tracer.To = Vector2.new(boxPos.X, boxPos.Y + boxHeight/2)
            drawings.tracer.Color = color
            drawings.tracer.Visible = true
        end
        
        if SHOW_NAMES then
            local displayText = player.Name
            if SHOW_DISTANCE then
                displayText = string.format("%s [%d]", player.Name, math.floor(distance))
            end
            displayText = displayText .. "\n" .. teamName
            
            drawings.name.Position = Vector2.new(boxPos.X, boxPos.Y - boxHeight/2 - 20)
            drawings.name.Text = displayText
            drawings.name.Color = Color3.fromRGB(255, 255, 255) 
            drawings.name.Visible = true
        end
    end
end

function ESP:Init()
    self.players = {}
    
    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer then
            self:Add(player)
        end
    end
    
    Players.PlayerAdded:Connect(function(player)
        if player ~= LocalPlayer then
            self:Add(player)
        end
    end)
    
    Players.PlayerRemoving:Connect(function(player)
        self:Remove(player)
    end)
    
    local frameCount = 0
    RunService.RenderStepped:Connect(function()
        frameCount = frameCount + 1
        if frameCount % 2 == 0 then 
            self:Update()
        end
    end)
end
ESP:Init()
print("  [~] Created by Homless (Violence District ESP)")
print("  [~] Experiencing Issues Join our Discord -> https://discord.gg/t6AAJsHmV7")

Features & Information

when the discord reaches 50 members I'll add more features such as anti fail gen & healing, flashlight aimbot, and more. # Features > Corner Box ESP > Name ESP > Distance ESP > Team ESP (Survivor/Killer)
#Updated#Violence District#Source#ESP

Community Comments (0)

No comments yet for this script.

More Scripts for [CURE] Violence District