-- Spike Scripts | Ultimate Universal Hub v4.2 (Manual Refresh + Mode Switcher + Toggle UI) local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Camera = workspace.CurrentCamera -- Clear Old UI if PlayerGui:FindFirstChild("SpikeProHub") then PlayerGui.SpikeProHub:Destroy() end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "SpikeProHub" ScreenGui.Parent = PlayerGui ScreenGui.ResetOnSpawn = false ScreenGui.DisplayOrder = 999 -- Setting Variables local aimOn = false local espOn = false local wallCheckOn = false local aimbotLineOn = false local fovSize = 150 local fovThickness = 1.5 local smoothValue = 0.15 local rainbowOn = false local targetModeIndex = 1 local targetModes = {"Closest in FOV", "Closest Overall (Direct)"} -- FOV Position Mode: "MOBILE" (Screen Center) or "PC" (Mouse Cursor) local fovPositionMode = (UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled) and "MOBILE" or "PC" -- FOV Color List + Rainbow local fovColors = { {name = "Green", color = Color3.fromRGB(0, 255, 127)}, {name = "Red", color = Color3.fromRGB(255, 50, 50)}, {name = "Blue", color = Color3.fromRGB(50, 150, 255)}, {name = "Purple", color = Color3.fromRGB(180, 50, 255)}, {name = "White", color = Color3.fromRGB(255, 255, 255)}, {name = "Rainbow", color = "RAINBOW"} } local currentColorIndex = 1 -- Drawings local FOVCircle, AimbotLine pcall(function() FOVCircle = Drawing.new("Circle") FOVCircle.Visible = false FOVCircle.Transparency = 0.7 FOVCircle.Thickness = fovThickness FOVCircle.Color = fovColors[currentColorIndex].color FOVCircle.Filled = false FOVCircle.Radius = fovSize AimbotLine = Drawing.new("Line") AimbotLine.Visible = false AimbotLine.Transparency = 0.7 AimbotLine.Thickness = 1.5 AimbotLine.Color = Color3.fromRGB(255, 255, 255) end) -- 1. Floating Toggle Button local ToggleButton = Instance.new("TextButton") ToggleButton.Parent = ScreenGui ToggleButton.BackgroundColor3 = Color3.fromRGB(20, 20, 30) ToggleButton.Position = UDim2.new(0, 20, 0.4, 0) ToggleButton.Size = UDim2.new(0, 50, 0, 50) ToggleButton.TextColor3 = Color3.fromRGB(0, 255, 127) ToggleButton.TextSize = 18 ToggleButton.Font = Enum.Font.GothamBold ToggleButton.Text = "⚡" ToggleButton.Active = true ToggleButton.Draggable = true local ToggleCorner = Instance.new("UICorner") ToggleCorner.CornerRadius = UDim.new(1, 0) ToggleCorner.Parent = ToggleButton local ToggleStroke = Instance.new("UIStroke") ToggleStroke.Parent = ToggleButton ToggleStroke.Color = Color3.fromRGB(0, 255, 127) ToggleStroke.Thickness = 2 -- 2. Main Menu Window local Main = Instance.new("Frame") Main.Parent = ScreenGui Main.BackgroundColor3 = Color3.fromRGB(15, 15, 20) Main.Position = UDim2.new(0.5, -210, 0.5, -270) Main.Size = UDim2.new(0, 420, 0, 540) Main.Active = true Main.Draggable = true Main.Visible = true ToggleButton.MouseButton1Click:Connect(function() Main.Visible = not Main.Visible end) local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 16) MainCorner.Parent = Main local MainStroke = Instance.new("UIStroke") MainStroke.Parent = Main MainStroke.Color = Color3.fromRGB(40, 40, 60) MainStroke.Thickness = 2 -- Top Bar local TopBar = Instance.new("Frame") TopBar.Parent = Main TopBar.Size = UDim2.new(1, 0, 0, 50) TopBar.BackgroundColor3 = Color3.fromRGB(22, 22, 30) local TopBarCorner = Instance.new("UICorner") TopBarCorner.CornerRadius = UDim.new(0, 16) TopBarCorner.Parent = TopBar local FixFrame = Instance.new("Frame") FixFrame.Parent = TopBar FixFrame.BackgroundColor3 = Color3.fromRGB(22, 22, 30) FixFrame.Position = UDim2.new(0, 0, 0.5, 0) FixFrame.Size = UDim2.new(1, 0, 0.5, 0) FixFrame.BorderSizePixel = 0 local Title = Instance.new("TextLabel") Title.Parent = TopBar Title.Size = UDim2.new(1, -20, 1, 0) Title.Position = UDim2.new(0, 15, 0, 0) Title.BackgroundTransparency = 1 Title.TextColor3 = Color3.fromRGB(0, 255, 127) Title.TextSize = 16 Title.Font = Enum.Font.GothamBold Title.Text = "⚡ Spike Scripts | Pro Hub v4.2" Title.TextXAlignment = Enum.TextXAlignment.Left -- Scroll Container local Container = Instance.new("ScrollingFrame") Container.Parent = Main Container.BackgroundTransparency = 1 Container.Position = UDim2.new(0, 15, 0, 65) Container.Size = UDim2.new(1, -30, 1, -75) Container.CanvasSize = UDim2.new(0, 0, 0, 780) Container.ScrollBarThickness = 4 Container.ScrollBarImageColor3 = Color3.fromRGB(0, 255, 127) local UIList = Instance.new("UIListLayout") UIList.Parent = Container UIList.SortOrder = Enum.SortOrder.LayoutOrder UIList.Padding = UDim.new(0, 10) -- Button Builder local function CreateButton(text, defaultColor, callback) local btn = Instance.new("TextButton") btn.Parent = Container btn.BackgroundColor3 = defaultColor btn.Size = UDim2.new(1, 0, 0, 45) btn.TextColor3 = Color3.fromRGB(240, 240, 240) btn.TextSize = 14 btn.Font = Enum.Font.GothamMedium btn.Text = text local bc = Instance.new("UICorner") bc.CornerRadius = UDim.new(0, 10) bc.Parent = btn local stroke = Instance.new("UIStroke") stroke.Parent = btn stroke.Color = Color3.fromRGB(50, 50, 70) stroke.Thickness = 1 btn.MouseButton1Click:Connect(function() callback(btn) end) return btn end -- ESP Functions local function ApplyESPToCharacter(char) if not char then return end for _, v in ipairs(char:GetChildren()) do if v.Name == "SpikeRealESP" then v:Destroy() end end local h = Instance.new("Highlight") h.Name = "SpikeRealESP" h.Adornee = char h.FillColor = Color3.fromRGB(255, 30, 30) h.OutlineColor = Color3.fromRGB(255, 255, 255) h.FillTransparency = 0.4 h.OutlineTransparency = 0 h.Parent = char end local function RefreshAllESP() for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character then ApplyESPToCharacter(p.Character) end end end -- Menu Buttons CreateButton("ESP (Auto Refresh): OFF", Color3.fromRGB(25, 25, 35), function(btn) espOn = not espOn btn.Text = espOn and "ESP (Auto Refresh): ON" or "ESP (Auto Refresh): OFF" btn.BackgroundColor3 = espOn and Color3.fromRGB(0, 130, 60) or Color3.fromRGB(25, 25, 35) if espOn then RefreshAllESP() else for _, p in ipairs(Players:GetPlayers()) do if p.Character then for _, v in ipairs(p.Character:GetChildren()) do if v.Name == "SpikeRealESP" then v:Destroy() end end end end end end) CreateButton("🔄 Manual ESP Refresh", Color3.fromRGB(50, 50, 80), function() RefreshAllESP() end) CreateButton("Aimbot: OFF", Color3.fromRGB(25, 25, 35), function(btn) aimOn = not aimOn btn.Text = aimOn and "Aimbot: ON" or "Aimbot: OFF" btn.BackgroundColor3 = aimOn and Color3.fromRGB(0, 130, 60) or Color3.fromRGB(25, 25, 35) if FOVCircle then FOVCircle.Visible = aimOn end if AimbotLine and not aimOn then AimbotLine.Visible = false end end) CreateButton("Aimbot Line: OFF", Color3.fromRGB(25, 25, 35), function(btn) aimbotLineOn = not aimbotLineOn btn.Text = aimbotLineOn and "Aimbot Line: ON" or "Aimbot Line: OFF" btn.BackgroundColor3 = aimbotLineOn and Color3.fromRGB(0, 130, 60) or Color3.fromRGB(25, 25, 35) if AimbotLine and not aimbotLineOn then AimbotLine.Visible = false end end) CreateButton("Target Mode: " .. targetModes[targetModeIndex], Color3.fromRGB(25, 25, 35), function(btn) targetModeIndex = targetModeIndex + 1 if targetModeIndex > #targetModes then targetModeIndex = 1 end btn.Text = "Target Mode: " .. targetModes[targetModeIndex] end) local FovModeBtn = CreateButton("FOV Position: " .. fovPositionMode, Color3.fromRGB(25, 25, 35), function(btn) if fovPositionMode == "MOBILE" then fovPositionMode = "PC" else fovPositionMode = "MOBILE" end btn.Text = "FOV Position: " .. fovPositionMode end) CreateButton("WallCheck: OFF", Color3.fromRGB(25, 25, 35), function(btn) wallCheckOn = not wallCheckOn btn.Text = wallCheckOn and "WallCheck: ON" or "WallCheck: OFF" btn.BackgroundColor3 = wallCheckOn and Color3.fromRGB(0, 130, 60) or Color3.fromRGB(25, 25, 35) end) local FovSizeBtn = CreateButton("FOV Size: " .. fovSize, Color3.fromRGB(25, 25, 35), function(btn) if fovSize == 120 then fovSize = 180 elseif fovSize == 180 then fovSize = 250 elseif fovSize == 250 then fovSize = 320 else fovSize = 120 end if FOVCircle then FOVCircle.Radius = fovSize end btn.Text = "FOV Size: " .. fovSize end) CreateButton("FOV Thickness: " .. fovThickness, Color3.fromRGB(25, 25, 35), function(btn) if fovThickness == 1.5 then fovThickness = 2.5 elseif fovThickness == 2.5 then fovThickness = 4.0 else fovThickness = 1.5 end if FOVCircle then FOVCircle.Thickness = fovThickness end btn.Text = "FOV Thickness: " + fovThickness end) CreateButton("FOV Color: " .. fovColors[currentColorIndex].name, Color3.fromRGB(25, 25, 35), function(btn) currentColorIndex = currentColorIndex + 1 if currentColorIndex > #fovColors then currentColorIndex = 1 end local selected = fovColors[currentColorIndex] if selected.color == "RAINBOW" then rainbowOn = true else rainbowOn = false if FOVCircle then FOVCircle.Color = selected.color end end btn.Text = "FOV Color: " .. selected.name end) CreateButton("Aimbot Smooth: Medium", Color3.fromRGB(25, 25, 35), function(btn) if smoothValue == 0.15 then smoothValue = 0.30 btn.Text = "Aimbot Smooth: Fast / Hard" elseif smoothValue == 0.30 then smoothValue = 1.00 btn.Text = "Aimbot Smooth: Instant (Snap)" else smoothValue = 0.15 btn.Text = "Aimbot Smooth: Smooth" end end) CreateButton("Close & Destroy Hub", Color3.fromRGB(140, 35, 35), function() if FOVCircle then FOVCircle:Remove() end if AimbotLine then AimbotLine:Remove() end for _, p in ipairs(Players:GetPlayers()) do if p.Character then for _, v in ipairs(p.Character:GetChildren()) do if v.Name == "SpikeRealESP" then v:Destroy() end end end end ScreenGui:Destroy() end) -- Main Loop RunService.RenderStepped:Connect(function() local screenCenter if fovPositionMode == "MOBILE" then screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) else screenCenter = UserInputService:GetMouseLocation() end if FOVCircle and aimOn then FOVCircle.Position = screenCenter if rainbowOn then local hue = tick() % 5 / 5 FOVCircle.Color = Color3.fromHSV(hue, 1, 1) end end if espOn then for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then local char = p.Character if char and char:FindFirstChild("HumanoidRootPart") then if not char:FindFirstChild("SpikeRealESP") then ApplyESPToCharacter(char) end end end end end if aimOn then local closestTarget = nil local shortestDist = (targetModeIndex == 1) and fovSize or math.huge for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character and p.Character:FindFirstChild("Head") then local hum = p.Character:FindFirstChildOfClass("Humanoid") if hum and hum.Health > 0 then local head = p.Character.Head local visible = true if wallCheckOn then local origin = Camera.CFrame.Position local direction = (head.Position - origin) local rayParams = RaycastParams.new() rayParams.FilterDescendantsInstances = {LocalPlayer.Character, p.Character} rayParams.FilterType = Enum.RaycastFilterType.Exclude local result = workspace:Raycast(origin, direction, rayParams) if result then visible = false end end if visible then local screenPos, onScreen = Camera:WorldToViewportPoint(head.Position) if onScreen then local head2D = Vector2.new(screenPos.X, screenPos.Y) local dist = (head2D - screenCenter).Magnitude if targetModeIndex == 1 then if dist < shortestDist then shortestDist = dist closestTarget = head end else local worldDist = (head.Position - Camera.CFrame.Position).Magnitude if worldDist < shortestDist then shortestDist = worldDist closestTarget = head end end end end end end end if closestTarget then local targetCFrame = CFrame.new(Camera.CFrame.Position, closestTarget.Position) Camera.CFrame = Camera.CFrame:Lerp(targetCFrame, smoothValue) if aimbotLineOn and AimbotLine then local screenPos, onScreen = Camera:WorldToViewportPoint(closestTarget.Position) if onScreen then AimbotLine.From = screenCenter AimbotLine.To = Vector2.new(screenPos.X, screenPos.Y) AimbotLine.Visible = true else AimbotLine.Visible = false end else if AimbotLine then AimbotLine.Visible = false end end else if AimbotLine then AimbotLine.Visible = false end end else if AimbotLine then AimbotLine.Visible = false end end end)