-- [[ 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 ]] --============================================================= -- Zombie Game | aimbot + esp + movement (FIXED / OPTIMIZED) -- Fix: menu acilmama + agirlik sorunlari giderildi --============================================================= -- ESKI INSTANCE TEMIZLE (2. inject'te cift menu / acilmama yapar) pcall(function() if _G.ZG_Cheat and type(_G.ZG_Cheat.terminate) == "function" then _G.ZG_Cheat.terminate() end end) pcall(function() local _LP = game:GetService("Players").LocalPlayer local function killIn(parent) if not parent then return end local old = parent:FindFirstChild("ZG_Cheat") if old then pcall(function() old:Destroy() end) end end killIn(_LP:FindFirstChildOfClass("PlayerGui")) pcall(function() killIn(game:GetService("CoreGui")) end) local okH, hui = pcall(gethui) if okH and hui then killIn(hui) end local okH2, h2 = pcall(function() return get_hidden_gui and get_hidden_gui() end) if okH2 and h2 then killIn(h2) end end) task.wait(0.05) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LP = Players.LocalPlayer local Camera = workspace.CurrentCamera local IGNORED_PLAYER_NAMES = { ["Not a Player lol"] = true } -- gui forward-declare (isVisible icinden erisilir; eskiden global nil bakiyordu) local gui = nil --============================================================= -- 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)(), } -- Drawing destegi yoksa ESP/FOV kapat ama MENU YINE ACILSIN -- (eski script Drawing.new'da patlayip menuyu hic gostermiyordu) local HAS_DRAWING = false pcall(function() local t = Drawing.new("Text") t.Visible = false pcall(function() t:Remove() end) HAS_DRAWING = true end) --============================================================= -- CONFIG --============================================================= local Config = { aimbot = { enabled = false, keybind = Enum.UserInputType.MouseButton2, targetKind = "Zombies", fov = 150, smoothness = 4, targetPart = "Head", visibleOnly = false, showFov = true, }, combat = { s2f = { enabled = false, cps = 10 }, }, 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 }, pulse = { enabled = false, speed = 60, onTime = 0.5, offTime = 0.8 }, jump = { enabled = false, value = 75 }, fly = { enabled = false, speed = 25 }, noclip = { enabled = false }, }, world = { charactersFolder = "Characters", zombiesFolder = "Zombies", }, ui = { toggleKey = Enum.KeyCode.Home, }, } if not HAS_DRAWING then Config.playerESP.enabled = false Config.mobESP.enabled = false Config.aimbot.showFov = false end 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 (ASLA WaitForChild YOK - takilma sebebi #1) --============================================================= 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, h2 = pcall(function() return get_hidden_gui and get_hidden_gui() end) if ok and h2 then return h2 end local ok2, cg = pcall(function() return game:GetService("CoreGui") end) if ok2 and cg then local ok3 = pcall(function() local t = Instance.new("ScreenGui") t.Name = "__zg_test" t.Parent = cg t:Destroy() end) if ok3 then return cg end end local pg = LP:FindFirstChildOfClass("PlayerGui") if pg then return pg end return LP:WaitForChild("PlayerGui", 5) or LP:FindFirstChildOfClass("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 plr ~= nil and not isIgnoredPlayer(plr) then out[#out + 1] = plr end end return out end -- HAM lookup (yavas: GetDescendants var) local function findPlayerCharacterRaw(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 -- CACHE: her frame GetDescendants yapma (performans sebebi #1) -- 1 sn gecerli, char ölünce / parentsiz kalinca invalidate local charCache = {} local function findPlayerCharacter(plr) local now = os.clock() local e = charCache[plr] if e and now < e.exp then local c = e.char if c and c.Parent and c:IsDescendantOf(workspace) then return c, e.how end end local c, how = findPlayerCharacterRaw(plr) charCache[plr] = { char = c, how = how, exp = now + 1 } return c, how end Players.PlayerRemoving:Connect(function(plr) charCache[plr] = nil end) -- Zombies klasor cache (her frame FindFirstChild yapma) local zombiesFolderCache = nil local zombiesFolderExp = 0 local function getZombiesFolder() local now = os.clock() if zombiesFolderCache and zombiesFolderCache.Parent and now < zombiesFolderExp then return zombiesFolderCache end zombiesFolderCache = workspace:FindFirstChild(Config.world.zombiesFolder) zombiesFolderExp = now + 2 return zombiesFolderCache end local function getMobs() local folder = getZombiesFolder() 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 -- RaycastParams tek seferlik (her aim kontrolunde new() yapma) local visParams = RaycastParams.new() visParams.FilterType = Enum.RaycastFilterType.Exclude local function isVisible(targetPart, ignoreModel) if not targetPart then return false end local origin = Camera.CFrame.Position local dir = targetPart.Position - origin visParams.FilterDescendantsInstances = { LP.Character, ignoreModel, gui } local hit = workspace:Raycast(origin, dir, visParams) 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 pcall(function() inst[k] = v end) end end if props and props.Parent then xpcall(function() inst.Parent = props.Parent end, function() end) 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 --============================================================= 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 = HAS_DRAWING and "| aimbot • esp • movement" or "| NO DRAWING: esp kapali", 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, ZIndex = 20, }) 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 (speed, jump, flight, noclip) en cok izlenen hiledir.\n\n" .. "40 stud/s ustu genelde flag yer. Flight uzun sure acik kalirsa ban riski yuksek.\n\n" .. "Hizlari dusuk tut, yakininda oyuncu varken kapat.\n\n" .. "Kullanimi kendi sorumlulugundadir.", 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("Combat", 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, "Combat", 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) if not EX.mousemoverel then noteLabel(pageAim, "mousemoverel bulunamadi: aimbot calismaz, executor degistir.", 9, COL.danger) end sectionLabel(pageAim, "S2F (Spam To Fire)", 10) toggle(pageAim, "Enable S2F", Config.combat.s2f.enabled, 11, function(v) Config.combat.s2f.enabled = v end) slider(pageAim, "S2F CPS (saniyede tik)", 2, 25, Config.combat.s2f.cps, 12, function(v) Config.combat.s2f.cps = math.floor(v) end) noteLabel(pageAim, "S2F acikken SOL TIK'a basili tutarsan otomatik tiklar.\n" .. "CPS 8-12 ideal, 25 ustu riskli. Menuye tiklarsan ates etmez.", 13) --============================================================= -- VISUALS PAGE --============================================================= sectionLabel(pageVisuals, "Player ESP", 1) if not HAS_DRAWING then noteLabel(pageVisuals, "Drawing API yok: ESP bu executorda calismaz, menu yine acilir.", 2, COL.danger) end toggle(pageVisuals, "Enable Player ESP", Config.playerESP.enabled, 3, function(v) Config.playerESP.enabled = HAS_DRAWING and v or false end) toggle(pageVisuals, "Player Box", Config.playerESP.box, 4, function(v) Config.playerESP.box = v end) toggle(pageVisuals, "Player Name", Config.playerESP.name, 5, function(v) Config.playerESP.name = v end) toggle(pageVisuals, "Player Health", Config.playerESP.health, 6, function(v) Config.playerESP.health = v end) toggle(pageVisuals, "Player Distance", Config.playerESP.distance, 7, function(v) Config.playerESP.distance = v end) slider(pageVisuals, "Player Max Distance", 100, 20000, Config.playerESP.maxDist, 8, function(v) Config.playerESP.maxDist = v end) sectionLabel(pageVisuals, "Mob ESP", 9) toggle(pageVisuals, "Enable Mob ESP", Config.mobESP.enabled, 10, function(v) Config.mobESP.enabled = HAS_DRAWING and v or false end) toggle(pageVisuals, "Mob Box", Config.mobESP.box, 11, function(v) Config.mobESP.box = v end) toggle(pageVisuals, "Mob Name", Config.mobESP.name, 12, function(v) Config.mobESP.name = v end) toggle(pageVisuals, "Mob Health", Config.mobESP.health, 13, function(v) Config.mobESP.health = v end) toggle(pageVisuals, "Mob Distance", Config.mobESP.distance, 14, function(v) Config.mobESP.distance = v end) slider(pageVisuals, "Mob Max Distance", 100, 20000, Config.mobESP.maxDist, 15, 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, "Pulse (kalp atisi hiz)", 4) toggle(pageMove, "Enable Pulse", Config.move.pulse.enabled, 5, function(v) Config.move.pulse.enabled = v end) slider(pageMove, "Pulse Speed", 16, 300, Config.move.pulse.speed, 6, function(v) Config.move.pulse.speed = v end) slider(pageMove, "Pulse Duration (ON sn)", 0.1, 3, Config.move.pulse.onTime, 7, function(v) Config.move.pulse.onTime = v end) slider(pageMove, "Pulse Rest (OFF sn)", 0.1, 3, Config.move.pulse.offTime, 8, function(v) Config.move.pulse.offTime = v end) noteLabel(pageMove, "Pulse sadece Speed acikken calisir.\n" .. "ON suresince Pulse Speed, OFF suresince 16 hiz uygulanir.", 9) sectionLabel(pageMove, "Jump", 10) toggle(pageMove, "Enable Jump", Config.move.jump.enabled, 11, function(v) Config.move.jump.enabled = v end) slider(pageMove, "Jump Power", 50, 500, Config.move.jump.value, 12, function(v) Config.move.jump.value = v end) sectionLabel(pageMove, "Flight", 13) toggle(pageMove, "Enable Flight", Config.move.fly.enabled, 14, function(v) Config.move.fly.enabled = v end) slider(pageMove, "Flight Speed", 5, 150, Config.move.fly.speed, 15, function(v) Config.move.fly.speed = v end) noteLabel(pageMove, "Flight: W/A/S/D + Space (yukari) + LeftCtrl (asagi).\n" .. "Hizi 25-30 tut. 40-50 arasi kick riski var.", 16) sectionLabel(pageMove, "Noclip", 17) toggle(pageMove, "Enable Noclip", Config.move.noclip.enabled, 18, function(v) Config.move.noclip.enabled = v end) noteLabel(pageMove, "Noclip her frame CanCollide kapatir. Isin bitince kapat.\n" .. "Movement ban sebebidir, dusuk deger kullan.", 19, 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 | Drawing: %s | mousemoverel: %s"):format( #Players:GetPlayers(), HAS_DRAWING and "OK" or "YOK", EX.mousemoverel and "OK" or "YOK") for _, plr in ipairs(Players:GetPlayers()) do local ignored = isIgnoredPlayer(plr) and " [IGNORED]" or "" local c, how = findPlayerCharacterRaw(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 (korumali) --============================================================= local Drawings = { fov = nil, players = {}, mobs = {}, } 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 if HAS_DRAWING then local ok, err = pcall(function() local fov = Drawing.new("Circle") fov.Thickness = 1.5 fov.NumSides = 64 fov.Filled = false fov.Color = COL.accent fov.Transparency = 0.9 fov.Visible = false Drawings.fov = fov end) if not ok then HAS_DRAWING = false Config.playerESP.enabled = false Config.mobESP.enabled = false warn("[ZG] Drawing FOV kurulamadi: " .. tostring(err)) end end local function ensureSet(bucket, key, boxColor) if not HAS_DRAWING then return nil end local set = bucket[key] if set then return set end local ok, res = pcall(function() local s = { box = newBox(boxColor), name = newText(14, boxColor), hp = newText(13, COL.ok), dist = newText(13, COL.dim), } s.hp.Center = false return s end) if not ok or not res then return nil end bucket[key] = res return res end local function hideSet(set) if not set then return end pcall(function() set.box.Visible = false set.name.Visible = false set.hp.Visible = false set.dist.Visible = false end) 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 (once uzaklik, sonra W2S) --============================================================= local function drawEntity(set, char, label, cfg, myRootPos, color) if not set then return end local root = getEntityRoot(char) if not root then hideSet(set) return end -- 1) once mesafe ele (ucuz), uzaktakine W2S yapma local dist = 0 if myRootPos then dist = (myRootPos - root.Position).Magnitude end if cfg.maxDist and dist > cfg.maxDist then hideSet(set) return end local head = getEntityHead(char) if not head 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 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) 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 } 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) end end end end if kind == "Zombies" or kind == "Both" then for _, z in ipairs(getMobs()) do if entityIsAlive(z) then consider(z) end end end return best end --============================================================= -- S2F AUTO CLICKER (sol tik basili = guvenli spam tik) --============================================================= local VIM = nil pcall(function() VIM = game:GetService("VirtualInputManager") end) local s2fHeld = false local s2fTimer = 0 UserInputService.InputBegan:Connect(function(input, gpe) if input.UserInputType == Enum.UserInputType.MouseButton1 and not gpe then s2fHeld = true end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then s2fHeld = false s2fTimer = 0 end end) local function isMouseOverWindow(mouse) if not window or not window.Visible then return false end local ok, pos, size = pcall(function() return window.AbsolutePosition, window.AbsoluteSize end) if not ok or not pos or not size then return false end return mouse.X >= pos.X and mouse.X <= pos.X + size.X and mouse.Y >= pos.Y and mouse.Y <= pos.Y + size.Y end local function updateS2F(dt, mouse) if not Config.combat.s2f.enabled then s2fTimer = 0 return end if not s2fHeld then s2fTimer = 0 return end if not VIM then return end if isMouseOverWindow(mouse) then s2fTimer = 0 return end local cps = math.clamp(math.floor(Config.combat.s2f.cps or 10), 2, 25) local interval = 1 / cps s2fTimer = s2fTimer + dt while s2fTimer >= interval do s2fTimer = s2fTimer - interval local x, y = math.floor(mouse.X), math.floor(mouse.Y) pcall(function() VIM:SendMouseButtonEvent(x, y, 0, true, game, 1) end) local cx, cy = x, y task.delay(0.03, function() pcall(function() VIM:SendMouseButtonEvent(cx, cy, 0, false, game, 1) end) end) if s2fTimer > interval * 3 then s2fTimer = 0 break end end end --============================================================= -- MOVEMENT (inf fix: math.huge -> 9e9) --============================================================= 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() local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(9e9, 9e9, 9e9) bv.P = 1250 bv.Velocity = Vector3.new(0, 0, 0) bv.Parent = root flyBV = bv return flyBV end local function onCharacter() clearFlyBV() speedWasOn = false jumpWasOn = false for k in pairs(charCache) do charCache[k] = nil end end if LP.Character then onCharacter() end LP.CharacterAdded:Connect(onCharacter) local function updateMovement() local char = LP.Character if not char then clearFlyBV() return end local hum = 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 local target = Config.move.speed.value local p = Config.move.pulse if p and p.enabled then local onT = math.max(0.1, tonumber(p.onTime) or 0.5) local offT = math.max(0.1, tonumber(p.offTime) or 0.8) local cyc = onT + offT local t = os.clock() % cyc if t < onT then target = p.speed else target = 16 end end if hum.WalkSpeed ~= target then hum.WalkSpeed = target end 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 if hum.JumpPower ~= Config.move.jump.value then hum.JumpPower = Config.move.jump.value end 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.new(0, 0, 0) 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 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 (ESP 30Hz throttled, movement her frame) --============================================================= local renderConn local frame = 0 renderConn = RunService.RenderStepped:Connect(function(dt) if not gui or not gui.Parent then return end frame = frame + 1 -- her frame: ucuz isler updateMovement() local mouse = UserInputService:GetMouseLocation() updateS2F(dt or 0.016, mouse) if HAS_DRAWING and Drawings.fov then Drawings.fov.Position = mouse Drawings.fov.Radius = Config.aimbot.fov Drawings.fov.Visible = Config.aimbot.showFov and Config.aimbot.enabled end 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 -- ESP: 2 frame'de bir (yari yuk) if not HAS_DRAWING then return end if frame % 2 ~= 0 then return end local myRoot = getMyRoot() local myPos = myRoot and myRoot.Position or nil 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) if set then drawEntity(set, c, plr.Name, Config.playerESP, myPos, COL.pEsp) end 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) if set then drawEntity(set, z, z.Name, Config.mobESP, myPos, COL.mEsp) end 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 pcall(function() if speedWasOn then hum.WalkSpeed = speedPrev end if jumpWasOn then hum.UseJumpPower = jumpPrev.UseJumpPower hum.JumpPower = jumpPrev.JumpPower hum.JumpHeight = jumpPrev.JumpHeight end 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 pcall(function() gui:Destroy() end) 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 (sayfa secimi en sonda, hata olsa bile menu acik kalir) --============================================================= 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 print("[ZG] loaded. Drawing:", HAS_DRAWING and "OK" or "YOK")