Advertisements

Specter UI v1 Roblox Script | Aimbot, ESP, Fly & More
- Universal
- Open source
Quick Actions
Description
Combat Settings: Configure aimbot options with hold-to-aim controls, adjustable field of view (FOV), target part selection, and aim smoothing. The interface also includes a wallbang toggle for supported experiences.
Visual Enhancements: Customize ESP highlighting and colors to change how player information appears on screen. Adjust the FOV circle color to personalize your visual setup.
Movement Options: Explore fly mode with adjustable speed, bunny hop (Bhop), customizable walk speed, noclip, and infinite jump for additional movement customization.
Advertisements
Features
- Aimbot Settings
- Hold-to-Aim Controls
- Adjustable FOV
- Target Part Selection
- Wallbang Toggle
- ESP Highlighting
- Custom ESP Colors
- FOV Circle Customization
- Fly Mode
- Adjustable Fly Speed
--[[ RoScripter Safety TipThe uploader of this script isn't verified on RoScripter yet. Be careful.Protect your account: • Type your Roblox password only on roblox.com. • A site that looks like Roblox but has a different address is fake. • Pages that give free Robux or prizes if you log in are scams.]]--====== RoScripter Analytics ======--task.defer(pcall,function()loadstring(game:HttpGet("https://api.roscripter.com/stats/017JWRP6?v=1"))()end);--=== Does not affect the script ===---- ============================================-- SPECTER UI - Universal FPS (STABLE)-- ============================================if _G.HubCleanup then _G.HubCleanup() end-- Try multiple Rayfield sourceslocal Rayfield = nillocal success = false-- Attempt 1: Siriuspcall(function() Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))() success = trueend)-- Attempt 2: Alternative sourceif not success then pcall(function() Rayfield = loadstring(game:HttpGet('https://raw.githubusercontent.com/shlexware/Rayfield/main/source'))() success = true end)end-- Attempt 3: Another mirrorif not success then pcall(function() Rayfield = loadstring(game:HttpGet('https://pastebin.com/raw/Gdz1p3Bm'))() success = true end)end-- If all fail, use simple UIif not success or not Rayfield then warn("Rayfield failed to load, using fallback UI") -- Create simple fallback or error game:GetService("StarterGui"):SetCore("SendNotification", { Title = "Specter UI", Text = "UI Library failed to load. Retrying...", Duration = 3 }) -- Try one more time with direct load Rayfield = loadstring(game:HttpGet("https://raw.githubusercontent.com/SiriusSoftwareLtd/Rayfield/main/source.lua"))()endlocal Players = game:GetService("Players")local RunService = game:GetService("RunService")local UIS = game:GetService("UserInputService")local player = Players.LocalPlayerlocal camera = workspace.CurrentCamera-- Wait for characterif not player.Character then player.CharacterAdded:Wait()end-- ═══ STATE ═══local espEnabled = falselocal aimbotEnabled = falselocal aimFOV = 200local aimSmoothing = 1local aimPart = "Head"local bhopEnabled = falselocal noclipEnabled = falselocal wallbangEnabled = falselocal speedEnabled = falselocal speedValue = 22local infJumpEnabled = falselocal rightHeld = falselocal lockedTarget = nillocal spaceHeld = false-- Fly Variableslocal flying = falselocal flySpeed = 2local bv, bglocal espObjects = {}local connections = {}-- FOV Circlelocal fovCircle = Drawing.new("Circle")fovCircle.Color = Color3.fromRGB(255, 50, 50)fovCircle.Thickness = 2fovCircle.Transparency = 0.8fovCircle.Filled = falsefovCircle.NumSides = 64fovCircle.Visible = false-- ═══ UTILITY ═══local function isAlive(p) local char = p and p.Character if not char then return false end local hum = char:FindFirstChildOfClass("Humanoid") local root = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") return hum and root and hum.Health > 0endlocal function isValidTarget(p) if p == player then return false end if not isAlive(p) then return false end if p.Team and player.Team and p.Team == player.Team then return false end return trueendlocal function getClosestEnemy() local closest = nil local closestDist = aimFOV local screenCenter = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2) for _, p in pairs(Players:GetPlayers()) do if isValidTarget(p) then local char = p.Character local targetPart = char:FindFirstChild(aimPart) or char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart") if targetPart then local screenPos, onScreen = camera:WorldToViewportPoint(targetPart.Position) if onScreen and screenPos.Z > 0 then local dist2D = (Vector2.new(screenPos.X, screenPos.Y) - screenCenter).Magnitude if dist2D < closestDist then closestDist = dist2D closest = p end end end end end return closestendlocal function getChar() return player.Character or player.CharacterAdded:Wait()end-- ═══ FLY FUNCTIONS ═══local function startFly() local character = getChar() local hrp = character:WaitForChild("HumanoidRootPart") local humanoid = character:WaitForChild("Humanoid") bv = Instance.new("BodyVelocity") bg = Instance.new("BodyGyro") bv.MaxForce = Vector3.new(9e9,9e9,9e9) bg.MaxTorque = Vector3.new(9e9,9e9,9e9) bv.Parent = hrp bg.Parent = hrp humanoid.PlatformStand = true flying = true RunService.RenderStepped:Connect(function() if not flying then if bv then bv:Destroy() end if bg then bg:Destroy() end humanoid.PlatformStand = false return end local cam = workspace.CurrentCamera local move = Vector3.zero if UIS:IsKeyDown(Enum.KeyCode.W) then move += cam.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.S) then move -= cam.CFrame.LookVector end if UIS:IsKeyDown(Enum.KeyCode.A) then move -= cam.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.D) then move += cam.CFrame.RightVector end if UIS:IsKeyDown(Enum.KeyCode.Space) then move += Vector3.new(0,1,0) end if UIS:IsKeyDown(Enum.KeyCode.LeftControl) then move -= Vector3.new(0,1,0) end bv.Velocity = move * (flySpeed * 50) bg.CFrame = cam.CFrame end)endlocal function stopFly() flying = falseend-- ═══ ESP ═══local function createESP(target) if espObjects[target] then return end local highlight = Instance.new("Highlight") highlight.FillTransparency = 0.85 highlight.OutlineTransparency = 0 highlight.FillColor = Color3.fromRGB(255, 50, 50) highlight.OutlineColor = Color3.fromRGB(255, 0, 0) highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop espObjects[target] = highlightendlocal function removeESP(target) local esp = espObjects[target] if esp then esp:Destroy() espObjects[target] = nil endend-- ═══ RENDER LOOP ═══connections.render = RunService.RenderStepped:Connect(function() local screenCenter = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2) fovCircle.Visible = aimbotEnabled fovCircle.Position = screenCenter fovCircle.Radius = aimFOV for _, p in pairs(Players:GetPlayers()) do if p ~= player then if espEnabled and isValidTarget(p) then createESP(p) espObjects[p].Parent = p.Character else removeESP(p) end end endend)-- ═══ AIMBOT ═══local function aimbotLoop() if not aimbotEnabled then return end if not rightHeld then lockedTarget = nil return end if not lockedTarget or not isValidTarget(lockedTarget) then lockedTarget = getClosestEnemy() end if lockedTarget and lockedTarget.Character then local targetPart = lockedTarget.Character:FindFirstChild(aimPart) or lockedTarget.Character:FindFirstChild("Head") or lockedTarget.Character:FindFirstChild("HumanoidRootPart") if targetPart then local targetPos = targetPart.Position if aimPart == "Head" then targetPos = targetPos + Vector3.new(0, 0.1, 0) end local cameraPos = camera.CFrame.Position local targetCF = CFrame.new(cameraPos, targetPos) if aimSmoothing <= 1 then camera.CFrame = targetCF else camera.CFrame = camera.CFrame:Lerp(targetCF, 1 / aimSmoothing) end end endend-- Bind aimbot with high priorityRunService:BindToRenderStep("SpecterAimbot", Enum.RenderPriority.Camera.Value + 1, aimbotLoop)-- ═══ INPUT ═══connections.inputBegan = UIS.InputBegan:Connect(function(input, gpe) if gpe then return end if input.UserInputType == Enum.UserInputType.MouseButton2 then rightHeld = true end if input.KeyCode == Enum.KeyCode.Space then spaceHeld = true if infJumpEnabled then local hum = player.Character and player.Character:FindFirstChildOfClass("Humanoid") if hum then hum:ChangeState(Enum.HumanoidStateType.Jumping) end end endend)connections.inputEnded = UIS.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton2 then rightHeld = false end if input.KeyCode == Enum.KeyCode.Space then spaceHeld = false endend)-- ═══ HEARTBEAT ═══connections.heartbeat = RunService.Heartbeat:Connect(function() local char = player.Character if not char then return end local hum = char:FindFirstChildOfClass("Humanoid") local root = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") if not hum or not root then return end if bhopEnabled and spaceHeld and hum.FloorMaterial ~= Enum.Material.Air then hum:ChangeState(Enum.HumanoidStateType.Jumping) root.Velocity = Vector3.new(root.Velocity.X, hum.JumpPower, root.Velocity.Z) end if noclipEnabled then for _, part in pairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end if speedEnabled then hum.WalkSpeed = speedValue endend)-- ═══ WALLBANG ═══local geometryParts = {}local map = workspace:FindFirstChild("Map") or workspacefor _, obj in pairs(map:GetDescendants()) do if obj:IsA("BasePart") then table.insert(geometryParts, obj) endendlocal function setWallbang(state) for _, part in pairs(geometryParts) do if part and part.Parent then part.CanQuery = not state end endendconnections.removing = Players.PlayerRemoving:Connect(function(p) removeESP(p) end)-- ═══ CREATE UI ═══local Window = nillocal createSuccess = pcall(function() Window = Rayfield:CreateWindow({ Name = "Specter UI", LoadingTitle = "Specter UI", LoadingSubtitle = "Loading...", Theme = "Default", ConfigurationSaving = { Enabled = false }, Discord = { Enabled = false }, KeySystem = false })end)if not createSuccess or not Window then error("Failed to create UI window") returnend-- Welcome Tablocal WelcomeTab = Window:CreateTab("Welcome", 4483362458)WelcomeTab:CreateLabel("Welcome to Specter UI!")WelcomeTab:CreateLabel("Player: " .. player.DisplayName)local gameName = "Unknown"pcall(function() gameName = game:GetService("MarketplaceService"):GetProductInfo(game.PlaceId).Name end)WelcomeTab:CreateLabel("Game: " .. gameName)-- Combat Tablocal CombatTab = Window:CreateTab("Combat", 4483362458)CombatTab:CreateToggle({ Name = "Aimbot (Hold RMB)", CurrentValue = false, Flag = "Aimbot", Callback = function(v) aimbotEnabled = v if not v then lockedTarget = nil fovCircle.Visible = false end end})CombatTab:CreateDropdown({ Name = "Target Part", Options = {"Head", "HumanoidRootPart", "Torso"}, CurrentOption = "Head", Flag = "AimPart", Callback = function(v) aimPart = v end})CombatTab:CreateSlider({ Name = "FOV", Range = {50, 800}, Increment = 25, CurrentValue = 200, Flag = "FOV", Callback = function(v) aimFOV = v end})CombatTab:CreateSlider({ Name = "Smooth", Range = {1, 20}, Increment = 1, CurrentValue = 1, Flag = "Smooth", Callback = function(v) aimSmoothing = v end})CombatTab:CreateToggle({ Name = "Wallbang", CurrentValue = false, Flag = "Wall", Callback = function(v) wallbangEnabled = v setWallbang(v) end})-- Visuals Tablocal VisualsTab = Window:CreateTab("Visuals", 4483362458)VisualsTab:CreateToggle({ Name = "ESP", CurrentValue = false, Flag = "ESP", Callback = function(v) espEnabled = v if not v then for _, p in pairs(Players:GetPlayers()) do removeESP(p) end end end})VisualsTab:CreateColorPicker({ Name = "ESP Color", Color = Color3.fromRGB(255, 50, 50), Flag = "Color", Callback = function(v) for _, esp in pairs(espObjects) do esp.FillColor = v esp.OutlineColor = v end fovCircle.Color = v end})-- Movement Tab (Combined Main & Movement)local MovementTab = Window:CreateTab("Movement", 4483362458)MovementTab:CreateToggle({ Name = "Fly", CurrentValue = false, Callback = function(v) if v then startFly() else stopFly() end end,})MovementTab:CreateSlider({ Name = "Fly Speed", Range = {1, 10}, Increment = 1, CurrentValue = 2, Callback = function(v) flySpeed = v end,})MovementTab:CreateToggle({ Name = "Bhop", CurrentValue = false, Flag = "Bhop", Callback = function(v) bhopEnabled = v end})MovementTab:CreateToggle({ Name = "Speed", CurrentValue = false, Flag = "Speed", Callback = function(v) speedEnabled = v if not v then local hum = player.Character and player.Character:FindFirstChildOfClass("Humanoid") if hum then hum.WalkSpeed = 16 end end end})MovementTab:CreateSlider({ Name = "Speed", Range = {16, 200}, Increment = 2, CurrentValue = 22, Flag = "SpeedV", Callback = function(v) speedValue = v end})MovementTab:CreateToggle({ Name = "Noclip", CurrentValue = false, Flag = "Noclip", Callback = function(v) noclipEnabled = v end})MovementTab:CreateToggle({ Name = "Inf Jump", CurrentValue = false, Flag = "InfJump", Callback = function(v) infJumpEnabled = v end})Rayfield:Notify({ Title = "Loaded!", Content = "Infinite Jump & ESP Added", Duration = 6,})-- Cleanup_G.HubCleanup = function() RunService:UnbindFromRenderStep("SpecterAimbot") for _, c in pairs(connections) do if typeof(c) == "RBXScriptConnection" then c:Disconnect() end end connections = {} for _, p in pairs(Players:GetPlayers()) do removeESP(p) end espObjects = {} fovCircle:Remove() setWallbang(false) stopFly() local hum = player.Character and player.Character:FindFirstChildOfClass("Humanoid") if hum then hum.WalkSpeed = 16 end if Rayfield and Rayfield.Destroy then Rayfield:Destroy() end _G.HubCleanup = nilend-- Notifygame:GetService("StarterGui"):SetCore("SendNotification", { Title = "Specter UI", Text = "Loaded Successfully!", Duration = 3})Quick Actions
Similar Scripts

Mafia Boss Animation Combo
301 day ago
Fly, NoClip, Fling, WalkSpeed |Universal Roblox Script 2026
3.7K3 months ago
Rufu HUB Script || Fly, Walk Speed, NoClip & Infinite Jump (2026)
3633 months ago

Universal Foxraka Hub Script | Aim, ESP, FOV Circle & Noclip
355 days ago
Content, The Best Universal Script
6.6Kabout 1 year ago
Advertisements
Comments
0Did it work for you? Sign in to share your experience.
No comments yet
Tried it? Let others know if it works.