-- // SERVICES \\ --
local Players = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local localPlayer = Players.LocalPlayer
local camera = workspace.CurrentCamera
-- // SETTINGS \\ --
local settings = {
espEnabled = false,
aimEnabled = false,
fov = 1000,
aimPart = "HumanoidRootPart"
}
-- Storage to prevent duplicate ESPs
local activeVisuals = {}
-- // UI SETUP \\ --
local screenGui = Instance.new("ScreenGui", CoreGui)
screenGui.Name = "PersistentHub_v11"
local mainFrame = Instance.new("Frame", screenGui)
mainFrame.Size = UDim2.new(0, 180, 0, 160)
mainFrame.Position = UDim2.new(0.5, -90, 0.2, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
mainFrame.Active = true
mainFrame.Draggable = true
Instance.new("UICorner", mainFrame)
local function createToggle(text, pos, callback)
local btn = Instance.new("TextButton", mainFrame)
btn.Size = UDim2.new(1, -20, 0, 35)
btn.Position = pos
btn.Text = text .. ": OFF"
btn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
btn.TextColor3 = Color3.new(1, 1, 1)
btn.Font = Enum.Font.GothamBold
Instance.new("UICorner", btn)
btn.MouseButton1Click:Connect(function()
local state = callback()
btn.Text = text .. (state and ": ON" or ": OFF")
btn.BackgroundColor3 = state and Color3.fromRGB(0, 180, 0) or Color3.fromRGB(180, 0, 0)
end)
end
-- // THE CORE ESP "GLOW" FUNCTION \\ --
local function applyGlow(player)
if player == localPlayer then return end
local function setup(char)
-- Wait for the body to exist
local root = char:WaitForChild("HumanoidRootPart", 10) or char:WaitForChild("Head", 10)
if not root then return end
-- Remove old ESP if it exists
if activeVisuals[player] then
for _, obj in pairs(activeVisuals[player]) do
if obj then obj:Destroy() end
end
end
activeVisuals[player] = {}
-- 1. THE GLOW (Highlight)
local hl = Instance.new("Highlight")
hl.Name = "OmniGlow"
hl.FillColor = Color3.fromRGB(255, 0, 0)
hl.OutlineColor = Color3.new(1, 1, 1)
hl.FillTransparency = 0.4
hl.OutlineTransparency = 0
hl.Enabled = settings.espEnabled
hl.Parent = char
table.insert(activeVisuals[player], hl)
-- 2. THE STUDS (Billboard)
local bGui = Instance.new("BillboardGui")
bGui.Name = "OmniStuds"
bGui.Size = UDim2.new(0, 100, 0, 30)
bGui.AlwaysOnTop = true
bGui.StudsOffset = Vector3.new(0, 3, 0)
bGui.Enabled = settings.espEnabled
bGui.Parent = root
local lbl = Instance.new("TextLabel", bGui)
lbl.Size = UDim2.new(1, 0, 1, 0)
lbl.BackgroundTransparency = 1
lbl.TextColor3 = Color3.new(1, 1, 1)
lbl.Font = Enum.Font.GothamBold
lbl.TextSize = 14
lbl.Text = "Updating..."
table.insert(activeVisuals[player], bGui)
end
player.CharacterAdded:Connect(setup)
if player.Character then task.spawn(setup, player.Character) end
end
-- // RENDER LOOP (AIMBOT + DISTANCE) \\ --
RunService.RenderStepped:Connect(function()
-- Update Studs Distance
if settings.espEnabled and localPlayer.Character and localPlayer.Character:FindFirstChild("HumanoidRootPart") then
local myPos = localPlayer.Character.HumanoidRootPart.Position
for player, visuals in pairs(activeVisuals) do
local char = player.Character
if char and char:FindFirstChild("HumanoidRootPart") then
local label = visuals[2] and visuals[2]:FindFirstChildOfClass("TextLabel")
if label then
local d = math.floor((myPos - char.HumanoidRootPart.Position).Magnitude)
label.Text = d .. " studs"
end
end
end
end
-- Rage Aimbot Logic
if settings.aimEnabled and UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then
local closestPos = nil
local shortestDist = settings.fov
local mousePos = UserInputService:GetMouseLocation()
for _, p in pairs(Players:GetPlayers()) do
if p ~= localPlayer and p.Character then
local root = p.Character:FindFirstChild(settings.aimPart) or p.Character:FindFirstChild("Head")
if root then
local screenPos, onScreen = camera:WorldToViewportPoint(root.Position)
if onScreen then
local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude
if dist < shortestDist then
closestPos = screenPos
shortestDist = dist
end
end
end
end
end
if closestPos and mousemoverel then
mousemoverel(closestPos.X - mousePos.X, closestPos.Y - mousePos.Y)
end
end
end)
-- // BUTTONS \\ --
createToggle("GLOW ESP", UDim2.new(0, 10, 0, 15), function()
settings.espEnabled = not settings.espEnabled
for _, visuals in pairs(activeVisuals) do
for _, obj in pairs(visuals) do obj.Enabled = settings.espEnabled end
end
return settings.espEnabled
end)
createToggle("RAGE AIM", UDim2.new(0, 10, 0, 60), function()
settings.aimEnabled = not settings.aimEnabled
return settings.aimEnabled
end)
local dBtn = Instance.new("TextButton", mainFrame)
dBtn.Size = UDim2.new(1, -20, 0, 35); dBtn.Position = UDim2.new(0, 10, 0, 105)
dBtn.Text = "DESTROY"; dBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 40); dBtn.TextColor3 = Color3.new(1, 1, 1)
dBtn.MouseButton1Click:Connect(function() screenGui:Destroy() end)
Instance.new("UICorner", dBtn)
-- // THE "ALWAYS-ON" SCANNER \\ --
-- This loop runs every 2 seconds to catch anyone the script missed
task.spawn(function()
while task.wait(2) do
for _, p in pairs(Players:GetPlayers()) do
if p ~= localPlayer and p.Character then
-- Check if they are missing a Highlight
if not p.Character:FindFirstChild("OmniGlow") then
applyGlow(p)
end
end
end
end
end)
-- Initial Startup
for _, p in pairs(Players:GetPlayers()) do applyGlow(p) end
Players.PlayerAdded:Connect(applyGlow)
Comments
No comments yet
Be the first to share your thoughts!