M
Description
OPEN/CLOSE GUI = home (can be changed in settings) Aimbot Esp Flight Speed Jump lmk if there are any issues/games you want me to make scripts for
GAMEApocalypse Rising 2
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. 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 BloxScripts 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
endReview the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place