-- Gui to Lua
-- Version: 3.2

-- Instances:
local ScreenGui = Instance.new("ScreenGui")
local Frame = Instance.new("Frame")
local Title = Instance.new("TextLabel")
local Credits = Instance.new("TextLabel")
local ToggleESP = Instance.new("TextButton")
local ChangeMode = Instance.new("TextButton")
local ModeChangerNote = Instance.new("TextLabel")
local CloseGUI = Instance.new("TextButton")

-- Properties:
ScreenGui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui")
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

Frame.Parent = ScreenGui
Frame.BackgroundColor3 = Color3.fromRGB(4, 39, 86)
Frame.BorderColor3 = Color3.fromRGB(0, 0, 0)
Frame.BorderSizePixel = 0
Frame.Position = UDim2.new(0.321892768, 0, 0.250796169, 0)
Frame.Size = UDim2.new(0, 350, 0, 250)
Frame.Active = true
Frame.Draggable = false

Title.Name = "Title"
Title.Parent = Frame
Title.BackgroundColor3 = Color3.fromRGB(170, 255, 0)
Title.BorderColor3 = Color3.fromRGB(0, 0, 0)
Title.BorderSizePixel = 0
Title.Size = UDim2.new(0, 350, 0, 30)
Title.Font = Enum.Font.FredokaOne
Title.Text = "ESP GUI V0.1"
Title.TextColor3 = Color3.fromRGB(0, 0, 0)
Title.TextScaled = true
Title.TextSize = 14.000
Title.TextWrapped = true

Credits.Name = "Credits"
Credits.Parent = Frame
Credits.BackgroundColor3 = Color3.fromRGB(170, 255, 0)
Credits.BorderColor3 = Color3.fromRGB(0, 0, 0)
Credits.BorderSizePixel = 0
Credits.Position = UDim2.new(0, 0, 0.879999995, 0)
Credits.Size = UDim2.new(0, 350, 0, 30)
Credits.Font = Enum.Font.FredokaOne
Credits.Text = "Magic by 2slipperyydev (Sharky) on Discord and Youtube"
Credits.TextColor3 = Color3.fromRGB(0, 0, 0)
Credits.TextSize = 14.000
Credits.TextWrapped = true

ToggleESP.Name = "Toggle ESP"
ToggleESP.Parent = Frame
ToggleESP.BackgroundColor3 = Color3.fromRGB(0, 85, 0)
ToggleESP.BorderColor3 = Color3.fromRGB(0, 0, 0)
ToggleESP.BorderSizePixel = 0
ToggleESP.Position = UDim2.new(0.0714285746, 0, 0.568000019, 0)
ToggleESP.Size = UDim2.new(0, 100, 0, 50)
ToggleESP.Font = Enum.Font.FredokaOne
ToggleESP.Text = "Toggle ESP"
ToggleESP.TextColor3 = Color3.fromRGB(0, 0, 0)
ToggleESP.TextSize = 14.000
ToggleESP.TextWrapped = true

ChangeMode.Name = "ChangeMode"
ChangeMode.Parent = Frame
ChangeMode.BackgroundColor3 = Color3.fromRGB(0, 85, 0)
ChangeMode.BorderColor3 = Color3.fromRGB(0, 0, 0)
ChangeMode.BorderSizePixel = 0
ChangeMode.Position = UDim2.new(0.642857134, 0, 0.568000019, 0)
ChangeMode.Size = UDim2.new(0, 100, 0, 50)
ChangeMode.Font = Enum.Font.FredokaOne
ChangeMode.Text = "Change Mode"
ChangeMode.TextColor3 = Color3.fromRGB(0, 0, 0)
ChangeMode.TextSize = 14.000
ChangeMode.TextWrapped = true

ModeChangerNote.Name = "ModeChangerNote"
ModeChangerNote.Parent = Frame
ModeChangerNote.BackgroundColor3 = Color3.fromRGB(170, 170, 0)
ModeChangerNote.BorderColor3 = Color3.fromRGB(0, 0, 0)
ModeChangerNote.BorderSizePixel = 0
ModeChangerNote.Position = UDim2.new(0.0971428603, 0, 0.187999994, 0)
ModeChangerNote.Size = UDim2.new(0, 291, 0, 50)
ModeChangerNote.Font = Enum.Font.FredokaOne
ModeChangerNote.Text = "Mode Options:F for Filled Boxers,G for Bigger Boxers,and H for Smaller Boxers."
ModeChangerNote.TextColor3 = Color3.fromRGB(0, 0, 0)
ModeChangerNote.TextScaled = true
ModeChangerNote.TextSize = 14.000
ModeChangerNote.TextWrapped = true

CloseGUI.Name = "CloseGUI"
CloseGUI.Parent = Frame
CloseGUI.BackgroundColor3 = Color3.fromRGB(255, 0, 4)
CloseGUI.BorderColor3 = Color3.fromRGB(0, 0, 0)
CloseGUI.BorderSizePixel = 0
CloseGUI.Position = UDim2.new(0.877142847, 0, 0, 0)
CloseGUI.Size = UDim2.new(0, 43, 0, 30)
CloseGUI.Font = Enum.Font.SourceSans
CloseGUI.Text = "X"
CloseGUI.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseGUI.TextScaled = true
CloseGUI.TextSize = 14.000
CloseGUI.TextWrapped = true

-- Scripts:
local function OAKR_fake_script()
	-- Frame.LocalScript
	local script = Instance.new('LocalScript', Frame)

	local UIS = game:GetService("UserInputService")
	local frame = script.Parent
	local dragToggle = nil
	local dragSpeed = 0.1
	local dragStart = nil
	local startPos = nil

	local function updateInput(input)
		local delta = input.Position - dragStart
		local position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
		game:GetService("TweenService"):Create(frame, TweenInfo.new(dragSpeed), {Position = position}):Play()
	end

	frame.InputBegan:Connect(function(input)
		if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then
			dragToggle = true
			dragStart = input.Position
			startPos = frame.Position
			input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End then
					dragToggle = false
				end
			end)
		end
	end)

	UIS.InputChanged:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
			if dragToggle then
				updateInput(input)
			end
		end
	end)
end
coroutine.wrap(OAKR_fake_script)()

local function QMYZ_fake_script()
	-- ChangeMode.LocalScript
	local script = Instance.new('LocalScript', ChangeMode)

	-- SERVICES
	local Players = game:GetService("Players")
	local RunService = game:GetService("RunService")
	local UserInputService = game:GetService("UserInputService")
	
	local player = Players.LocalPlayer
	local camera = workspace.CurrentCamera
	local button = script.Parent

	-- DEVICE CHECK
	local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled

	-- MODES
	-- 1 = Filled (H key)
	-- 2 = Bigger (J key)
	-- 3 = Smaller (K key)
	local Mode = 1
	local Modes = {
		{Filled = true, Scale = 0.8},     -- Filled Boxers (H) - Made smaller
		{Filled = false, Scale = 1.2},    -- Bigger Boxers (J) - Made smaller
		{Filled = false, Scale = 0.6}     -- Smaller Boxers (K) - Made smaller
	}
	
	-- ESP STATE
	local ESPEnabled = false
	local Boxes = {}
	local DistanceTexts = {}
	local NameTexts = {}
	local lastCleanup = 0

	------------------------------------------------
	-- DRAWING CREATION FUNCTIONS
	------------------------------------------------
	local function createBox()
		local box = Drawing.new("Square")
		box.Color = Color3.fromRGB(255, 0, 0)  -- RED
		box.Thickness = 2
		box.Transparency = 1
		box.Visible = false
		box.Filled = false
		return box
	end

	local function createDistanceText()
		local text = Drawing.new("Text")
		text.Color = Color3.fromRGB(255, 255, 255)  -- White
		text.Size = 13
		text.Center = true
		text.Outline = true
		text.OutlineColor = Color3.fromRGB(0, 0, 0)
		text.Visible = false
		text.Font = 2  -- Enum.Font.SourceSans
		return text
	end

	local function createNameText()
		local text = Drawing.new("Text")
		text.Color = Color3.fromRGB(255, 255, 255)  -- White
		text.Size = 14
		text.Center = true
		text.Outline = true
		text.OutlineColor = Color3.fromRGB(0, 0, 0)
		text.Visible = false
		text.Font = 2  -- Enum.Font.SourceSans
		return text
	end

	------------------------------------------------
	-- CLEANUP FUNCTION (Runs every 3 seconds)
	------------------------------------------------
	local function cleanupDrawings()
		for plr, box in pairs(Boxes) do
			if not Players:FindFirstChild(plr.Name) then
				box:Remove()
				Boxes[plr] = nil
			end
		end
		
		for plr, text in pairs(DistanceTexts) do
			if not Players:FindFirstChild(plr.Name) then
				text:Remove()
				DistanceTexts[plr] = nil
			end
		end
		
		for plr, text in pairs(NameTexts) do
			if not Players:FindFirstChild(plr.Name) then
				text:Remove()
				NameTexts[plr] = nil
			end
		end
	end

	------------------------------------------------
	-- TOGGLE ESP
	------------------------------------------------
	local function toggleESP()
		ESPEnabled = not ESPEnabled
		for _, box in pairs(Boxes) do
			box.Visible = false
		end
		for _, text in pairs(DistanceTexts) do
			text.Visible = false
		end
		for _, text in pairs(NameTexts) do
			text.Visible = false
		end
		print("ESP Enabled:", ESPEnabled)
	end

	------------------------------------------------
	-- APPLY MODE
	------------------------------------------------
	local function applyMode()
		if ESPEnabled then
			for _, box in pairs(Boxes) do
				box.Filled = Modes[Mode].Filled
			end
		end
		print("ESP Mode:", Mode, "Filled:", Modes[Mode].Filled, "Scale:", Modes[Mode].Scale)
	end

	------------------------------------------------
	-- MOBILE BUTTON CLICK
	------------------------------------------------
	button.MouseButton1Click:Connect(function()
		Mode = Mode + 1
		if Mode > #Modes then
			Mode = 1
		end
		applyMode()
	end)

	------------------------------------------------
	-- PC KEYBINDS
	------------------------------------------------
	UserInputService.InputBegan:Connect(function(input, gp)
		if gp then return end
		
		-- Mode change keybinds
		if input.KeyCode == Enum.KeyCode.H then
			Mode = 1
			applyMode()
		elseif input.KeyCode == Enum.KeyCode.J then
			Mode = 2
			applyMode()
		elseif input.KeyCode == Enum.KeyCode.K then
			Mode = 3
			applyMode()
		end
	end)

	------------------------------------------------
	-- DISTANCE CALCULATION
	------------------------------------------------
	local function calculateDistance(char)
		if not char then return "N/A" end
		local hrp = char:FindFirstChild("HumanoidRootPart")
		if not hrp then return "N/A" end
		
		local playerChar = player.Character
		local playerHrp = playerChar and playerChar:FindFirstChild("HumanoidRootPart")
		if not playerHrp then return "N/A" end
		
		local distance = (hrp.Position - playerHrp.Position).Magnitude
		return math.floor(distance) .. " studs"
	end

	------------------------------------------------
	-- RENDER LOOP
	------------------------------------------------
	RunService.RenderStepped:Connect(function(deltaTime)
		-- Update cleanup timer
		lastCleanup = lastCleanup + deltaTime
		if lastCleanup >= 3 then  -- Every 3 seconds
			cleanupDrawings()
			lastCleanup = 0
		end
		
		if not ESPEnabled then return end
		
		for _, plr in ipairs(Players:GetPlayers()) do
			if plr ~= player then
				-- Create/update drawings for this player
				if not Boxes[plr] then
					Boxes[plr] = createBox()
				end
				if not DistanceTexts[plr] then
					DistanceTexts[plr] = createDistanceText()
				end
				if not NameTexts[plr] then
					NameTexts[plr] = createNameText()
				end
				
				local char = plr.Character
				local hrp = char and char:FindFirstChild("HumanoidRootPart")
				local hum = char and char:FindFirstChild("Humanoid")
				local box = Boxes[plr]
				local distanceText = DistanceTexts[plr]
				local nameText = NameTexts[plr]
				
				if hrp and hum and hum.Health > 0 then
					local pos, onScreen = camera:WorldToViewportPoint(hrp.Position)
					if onScreen then
						local data = Modes[Mode]
						local size = Vector2.new(30, 60) * data.Scale
						local boxPos = Vector2.new(
							pos.X - size.X / 2,
							pos.Y - size.Y / 2
						)
						
						-- Update box
						box.Size = size
						box.Position = boxPos
						box.Filled = data.Filled
						box.Visible = true
						
						-- Update distance text (below box)
						distanceText.Text = calculateDistance(char)
						distanceText.Position = Vector2.new(
							pos.X,
							pos.Y + size.Y / 2 + 10  -- 10 pixels below box
						)
						distanceText.Visible = true
						
						-- Update name text (above box)
						nameText.Text = plr.Name
						nameText.Position = Vector2.new(
							pos.X,
							pos.Y - size.Y / 2 - 15  -- 15 pixels above box
						)
						nameText.Visible = true
					else
						box.Visible = false
						distanceText.Visible = false
						nameText.Visible = false
					end
				else
					box.Visible = false
					distanceText.Visible = false
					nameText.Visible = false
				end
			end
		end
	end)
	
	------------------------------------------------
	-- Toggle ESP Button Connection
	------------------------------------------------
	local toggleButton = Frame:FindFirstChild("Toggle ESP")
	if toggleButton then
		toggleButton.MouseButton1Click:Connect(toggleESP)
	end
	
	-- Initialize
	applyMode()
	
	-- Player removal cleanup
	Players.PlayerRemoving:Connect(function(plr)
		if Boxes[plr] then
			Boxes[plr]:Remove()
			Boxes[plr] = nil
		end
		if DistanceTexts[plr] then
			DistanceTexts[plr]:Remove()
			DistanceTexts[plr] = nil
		end
		if NameTexts[plr] then
			NameTexts[plr]:Remove()
			NameTexts[plr] = nil
		end
	end)
end
coroutine.wrap(QMYZ_fake_script)()

local function VHLFOXD_fake_script()
	-- CloseGUI.LocalScript
	local script = Instance.new('LocalScript', CloseGUI)

	local button = script.Parent
	local gui = button:FindFirstAncestorOfClass("ScreenGui")
	
	button.MouseButton1Click:Connect(function()
		gui.Enabled = false
	end)
end
coroutine.wrap(VHLFOXD_fake_script)()

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: