FPS GUI REMAKE OPEN SOURCE
Key RequiredUniversal

FPS GUI REMAKE OPEN SOURCE

Universal Scriptsuborbannsuborbann 645 views 69 executesUpdated Nov 19, 2025
Unrated
00
Lua Script•226 lines (7114 chars)
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")
local LP = Players.LocalPlayer
local Cam = Workspace.CurrentCamera
local Mouse = LP:GetMouse()

local ESP_ENABLED = false
local AIMBOT_ACTIVE = false
local JITTER_ENABLED = false
local FOV_ENABLED = false
local GUI_HIDDEN = false

local AIM_SPEED = 0.18
local FOV_RADIUS = 150
local ESP_Objects = {}
local CurrentTarget = nil

local screenGui = Instance.new("ScreenGui", CoreGui)
screenGui.ResetOnSpawn = false

local BUTTON_X = 1
local BUTTON_OFFSET_X = -180

local function CreateButton(text, yOffset)
	local btn = Instance.new("TextButton")
	btn.Size = UDim2.new(0,170,0,32)
	btn.Position = UDim2.new(BUTTON_X, BUTTON_OFFSET_X,0, yOffset)
	btn.BackgroundColor3 = Color3.fromRGB(20,20,20)
	btn.BorderSizePixel = 0
	btn.Text = text
	btn.TextColor3 = Color3.fromRGB(255,255,255)
	btn.Font = Enum.Font.GothamBold
	btn.TextSize = 16
	btn.Parent = screenGui
	Instance.new("UICorner", btn).CornerRadius = UDim.new(0,6)
	return btn
end

local function CreateSlider(yOffset, text, min,max,default)
	local label = Instance.new("TextLabel")
	label.Size = UDim2.new(0,170,0,20)
	label.Position = UDim2.new(BUTTON_X, BUTTON_OFFSET_X,0, yOffset)
	label.BackgroundTransparency = 1
	label.Text = text
	label.TextColor3 = Color3.fromRGB(255,255,255)
	label.Font = Enum.Font.GothamBold
	label.TextSize = 14
	label.Parent = screenGui

	local frame = Instance.new("Frame")
	frame.Size = UDim2.new(0,170,0,32)
	frame.Position = UDim2.new(BUTTON_X, BUTTON_OFFSET_X,0, yOffset + 20 + 2)
	frame.BackgroundColor3 = Color3.fromRGB(20,20,20)
	frame.BorderSizePixel = 0
	frame.Parent = screenGui
	Instance.new("UICorner", frame).CornerRadius = UDim.new(0,6)

	local sliderBar = Instance.new("Frame", frame)
	sliderBar.Size = UDim2.new(1,-20,0,6)
	sliderBar.Position = UDim2.new(0,10,0,13)
	sliderBar.BackgroundColor3 = Color3.fromRGB(100,100,100)
	Instance.new("UICorner", sliderBar).CornerRadius = UDim.new(0,3)

	local slider = Instance.new("Frame", sliderBar)
	slider.Size = UDim2.new((default-min)/(max-min),0,1,0)
	slider.BackgroundColor3 = Color3.fromRGB(255,255,255)
	Instance.new("UICorner", slider).CornerRadius = UDim.new(0,3)

	local dragging = false
	sliderBar.InputBegan:Connect(function(input)
		if input.UserInputType==Enum.UserInputType.MouseButton1 then dragging=true end
	end)
	UIS.InputEnded:Connect(function(input)
		if input.UserInputType==Enum.UserInputType.MouseButton1 then dragging=false end
	end)
	UIS.InputChanged:Connect(function(input)
		if dragging and input.UserInputType==Enum.UserInputType.MouseMovement then
			local pos = math.clamp(input.Position.X - sliderBar.AbsolutePosition.X,0,sliderBar.AbsoluteSize.X)
			slider.Size = UDim2.new(pos/sliderBar.AbsoluteSize.X,0,1,0)
		end
	end)

	return {Frame=frame,Slider=slider,Label=label,Min=min,Max=max,Value=default}
end

local espBtn = CreateButton("ESP: OFF", 10)
local aimbotBtn = CreateButton("AIMBOT: OFF", 50)
local jitterBtn = CreateButton("JITTER: OFF", 90)
local fovBtn = CreateButton("FOV: OFF", 130)

local speedSlider = CreateSlider(180,"Aim Speed",0.1,1.0,AIM_SPEED)
local fovSlider = CreateSlider(240,"FOV Radius",30,300,FOV_RADIUS)

local hasTeams = false
local function checkTeams()
	hasTeams = false
	for _, plr in ipairs(Players:GetPlayers()) do
		if plr.Team then hasTeams = true break end
	end
end
checkTeams()
Players.PlayerAdded:Connect(checkTeams)
Players.PlayerRemoving:Connect(checkTeams)

local function ClearESP()
	for _, h in ipairs(ESP_Objects) do h:Destroy() end
	ESP_Objects = {}
end

local function CreateESP(plr,highlightColor)
	if plr==LP or not plr.Character then return end
	local h = Instance.new("Highlight")
	h.Adornee = plr.Character
	h.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
	h.FillTransparency = highlightColor and 0.5 or 1
	h.OutlineTransparency = 0
	if hasTeams then
		h.FillColor = plr.TeamColor.Color
		h.OutlineColor = plr.TeamColor.Color:lerp(Color3.new(1,1,1),0.5)
	else
		h.FillColor = Color3.fromRGB(150,150,150)
		h.OutlineColor = Color3.fromRGB(255,255,255)
	end
	if highlightColor then
		h.FillColor = Color3.fromRGB(255,0,0)
		h.OutlineColor = Color3.fromRGB(255,0,0)
	end
	h.Parent = CoreGui
	table.insert(ESP_Objects,h)
end

local function UpdateESP(highlightTarget)
	ClearESP()
	if ESP_ENABLED then
		for _, p in ipairs(Players:GetPlayers()) do
			CreateESP(p, p==highlightTarget)
		end
	end
end

local function GetClosestPlayer()
	local nearest = nil
	local shortest = math.huge
	for _, plr in ipairs(Players:GetPlayers()) do
		if plr~=LP and plr.Character and plr.Character:FindFirstChild("Head") then
			local part = plr.Character.Head
			local screen, onScreen = Cam:WorldToViewportPoint(part.Position)
			if onScreen then
				local dist = (Vector2.new(Mouse.X,Mouse.Y)-Vector2.new(screen.X,screen.Y)).Magnitude
				if dist<shortest and dist<=FOV_RADIUS then
					shortest=dist
					nearest=plr
				end
			end
		end
	end
	return nearest
end

aimbotBtn.MouseButton1Click:Connect(function() end)

espBtn.MouseButton1Click:Connect(function()
	ESP_ENABLED = not ESP_ENABLED
	espBtn.Text = "ESP: "..(ESP_ENABLED and "ON" or "OFF")
	UpdateESP()
end)

jitterBtn.MouseButton1Click:Connect(function()
	JITTER_ENABLED = not JITTER_ENABLED
	jitterBtn.Text = "JITTER: "..(JITTER_ENABLED and "ON" or "OFF")
end)

fovBtn.MouseButton1Click:Connect(function()
	FOV_ENABLED = not FOV_ENABLED
	fovBtn.Text = "FOV: "..(FOV_ENABLED and "ON" or "OFF")
end)

UIS.InputBegan:Connect(function(input, gp)
	if gp then return end
	if input.KeyCode==Enum.KeyCode.E then
		AIMBOT_ACTIVE = true
	elseif input.KeyCode == Enum.KeyCode.RightShift then
		GUI_HIDDEN = not GUI_HIDDEN
		screenGui.Enabled = not GUI_HIDDEN
	end
end)

UIS.InputEnded:Connect(function(input)
	if input.KeyCode==Enum.KeyCode.E then
		AIMBOT_ACTIVE = false
		UpdateESP()
	end
end)

local fovCircle = Drawing.new("Circle")
fovCircle.Color = Color3.fromRGB(255,255,255)
fovCircle.Thickness = 2
fovCircle.NumSides = 100
fovCircle.Radius = FOV_RADIUS
fovCircle.Visible = false

RunService.RenderStepped:Connect(function(dt)
	local speedRatio = speedSlider.Slider.AbsoluteSize.X/ speedSlider.Frame.AbsoluteSize.X
	AIM_SPEED = speedSlider.Min + speedRatio * (speedSlider.Max - speedSlider.Min)

	local fovRatio = fovSlider.Slider.AbsoluteSize.X/ fovSlider.Frame.AbsoluteSize.X
	FOV_RADIUS = fovSlider.Min + fovRatio * (fovSlider.Max - fovSlider.Min)

	fovCircle.Visible = FOV_ENABLED
	fovCircle.Position = Vector2.new(Mouse.X,Mouse.Y)
	fovCircle.Radius = FOV_RADIUS

	local targetPlr = AIMBOT_ACTIVE and GetClosestPlayer()
	UpdateESP(targetPlr)
	if targetPlr and targetPlr.Character and targetPlr.Character:FindFirstChild("Head") then
		Cam.CFrame = Cam.CFrame:Lerp(CFrame.new(Cam.CFrame.Position, targetPlr.Character.Head.Position), AIM_SPEED)
		if JITTER_ENABLED then
			local a1 = math.rad(math.random(-3,3))
			local a2 = math.rad(math.random(-3,3))
			Cam.CFrame = Cam.CFrame * CFrame.Angles(a1,a2,0)
		end
	end
end)

Features & Information

Aimbot (hold e), ESP, jitter, fov circle
#fps gui#aimbot

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts