local c = workspace.CurrentCamera local ps = game:GetService("Players") local lp = ps.LocalPlayer local rs = game:GetService("RunService") -- Utility Functions local function getdistancefc(part) return (part.Position - c.CFrame.Position).Magnitude end local function lerp(a, b, t) return a + (b - a) * t end -- Configuration Table local espConfig = { tracerColor = Color3.fromRGB(255, 0, 0), nameColor = Color3.fromRGB(255, 255, 255), distColor = Color3.fromRGB(0, 255, 0), boxColor = Color3.fromRGB(0, 191, 255), healthBarColor = Color3.fromRGB(0, 255, 0), pulseSpeed = 5, orbitRadius = 20, glitchChance = 0.05, scanInterval = 50, -- Time between scan line appearances changed to 50 seconds scanDuration = 0.5, -- How long scan lines are visible each time (still 0.5s) } -- ESP Function local function esp(p, cr) local h = cr:WaitForChild("Humanoid") local hrp = cr:WaitForChild("HumanoidRootPart") -- Drawing Objects local nameText = Drawing.new("Text") nameText.Center = true nameText.Outline = true nameText.Font = 2 nameText.Color = espConfig.nameColor nameText.Size = 16 nameText.Visible = false local distText = Drawing.new("Text") distText.Center = true distText.Outline = true distText.Font = 2 distText.Color = espConfig.distColor distText.Size = 13 distText.Visible = false local tracer = Drawing.new("Line") tracer.From = Vector2.new(c.ViewportSize.X / 2, c.ViewportSize.Y) tracer.Color = espConfig.tracerColor tracer.Thickness = 2 tracer.Transparency = 1 tracer.Visible = false local box = { top = Drawing.new("Line"), bottom = Drawing.new("Line"), left = Drawing.new("Line"), right = Drawing.new("Line") } for _, line in pairs(box) do line.Color = espConfig.boxColor line.Thickness = 1 line.Visible = false end local healthBar = Drawing.new("Line") healthBar.Color = espConfig.healthBarColor healthBar.Thickness = 3 healthBar.Visible = false local orbitDot1 = Drawing.new("Circle") orbitDot1.Radius = 3 orbitDot1.Color = Color3.fromRGB(255, 255, 0) orbitDot1.Filled = true orbitDot1.Visible = false local orbitDot2 = Drawing.new("Circle") orbitDot2.Radius = 3 orbitDot2.Color = Color3.fromRGB(0, 255, 255) orbitDot2.Filled = true orbitDot2.Visible = false -- Connections local c1, c2, c3 local time = 0 -- Cleanup Function local function dc() nameText:Remove() distText:Remove() tracer:Remove() for _, line in pairs(box) do line:Remove() end healthBar:Remove() orbitDot1:Remove() orbitDot2:Remove() if c1 then c1:Disconnect() c1 = nil end if c2 then c2:Disconnect() c2 = nil end if c3 then c3:Disconnect() c3 = nil end end -- Disconnect Conditions c2 = cr.AncestryChanged:Connect(function(_, parent) if not parent then dc() end end) c3 = h.HealthChanged:Connect(function(v) if (v <= 0) or (h:GetState() == Enum.HumanoidStateType.Dead) then dc() end end) -- Animation Logic c1 = rs.RenderStepped:Connect(function(dt) time = time + dt local hrp_pos, hrp_os = c:WorldToViewportPoint(hrp.Position) local head_pos = c:WorldToViewportPoint(hrp.Position + Vector3.new(0, 3, 0)) local feet_pos = c:WorldToViewportPoint(hrp.Position - Vector3.new(0, 3, 0)) if hrp_os then -- Name Text nameText.Position = Vector2.new(head_pos.X, head_pos.Y - 20) nameText.Text = p.Name nameText.Visible = true -- Distance Text with Pulse and Glitch local distance = math.floor(getdistancefc(hrp)) distText.Position = Vector2.new(head_pos.X, head_pos.Y - 5) distText.Text = distance .. " studs" distText.Size = 13 + math.sin(time * espConfig.pulseSpeed) * 2 if math.random() < espConfig.glitchChance then distText.Text = distText.Text:gsub("s", "5"):gsub("u", "v") end distText.Visible = true -- Animated Tracer tracer.To = Vector2.new(hrp_pos.X, hrp_pos.Y) tracer.Color = Color3.fromRGB( 255 * math.abs(math.sin(time)), 0, 255 * math.abs(math.cos(time)) ) tracer.Visible = true -- Dynamic Box local boxSize = Vector2.new(20, 60) box.top.From = Vector2.new(feet_pos.X - boxSize.X / 2, feet_pos.Y - boxSize.Y / 2) box.top.To = Vector2.new(feet_pos.X + boxSize.X / 2, feet_pos.Y - boxSize.Y / 2) box.bottom.From = Vector2.new(feet_pos.X - boxSize.X / 2, feet_pos.Y + boxSize.Y / 2) box.bottom.To = Vector2.new(feet_pos.X + boxSize.X / 2, feet_pos.Y + boxSize.Y / 2) box.left.From = box.top.From box.left.To = box.bottom.From box.right.From = box.top.To box.right.To = box.bottom.To for _, line in pairs(box) do line.Visible = true end -- Health Bar local healthPercent = h.Health / h.MaxHealth healthBar.From = Vector2.new(feet_pos.X - boxSize.X / 2 - 5, feet_pos.Y + boxSize.Y / 2) healthBar.To = Vector2.new( feet_pos.X - boxSize.X / 2 - 5, lerp(feet_pos.Y + boxSize.Y / 2, feet_pos.Y - boxSize.Y / 2, healthPercent) ) healthBar.Color = Color3.fromRGB( 255 * (1 - healthPercent), 255 * healthPercent, 0 ) healthBar.Visible = true -- Orbiting Dots local orbitAngle = time * 3 orbitDot1.Position = Vector2.new( hrp_pos.X + math.cos(orbitAngle) * espConfig.orbitRadius, hrp_pos.Y + math.sin(orbitAngle) * espConfig.orbitRadius ) orbitDot2.Position = Vector2.new( hrp_pos.X + math.cos(orbitAngle + math.pi) * espConfig.orbitRadius, hrp_pos.Y + math.sin(orbitAngle + math.pi) * espConfig.orbitRadius ) orbitDot1.Visible = true orbitDot2.Visible = true else nameText.Visible = false distText.Visible = false tracer.Visible = false for _, line in pairs(box) do line.Visible = false end healthBar.Visible = false orbitDot1.Visible = false orbitDot2.Visible = false end end) end -- Player Handling local function p_added(p) if p.Character then esp(p, p.Character) end p.CharacterAdded:Connect(function(cr) esp(p, cr) end) end for _, p in next, ps:GetPlayers() do if p ~= lp then p_added(p) end end ps.PlayerAdded:Connect(p_added) -- Updated Scan Lines: Appear Every 50 Seconds local scanLines = {} for i = 1, 10 do scanLines[i] = Drawing.new("Line") scanLines[i].Color = Color3.fromRGB(0, 255, 255) -- Cyan-blue scanLines[i].Thickness = 1 scanLines[i].Visible = false end local scanTime = 0 rs.RenderStepped:Connect(function(dt) scanTime = scanTime + dt local cycleTime = scanTime % espConfig.scanInterval -- Time within 50-second cycle local isActive = cycleTime < espConfig.scanDuration -- Active for first 0.5s of cycle for i, line in pairs(scanLines) do if isActive then -- Position lines moving downward during active period local yPos = (cycleTime / espConfig.scanDuration) * c.ViewportSize.Y + (i - 1) * 50 if yPos < c.ViewportSize.Y then line.From = Vector2.new(0, yPos) line.To = Vector2.new(c.ViewportSize.X, yPos) line.Transparency = 1 - (cycleTime / espConfig.scanDuration) -- Fade out over 0.5s line.Visible = true else line.Visible = false end else line.Visible = false end end end)