--[[ Z HUB | Enhanced Edition - Auto Steal (advanced, with nearest animal & prompt callbacks) - Z Booster (speed customizer with slider popup) - X-Ray (see through decorations) - Anti-Ragdoll + Full HP - Graphics toggles (Stretch Rez, Night, Purple Sky, FPS Boost, Anti-Lag) - Desync (unwalkable) - TP on Steal (return to saved base position) - Fully draggable GUI + floating Z button + mini panel ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Lighting = game:GetService("Lighting") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local rootPart = character:WaitForChild("HumanoidRootPart") -- ======================== -- LOAD REQUIRED MODULES (for advanced auto steal) -- ======================== local Packages = ReplicatedStorage:WaitForChild("Packages") local Datas = ReplicatedStorage:WaitForChild("Datas") local Shared = ReplicatedStorage:WaitForChild("Shared") local Utils = ReplicatedStorage:WaitForChild("Utils") local Synchronizer = require(Packages:WaitForChild("Synchronizer")) local AnimalsData = require(Datas:WaitForChild("Animals")) local AnimalsShared = require(Shared:WaitForChild("Animals")) -- ======================== -- SETTINGS TABLE -- ======================== local Settings = { -- Auto Steal AutoSteal = false, TpOnSteal = true, SavedPos = nil, -- Speed SpeedEnabled = false, SpeedValue = 28, -- X-Ray XRayEnabled = false, -- Graphics / Misc Desync = false, StretchRez = false, Night = false, PurpleSky = false, FPSBoost = false, Antilag = false, MiniButtons = false, } -- ======================== -- ADVANCED AUTO STEAL (from AutoGrabv2) -- ======================== local allAnimalsCache = {} local PromptMemoryCache = {} local InternalStealCache = {} local stealConnection = nil local AUTO_STEAL_PROX_RADIUS = 20 local function isMyBaseAnimal(animalData) if not animalData or not animalData.plot then return false end local plots = Workspace:FindFirstChild("Plots") if not plots then return false end local plot = plots:FindFirstChild(animalData.plot) if not plot then return false end local channel = Synchronizer:Get(plot.Name) if channel then local owner = channel:Get("Owner") if owner then if typeof(owner) == "Instance" and owner:IsA("Player") then return owner.UserId == player.UserId elseif typeof(owner) == "table" and owner.UserId then return owner.UserId == player.UserId elseif typeof(owner) == "Instance" then return owner == player end end end local sign = plot:FindFirstChild("PlotSign") if sign then local yourBase = sign:FindFirstChild("YourBase") if yourBase and yourBase:IsA("BillboardGui") then return yourBase.Enabled == true end end return false end local function findProximityPromptForAnimal(animalData) if not animalData then return nil end local cachedPrompt = PromptMemoryCache[animalData.uid] if cachedPrompt and cachedPrompt.Parent then return cachedPrompt end local plot = Workspace.Plots:FindFirstChild(animalData.plot) if not plot then return nil end local podiums = plot:FindFirstChild("AnimalPodiums") if not podiums then return nil end local podium = podiums:FindFirstChild(animalData.slot) if not podium then return nil end local base = podium:FindFirstChild("Base") if not base then return nil end local spawn = base:FindFirstChild("Spawn") if not spawn then return nil end local attach = spawn:FindFirstChild("PromptAttachment") if not attach then return nil end for _, p in ipairs(attach:GetChildren()) do if p:IsA("ProximityPrompt") then PromptMemoryCache[animalData.uid] = p return p end end return nil end local function getAnimalPosition(animalData) local plot = Workspace.Plots:FindFirstChild(animalData.plot) if not plot then return nil end local podiums = plot:FindFirstChild("AnimalPodiums") if not podiums then return nil end local podium = podiums:FindFirstChild(animalData.slot) if not podium then return nil end return podium:GetPivot().Position end local function getNearestAnimal() if not rootPart then return nil end local nearest, minDist = nil, math.huge for _, animalData in ipairs(allAnimalsCache) do if isMyBaseAnimal(animalData) then continue end local pos = getAnimalPosition(animalData) if pos then local dist = (rootPart.Position - pos).Magnitude if dist < minDist then minDist = dist nearest = animalData end end end return nearest end local function buildStealCallbacks(prompt) if InternalStealCache[prompt] then return end local data = { holdCallbacks = {}, triggerCallbacks = {}, ready = true } local ok1, conns1 = pcall(getconnections, prompt.PromptButtonHoldBegan) if ok1 and type(conns1) == "table" then for _, conn in ipairs(conns1) do if type(conn.Function) == "function" then table.insert(data.holdCallbacks, conn.Function) end end end local ok2, conns2 = pcall(getconnections, prompt.Triggered) if ok2 and type(conns2) == "table" then for _, conn in ipairs(conns2) do if type(conn.Function) == "function" then table.insert(data.triggerCallbacks, conn.Function) end end end if #data.holdCallbacks > 0 or #data.triggerCallbacks > 0 then InternalStealCache[prompt] = data end end local function executeInternalStealAsync(prompt) local data = InternalStealCache[prompt] if not data or not data.ready then return false end data.ready = false task.spawn(function() if #data.holdCallbacks > 0 then for _, fn in ipairs(data.holdCallbacks) do task.spawn(fn) end end task.wait(1.3) -- hold duration if #data.triggerCallbacks > 0 then for _, fn in ipairs(data.triggerCallbacks) do task.spawn(fn) end end task.wait(0.1) data.ready = true end) return true end local function attemptSteal(prompt) if not prompt or not prompt.Parent then return false end buildStealCallbacks(prompt) if not InternalStealCache[prompt] then return false end return executeInternalStealAsync(prompt) end local function scanAllPlots() local plots = Workspace:FindFirstChild("Plots") if not plots then return {} end local newCache = {} for _, plot in ipairs(plots:GetChildren()) do local channel = Synchronizer:Get(plot.Name) if not channel then continue end local animalList = channel:Get("AnimalList") if not animalList then continue end local owner = channel:Get("Owner") local ownerName = "Unknown" if typeof(owner) == "Instance" and owner:IsA("Player") then ownerName = owner.Name elseif typeof(owner) == "table" and owner.Name then ownerName = owner.Name end for slot, animalData in pairs(animalList) do if type(animalData) == "table" then local animalName = animalData.Index local animalInfo = AnimalsData[animalName] if not animalInfo then continue end local genValue = AnimalsShared:GetGeneration(animalName, animalData.Mutation, animalData.Traits, nil) table.insert(newCache, { name = animalInfo.DisplayName or animalName, genValue = genValue, mutation = animalData.Mutation or "None", traits = (animalData.Traits and #animalData.Traits > 0) and table.concat(animalData.Traits, ", ") or "None", owner = ownerName, plot = plot.Name, slot = tostring(slot), uid = plot.Name .. "_" .. tostring(slot), }) end end end allAnimalsCache = newCache table.sort(allAnimalsCache, function(a,b) return a.genValue > b.genValue end) return #allAnimalsCache end local function startAutoSteal() if stealConnection then return end stealConnection = RunService.Heartbeat:Connect(function() if not Settings.AutoSteal then return end local targetAnimal = getNearestAnimal() if not targetAnimal then return end if not rootPart then return end local animalPos = getAnimalPosition(targetAnimal) if not animalPos then return end if (rootPart.Position - animalPos).Magnitude > AUTO_STEAL_PROX_RADIUS then return end local prompt = PromptMemoryCache[targetAnimal.uid] or findProximityPromptForAnimal(targetAnimal) if prompt then local success = attemptSteal(prompt) if success and Settings.TpOnSteal and Settings.SavedPos then task.wait(0.05) rootPart.CFrame = Settings.SavedPos end end end) end local function stopAutoSteal() if stealConnection then stealConnection:Disconnect() stealConnection = nil end end -- Periodic scan task.spawn(function() while true do scanAllPlots() task.wait(5) end end) -- ======================== -- SPEED BOOSTER (Z Booster) -- ======================== local speedConnection = nil local function updateSpeed() if speedConnection then speedConnection:Disconnect() end if not Settings.SpeedEnabled or not humanoid or not rootPart then return end speedConnection = RunService.Heartbeat:Connect(function() local moveDir = humanoid.MoveDirection if moveDir.Magnitude > 0 then rootPart.AssemblyLinearVelocity = Vector3.new( moveDir.X * Settings.SpeedValue, rootPart.AssemblyLinearVelocity.Y, moveDir.Z * Settings.SpeedValue ) end end) end -- ======================== -- X‑RAY -- ======================== local xrayConnection = nil local function applyXRay(enabled) if xrayConnection then xrayConnection:Disconnect(); xrayConnection = nil end if not enabled then local plots = Workspace:FindFirstChild("Plots") if plots then for _, plot in ipairs(plots:GetChildren()) do if plot:IsA("Model") and plot:FindFirstChild("Decorations") then for _, part in ipairs(plot.Decorations:GetDescendants()) do if part:IsA("BasePart") then part.Transparency = 1 end end end end end return end xrayConnection = RunService.Heartbeat:Connect(function() local plots = Workspace:FindFirstChild("Plots") if plots then for _, plot in ipairs(plots:GetChildren()) do if plot:IsA("Model") and plot:FindFirstChild("Decorations") then for _, part in ipairs(plot.Decorations:GetDescendants()) do if part:IsA("BasePart") then part.Transparency = 0.8 end end end end end end) end -- ======================== -- ANTI‑RAGDOLL + FULL HP -- ======================== local BlockedStates = { [Enum.HumanoidStateType.Ragdoll] = true, [Enum.HumanoidStateType.FallingDown] = true, [Enum.HumanoidStateType.Physics] = true, [Enum.HumanoidStateType.Dead] = true, } local frozen = false local function forceNormal(char) local hum = char:FindFirstChildOfClass("Humanoid") local hrp = char:FindFirstChild("HumanoidRootPart") if not hum or not hrp then return end hum.Health = hum.MaxHealth hum:ChangeState(Enum.HumanoidStateType.RunningNoPhysics) if not frozen then frozen = true hrp.Anchored = true hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero hrp.CFrame += Vector3.new(0, 1.5, 0) end end local function release(char) local hrp = char:FindFirstChild("HumanoidRootPart") if hrp and frozen then hrp.Anchored = false frozen = false end end local function restoreMotors(char) for _, v in ipairs(char:GetDescendants()) do if v:IsA("Motor6D") then v.Enabled = true elseif v:IsA("Constraint") then v.Enabled = false end end end local function initAntiRagdoll(char) local hum = char:WaitForChild("Humanoid") for state in pairs(BlockedStates) do hum:SetStateEnabled(state, false) end hum.StateChanged:Connect(function(_, new) if BlockedStates[new] then forceNormal(char) restoreMotors(char) end end) RunService.Stepped:Connect(function() if BlockedStates[hum:GetState()] then forceNormal(char) else release(char) end hum.Health = hum.MaxHealth end) end player.CharacterAdded:Connect(function(char) task.wait(0.4) initAntiRagdoll(char) character = char humanoid = char:WaitForChild("Humanoid") rootPart = char:WaitForChild("HumanoidRootPart") end) if player.Character then initAntiRagdoll(player.Character) end -- ======================== -- DESYNC (unwalkable) -- ======================== local animConn = nil local function setDesync(enabled) if animConn then animConn:Disconnect(); animConn = nil end if enabled and humanoid then for _, track in pairs(humanoid:GetPlayingAnimationTracks()) do track:Stop() end animConn = humanoid.AnimationPlayed:Connect(function(track) track:Stop() end) end end -- ======================== -- GRAPHICS -- ======================== local function applyGraphics() -- Stretch Rez if Settings.StretchRez and Workspace.CurrentCamera then Workspace.CurrentCamera.FieldOfView = 120 elseif Workspace.CurrentCamera then Workspace.CurrentCamera.FieldOfView = 70 end -- Night / Day if Settings.Night then Lighting.ClockTime = 0 Lighting.Brightness = 0.2 Lighting.Ambient = Color3.fromRGB(20,20,35) else Lighting.ClockTime = 14 Lighting.Brightness = 2 Lighting.Ambient = Color3.fromRGB(127,127,127) end -- Purple Sky if Settings.PurpleSky then Lighting.Ambient = Color3.fromRGB(60,30,90) Lighting.FogColor = Color3.fromRGB(80,40,120) local sky = Lighting:FindFirstChildOfClass("Sky") or Instance.new("Sky", Lighting) local skyId = "rbxassetid://1534951537" sky.SkyboxBk = skyId; sky.SkyboxDn = skyId; sky.SkyboxFt = skyId sky.SkyboxLf = skyId; sky.SkyboxRt = skyId; sky.SkyboxUp = skyId sky.StarCount = 8000 else local sky = Lighting:FindFirstChildOfClass("Sky") if sky then sky:Destroy() end Lighting.Ambient = Color3.fromRGB(127,127,127) Lighting.FogColor = Color3.fromRGB(127,127,127) end -- FPS Boost if Settings.FPSBoost then settings().Rendering.QualityLevel = Enum.QualityLevel.Level01 Lighting.GlobalShadows = false Lighting.Technology = Enum.Technology.Legacy else settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic Lighting.GlobalShadows = true Lighting.Technology = Enum.Technology.ShadowMap end -- Anti-Lag (one-time cleanup) if Settings.Antilag then for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("ParticleEmitter") or obj:IsA("PointLight") or obj:IsA("SpotLight") or obj:IsA("Beam") or obj:IsA("Fire") then obj:Destroy() end end Settings.Antilag = false -- reset after execution end end -- ======================== -- SPEED CUSTOMIZER POPUP (Z Booster) -- ======================== local function createSpeedPopup() local popup = Instance.new("Frame") popup.Size = UDim2.new(0, 260, 0, 180) popup.Position = UDim2.new(0.5, -130, 0.5, -90) popup.BackgroundColor3 = Color3.fromRGB(25, 25, 45) popup.BackgroundTransparency = 0.1 popup.BorderSizePixel = 0 local stroke = Instance.new("UIStroke", popup) stroke.Thickness = 2 stroke.Color = Color3.fromRGB(80, 180, 255) stroke.Transparency = 0.3 Instance.new("UICorner", popup).CornerRadius = UDim.new(0, 10) popup.Parent = player:WaitForChild("PlayerGui"):FindFirstChild("ZHUB") or gui -- Title bar local titleBar = Instance.new("Frame", popup) titleBar.Size = UDim2.new(1, 0, 0, 30) titleBar.BackgroundTransparency = 1 local title = Instance.new("TextLabel", titleBar) title.Size = UDim2.new(1, -30, 1, 0) title.Position = UDim2.new(0, 10, 0, 0) title.BackgroundTransparency = 1 title.Text = "⚡ Z Booster Settings" title.TextColor3 = Color3.fromRGB(80, 180, 255) title.TextSize = 16 title.Font = Enum.Font.GothamBold title.TextXAlignment = Enum.TextXAlignment.Left local closeBtn = Instance.new("TextButton", titleBar) closeBtn.Size = UDim2.new(0, 24, 0, 24) closeBtn.Position = UDim2.new(1, -30, 0, 3) closeBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 60) closeBtn.Text = "X" closeBtn.TextColor3 = Color3.new(1,1,1) closeBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 6) closeBtn.MouseButton1Click:Connect(function() popup:Destroy() end) -- Toggle button local toggleBtn = Instance.new("TextButton", popup) toggleBtn.Size = UDim2.new(0.9, 0, 0, 36) toggleBtn.Position = UDim2.new(0.05, 0, 0, 40) toggleBtn.BackgroundColor3 = Settings.SpeedEnabled and Color3.fromRGB(0,200,0) or Color3.fromRGB(200,0,0) toggleBtn.Text = Settings.SpeedEnabled and "Z Booster: ON" or "Z Booster: OFF" toggleBtn.TextColor3 = Color3.new(1,1,1) toggleBtn.Font = Enum.Font.Gotham toggleBtn.TextSize = 14 Instance.new("UICorner", toggleBtn).CornerRadius = UDim.new(0, 6) toggleBtn.MouseButton1Click:Connect(function() Settings.SpeedEnabled = not Settings.SpeedEnabled toggleBtn.BackgroundColor3 = Settings.SpeedEnabled and Color3.fromRGB(0,200,0) or Color3.fromRGB(200,0,0) toggleBtn.Text = Settings.SpeedEnabled and "Z Booster: ON" or "Z Booster: OFF" updateSpeed() end) -- Speed label local speedLabel = Instance.new("TextLabel", popup) speedLabel.Size = UDim2.new(0.9, 0, 0, 20) speedLabel.Position = UDim2.new(0.05, 0, 0, 85) speedLabel.BackgroundTransparency = 1 speedLabel.Text = "Speed: " .. Settings.SpeedValue speedLabel.TextColor3 = Color3.new(1,1,1) speedLabel.TextSize = 12 speedLabel.Font = Enum.Font.Gotham -- Slider local sliderFrame = Instance.new("Frame", popup) sliderFrame.Size = UDim2.new(0.9, 0, 0, 20) sliderFrame.Position = UDim2.new(0.05, 0, 0, 110) sliderFrame.BackgroundColor3 = Color3.fromRGB(50,50,50) sliderFrame.BorderSizePixel = 0 Instance.new("UICorner", sliderFrame).CornerRadius = UDim.new(1,0) local sliderButton = Instance.new("TextButton", sliderFrame) sliderButton.Size = UDim2.new(0, 20, 1, 0) sliderButton.BackgroundColor3 = Color3.fromRGB(80,180,255) sliderButton.BorderSizePixel = 0 sliderButton.Text = "" Instance.new("UICorner", sliderButton).CornerRadius = UDim.new(1,0) local function updateSliderPos() local percent = (Settings.SpeedValue - 1) / 199 sliderButton.Position = UDim2.new(percent, -10, 0, 0) speedLabel.Text = "Speed: " .. Settings.SpeedValue updateSpeed() end sliderButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then local dragging = true while dragging and sliderFrame and sliderButton do local mousePos = UserInputService:GetMouseLocation() local frameAbsPos = sliderFrame.AbsolutePosition.X local frameWidth = sliderFrame.AbsoluteSize.X local percent = math.clamp((mousePos.X - frameAbsPos) / frameWidth, 0, 1) Settings.SpeedValue = math.floor(1 + percent * 199) updateSliderPos() task.wait() dragging = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) or #UserInputService:GetTouchPositions() > 0 end end end) updateSliderPos() -- Make popup draggable local dragStart, startPos, dragging = nil, nil, false titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = popup.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart popup.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) end -- ======================== -- MINI BUTTONS PANEL (draggable) -- ======================== local MiniPanel = nil local function createMiniPanel() if MiniPanel then MiniPanel:Destroy() end MiniPanel = Instance.new("Frame") MiniPanel.Size = UDim2.new(0, 180, 0, 200) MiniPanel.Position = UDim2.new(0.7, 0, 0.3, 0) MiniPanel.BackgroundColor3 = Color3.fromRGB(20, 40, 80) MiniPanel.BackgroundTransparency = 0.1 MiniPanel.BorderSizePixel = 0 MiniPanel.Parent = player:WaitForChild("PlayerGui"):FindFirstChild("ZHUB") or gui Instance.new("UICorner", MiniPanel).CornerRadius = UDim.new(0, 10) local stroke = Instance.new("UIStroke", MiniPanel) stroke.Color = Color3.fromRGB(80, 180, 255) stroke.Thickness = 1.5 local titleBar = Instance.new("Frame", MiniPanel) titleBar.Size = UDim2.new(1, 0, 0, 25) titleBar.BackgroundColor3 = Color3.fromRGB(30, 60, 100) titleBar.BackgroundTransparency = 0.2 Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 8) local titleLabel = Instance.new("TextLabel", titleBar) titleLabel.Size = UDim2.new(1, 0, 1, 0) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "Mini Commands" titleLabel.TextColor3 = Color3.fromRGB(200, 220, 255) titleLabel.TextSize = 12 titleLabel.Font = Enum.Font.GothamBold local container = Instance.new("Frame", MiniPanel) container.Size = UDim2.new(1, 0, 1, -25) container.Position = UDim2.new(0, 0, 0, 25) container.BackgroundTransparency = 1 local layout = Instance.new("UIListLayout", container) layout.Padding = UDim.new(0, 4) layout.SortOrder = Enum.SortOrder.LayoutOrder local function addMiniBtn(text, callback) local btn = Instance.new("TextButton", container) btn.Size = UDim2.new(0.9, 0, 0, 28) btn.Position = UDim2.new(0.05, 0, 0, 0) btn.BackgroundColor3 = Color3.fromRGB(30, 60, 100) btn.TextColor3 = Color3.new(1,1,1) btn.Text = text btn.Font = Enum.Font.Gotham btn.TextSize = 12 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 5) btn.MouseButton1Click:Connect(callback) end addMiniBtn("Save Base Pos", function() if rootPart then Settings.SavedPos = rootPart.CFrame end end) addMiniBtn("Teleport to Base", function() if Settings.SavedPos and rootPart then rootPart.CFrame = Settings.SavedPos end end) addMiniBtn("Set Speed Value", function() local new = tonumber(UserInputService:GetStringFromUser("Speed (1-200)", "Speed", "", 50)) if new and new > 0 and new <= 200 then Settings.SpeedValue = new; updateSpeed() end end) addMiniBtn("Reset Graphics", function() Settings.StretchRez = false; Settings.Night = false; Settings.PurpleSky = false; Settings.FPSBoost = false applyGraphics() end) addMiniBtn("Reset All", function() Settings.AutoSteal = false; Settings.TpOnSteal = false; Settings.Desync = false; Settings.SpeedEnabled = false Settings.StretchRez = false; Settings.Night = false; Settings.PurpleSky = false; Settings.FPSBoost = false; Settings.Antilag = false setDesync(false); updateSpeed(); applyGraphics() end) -- Make panel draggable local dragStart, startPos, dragging = nil, nil, false titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = MiniPanel.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart MiniPanel.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) end local function destroyMiniPanel() if MiniPanel then MiniPanel:Destroy(); MiniPanel = nil end end -- ======================== -- MAIN GUI (Z HUB) -- ======================== local gui = Instance.new("ScreenGui") gui.Name = "ZHUB" gui.ResetOnSpawn = false gui.Parent = player:WaitForChild("PlayerGui") local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 280, 0, 450) mainFrame.Position = UDim2.new(0.5, -140, 0.5, -225) mainFrame.BackgroundColor3 = Color3.fromRGB(20, 40, 80) mainFrame.BackgroundTransparency = 0.15 mainFrame.BorderSizePixel = 0 mainFrame.Parent = gui -- Rainbow outline local stroke = Instance.new("UIStroke", mainFrame) stroke.Thickness = 2 stroke.Transparency = 0.3 task.spawn(function() while mainFrame do stroke.Color = Color3.fromHSV(tick() % 2 / 2, 1, 1) task.wait(0.05) end end) Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0, 12) -- Title bar local titleBar = Instance.new("Frame", mainFrame) titleBar.Size = UDim2.new(1, 0, 0, 32) titleBar.BackgroundTransparency = 1 local titleLabel = Instance.new("TextLabel", titleBar) titleLabel.Size = UDim2.new(1, -80, 1, 0) titleLabel.Position = UDim2.new(0, 10, 0, 0) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "Z HUB" titleLabel.TextColor3 = Color3.fromRGB(80, 180, 255) titleLabel.TextSize = 22 titleLabel.Font = Enum.Font.GothamBold titleLabel.TextXAlignment = Enum.TextXAlignment.Left local closeBtn = Instance.new("TextButton", titleBar) closeBtn.Size = UDim2.new(0, 30, 0, 30) closeBtn.Position = UDim2.new(1, -35, 0, 0) closeBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 30) closeBtn.Text = "X" closeBtn.TextColor3 = Color3.new(1,1,1) closeBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 8) -- Floating Z button local floatingZ = Instance.new("TextButton", gui) floatingZ.Size = UDim2.new(0, 50, 0, 50) floatingZ.Position = UDim2.new(1, -65, 1, -70) floatingZ.BackgroundColor3 = Color3.fromRGB(20, 80, 150) floatingZ.Text = "Z" floatingZ.TextColor3 = Color3.fromRGB(150, 220, 255) floatingZ.TextSize = 28 floatingZ.Font = Enum.Font.GothamBold floatingZ.Visible = false Instance.new("UICorner", floatingZ).CornerRadius = UDim.new(1, 0) local zStroke = Instance.new("UIStroke", floatingZ) zStroke.Color = Color3.fromRGB(80, 180, 255) zStroke.Thickness = 1.5 closeBtn.MouseButton1Click:Connect(function() mainFrame.Visible = false floatingZ.Visible = true end) floatingZ.MouseButton1Click:Connect(function() mainFrame.Visible = true floatingZ.Visible = false end) -- Make main GUI draggable local function makeDraggable(frame, handle) handle = handle or frame local dragStart, startPos, dragging = nil, nil, false handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = frame.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) end makeDraggable(mainFrame, titleBar) makeDraggable(floatingZ) -- Tabs local tabBar = Instance.new("Frame", mainFrame) tabBar.Size = UDim2.new(1, 0, 0, 30) tabBar.Position = UDim2.new(0, 0, 0, 32) tabBar.BackgroundTransparency = 1 local mainTab = Instance.new("TextButton", tabBar) mainTab.Size = UDim2.new(0.5, -2, 1, 0) mainTab.Position = UDim2.new(0, 0, 0, 0) mainTab.BackgroundColor3 = Color3.fromRGB(50, 90, 140) mainTab.Text = "Main" mainTab.TextColor3 = Color3.new(1,1,1) mainTab.Font = Enum.Font.Gotham Instance.new("UICorner", mainTab).CornerRadius = UDim.new(0, 6) local settingsTab = Instance.new("TextButton", tabBar) settingsTab.Size = UDim2.new(0.5, -2, 1, 0) settingsTab.Position = UDim2.new(0.5, 2, 0, 0) settingsTab.BackgroundColor3 = Color3.fromRGB(30, 60, 100) settingsTab.Text = "Settings" settingsTab.TextColor3 = Color3.new(1,1,1) settingsTab.Font = Enum.Font.Gotham Instance.new("UICorner", settingsTab).CornerRadius = UDim.new(0, 6) -- Page container local pageContainer = Instance.new("Frame", mainFrame) pageContainer.Size = UDim2.new(1, 0, 1, -62) pageContainer.Position = UDim2.new(0, 0, 0, 62) pageContainer.BackgroundTransparency = 1 local mainPage = Instance.new("ScrollingFrame", pageContainer) mainPage.Size = UDim2.new(1, 0, 1, 0) mainPage.BackgroundTransparency = 1 mainPage.CanvasSize = UDim2.new(0, 0, 0, 450) mainPage.ScrollBarThickness = 4 mainPage.Visible = true local mainLayout = Instance.new("UIListLayout", mainPage) mainLayout.Padding = UDim.new(0, 6) local settingsPage = Instance.new("ScrollingFrame", pageContainer) settingsPage.Size = UDim2.new(1, 0, 1, 0) settingsPage.BackgroundTransparency = 1 settingsPage.CanvasSize = UDim2.new(0, 0, 0, 250) settingsPage.ScrollBarThickness = 4 settingsPage.Visible = false local settingsLayout = Instance.new("UIListLayout", settingsPage) settingsLayout.Padding = UDim.new(0, 6) -- Tab switching mainTab.MouseButton1Click:Connect(function() mainPage.Visible = true settingsPage.Visible = false mainTab.BackgroundColor3 = Color3.fromRGB(50, 90, 140) settingsTab.BackgroundColor3 = Color3.fromRGB(30, 60, 100) end) settingsTab.MouseButton1Click:Connect(function() mainPage.Visible = false settingsPage.Visible = true mainTab.BackgroundColor3 = Color3.fromRGB(30, 60, 100) settingsTab.BackgroundColor3 = Color3.fromRGB(50, 90, 140) end) -- Helper: create toggle button local function makeToggle(parent, text, settingKey, order) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0.9, 0, 0, 32) btn.Position = UDim2.new(0.05, 0, 0, 0) btn.BackgroundColor3 = Settings[settingKey] and Color3.fromRGB(0,200,0) or Color3.fromRGB(200,0,0) btn.TextColor3 = Color3.new(1,1,1) btn.Text = text .. (Settings[settingKey] and " [ON]" or " [OFF]") btn.Font = Enum.Font.Gotham btn.TextSize = 14 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6) btn.Parent = parent btn.LayoutOrder = order btn.MouseButton1Click:Connect(function() Settings[settingKey] = not Settings[settingKey] btn.BackgroundColor3 = Settings[settingKey] and Color3.fromRGB(0,200,0) or Color3.fromRGB(200,0,0) btn.Text = text .. (Settings[settingKey] and " [ON]" or " [OFF]") if settingKey == "AutoSteal" then if Settings.AutoSteal then startAutoSteal() else stopAutoSteal() end elseif settingKey == "SpeedEnabled" then updateSpeed() elseif settingKey == "Desync" then setDesync(Settings.Desync) elseif settingKey == "StretchRez" or settingKey == "Night" or settingKey == "PurpleSky" or settingKey == "FPSBoost" then applyGraphics() elseif settingKey == "Antilag" then applyGraphics() -- performs cleanup and disables itself if not Settings.Antilag then btn.BackgroundColor3 = Color3.fromRGB(200,0,0) btn.Text = text .. " [OFF]" end elseif settingKey == "XRayEnabled" then applyXRay(Settings.XRayEnabled) elseif settingKey == "MiniButtons" then if Settings.MiniButtons then createMiniPanel() else destroyMiniPanel() end end end) return btn end -- Helper: mini button (settings page) local function makeMiniButton(parent, text, callback, order) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0.9, 0, 0, 28) btn.Position = UDim2.new(0.05, 0, 0, 0) btn.BackgroundColor3 = Color3.fromRGB(30, 60, 100) btn.TextColor3 = Color3.new(1,1,1) btn.Text = text btn.Font = Enum.Font.Gotham btn.TextSize = 13 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 5) btn.Parent = parent btn.LayoutOrder = order btn.MouseButton1Click:Connect(callback) return btn end -- Populate Main Page makeToggle(mainPage, "Auto Steal", "AutoSteal", 1) makeToggle(mainPage, "TP on Steal", "TpOnSteal", 2) makeToggle(mainPage, "Desync (Unwalk)", "Desync", 3) makeToggle(mainPage, "X-Ray", "XRayEnabled", 4) -- Special button: Speed Customizer (opens popup) local speedCustomBtn = Instance.new("TextButton") speedCustomBtn.Size = UDim2.new(0.9, 0, 0, 32) speedCustomBtn.Position = UDim2.new(0.05, 0, 0, 0) speedCustomBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 200) speedCustomBtn.Text = "⚡ Speed Customizer (Z Booster)" speedCustomBtn.TextColor3 = Color3.new(1,1,1) speedCustomBtn.Font = Enum.Font.Gotham speedCustomBtn.TextSize = 14 Instance.new("UICorner", speedCustomBtn).CornerRadius = UDim.new(0, 6) speedCustomBtn.Parent = mainPage speedCustomBtn.LayoutOrder = 5 speedCustomBtn.MouseButton1Click:Connect(createSpeedPopup) -- Remaining toggles makeToggle(mainPage, "Stretch Rez (120 FOV)", "StretchRez", 6) makeToggle(mainPage, "Night Time", "Night", 7) makeToggle(mainPage, "Purple Sky", "PurpleSky", 8) makeToggle(mainPage, "FPS Booster", "FPSBoost", 9) makeToggle(mainPage, "Anti-Lag (Clean)", "Antilag", 10) makeToggle(mainPage, "Mini Buttons (Draggable Panel)", "MiniButtons", 11) local leaveBtn = Instance.new("TextButton", mainPage) leaveBtn.Size = UDim2.new(0.9, 0, 0, 32) leaveBtn.Position = UDim2.new(0.05, 0, 0, 0) leaveBtn.BackgroundColor3 = Color3.fromRGB(30, 60, 100) leaveBtn.TextColor3 = Color3.new(1,1,1) leaveBtn.Text = "Silly Leave (Blue)" leaveBtn.Font = Enum.Font.Gotham leaveBtn.TextSize = 14 Instance.new("UICorner", leaveBtn).CornerRadius = UDim.new(0, 6) leaveBtn.LayoutOrder = 12 leaveBtn.MouseButton1Click:Connect(function() game:Shutdown() end) -- Populate Settings Page makeMiniButton(settingsPage, "Save Base Position", function() if rootPart then Settings.SavedPos = rootPart.CFrame end end, 1) makeMiniButton(settingsPage, "Teleport to Base", function() if Settings.SavedPos and rootPart then rootPart.CFrame = Settings.SavedPos end end, 2) makeMiniButton(settingsPage, "Set Speed Value", function() local new = tonumber(UserInputService:GetStringFromUser("Enter speed (1-200)", "Speed", "", 50)) if new and new > 0 and new <= 200 then Settings.SpeedValue = new; updateSpeed() end end, 3) makeMiniButton(settingsPage, "Reset Graphics Defaults", function() Settings.StretchRez = false; Settings.Night = false; Settings.PurpleSky = false; Settings.FPSBoost = false applyGraphics() end, 4) makeMiniButton(settingsPage, "Reset All Settings (OFF)", function() Settings.AutoSteal = false; Settings.TpOnSteal = false; Settings.Desync = false; Settings.SpeedEnabled = false Settings.StretchRez = false; Settings.Night = false; Settings.PurpleSky = false; Settings.FPSBoost = false; Settings.Antilag = false Settings.XRayEnabled = false setDesync(false); updateSpeed(); applyGraphics(); applyXRay(false) if Settings.AutoSteal then stopAutoSteal() end end, 5) -- Initial setup setDesync(Settings.Desync) updateSpeed() applyGraphics() applyXRay(Settings.XRayEnabled) if Settings.MiniButtons then createMiniPanel() end -- Respawn handler player.CharacterAdded:Connect(function(char) task.wait(0.5) character = char humanoid = char:WaitForChild("Humanoid") rootPart = char:WaitForChild("HumanoidRootPart") if Settings.Desync then setDesync(true) end if Settings.SpeedEnabled then updateSpeed() end initAntiRagdoll(char) end) print("✅ Z HUB Enhanced loaded | Auto Steal (advanced) | Z Booster popup | X-Ray | All features active")