simple universal esp open src
Key RequiredUniversal

simple universal esp open src

Universal Scriptindistiputedindistiputed 1.5K views 4.6K executesUpdated Oct 1, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•635 lines (22367 chars)
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local TS = game:GetService("TweenService")
local RS = game:GetService("RunService")
local LP = Players.LocalPlayer
local rgb, udim, offset = Color3.fromRGB, UDim2.new, UDim2.fromOffset
local white = Color3.new(1, 1, 1)
local inkCol = rgb(30, 30, 36)
local bgCol, lineCol, accent, offCol = rgb(255, 255, 255), rgb(210, 210, 218), rgb(149, 92, 215), rgb(205, 205, 212)
local cartoon = Enum.Font.FredokaOne
local fast = TweenInfo.new(0.15)
local popTi = TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
local sizes = {main = 138, settings = 178}
local pieceKeys = {"hl", "bb", "boxGui", "line"}

local espColor = rgb(255, 0, 0)
local teamColor = rgb(60, 100, 255)
local isOn, hlOn, unOn, tnOn, boxOn, tracerOn, teamOn = false, true, true, false, false, false, false
local isOpen, curTab = true, "main"
local espData, woahjConns, pickers = {}, {}, {}
local addConn, remConn, lineConn, lpTeamConn
local onMove, held
local woahj
local presetColors = {rgb(255, 0, 0), rgb(255, 140, 0), rgb(255, 230, 0), rgb(0, 255, 120), rgb(0, 220, 255), rgb(60, 100, 255), rgb(149, 92, 215), rgb(30, 30, 36)}

local moveConn = UIS.InputChanged:Connect(function(m)
	if onMove and (m.UserInputType == Enum.UserInputType.MouseMovement or m.UserInputType == Enum.UserInputType.Touch) then
		onMove(m)
	end
end)
local endConn = UIS.InputEnded:Connect(function(i)
	if held and (i == held or (i.UserInputType == Enum.UserInputType.MouseButton1 and held.UserInputType == Enum.UserInputType.MouseButton1)) then
		onMove, held = nil, nil
	end
end)

local function isPress(i)
	return i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch
end
local function startDrag(i, fn)
	held = i
	onMove = function(m)
		if m == i or m.UserInputType == Enum.UserInputType.MouseMovement then
			fn(m)
		end
	end
end
local function make(class, props, par)
	local o = Instance.new(class)
	for k, val in props do
		o[k] = val
	end
	o.Parent = par
	return o
end
local function corner(o, a, b)
	make("UICorner", {CornerRadius = UDim.new(a, b or 0)}, o)
end
local function stroke(o, c, t, tr)
	return make("UIStroke", {Color = c, Thickness = t or 1, Transparency = tr or 0}, o)
end
local function makeToggle(par, pos)
	local b = make("TextButton", {AnchorPoint = Vector2.new(0, 0.5), Size = offset(44, 22), Position = pos, BackgroundColor3 = offCol, Text = "", AutoButtonColor = false, BorderSizePixel = 0}, par)
	local k = make("Frame", {Size = offset(16, 16), Position = udim(0, 3, 0.5, -8), BackgroundColor3 = white, BorderSizePixel = 0}, b)
	corner(b, 1)
	corner(k, 1)
	return b, k
end
local function skin(b, k, state, instant)
	local col = state and accent or offCol
	local pos = state and udim(1, -19, 0.5, -8) or udim(0, 3, 0.5, -8)
	if instant then
		b.BackgroundColor3 = col
		k.Position = pos
	else
		TS:Create(b, fast, {BackgroundColor3 = col}):Play()
		TS:Create(k, fast, {Position = pos}):Play()
	end
end
local function rowLabel(par, txt, pos)
	return make("TextLabel", {AnchorPoint = Vector2.new(0, 0.5), Size = offset(80, 22), Position = pos, BackgroundTransparency = 1, Text = txt, Font = cartoon, TextSize = 14, TextColor3 = rgb(50, 50, 58), TextXAlignment = Enum.TextXAlignment.Left}, par)
end
local function makeKnob(par, z, col)
	local k = make("Frame", {AnchorPoint = Vector2.new(0.5, 0.5), Size = offset(16, 16), BackgroundColor3 = col, BorderSizePixel = 0, ZIndex = z}, par)
	corner(k, 1)
	stroke(k, inkCol, 2.5)
	return k
end
local function colorFor(player)
	if teamOn and player.Team ~= LP.Team then
		return teamColor
	end
	return espColor
end
local function teamText(player)
	return player.Team and player.Team.Name or "No team"
end

local gui = make("ScreenGui", {Name = "ESPUI", ResetOnSpawn = false, IgnoreGuiInset = true, DisplayOrder = 999, ZIndexBehavior = Enum.ZIndexBehavior.Sibling})
local tracerGui = make("ScreenGui", {Name = "ESPLines", ResetOnSpawn = false, IgnoreGuiInset = true, DisplayOrder = 998, ZIndexBehavior = Enum.ZIndexBehavior.Sibling})
local idkFolder = make("Folder", {}, gui)
local frame = make("Frame", {Size = offset(190, sizes.main), Position = udim(0.5, -95, 0.35, 0), BackgroundColor3 = bgCol, BorderSizePixel = 0, Visible = false}, gui)
local head = make("Frame", {Size = udim(1, -64, 0, 30), BackgroundTransparency = 1}, frame)
local content = make("Frame", {Size = udim(1, 0, 1, -30), Position = offset(0, 30), BackgroundTransparency = 1}, frame)
local tabRow = make("Frame", {Size = udim(1, 0, 0, 26), BackgroundTransparency = 1}, content)
local tabMain = make("TextButton", {Size = offset(84, 22), Position = offset(10, 2), BackgroundColor3 = accent, Text = "main", Font = cartoon, TextSize = 13, TextColor3 = white, AutoButtonColor = false, BorderSizePixel = 0}, tabRow)
local tabSet = make("TextButton", {Size = offset(84, 22), Position = offset(96, 2), BackgroundColor3 = rgb(238, 238, 243), Text = "settings", Font = cartoon, TextSize = 13, TextColor3 = rgb(90, 90, 100), AutoButtonColor = false, BorderSizePixel = 0}, tabRow)
local mainBody = make("Frame", {Size = udim(1, 0, 0, 80), Position = offset(0, 28), BackgroundTransparency = 1}, content)
local setBody = make("ScrollingFrame", {Size = udim(1, 0, 0, 120), Position = offset(0, 28), BackgroundTransparency = 1, BorderSizePixel = 0, CanvasSize = offset(0, 200), ScrollBarThickness = 3, ScrollBarImageColor3 = rgb(190, 190, 200), ScrollingDirection = Enum.ScrollingDirection.Y, Active = true, Visible = false}, content)
local toggleBtn, knob = makeToggle(mainBody, udim(0, 96, 0, 20))
local teamBtn, teamKnob = makeToggle(mainBody, udim(0, 96, 0, 60))
local hlBtn, hlKnob = makeToggle(setBody, udim(1, -58, 0, 20))
local unBtn, unKnob = makeToggle(setBody, udim(1, -58, 0, 60))
local tnBtn, tnKnob = makeToggle(setBody, udim(1, -58, 0, 100))
local boxBtn, boxKnob = makeToggle(setBody, udim(1, -58, 0, 140))
local trBtn, trKnob = makeToggle(setBody, udim(1, -58, 0, 180))
local welcome = make("Frame", {Name = "WelcomePopup", Size = offset(360, 180), Position = udim(0.5, -180, 0.5, -90), BackgroundColor3 = rgb(22, 22, 26), BorderSizePixel = 0, ZIndex = 100}, gui)
local welcomeTitle = make("TextLabel", {Size = udim(1, -30, 0, 28), Position = offset(15, 18), BackgroundTransparency = 1, Text = "hello hi this is made by", TextColor3 = white, Font = Enum.Font.Cartoon, TextSize = 20, TextXAlignment = Enum.TextXAlignment.Center, ZIndex = 101}, welcome)
local welcomeLink = make("TextLabel", {Size = udim(1, -20, 0, 40), Position = offset(10, 52), BackgroundTransparency = 1, Text = "https://scriptblox.com/u/indistiputed", TextColor3 = white, Font = Enum.Font.Cartoon, TextSize = 15, TextWrapped = true, TextXAlignment = Enum.TextXAlignment.Center, ZIndex = 101}, welcome)
local okBtn = make("TextButton", {Size = offset(100, 34), Position = udim(0.5, -50, 1, -48), BackgroundColor3 = rgb(35, 35, 40), BorderSizePixel = 0, Text = "OK", TextColor3 = white, Font = Enum.Font.Cartoon, TextSize = 16, AutoButtonColor = false, ZIndex = 101}, welcome)

local function circleBtn(txt, x, size)
	local b = make("TextButton", {Size = offset(24, 24), Position = udim(1, x, 0, 3), BackgroundColor3 = rgb(238, 238, 243), Text = txt, Font = cartoon, TextSize = size, TextColor3 = rgb(60, 60, 70), BorderSizePixel = 0}, frame)
	corner(b, 1)
	return b
end

local minimizeBtn, closeBtn = circleBtn("-", -56, 16), circleBtn("x", -28, 14)

make("TextLabel", {Size = udim(1, -12, 1, 0), Position = offset(12, 0), BackgroundTransparency = 1, Text = "simple lil esp", Font = cartoon, TextSize = 16, TextColor3 = inkCol, TextXAlignment = Enum.TextXAlignment.Left}, head)
rowLabel(mainBody, "Player ESP", udim(0, 14, 0, 20))
rowLabel(mainBody, "Team based", udim(0, 14, 0, 60))
rowLabel(setBody, "Highlight", udim(0, 14, 0, 20))
rowLabel(setBody, "Usernames", udim(0, 14, 0, 60))
rowLabel(setBody, "Team name", udim(0, 14, 0, 100))
rowLabel(setBody, "Box", udim(0, 14, 0, 140))
rowLabel(setBody, "Tracers", udim(0, 14, 0, 180))
corner(frame, 0, 10)
stroke(frame, lineCol)
corner(tabMain, 0, 8)
corner(tabSet, 0, 8)
corner(welcome, 0, 12)
stroke(welcome, rgb(48, 48, 55), 1)
corner(okBtn, 0, 8)
skin(hlBtn, hlKnob, hlOn, true)
skin(unBtn, unKnob, unOn, true)

local ok = pcall(function()
	local par = (gethui and gethui()) or game:GetService("CoreGui")
	gui.Parent = par
	tracerGui.Parent = par
end)
if not ok then
	gui.Parent = LP:WaitForChild("PlayerGui")
	tracerGui.Parent = LP:WaitForChild("PlayerGui")
end

local function makePicker(par, pos, startColor, onChange)
	local api = {}
	local h, s, v = startColor:ToHSV()
	local color = startColor
	local open, queued = false, false
	local swatch = make("TextButton", {AnchorPoint = Vector2.new(0, 0.5), Size = offset(26, 26), Position = pos, BackgroundColor3 = color, Text = "", AutoButtonColor = false, BorderSizePixel = 0}, par)
	local pop = make("Frame", {AnchorPoint = Vector2.new(0.5, 0), Size = offset(190, 196), Position = udim(0.5, 0, 1, 6), BackgroundColor3 = bgCol, BorderSizePixel = 0, Visible = false}, frame)
	local popBase = stroke(pop, rgb(225, 225, 232), 2)
	local popStroke = stroke(pop, white, 2)
	local popGrad = make("UIGradient", {Transparency = NumberSequence.new({
		NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.25, 0.5), NumberSequenceKeypoint.new(0.48, 0),
		NumberSequenceKeypoint.new(0.5, 1), NumberSequenceKeypoint.new(0.75, 0.5), NumberSequenceKeypoint.new(0.98, 0), NumberSequenceKeypoint.new(1, 1),
	})}, popStroke)
	local popScale = make("UIScale", {}, pop)
	local svBox = make("Frame", {Size = offset(170, 96), Position = offset(10, 10), BackgroundColor3 = white, BorderSizePixel = 0, Active = true}, pop)
	local svGrad = make("UIGradient", {}, svBox)
	local darkOverlay = make("Frame", {Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(0, 0, 0), BorderSizePixel = 0, ZIndex = 2}, svBox)
	local hueSlider = make("Frame", {Size = offset(170, 20), Position = offset(10, 112), BackgroundTransparency = 1, Active = true}, pop)
	local hueBar = make("Frame", {Size = udim(1, 0, 0, 10), Position = udim(0, 0, 0.5, -5), BackgroundColor3 = white, BorderSizePixel = 0}, hueSlider)
	local previewDot = make("Frame", {Size = offset(24, 24), Position = offset(10, 162), BackgroundColor3 = color, BorderSizePixel = 0}, pop)
	local rgbInput = make("TextBox", {Size = offset(130, 24), Position = offset(50, 162), BackgroundColor3 = rgb(238, 238, 243), BorderSizePixel = 0, Font = cartoon, TextSize = 13, TextColor3 = inkCol, PlaceholderText = "255, 0, 0", PlaceholderColor3 = rgb(150, 150, 160), ClearTextOnFocus = false, Text = "255, 0, 0"}, pop)
	local svKnob, hueKnob = makeKnob(svBox, 3, color), makeKnob(hueSlider, 2, color)
	local inputStroke = stroke(rgbInput, lineCol, 1.5)
	local spinTween = TS:Create(popGrad, TweenInfo.new(2, Enum.EasingStyle.Linear, Enum.EasingDirection.In, -1), {Rotation = 360})

	make("UIGradient", {Transparency = NumberSequence.new(1, 0), Rotation = 90}, darkOverlay)
	make("UIGradient", {Color = ColorSequence.new({
		ColorSequenceKeypoint.new(0, rgb(255, 0, 0)), ColorSequenceKeypoint.new(1 / 6, rgb(255, 255, 0)), ColorSequenceKeypoint.new(2 / 6, rgb(0, 255, 0)),
		ColorSequenceKeypoint.new(3 / 6, rgb(0, 255, 255)), ColorSequenceKeypoint.new(4 / 6, rgb(0, 0, 255)), ColorSequenceKeypoint.new(5 / 6, rgb(255, 0, 255)), ColorSequenceKeypoint.new(1, rgb(255, 0, 0)),
	})}, hueBar)
	corner(swatch, 0, 8)
	stroke(swatch, inkCol, 1.5, 0.6)
	corner(pop, 0, 12)
	corner(svBox, 0, 8)
	corner(darkOverlay, 0, 8)
	corner(hueBar, 1)
	corner(previewDot, 1)
	stroke(previewDot, inkCol, 1, 0.6)
	corner(rgbInput, 0, 8)

	local function paint()
		color = Color3.fromHSV(h, s, v)
		swatch.BackgroundColor3 = color
		previewDot.BackgroundColor3 = color
		svKnob.BackgroundColor3 = color
		hueKnob.BackgroundColor3 = Color3.fromHSV(h, 1, 1)
		svGrad.Color = ColorSequence.new(white, Color3.fromHSV(h, 1, 1))
		popGrad.Color = ColorSequence.new({
			ColorSequenceKeypoint.new(0, accent), ColorSequenceKeypoint.new(0.48, color), ColorSequenceKeypoint.new(0.5, accent),
			ColorSequenceKeypoint.new(0.98, color), ColorSequenceKeypoint.new(1, accent),
		})
		svKnob.Position = UDim2.fromScale(s, 1 - v)
		hueKnob.Position = UDim2.fromScale(h, 0.5)
		rgbInput.Text = string.format("%d, %d, %d", math.round(color.R * 255), math.round(color.G * 255), math.round(color.B * 255))
	end

	local function changed()
		if queued then
			return
		end
		queued = true
		task.defer(function()
			queued = false
			paint()
			onChange(color)
		end)
	end

	for i, c in presetColors do
		local chip = make("TextButton", {Size = offset(16, 16), Position = offset(10 + (i - 1) * 22, 138), BackgroundColor3 = c, Text = "", AutoButtonColor = false, BorderSizePixel = 0}, pop)
		corner(chip, 1)
		stroke(chip, inkCol, 1, 0.6)
		chip.Activated:Connect(function()
			h, s, v = c:ToHSV()
			changed()
		end)
	end

	local function idk(i, name)
		if name == "sv" then
			s = math.clamp((i.Position.X - svBox.AbsolutePosition.X) / svBox.AbsoluteSize.X, 0, 1)
			v = 1 - math.clamp((i.Position.Y - svBox.AbsolutePosition.Y) / svBox.AbsoluteSize.Y, 0, 1)
		else
			h = math.clamp((i.Position.X - hueSlider.AbsolutePosition.X) / hueSlider.AbsoluteSize.X, 0, 0.999)
		end
		changed()
	end

	local function bindSlider(fr, name)
		fr.InputBegan:Connect(function(i)
			if not isPress(i) then
				return
			end
			idk(i, name)
			startDrag(i, function(m)
				idk(m, name)
			end)
		end)
	end
	bindSlider(svBox, "sv")
	bindSlider(hueSlider, "hue")

	rgbInput.Focused:Connect(function()
		TS:Create(inputStroke, fast, {Color = accent}):Play()
	end)

	rgbInput.FocusLost:Connect(function()
		TS:Create(inputStroke, fast, {Color = lineCol}):Play()
		local r, g, b = rgbInput.Text:match("(%d+)%D+(%d+)%D+(%d+)")
		if r then
			h, s, v = rgb(math.clamp(tonumber(r), 0, 255), math.clamp(tonumber(g), 0, 255), math.clamp(tonumber(b), 0, 255)):ToHSV()
		end
		changed()
	end)

	local function WHAT(state)
		open = state
		if state then
			for _, p in pickers do
				if p ~= api then
					p.close()
				end
			end
			pop.Visible = true
			popScale.Scale = 0.9
			pop.Position = udim(0.5, 0, 1, -4)
			popStroke.Transparency = 1
			popBase.Transparency = 1
			popGrad.Rotation = 0
			TS:Create(popScale, popTi, {Scale = 1}):Play()
			TS:Create(pop, popTi, {Position = udim(0.5, 0, 1, 6)}):Play()
			TS:Create(popStroke, popTi, {Transparency = 0}):Play()
			TS:Create(popBase, popTi, {Transparency = 0}):Play()
			spinTween:Play()
		else
			pop.Visible = false
			spinTween:Cancel()
		end
	end

	swatch.Activated:Connect(function()
		WHAT(not open)
	end)

	api.close = function()
		WHAT(false)
	end
	table.insert(pickers, api)
	paint()
	return api
end

local mainPicker = makePicker(mainBody, udim(0, 148, 0, 20), espColor, function(c)
	espColor = c
	woahj()
end)
local teamPicker = makePicker(mainBody, udim(0, 148, 0, 60), teamColor, function(c)
	teamColor = c
	woahj()
end)

local function closePickers()
	for _, p in pickers do
		p.close()
	end
end

woahj = function()
	for player, d in espData do
		local c = colorFor(player)
		if d.hl then
			d.hl.FillColor = c
			d.hl.OutlineColor = c
		end
		if d.tag then
			d.tag.TextColor3 = c
		end
		if d.teamTag then
			d.teamTag.TextColor3 = c
		end
		if d.boxStroke then
			d.boxStroke.Color = c
		end
		if d.line then
			d.line.BackgroundColor3 = c
		end
	end
end

lpTeamConn = LP:GetPropertyChangedSignal("Team"):Connect(function()
	woahj()
end)

local function paintTab(b, active)
	TS:Create(b, fast, {BackgroundColor3 = active and accent or rgb(238, 238, 243), TextColor3 = active and white or rgb(90, 90, 100)}):Play()
end

local function showTab(name)
	curTab = name
	mainBody.Visible = name == "main"
	setBody.Visible = name == "settings"
	closePickers()
	paintTab(tabMain, name == "main")
	paintTab(tabSet, name == "settings")
	if isOpen then
		TS:Create(frame, fast, {Size = offset(190, sizes[name])}):Play()
	end
end

local function clearEsp(player)
	local d = espData[player]
	if d then
		for _, k in pieceKeys do
			if d[k] then
				d[k]:Destroy()
			end
		end
		espData[player] = nil
	end
end

local function sync(player)
	local d = espData[player]
	if not d then
		return
	end
	local c = colorFor(player)
	if isOn and hlOn then
		if not d.hl then
			d.hl = make("Highlight", {Adornee = d.char, FillColor = c, OutlineColor = c, FillTransparency = 0.5, DepthMode = Enum.HighlightDepthMode.AlwaysOnTop}, idkFolder)
		end
	elseif d.hl then
		d.hl:Destroy()
		d.hl = nil
	end
	local key = (isOn and unOn and 1 or 0) + (isOn and tnOn and 2 or 0)
	if key ~= d.key and (key == 0 or d.hd) then
		if d.bb then
			d.bb:Destroy()
			d.bb, d.tag, d.teamTag = nil, nil, nil
		end
		d.key = key
		if key > 0 then
			local both = key == 3
			d.bb = make("BillboardGui", {Adornee = d.hd, Size = offset(120, both and 40 or 20), StudsOffset = Vector3.new(0, both and 3 or 2.5, 0), AlwaysOnTop = true}, idkFolder)
			if key >= 2 then
				d.teamTag = make("TextLabel", {Size = udim(1, 0, 0, 20), BackgroundTransparency = 1, Text = teamText(player), Font = cartoon, TextSize = 13, TextColor3 = c, TextStrokeTransparency = 0.4}, d.bb)
			end
			if key % 2 == 1 then
				d.tag = make("TextLabel", {Size = udim(1, 0, 0, 20), Position = offset(0, both and 20 or 0), BackgroundTransparency = 1, Text = player.DisplayName, Font = cartoon, TextSize = 14, TextColor3 = c, TextStrokeTransparency = 0.4}, d.bb)
			end
		end
	end
	if isOn and boxOn then
		if d.root and not d.boxGui then
			d.boxGui = make("BillboardGui", {Adornee = d.root, Size = UDim2.new(4.5, 0, 6, 0), AlwaysOnTop = true}, idkFolder)
			d.boxStroke = stroke(make("Frame", {Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1}, d.boxGui), c, 1.5)
		end
	elseif d.boxGui then
		d.boxGui:Destroy()
		d.boxGui, d.boxStroke = nil, nil
	end
	if isOn and tracerOn then
		if d.root and not d.line then
			d.line = make("Frame", {AnchorPoint = Vector2.new(0.5, 0.5), Size = offset(2, 0), BackgroundColor3 = c, BorderSizePixel = 0, Visible = false}, tracerGui)
		end
	elseif d.line then
		d.line:Destroy()
		d.line, d.px, d.py = nil, nil, nil
	end
end

local function setup(player, char)
	clearEsp(player)
	local d = {char = char}
	espData[player] = d
	sync(player)
	d.root = char:WaitForChild("HumanoidRootPart", 5)
	d.hd = char:WaitForChild("Head", 5)
	if espData[player] == d then
		sync(player)
	end
end

local function dropConns(player)
	local t = woahjConns[player]
	if t then
		for _, c in t do
			c:Disconnect()
		end
		woahjConns[player] = nil
	end
end

local function trackPlayer(player)
	if player == LP then
		return
	end
	woahjConns[player] = {
		player.CharacterAdded:Connect(function(char)
			setup(player, char)
		end),
		player:GetPropertyChangedSignal("Team"):Connect(function()
			local d = espData[player]
			if d and d.teamTag then
				d.teamTag.Text = teamText(player)
			end
			woahj()
		end),
	}
	if player.Character then
		task.spawn(setup, player, player.Character)
	end
end

local function updateLines()
	local cam = workspace.CurrentCamera
	local vs = cam.ViewportSize
	local ax, ay = vs.X / 2, vs.Y
	for _, d in espData do
		local line = d.line
		if line then
			local rt = d.root
			local show = false
			if rt and rt.Parent then
				local p = cam:WorldToViewportPoint(rt.Position)
				if p.Z > 0 then
					show = true
					if d.px ~= p.X or d.py ~= p.Y then
						d.px, d.py = p.X, p.Y
						local dx, dy = p.X - ax, p.Y - ay
						line.Position = offset(ax + dx / 2, ay + dy / 2)
						line.Size = offset(2, math.sqrt(dx * dx + dy * dy))
						line.Rotation = math.deg(math.atan2(dy, dx)) - 90
					end
				else
					d.px = nil
				end
			end
			if line.Visible ~= show then
				line.Visible = show
			end
		end
	end
end

local function refresh()
	if isOn then
		if addConn then
			for player in espData do
				sync(player)
			end
		else
			for _, player in Players:GetPlayers() do
				trackPlayer(player)
			end
			addConn = Players.PlayerAdded:Connect(trackPlayer)
			remConn = Players.PlayerRemoving:Connect(function(player)
				dropConns(player)
				clearEsp(player)
			end)
		end
	elseif addConn then
		addConn:Disconnect()
		remConn:Disconnect()
		addConn, remConn = nil, nil
		for player in woahjConns do
			dropConns(player)
		end
		for player in espData do
			clearEsp(player)
		end
	end
	if isOn and tracerOn and not lineConn then
		lineConn = RS.RenderStepped:Connect(updateLines)
	elseif not (isOn and tracerOn) and lineConn then
		lineConn:Disconnect()
		lineConn = nil
	end
end

toggleBtn.Activated:Connect(function()
	isOn = not isOn
	skin(toggleBtn, knob, isOn)
	refresh()
end)

teamBtn.Activated:Connect(function()
	teamOn = not teamOn
	skin(teamBtn, teamKnob, teamOn)
	woahj()
end)

hlBtn.Activated:Connect(function()
	hlOn = not hlOn
	skin(hlBtn, hlKnob, hlOn)
	refresh()
end)

unBtn.Activated:Connect(function()
	unOn = not unOn
	skin(unBtn, unKnob, unOn)
	refresh()
end)

tnBtn.Activated:Connect(function()
	tnOn = not tnOn
	skin(tnBtn, tnKnob, tnOn)
	refresh()
end)

boxBtn.Activated:Connect(function()
	boxOn = not boxOn
	skin(boxBtn, boxKnob, boxOn)
	refresh()
end)

trBtn.Activated:Connect(function()
	tracerOn = not tracerOn
	skin(trBtn, trKnob, tracerOn)
	refresh()
end)

tabMain.Activated:Connect(function()
	showTab("main")
end)

tabSet.Activated:Connect(function()
	showTab("settings")
end)

minimizeBtn.Activated:Connect(function()
	isOpen = not isOpen
	content.Visible = isOpen
	closePickers()
	TS:Create(frame, fast, {Size = isOpen and offset(190, sizes[curTab]) or offset(190, 30)}):Play()
end)

closeBtn.Activated:Connect(function()
	isOn = false
	refresh()
	closePickers()
	lpTeamConn:Disconnect()
	moveConn:Disconnect()
	endConn:Disconnect()
	gui:Destroy()
	tracerGui:Destroy()
end)

okBtn.MouseEnter:Connect(function()
	okBtn.BackgroundColor3 = rgb(48, 48, 54)
end)

okBtn.MouseLeave:Connect(function()
	okBtn.BackgroundColor3 = rgb(35, 35, 40)
end)

okBtn.MouseButton1Click:Connect(function()
	welcome:Destroy()
	frame.Visible = true
end)

head.InputBegan:Connect(function(i)
	if not isPress(i) then
		return
	end
	local start, sp = i.Position, frame.Position
	local dragged = false
	startDrag(i, function(m)
		local d = m.Position - start
		if not dragged and d.Magnitude >= 8 then
			dragged = true
		end
		if dragged then
			frame.Position = udim(sp.X.Scale, sp.X.Offset + d.X, sp.Y.Scale, sp.Y.Offset + d.Y)
		end
	end)
end)

Features & Information

its a esp with different settings like tracers, boxes, highlights and stuff like that
#esp#highlight#player#universal#tracers

Community Comments (1)

cvexecvexeOct 6, 2026

Finally, a simple script without any unnecessary junk, W

More Scripts for Universal Scripts