Simple Evil GUI
Key RequiredUniversal

Simple Evil GUI

Universal ScriptThaiExploiterThaiExploiter 5.6K views 115 executesUpdated Jul 12, 2025
5.0/ 5(1 votes)
10100% Positive
Lua Script•339 lines (9903 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local StarterGui = game:GetService("StarterGui")

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local Camera = workspace.CurrentCamera

local ScreenGui = Instance.new("ScreenGui", PlayerGui)
ScreenGui.Name = "UltimateUtilityGUI"
ScreenGui.ResetOnSpawn = false


local function makeDraggable(frame)
	local dragging, offset
	frame.InputBegan:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1 then
			dragging = true
			offset = Vector2.new(input.Position.X - frame.Position.X.Offset, input.Position.Y - frame.Position.Y.Offset)
		end
	end)
	UserInputService.InputEnded:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
	end)
	UserInputService.InputChanged:Connect(function(input)
		if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
			frame.Position = UDim2.new(0, input.Position.X - offset.X, 0, input.Position.Y - offset.Y)
		end
	end)
end

local MainFrame = Instance.new("Frame", ScreenGui)
MainFrame.Size = UDim2.new(0, 220, 0, 370)
MainFrame.Position = UDim2.new(0, 50, 0.5, -150)
MainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
MainFrame.Name = "MainGUI"
makeDraggable(MainFrame)

local UIList = Instance.new("UIListLayout", MainFrame)
UIList.Padding = UDim.new(0, 5)
UIList.FillDirection = Enum.FillDirection.Vertical
UIList.HorizontalAlignment = Enum.HorizontalAlignment.Center
UIList.SortOrder = Enum.SortOrder.LayoutOrder


local function makeButton(name, callback)
	local b = Instance.new("TextButton", MainFrame)
	b.Size = UDim2.new(0, 200, 0, 40)
	b.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
	b.TextColor3 = Color3.new(1,1,1)
	b.TextScaled = true
	b.Text = name
	b.MouseButton1Click:Connect(callback)
end


local espOn = false
local espObjs = {}

local function clearESP()
	for _, e in pairs(espObjs) do
		if e and e.Parent then e:Destroy() end
	end
	table.clear(espObjs)
end

local function applyESP(player)
	if player == LocalPlayer then return end
	local char = player.Character
	if not char or not char:FindFirstChild("Head") then return end

	for _, part in pairs(char:GetDescendants()) do
		if part:IsA("BasePart") or part:IsA("Accessory") then
			pcall(function()
				part.Color = Color3.new(0, 0, 0)
				part.Material = Enum.Material.SmoothPlastic
			end)
		end
	end

	if not char:FindFirstChild("ESP_Billboard") then
		local bb = Instance.new("BillboardGui")
		bb.Name = "ESP_Billboard"
		bb.Size = UDim2.new(4, 0, 4, 0)
		bb.AlwaysOnTop = true
		bb.Adornee = char:FindFirstChild("Head")
		bb.Parent = char

		local frame = Instance.new("Frame", bb)
		frame.Size = UDim2.new(1, 0, 1, 0)
		frame.BackgroundColor3 = Color3.new(1, 0, 0)
		frame.BackgroundTransparency = 0.5
		frame.BorderSizePixel = 0

		table.insert(espObjs, bb)
	end
end

local function toggleESP(state)
	espOn = state
	clearESP()

	if not state then return end

	for _, p in pairs(Players:GetPlayers()) do applyESP(p) end

	Players.PlayerAdded:Connect(function(p)
		p.CharacterAdded:Connect(function()
			task.wait(1)
			applyESP(p)
		end)
	end)

	for _, p in pairs(Players:GetPlayers()) do
		p.CharacterAdded:Connect(function()
			task.wait(1)
			applyESP(p)
		end)
	end
end

makeButton("ESP Toggle", function()
	espOn = not espOn
	toggleESP(espOn)
end)


makeButton("Click to Teleport", function()
	local tool = Instance.new("Tool")
	tool.RequiresHandle = false
	tool.Name = "ClickTP"
	tool.CanBeDropped = false
	tool.Parent = LocalPlayer.Backpack

	tool.Activated:Connect(function()
		local mouse = LocalPlayer:GetMouse()
		if mouse and mouse.Hit then
			local pos = mouse.Hit.Position
			if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
				LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(pos + Vector3.new(0,3,0))
			end
		end
	end)
end)


makeButton("Set Dash Key", function()
	local keyBind = nil
	local dashGui = Instance.new("ScreenGui", PlayerGui)
	dashGui.Name = "DashPrompt"

	local frame = Instance.new("Frame", dashGui)
	frame.Size = UDim2.new(0, 300, 0, 100)
	frame.Position = UDim2.new(0.5, -150, 0.5, -50)
	frame.BackgroundColor3 = Color3.fromRGB(40,40,40)
	makeDraggable(frame)

	local text = Instance.new("TextLabel", frame)
	text.Size = UDim2.new(1,0,0.5,0)
	text.Text = "Press a key to bind dash"
	text.TextColor3 = Color3.new(1,1,1)
	text.TextScaled = true
	text.BackgroundTransparency = 1

	local closeBtn = Instance.new("TextButton", frame)
	closeBtn.Size = UDim2.new(0, 30, 0, 30)
	closeBtn.Position = UDim2.new(1, -35, 0, 5)
	closeBtn.Text = "X"
	closeBtn.BackgroundColor3 = Color3.fromRGB(150,0,0)
	closeBtn.MouseButton1Click:Connect(function()
		dashGui:Destroy()
	end)

	UserInputService.InputBegan:Connect(function(input, g)
		if not keyBind and input.UserInputType == Enum.UserInputType.Keyboard and not g then
			keyBind = input.KeyCode
			text.Text = "Dash bound to: "..keyBind.Name
		end
	end)

	UserInputService.InputBegan:Connect(function(input, g)
		if g then return end
		if keyBind and input.KeyCode == keyBind then
			local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
			if hrp then
				local dir = LocalPlayer.Character.Humanoid.MoveDirection
				hrp.Velocity = dir.Unit * 150
			end
		end
	end)
end)

makeButton("Loop Bring - perfect for killing", function()
	local bringGUI = Instance.new("Frame", ScreenGui)
	bringGUI.Size = UDim2.new(0, 300, 0, 400)
	bringGUI.Position = UDim2.new(0.5, -150, 0.5, -200)
	bringGUI.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
	makeDraggable(bringGUI)

	local close = Instance.new("TextButton", bringGUI)
	close.Size = UDim2.new(0, 30, 0, 30)
	close.Position = UDim2.new(1, -35, 0, 5)
	close.Text = "X"
	close.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
	close.MouseButton1Click:Connect(function()
		bringGUI:Destroy()
	end)

	local scroll = Instance.new("ScrollingFrame", bringGUI)
	scroll.Size = UDim2.new(1, -20, 1, -60)
	scroll.Position = UDim2.new(0, 10, 0, 50)
	scroll.CanvasSize = UDim2.new(0,0,0,0)
	scroll.ScrollBarThickness = 8
	scroll.BackgroundColor3 = Color3.fromRGB(50, 50, 50)

	local list = Instance.new("UIListLayout", scroll)
	list.SortOrder = Enum.SortOrder.LayoutOrder

	local loopThread = nil
	local loopRunning = false

	local function stopLoop()
		loopRunning = false
		if loopThread then
			task.cancel(loopThread)
			loopThread = nil
		end
	end

	for _, player in pairs(Players:GetPlayers()) do
		if player ~= LocalPlayer then
			local btn = Instance.new("TextButton", scroll)
			btn.Size = UDim2.new(1, -10, 0, 30)
			btn.Text = player.Name
			btn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)

			btn.MouseButton1Click:Connect(function()
				-- Remove existing confirm/cancel if present
				for _, child in pairs(bringGUI:GetChildren()) do
					if child.Name == "ConfirmBtn" or child.Name == "CancelBtn" then
						child:Destroy()
					end
				end

				local confirm = Instance.new("TextButton", bringGUI)
				confirm.Name = "ConfirmBtn"
				confirm.Size = UDim2.new(1, -20, 0, 30)
				confirm.Position = UDim2.new(0, 10, 1, -60)
				confirm.Text = "Confirm?"
				confirm.BackgroundColor3 = Color3.fromRGB(0, 120, 0)

				local cancel = Instance.new("TextButton", bringGUI)
				cancel.Name = "CancelBtn"
				cancel.Size = UDim2.new(1, -20, 0, 30)
				cancel.Position = UDim2.new(0, 10, 1, -30)
				cancel.Text = "Cancel"
				cancel.BackgroundColor3 = Color3.fromRGB(120, 0, 0)

				confirm.MouseButton1Click:Connect(function()
					stopLoop() -- stop existing loop before starting a new one

					loopRunning = true
					loopThread = task.spawn(function()
						while loopRunning and player.Parent and player.Character and LocalPlayer.Character do
							local targetHRP = player.Character:FindFirstChild("HumanoidRootPart")
							local myHRP = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
							if targetHRP and myHRP then
								targetHRP.CFrame = myHRP.CFrame + Vector3.new(2, 0, 0)
							end
							task.wait(0.1)
						end
					end)

					confirm:Destroy()
					cancel:Destroy()
				end)

				cancel.MouseButton1Click:Connect(function()
					stopLoop()
					confirm:Destroy()
					cancel:Destroy()
				end)
			end)
		end
	end

	scroll.CanvasSize = UDim2.new(0, 0, 0, list.AbsoluteContentSize.Y + 10)
end)


makeButton("Chat (Doesn't work lol)", function()
	local chatGui = Instance.new("ScreenGui", PlayerGui)
	local frame = Instance.new("Frame", chatGui)
	frame.Size = UDim2.new(0, 400, 0, 60)
	frame.Position = UDim2.new(0.5, -200, 1, -100)
	frame.BackgroundColor3 = Color3.fromRGB(30,30,30)
	makeDraggable(frame)

	local box = Instance.new("TextBox", frame)
	box.Size = UDim2.new(1, -10, 1, -10)
	box.Position = UDim2.new(0, 5, 0, 5)
	box.PlaceholderText = "Type message..."
	box.TextScaled = true
	box.ClearTextOnFocus = false
	box.TextColor3 = Color3.new(1,1,1)

	box.FocusLost:Connect(function(enter)
		if enter and box.Text ~= "" then
			local say = game:GetService("ReplicatedStorage"):FindFirstChild("DefaultChatSystemChatEvents")
			if say and say:FindFirstChild("SayMessageRequest") then
				say.SayMessageRequest:FireServer(box.Text, "All")
			end
			box.Text = ""
		end
	end)

	local close = Instance.new("TextButton", frame)
	close.Size = UDim2.new(0, 30, 0, 30)
	close.Position = UDim2.new(1, -35, 0, 5)
	close.Text = "X"
	close.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
	close.MouseButton1Click:Connect(function()
		chatGui:Destroy()
	end)
end)

makeButton("Force Reset", function()
	if LocalPlayer.Character then
		LocalPlayer.Character:BreakJoints()
	end
end)

makeButton("Heal", function()
	local char = LocalPlayer.Character
	if char and char:FindFirstChild("Humanoid") then
		char.Humanoid.Health = char.Humanoid.MaxHealth
	end
end)

Features & Information

- Dash ability (custom cool ability incase you need) - Heal button - ESP (simple) - Click TP - Loop bringing - force reset character - Chat (Doesnt work lol) Also if it lacks of feature or still suck. that's because this is simple GUI, not that advance (at least not yet)

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts