-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ac2985c4dc528830be5cc27"))() end) end) --[[rscripts:analytics:end]] --============================================================= -- Zombie Game | aimbot + esp + movement --============================================================= local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local LP = Players.LocalPlayer local Camera = workspace.CurrentCamera local IGNORED_PLAYER_NAMES = { ["Not a Player lol"] = true } --============================================================= -- EXECUTOR FUNCTIONS --============================================================= local EX = { mousemoverel = (function() local ok, v = pcall(function() return mousemoverel end) return ok and type(v) == "function" and v or nil end)(), gethui = (function() local ok, v = pcall(function() return gethui end) return ok and type(v) == "function" and v or nil end)(), getgenv = (function() local ok, v = pcall(function() return getgenv end) return ok and type(v) == "function" and v or nil end)(), } --============================================================= -- CONFIG --============================================================= local Config = { aimbot = { enabled = false, keybind = Enum.UserInputType.MouseButton2, targetKind = "Zombies", fov = 150, smoothness = 4, targetPart = "Head", visibleOnly = false, showFov = true, }, playerESP = { enabled = false, box = true, name = true, health = true, distance = true, maxDist = 5000, }, mobESP = { enabled = true, box = true, name = true, health = true, distance = true, maxDist = 5000, }, move = { speed = { enabled = false, value = 30 }, jump = { enabled = false, value = 75 }, fly = { enabled = false, speed = 25 }, noclip = { enabled = false }, }, world = { charactersFolder = "Characters", zombiesFolder = "Zombies", }, ui = { toggleKey = Enum.KeyCode.Home, }, } local PLAYER_TARGET_PARTS = { "Head", "HumanoidRootPart", "UpperTorso", "Torso", "Left Arm", "Right Arm", "LeftUpperArm", "RightUpperArm", } local MIN_BOX_W = 10 local MIN_BOX_H = 16 --============================================================= -- COLORS --============================================================= local COL = { bg = Color3.fromRGB(16, 12, 22), panel = Color3.fromRGB(22, 16, 30), panel2 = Color3.fromRGB(30, 22, 40), header = Color3.fromRGB(26, 18, 36), accent = Color3.fromRGB(150, 85, 235), accent2 = Color3.fromRGB(180, 120, 255), gray = Color3.fromRGB(70, 62, 88), text = Color3.fromRGB(232, 226, 245), dim = Color3.fromRGB(155, 145, 175), ok = Color3.fromRGB(120, 210, 150), danger = Color3.fromRGB(215, 70, 100), pEsp = Color3.fromRGB(180, 120, 255), mEsp = Color3.fromRGB(230, 90, 90), tracer = Color3.fromRGB(200, 140, 255), scroll = Color3.fromRGB(140, 100, 210), warn = Color3.fromRGB(230, 190, 100), } --============================================================= -- GUI PARENT --============================================================= local GUI_PARENT = (function() if EX.gethui then local ok, hui = pcall(EX.gethui) if ok and hui then return hui end end local ok, cg = pcall(function() return game:GetService("CoreGui") end) if ok and cg then return cg end return LP:WaitForChild("PlayerGui") end)() --============================================================= -- HELPERS --============================================================= local function isIgnoredPlayer(plr) return IGNORED_PLAYER_NAMES[plr.Name] == true end local function getRealPlayers() local out = {} for _, plr in ipairs(Players:GetPlayers()) do if not isIgnoredPlayer(plr) then out[#out + 1] = plr end end return out end local function findPlayerCharacter(plr) if plr.Character and plr.Character.Parent then return plr.Character, "plr.Character" end local chars = workspace:FindFirstChild(Config.world.charactersFolder) if not chars then return nil, nil end local direct = chars:FindFirstChild(plr.Name) if direct then local inner = direct:FindFirstChild("StarterCharacter") if inner then return inner, "Characters[Name].StarterCharacter" end return direct, "Characters[Name]" end local byId = chars:FindFirstChild(tostring(plr.UserId)) if byId then local inner = byId:FindFirstChild("StarterCharacter") if inner then return inner, "Characters[UserId].StarterCharacter" end return byId, "Characters[UserId]" end for _, d in ipairs(chars:GetDescendants()) do if d.Name == "StarterCharacter" and d:IsA("Model") then local attrP = d:GetAttribute("Player") local attrO = d:GetAttribute("Owner") if attrP == plr or attrP == plr.Name or attrP == plr.UserId or attrO == plr or attrO == plr.Name or attrO == plr.UserId then return d, "attr match" end local vP = d:FindFirstChild("Player") local vO = d:FindFirstChild("Owner") if (vP and vP:IsA("ObjectValue") and vP.Value == plr) or (vO and vO:IsA("ObjectValue") and vO.Value == plr) then return d, "ObjectValue match" end end end return nil, nil end local function getMobs() local folder = workspace:FindFirstChild(Config.world.zombiesFolder) if not folder then return {} end local out = {} for _, child in ipairs(folder:GetChildren()) do if child:IsA("Model") then out[#out + 1] = child end end return out end local function getEntityRoot(char) if not char then return nil end if char:IsA("BasePart") then return char end return char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso") or char.PrimaryPart end local function getEntityHead(char) if not char then return nil end if char:IsA("BasePart") then return char end return char:FindFirstChild("Head") end local function getEntityHealth(char) if not char then return 100, 100 end local hum = char:FindFirstChildOfClass("Humanoid") if hum then return hum.Health, hum.MaxHealth end local hp = char:FindFirstChild("Health") if hp and hp:IsA("ValueBase") then local mx = char:FindFirstChild("MaxHealth") return tonumber(hp.Value) or 100, (mx and tonumber(mx.Value)) or 100 end return 100, 100 end local function entityIsAlive(e) if not e or not e.Parent then return false end local hum = e:FindFirstChildOfClass("Humanoid") if hum then return hum.Health > 0 end return true end local function getMyRoot() local char = LP.Character if not char then return nil end return char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso") end local function worldToViewport(pos) local v, onScreen = Camera:WorldToViewportPoint(pos) return Vector2.new(v.X, v.Y), onScreen, v.Z end local function isVisible(targetPart, ignoreModel) if not targetPart then return false end local origin = Camera.CFrame.Position local dir = targetPart.Position - origin local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude local ex = { LP.Character, ignoreModel } if gui and gui.Parent then table.insert(ex, gui) end params.FilterDescendantsInstances = ex local hit = workspace:Raycast(origin, dir, params) return hit == nil end --============================================================= -- UI HELPERS --============================================================= local function make(class, props) local inst = Instance.new(class) for k, v in pairs(props or {}) do if k ~= "Parent" then inst[k] = v end end if props and props.Parent then inst.Parent = props.Parent end return inst end local function corner(parent, r) return make("UICorner", { Parent = parent, CornerRadius = UDim.new(0, r or 6) }) end local function stroke(parent, color, thickness) return make("UIStroke", { Parent = parent, Color = color or COL.gray, Thickness = thickness or 1, ApplyStrokeMode = Enum.ApplyStrokeMode.Border, }) end --============================================================= -- WINDOW --============================================================= local gui = make("ScreenGui", { Name = "ZG_Cheat", ResetOnSpawn = false, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, IgnoreGuiInset = true, Parent = GUI_PARENT, }) local window = make("Frame", { Parent = gui, Size = UDim2.new(0, 620, 0, 420), Position = UDim2.new(0.5, -310, 0.5, -210), BackgroundColor3 = COL.bg, BorderSizePixel = 0, Active = true, }) corner(window, 10) stroke(window, COL.gray, 1) local header = make("Frame", { Parent = window, Size = UDim2.new(1, 0, 0, 34), BackgroundColor3 = COL.header, BorderSizePixel = 0, }) corner(header, 10) make("Frame", { Parent = header, Size = UDim2.new(1, 0, 0, 10), Position = UDim2.new(0, 0, 1, -10), BackgroundColor3 = COL.header, BorderSizePixel = 0, }) local closeBtn = make("TextButton", { Parent = header, Size = UDim2.new(0, 22, 0, 22), Position = UDim2.new(0, 8, 0.5, -11), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, Text = "×", TextColor3 = COL.text, Font = Enum.Font.GothamBold, TextSize = 16, AutoButtonColor = false, ZIndex = 5, }) corner(closeBtn, 5) stroke(closeBtn, COL.gray, 1) closeBtn.MouseEnter:Connect(function() closeBtn.BackgroundColor3 = COL.danger end) closeBtn.MouseLeave:Connect(function() closeBtn.BackgroundColor3 = COL.panel2 end) local minBtn = make("TextButton", { Parent = header, Size = UDim2.new(0, 22, 0, 22), Position = UDim2.new(0, 34, 0.5, -11), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, Text = "−", TextColor3 = COL.text, Font = Enum.Font.GothamBold, TextSize = 16, AutoButtonColor = false, ZIndex = 5, }) corner(minBtn, 5) stroke(minBtn, COL.gray, 1) minBtn.MouseEnter:Connect(function() minBtn.BackgroundColor3 = COL.gray end) minBtn.MouseLeave:Connect(function() minBtn.BackgroundColor3 = COL.panel2 end) make("TextLabel", { Parent = header, BackgroundTransparency = 1, Size = UDim2.new(1, -80, 1, 0), Position = UDim2.new(0, 66, 0, 0), Text = "ZOMBIE", TextColor3 = COL.text, Font = Enum.Font.GothamBold, TextSize = 13, TextXAlignment = Enum.TextXAlignment.Left, }) make("TextLabel", { Parent = header, BackgroundTransparency = 1, Size = UDim2.new(1, -80, 1, 0), Position = UDim2.new(0, 130, 0, 0), Text = "| aimbot • esp • movement", TextColor3 = COL.accent, Font = Enum.Font.GothamMedium, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, }) local sidebar = make("Frame", { Parent = window, Size = UDim2.new(0, 130, 1, -60), Position = UDim2.new(0, 10, 0, 42), BackgroundColor3 = COL.panel, BorderSizePixel = 0, }) corner(sidebar, 8) stroke(sidebar, COL.gray, 1) make("UIListLayout", { Parent = sidebar, Padding = UDim.new(0, 6), SortOrder = Enum.SortOrder.LayoutOrder, HorizontalAlignment = Enum.HorizontalAlignment.Center, }) make("UIPadding", { Parent = sidebar, PaddingTop = UDim.new(0, 10), PaddingLeft = UDim.new(0, 8), PaddingRight = UDim.new(0, 8), }) local content = make("Frame", { Parent = window, Size = UDim2.new(1, -160, 1, -60), Position = UDim2.new(0, 148, 0, 42), BackgroundColor3 = COL.panel, BorderSizePixel = 0, }) corner(content, 8) stroke(content, COL.gray, 1) --============================================================= -- WIDGETS --============================================================= local function newPage(name) local page = make("ScrollingFrame", { Parent = content, Size = UDim2.new(1, -16, 1, -16), Position = UDim2.new(0, 8, 0, 8), BackgroundTransparency = 1, BorderSizePixel = 0, CanvasSize = UDim2.new(0, 0, 0, 0), AutomaticCanvasSize = Enum.AutomaticSize.Y, ScrollingDirection = Enum.ScrollingDirection.Y, ScrollBarThickness = 6, ScrollBarImageColor3 = COL.scroll, ScrollBarImageTransparency = 0.2, ElasticBehavior = Enum.ElasticBehavior.WhenScrollable, Visible = false, Name = name, }) make("UIListLayout", { Parent = page, Padding = UDim.new(0, 8), SortOrder = Enum.SortOrder.LayoutOrder, }) make("UIPadding", { Parent = page, PaddingBottom = UDim.new(0, 12), PaddingRight = UDim.new(0, 4), }) return page end local function sectionLabel(parent, text, order) local holder = make("Frame", { Parent = parent, Size = UDim2.new(1, 0, 0, 20), BackgroundTransparency = 1, LayoutOrder = order, }) make("Frame", { Parent = holder, Size = UDim2.new(0, 3, 1, 0), BackgroundColor3 = COL.accent, BorderSizePixel = 0, }) make("TextLabel", { Parent = holder, BackgroundTransparency = 1, Size = UDim2.new(1, -12, 1, 0), Position = UDim2.new(0, 10, 0, 0), Text = string.upper(text), TextColor3 = COL.accent2, Font = Enum.Font.GothamBold, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, }) return holder end local function noteLabel(parent, text, order, color) local lbl = make("TextLabel", { Parent = parent, Size = UDim2.new(1, 0, 0, 0), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, AutomaticSize = Enum.AutomaticSize.Y, Text = " " .. text, TextColor3 = color or COL.warn, Font = Enum.Font.Code, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextWrapped = true, LayoutOrder = order, }) make("UIPadding", { Parent = lbl, PaddingTop = UDim.new(0, 6), PaddingBottom = UDim.new(0, 6), PaddingLeft = UDim.new(0, 4), PaddingRight = UDim.new(0, 4), }) corner(lbl, 5) stroke(lbl, COL.gray, 1) return lbl end local function toggle(parent, label, default, order, onChange) local state = default or false local row = make("Frame", { Parent = parent, Size = UDim2.new(1, 0, 0, 28), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, LayoutOrder = order, }) corner(row, 5) stroke(row, COL.gray, 1) make("TextLabel", { Parent = row, BackgroundTransparency = 1, Size = UDim2.new(1, -60, 1, 0), Position = UDim2.new(0, 10, 0, 0), Text = label, TextColor3 = COL.text, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, }) local track = make("Frame", { Parent = row, Size = UDim2.new(0, 36, 0, 18), Position = UDim2.new(1, -46, 0.5, -9), BackgroundColor3 = COL.gray, BorderSizePixel = 0, }) corner(track, 9) local knob = make("Frame", { Parent = track, Size = UDim2.new(0, 14, 0, 14), Position = UDim2.new(0, 2, 0.5, -7), BackgroundColor3 = COL.text, BorderSizePixel = 0, }) corner(knob, 7) local btn = make("TextButton", { Parent = row, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = "", }) local function apply() if state then track.BackgroundColor3 = COL.accent knob.Position = UDim2.new(1, -16, 0.5, -7) else track.BackgroundColor3 = COL.gray knob.Position = UDim2.new(0, 2, 0.5, -7) end end apply() btn.MouseButton1Click:Connect(function() state = not state apply() if onChange then onChange(state) end end) return { set = function(v) state = v; apply(); if onChange then onChange(v) end end, get = function() return state end, } end local function slider(parent, label, min, max, default, order, onChange) local value = default local row = make("Frame", { Parent = parent, Size = UDim2.new(1, 0, 0, 44), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, LayoutOrder = order, }) corner(row, 5) stroke(row, COL.gray, 1) make("TextLabel", { Parent = row, BackgroundTransparency = 1, Size = UDim2.new(1, -80, 0, 20), Position = UDim2.new(0, 10, 0, 2), Text = label, TextColor3 = COL.text, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, }) local valLabel = make("TextLabel", { Parent = row, BackgroundTransparency = 1, Size = UDim2.new(0, 70, 0, 20), Position = UDim2.new(1, -80, 0, 2), Text = tostring(value), TextColor3 = COL.accent2, Font = Enum.Font.GothamBold, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Right, }) local track = make("Frame", { Parent = row, Size = UDim2.new(1, -20, 0, 4), Position = UDim2.new(0, 10, 0, 30), BackgroundColor3 = COL.gray, BorderSizePixel = 0, }) corner(track, 2) local fill = make("Frame", { Parent = track, Size = UDim2.new(0, 0, 1, 0), BackgroundColor3 = COL.accent, BorderSizePixel = 0, }) corner(fill, 2) local knob = make("Frame", { Parent = track, Size = UDim2.new(0, 12, 0, 12), Position = UDim2.new(0, -6, 0.5, -6), BackgroundColor3 = COL.text, BorderSizePixel = 0, ZIndex = 2, }) corner(knob, 6) local function setValue(v, fire) v = math.clamp(v, min, max) value = v local a = (v - min) / (max - min) fill.Size = UDim2.new(a, 0, 1, 0) knob.Position = UDim2.new(a, -6, 0.5, -6) valLabel.Text = tostring(math.floor(v * 100 + 0.5) / 100) if fire and onChange then onChange(v) end end setValue(default, false) local dragging = false local hit = make("TextButton", { Parent = track, Size = UDim2.new(1, 0, 3, 0), Position = UDim2.new(0, 0, -1, 0), BackgroundTransparency = 1, Text = "", }) local function up(input) local rel = math.clamp( (input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1) setValue(min + rel * (max - min), true) end hit.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true up(input) end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then up(input) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) return { set = function(v) setValue(v, true) end, get = function() return value end, } end local function dropdown(parent, label, options, default, order, onChange) local value = default or options[1] local open = false local HEAD_H, ITEM_H, ITEM_GAP, PAD = 28, 20, 2, 6 local fullH = #options * ITEM_H + math.max(0, #options - 1) * ITEM_GAP + PAD * 2 local MAX_LIST_H = 6 * ITEM_H + 5 * ITEM_GAP + PAD * 2 local listH = math.min(fullH, MAX_LIST_H) local LIST_GAP = 6 local holder = make("Frame", { Parent = parent, Size = UDim2.new(1, 0, 0, HEAD_H), BackgroundTransparency = 1, LayoutOrder = order, ClipsDescendants = false, }) local head = make("Frame", { Parent = holder, Size = UDim2.new(1, 0, 0, HEAD_H), Position = UDim2.new(0, 0, 0, 0), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, }) corner(head, 5) stroke(head, COL.gray, 1) make("TextLabel", { Parent = head, BackgroundTransparency = 1, Size = UDim2.new(1, -90, 1, 0), Position = UDim2.new(0, 10, 0, 0), Text = label, TextColor3 = COL.text, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, }) local valLabel = make("TextLabel", { Parent = head, BackgroundTransparency = 1, Size = UDim2.new(0, 80, 1, 0), Position = UDim2.new(1, -80, 0, 0), Text = tostring(value) .. " v", TextColor3 = COL.accent2, Font = Enum.Font.GothamMedium, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Right, }) local list = make("ScrollingFrame", { Parent = holder, Size = UDim2.new(1, 0, 0, listH), Position = UDim2.new(0, 0, 0, HEAD_H + LIST_GAP), BackgroundColor3 = COL.bg, BorderSizePixel = 0, Visible = false, CanvasSize = UDim2.new(0, 0, 0, 0), AutomaticCanvasSize = Enum.AutomaticSize.Y, ScrollingDirection = Enum.ScrollingDirection.Y, ScrollBarThickness = 5, ScrollBarImageColor3 = COL.scroll, ScrollBarImageTransparency = 0.2, ElasticBehavior = Enum.ElasticBehavior.WhenScrollable, }) corner(list, 5) stroke(list, COL.accent, 1) make("UIListLayout", { Parent = list, Padding = UDim.new(0, ITEM_GAP), SortOrder = Enum.SortOrder.LayoutOrder, }) make("UIPadding", { Parent = list, PaddingTop = UDim.new(0, PAD), PaddingBottom = UDim.new(0, PAD), PaddingLeft = UDim.new(0, 4), PaddingRight = UDim.new(0, 4), }) local function setOpen(v) open = v list.Visible = v holder.Size = UDim2.new(1, 0, 0, v and (HEAD_H + LIST_GAP + listH) or HEAD_H) end for i, opt in ipairs(options) do local ob = make("TextButton", { Parent = list, Size = UDim2.new(1, 0, 0, ITEM_H), BackgroundColor3 = COL.panel, BorderSizePixel = 0, Text = opt, TextColor3 = COL.text, Font = Enum.Font.Gotham, TextSize = 11, AutoButtonColor = false, LayoutOrder = i, }) corner(ob, 4) ob.MouseEnter:Connect(function() ob.BackgroundColor3 = COL.panel2 end) ob.MouseLeave:Connect(function() ob.BackgroundColor3 = COL.panel end) ob.MouseButton1Click:Connect(function() value = opt valLabel.Text = tostring(opt) .. " v" setOpen(false) if onChange then onChange(opt) end end) end local btn = make("TextButton", { Parent = head, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = "", }) btn.MouseButton1Click:Connect(function() setOpen(not open) end) return { set = function(v) value = v valLabel.Text = tostring(v) .. " v" if onChange then onChange(v) end end, get = function() return value end, } end local function navButton(text, order, onClick) local btn = make("TextButton", { Parent = sidebar, Size = UDim2.new(1, 0, 0, 30), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, Text = text, TextColor3 = COL.text, Font = Enum.Font.GothamMedium, TextSize = 12, AutoButtonColor = false, LayoutOrder = order, }) corner(btn, 5) stroke(btn, COL.gray, 1) btn.MouseEnter:Connect(function() btn.BackgroundColor3 = COL.gray end) btn.MouseLeave:Connect(function() if not btn:GetAttribute("active") then btn.BackgroundColor3 = COL.panel2 end end) btn.MouseButton1Click:Connect(function() onClick(btn) end) return btn end local function actionButton(parent, label, order, color, hoverColor, onClick) local btn = make("TextButton", { Parent = parent, Size = UDim2.new(1, 0, 0, 30), BackgroundColor3 = color or COL.panel2, BorderSizePixel = 0, Text = label, TextColor3 = COL.text, Font = Enum.Font.GothamMedium, TextSize = 12, AutoButtonColor = false, LayoutOrder = order, }) corner(btn, 5) stroke(btn, COL.gray, 1) local base = color or COL.panel2 local hover = hoverColor or COL.gray btn.MouseEnter:Connect(function() btn.BackgroundColor3 = hover end) btn.MouseLeave:Connect(function() btn.BackgroundColor3 = base end) btn.MouseButton1Click:Connect(function() local ok, err = pcall(onClick) if not ok then warn("[ZG] " .. tostring(err)) end end) return btn end --============================================================= -- PAGES --============================================================= local pageAim = newPage("Aimbot") local pageVisuals = newPage("Visuals") local pageMove = newPage("Movement") local pageSettings = newPage("Settings") local allPages = { pageAim, pageVisuals, pageMove, pageSettings } local navButtons = {} local function showPage(page, btn) for _, p in ipairs(allPages) do p.Visible = (p == page) end for _, b in ipairs(navButtons) do b:SetAttribute("active", false) b.BackgroundColor3 = COL.panel2 end if btn then btn:SetAttribute("active", true) btn.BackgroundColor3 = COL.accent end end --============================================================= -- MOVEMENT WARNING MODAL --============================================================= local movementWarningShown = false local modal = make("Frame", { Parent = window, Size = UDim2.new(1, 0, 1, 0), Position = UDim2.new(0, 0, 0, 0), BackgroundColor3 = Color3.fromRGB(0, 0, 0), BackgroundTransparency = 0.55, BorderSizePixel = 0, Visible = false, ZIndex = 50, }) corner(modal, 10) local modalPanel = make("Frame", { Parent = modal, Size = UDim2.new(0, 440, 0, 280), Position = UDim2.new(0.5, -220, 0.5, -140), BackgroundColor3 = COL.bg, BorderSizePixel = 0, ZIndex = 51, }) corner(modalPanel, 8) stroke(modalPanel, COL.accent, 1) local modalStrip = make("Frame", { Parent = modalPanel, Size = UDim2.new(1, 0, 0, 4), Position = UDim2.new(0, 0, 0, 0), BackgroundColor3 = COL.danger, BorderSizePixel = 0, ZIndex = 52, }) corner(modalStrip, 8) make("TextLabel", { Parent = modalPanel, Size = UDim2.new(1, -24, 0, 26), Position = UDim2.new(0, 14, 0, 14), BackgroundTransparency = 1, Text = "⚠ ANTI-CHEAT WARNING", TextColor3 = COL.danger, Font = Enum.Font.GothamBold, TextSize = 14, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 52, }) make("TextLabel", { Parent = modalPanel, Size = UDim2.new(1, -28, 0, 180), Position = UDim2.new(0, 14, 0, 48), BackgroundTransparency = 1, Text = "Movement features (speed, jump, flight, noclip) are the " .. "most heavily monitored cheats in almost every Roblox game.\n\n" .. "This game likely runs a server-side speed / position delta " .. "check. Anything above ~40 studs/s is usually flagged, and " .. "flight often breaks the 'player must be on the ground' rule " .. "the moment you go airborne.\n\n" .. "Movement features are the #1 reason people get banned. " .. "Keep speeds low, don't fly for long stretches, and turn " .. "them off when you're near other players.\n\n" .. "Use at your own risk.", TextColor3 = COL.text, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Top, TextWrapped = true, ZIndex = 52, }) local understandBtn = make("TextButton", { Parent = modalPanel, Size = UDim2.new(0, 180, 0, 34), Position = UDim2.new(0.5, -90, 1, -46), BackgroundColor3 = COL.accent, BorderSizePixel = 0, Text = "I understand", TextColor3 = COL.text, Font = Enum.Font.GothamBold, TextSize = 12, AutoButtonColor = false, ZIndex = 52, }) corner(understandBtn, 6) understandBtn.MouseEnter:Connect(function() understandBtn.BackgroundColor3 = COL.accent2 end) understandBtn.MouseLeave:Connect(function() understandBtn.BackgroundColor3 = COL.accent end) understandBtn.MouseButton1Click:Connect(function() movementWarningShown = true modal.Visible = false end) --============================================================= -- NAVIGATION --============================================================= navButtons[1] = navButton("Aimbot", 1, function(b) showPage(pageAim, b) end) navButtons[2] = navButton("Visuals", 2, function(b) showPage(pageVisuals, b) end) navButtons[3] = navButton("Movement", 3, function(b) showPage(pageMove, b) if not movementWarningShown then modal.Visible = true end end) navButtons[4] = navButton("Settings", 4, function(b) showPage(pageSettings, b) end) --============================================================= -- AIMBOT PAGE --============================================================= sectionLabel(pageAim, "Aimbot", 1) toggle(pageAim, "Enable Aimbot", Config.aimbot.enabled, 2, function(v) Config.aimbot.enabled = v end) dropdown(pageAim, "Targets", { "Players", "Zombies", "Both" }, Config.aimbot.targetKind, 3, function(v) Config.aimbot.targetKind = v end) toggle(pageAim, "Visible Only (Wall Check)", Config.aimbot.visibleOnly, 4, function(v) Config.aimbot.visibleOnly = v end) toggle(pageAim, "Show FOV Circle", Config.aimbot.showFov, 5, function(v) Config.aimbot.showFov = v end) slider(pageAim, "FOV Radius", 20, 800, Config.aimbot.fov, 6, function(v) Config.aimbot.fov = v end) slider(pageAim, "Smoothness", 1, 20, Config.aimbot.smoothness, 7, function(v) Config.aimbot.smoothness = v end) dropdown(pageAim, "Aim Part", PLAYER_TARGET_PARTS, Config.aimbot.targetPart, 8, function(v) Config.aimbot.targetPart = v end) --============================================================= -- VISUALS PAGE --============================================================= sectionLabel(pageVisuals, "Player ESP", 1) toggle(pageVisuals, "Enable Player ESP", Config.playerESP.enabled, 2, function(v) Config.playerESP.enabled = v end) toggle(pageVisuals, "Player Box", Config.playerESP.box, 3, function(v) Config.playerESP.box = v end) toggle(pageVisuals, "Player Name", Config.playerESP.name, 4, function(v) Config.playerESP.name = v end) toggle(pageVisuals, "Player Health", Config.playerESP.health, 5, function(v) Config.playerESP.health = v end) toggle(pageVisuals, "Player Distance", Config.playerESP.distance, 6, function(v) Config.playerESP.distance = v end) slider(pageVisuals, "Player Max Distance", 100, 20000, Config.playerESP.maxDist, 7, function(v) Config.playerESP.maxDist = v end) sectionLabel(pageVisuals, "Mob ESP", 8) toggle(pageVisuals, "Enable Mob ESP", Config.mobESP.enabled, 9, function(v) Config.mobESP.enabled = v end) toggle(pageVisuals, "Mob Box", Config.mobESP.box, 10, function(v) Config.mobESP.box = v end) toggle(pageVisuals, "Mob Name", Config.mobESP.name, 11, function(v) Config.mobESP.name = v end) toggle(pageVisuals, "Mob Health", Config.mobESP.health, 12, function(v) Config.mobESP.health = v end) toggle(pageVisuals, "Mob Distance", Config.mobESP.distance, 13, function(v) Config.mobESP.distance = v end) slider(pageVisuals, "Mob Max Distance", 100, 20000, Config.mobESP.maxDist, 14, function(v) Config.mobESP.maxDist = v end) --============================================================= -- MOVEMENT PAGE --============================================================= sectionLabel(pageMove, "Speed", 1) toggle(pageMove, "Enable Speed", Config.move.speed.enabled, 2, function(v) Config.move.speed.enabled = v end) slider(pageMove, "Walk Speed", 16, 300, Config.move.speed.value, 3, function(v) Config.move.speed.value = v end) sectionLabel(pageMove, "Jump", 4) toggle(pageMove, "Enable Jump", Config.move.jump.enabled, 5, function(v) Config.move.jump.enabled = v end) slider(pageMove, "Jump Power", 50, 500, Config.move.jump.value, 6, function(v) Config.move.jump.value = v end) sectionLabel(pageMove, "Flight", 7) toggle(pageMove, "Enable Flight", Config.move.fly.enabled, 8, function(v) Config.move.fly.enabled = v end) slider(pageMove, "Flight Speed", 5, 150, Config.move.fly.speed, 9, function(v) Config.move.fly.speed = v end) noteLabel(pageMove, "Flight controls:\n" .. " W / A / S / D — move horizontally\n" .. " Space — fly up\n" .. " Left Ctrl — fly down\n\n" .. "Keep speed at 25-30 unless you know the AC threshold.\n" .. "Server-side speed checks usually kick around 40-50.", 10) sectionLabel(pageMove, "Noclip", 11) toggle(pageMove, "Enable Noclip", Config.move.noclip.enabled, 12, function(v) Config.move.noclip.enabled = v end) noteLabel(pageMove, "Noclip disables CanCollide on your character's parts every\n" .. "frame. Turn it off when you're done — some games check\n" .. "for it during kills or damage events.\n\n" .. "⚠ Movement features are the #1 ban cause. See the\n" .. " warning on your first click of this tab.", 13, COL.danger) --============================================================= -- SETTINGS PAGE --============================================================= sectionLabel(pageSettings, "Menu Keybind", 1) local kbRow = make("Frame", { Parent = pageSettings, Size = UDim2.new(1, 0, 0, 28), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, LayoutOrder = 2, }) corner(kbRow, 5) stroke(kbRow, COL.gray, 1) make("TextLabel", { Parent = kbRow, BackgroundTransparency = 1, Size = UDim2.new(1, -120, 1, 0), Position = UDim2.new(0, 10, 0, 0), Text = "Toggle Menu", TextColor3 = COL.text, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, }) local kbValueLabel = make("TextLabel", { Parent = kbRow, BackgroundTransparency = 1, Size = UDim2.new(0, 110, 1, 0), Position = UDim2.new(1, -118, 0, 0), Text = Config.ui.toggleKey.Name, TextColor3 = COL.accent2, Font = Enum.Font.GothamBold, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Right, }) local kbBtn = make("TextButton", { Parent = kbRow, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = "", }) local awaitingKey = false kbBtn.MouseButton1Click:Connect(function() awaitingKey = true kbValueLabel.Text = "press a key..." kbValueLabel.TextColor3 = COL.dim end) sectionLabel(pageSettings, "Diagnostics", 3) local debugLbl = make("TextLabel", { Parent = pageSettings, Size = UDim2.new(1, 0, 0, 0), BackgroundColor3 = COL.panel2, BorderSizePixel = 0, AutomaticSize = Enum.AutomaticSize.Y, Text = " Click Debug Lookup to scan player -> character mapping.", TextColor3 = COL.dim, Font = Enum.Font.Code, TextSize = 11, TextXAlignment = Enum.TextXAlignment.Left, TextWrapped = true, LayoutOrder = 5, }) make("UIPadding", { Parent = debugLbl, PaddingTop = UDim.new(0, 8), PaddingBottom = UDim.new(0, 8), PaddingLeft = UDim.new(0, 4), PaddingRight = UDim.new(0, 4), }) corner(debugLbl, 5) stroke(debugLbl, COL.gray, 1) actionButton(pageSettings, "Debug Lookup", 4, COL.accent, COL.accent2, function() local lines = {} lines[#lines + 1] = ("Players: %d"):format(#Players:GetPlayers()) for _, plr in ipairs(Players:GetPlayers()) do local ignored = isIgnoredPlayer(plr) and " [IGNORED]" or "" local c, how = findPlayerCharacter(plr) lines[#lines + 1] = (" %s%s"):format(plr.Name, ignored) lines[#lines + 1] = (" -> %s"):format( c and (c:GetFullName() .. " [" .. tostring(how) .. "]") or "MISSING") end local chars = workspace:FindFirstChild(Config.world.charactersFolder) lines[#lines + 1] = "" lines[#lines + 1] = ("workspace.%s: %s"):format( Config.world.charactersFolder, chars and "found" or "MISSING") if chars then local kids = chars:GetChildren() lines[#lines + 1] = (" children: %d"):format(#kids) for i = 1, math.min(#kids, 10) do lines[#lines + 1] = (" %d. %s [%s]"):format( i, kids[i].Name, kids[i].ClassName) end if #kids > 10 then lines[#lines + 1] = " ..." end end local zombies = workspace:FindFirstChild(Config.world.zombiesFolder) lines[#lines + 1] = "" lines[#lines + 1] = ("workspace.%s: %s"):format( Config.world.zombiesFolder, zombies and "found" or "MISSING") if zombies then local kids = zombies:GetChildren() lines[#lines + 1] = (" children: %d"):format(#kids) for i = 1, math.min(#kids, 5) do lines[#lines + 1] = (" %d. %s [%s]"):format( i, kids[i].Name, kids[i].ClassName) end if #kids > 5 then lines[#lines + 1] = " ..." end end debugLbl.Text = " " .. table.concat(lines, "\n ") debugLbl.TextColor3 = COL.text end) --============================================================= -- MENU VISIBILITY --============================================================= local function setMenuVisible(v) if window and window.Parent then window.Visible = v end end local function setToggleKey(keyCode) Config.ui.toggleKey = keyCode kbValueLabel.Text = keyCode.Name kbValueLabel.TextColor3 = COL.accent2 end minBtn.MouseButton1Click:Connect(function() setMenuVisible(false) end) UserInputService.InputBegan:Connect(function(input, gpe) if gpe then return end if awaitingKey then if input.UserInputType == Enum.UserInputType.Keyboard then awaitingKey = false setToggleKey(input.KeyCode) end return end if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == Config.ui.toggleKey then local isOpen = window and window.Visible setMenuVisible(not isOpen) end end) --============================================================= -- DRAG --============================================================= do local dragging, dragStart, startPos = false, nil, nil header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = window.Position end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local d = input.Position - dragStart window.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y) end end) end --============================================================= -- DRAWINGS --============================================================= local Drawings = { fov = nil, players = {}, mobs = {}, } do local fov = Drawing.new("Circle") fov.Thickness = 1.5 fov.NumSides = 80 fov.Filled = false fov.Color = COL.accent fov.Transparency = 0.9 fov.Visible = false Drawings.fov = fov end local function newText(size, color) local t = Drawing.new("Text") t.Size = size or 13 t.Center = true t.Outline = true t.Color = color or COL.text t.Font = 2 t.Visible = false return t end local function newBox(color) local b = Drawing.new("Square") b.Thickness = 1.5 b.Filled = false b.Color = color b.Transparency = 1 b.Visible = false return b end local function ensureSet(bucket, key, boxColor) local set = bucket[key] if set then return set end set = { box = newBox(boxColor), name = newText(14, boxColor), hp = newText(13, COL.ok), dist = newText(13, COL.dim), } set.hp.Center = false bucket[key] = set return set end local function hideSet(set) if not set then return end set.box.Visible = false set.name.Visible = false set.hp.Visible = false set.dist.Visible = false end local function removeSet(set) if not set then return end for _, k in ipairs({ "box", "name", "hp", "dist" }) do pcall(function() set[k]:Remove() end) end end --============================================================= -- DRAW HELPER --============================================================= local function drawEntity(set, char, label, cfg, myRoot, color) local head = getEntityHead(char) local root = getEntityRoot(char) if not head or not root then hideSet(set) return end local headScreen, headOn = worldToViewport(head.Position + Vector3.new(0, 0.6, 0)) local footScreen, footOn = worldToViewport(root.Position - Vector3.new(0, 2.6, 0)) if not (headOn or footOn) then hideSet(set) return end local dist = 0 if myRoot then dist = (myRoot.Position - root.Position).Magnitude end if cfg.maxDist and dist > cfg.maxDist then hideSet(set) return end if cfg.box then local topY = math.min(headScreen.Y, footScreen.Y) local bottomY = math.max(headScreen.Y, footScreen.Y) local h = bottomY - topY local w = h * 0.55 local cx = (headScreen.X + footScreen.X) / 2 if h < MIN_BOX_H then h = MIN_BOX_H end if w < MIN_BOX_W then w = MIN_BOX_W end set.box.Size = Vector2.new(w, h) set.box.Position = Vector2.new(cx - w / 2, topY) set.box.Visible = true else set.box.Visible = false end local visualTop = set.box.Visible and set.box.Position.Y or (headScreen.Y - MIN_BOX_H / 2) local visualBottom = visualTop + (set.box.Visible and set.box.Size.Y or MIN_BOX_H) if cfg.name then set.name.Position = Vector2.new(headScreen.X, visualTop - 18) set.name.Text = label set.name.Color = color set.name.Visible = true else set.name.Visible = false end if cfg.health then local cur, mx = getEntityHealth(char) local pct = math.clamp(cur / math.max(1, mx), 0, 1) set.hp.Position = Vector2.new(headScreen.X + 34, visualTop) set.hp.Text = string.format("%d", math.floor(cur + 0.5)) set.hp.Color = Color3.fromRGB( math.floor(255 * (1 - pct)), math.floor(255 * pct), 90) set.hp.Visible = true else set.hp.Visible = false end if cfg.distance then set.dist.Position = Vector2.new(headScreen.X, visualBottom + 4) set.dist.Text = string.format("[%d]", math.floor(dist)) set.dist.Visible = true else set.dist.Visible = false end end --============================================================= -- AIMBOT --============================================================= local aimHeld = false UserInputService.InputBegan:Connect(function(input, gpe) if gpe then return end if input.UserInputType == Config.aimbot.keybind then aimHeld = true end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Config.aimbot.keybind then aimHeld = false end end) local function findBestTarget() if not Config.aimbot.enabled or not aimHeld then return nil end local mouse = UserInputService:GetMouseLocation() local best, bestDist = nil, math.huge local fov = Config.aimbot.fov local kind = Config.aimbot.targetKind local partName = Config.aimbot.targetPart local function consider(entity, isPlayer) local hum = entity:FindFirstChildOfClass("Humanoid") if hum and hum.Health <= 0 then return end local part = entity:FindFirstChild(partName) or entity:FindFirstChild("Head") or entity:FindFirstChild("HumanoidRootPart") if not part then return end if Config.aimbot.visibleOnly and not isVisible(part, entity) then return end local sp, onScreen = worldToViewport(part.Position) if not onScreen then return end local d = (sp - mouse).Magnitude if d <= fov and d < bestDist then bestDist = d best = { part = part, screen = sp, isPlayer = isPlayer } end end if kind == "Players" or kind == "Both" then for _, plr in ipairs(getRealPlayers()) do if plr ~= LP then local c = findPlayerCharacter(plr) if c and entityIsAlive(c) then consider(c, true) end end end end if kind == "Zombies" or kind == "Both" then for _, z in ipairs(getMobs()) do if entityIsAlive(z) then consider(z, false) end end end return best end --============================================================= -- MOVEMENT --============================================================= local flyBV = nil local speedWasOn = false local speedPrev = 16 local jumpWasOn = false local jumpPrev = { JumpPower = 50, JumpHeight = 7.2, UseJumpPower = true } local function clearFlyBV() if flyBV then pcall(function() flyBV:Destroy() end) flyBV = nil end end local function getOrCreateFlyBV() local root = getMyRoot() if not root then return nil end if flyBV and flyBV.Parent == root then return flyBV end clearFlyBV() flyBV = Instance.new("BodyVelocity") flyBV.MaxForce = Vector3.new(math.huge, math.huge, math.huge) flyBV.P = 1250 flyBV.Parent = root return flyBV end local function onCharacter() clearFlyBV() speedWasOn = false jumpWasOn = false end if LP.Character then onCharacter() end LP.CharacterAdded:Connect(onCharacter) local function updateMovement() local char = LP.Character local hum = char and char:FindFirstChildOfClass("Humanoid") local root = getMyRoot() if hum then if Config.move.speed.enabled then if not speedWasOn then speedPrev = hum.WalkSpeed speedWasOn = true end hum.WalkSpeed = Config.move.speed.value elseif speedWasOn then hum.WalkSpeed = speedPrev speedWasOn = false end if Config.move.jump.enabled then if not jumpWasOn then jumpPrev.JumpPower = hum.JumpPower jumpPrev.JumpHeight = hum.JumpHeight jumpPrev.UseJumpPower = hum.UseJumpPower jumpWasOn = true end hum.UseJumpPower = true hum.JumpPower = Config.move.jump.value elseif jumpWasOn then hum.UseJumpPower = jumpPrev.UseJumpPower hum.JumpPower = jumpPrev.JumpPower hum.JumpHeight = jumpPrev.JumpHeight jumpWasOn = false end end if Config.move.fly.enabled and root and hum then local bv = getOrCreateFlyBV() if bv then local move = Vector3.zero local camCF = Camera.CFrame if UserInputService:IsKeyDown(Enum.KeyCode.W) then move = move + camCF.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.S) then move = move - camCF.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.A) then move = move - camCF.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.D) then move = move + camCF.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.Space) then move = move + Vector3.new(0, 1, 0) end if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then move = move - Vector3.new(0, 1, 0) end if move.Magnitude > 0 then move = move.Unit * Config.move.fly.speed end bv.Velocity = move end else clearFlyBV() end if Config.move.noclip.enabled and char then for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") and part.CanCollide then part.CanCollide = false end end end end --============================================================= -- MAIN LOOP --============================================================= local renderConn renderConn = RunService.RenderStepped:Connect(function() if not gui or not gui.Parent then return end updateMovement() local mouse = UserInputService:GetMouseLocation() local myRoot = getMyRoot() Drawings.fov.Position = mouse Drawings.fov.Radius = Config.aimbot.fov Drawings.fov.Visible = Config.aimbot.showFov and Config.aimbot.enabled local target = findBestTarget() if target and EX.mousemoverel then local dx = target.screen.X - mouse.X local dy = target.screen.Y - mouse.Y local smooth = math.max(1, Config.aimbot.smoothness) if math.abs(dx) > 0.5 or math.abs(dy) > 0.5 then pcall(EX.mousemoverel, dx / smooth, dy / smooth) end end if Config.playerESP.enabled then local seen = {} for _, plr in ipairs(getRealPlayers()) do if plr == LP then hideSet(Drawings.players[plr]) else local c = findPlayerCharacter(plr) if c and entityIsAlive(c) then seen[plr] = true local set = ensureSet(Drawings.players, plr, COL.pEsp) drawEntity(set, c, plr.Name, Config.playerESP, myRoot, COL.pEsp) else hideSet(Drawings.players[plr]) end end end for plr, set in pairs(Drawings.players) do if not seen[plr] then hideSet(set) end end else for _, set in pairs(Drawings.players) do hideSet(set) end end if Config.mobESP.enabled then local seen = {} for _, z in ipairs(getMobs()) do if entityIsAlive(z) then seen[z] = true local set = ensureSet(Drawings.mobs, z, COL.mEsp) drawEntity(set, z, z.Name, Config.mobESP, myRoot, COL.mEsp) else hideSet(Drawings.mobs[z]) end end for z, set in pairs(Drawings.mobs) do if not seen[z] then hideSet(set) if not z.Parent then removeSet(set) Drawings.mobs[z] = nil end end end else for _, set in pairs(Drawings.mobs) do hideSet(set) end end end) Players.PlayerRemoving:Connect(function(plr) local set = Drawings.players[plr] if set then removeSet(set) Drawings.players[plr] = nil end end) --============================================================= -- TERMINATE --============================================================= local terminated = false local function terminate() if terminated then return end terminated = true if renderConn then renderConn:Disconnect() end clearFlyBV() local char = LP.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then if speedWasOn then hum.WalkSpeed = speedPrev end if jumpWasOn then hum.UseJumpPower = jumpPrev.UseJumpPower hum.JumpPower = jumpPrev.JumpPower hum.JumpHeight = jumpPrev.JumpHeight end end for _, set in pairs(Drawings.players) do removeSet(set) end Drawings.players = {} for _, set in pairs(Drawings.mobs) do removeSet(set) end Drawings.mobs = {} pcall(function() Drawings.fov:Remove() end) if gui then gui:Destroy() end gui = nil _G.ZG_Cheat = nil if EX.getgenv then local ok, env = pcall(EX.getgenv) if ok and env then env.ZG_Cheat = nil end end print("[ZG_Cheat] terminated.") end closeBtn.MouseButton1Click:Connect(terminate) --============================================================= -- BOOT --============================================================= showPage(pageAim, navButtons[1]) _G.ZG_Cheat = { Config = Config, terminate = terminate } if EX.getgenv then local ok, env = pcall(EX.getgenv) if ok and env then env.ZG_Cheat = _G.ZG_Cheat end end